Mercurial > hg > Members > koba > t_dandy
diff state_task.cc @ 34:7aaaaf5dde40
add new task.
author | koba <koba@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 07 Jan 2011 23:19:05 +0900 |
parents | 39e643fc4f90 |
children | c122e3d2302e |
line wrap: on
line diff
--- a/state_task.cc Wed Jan 05 14:41:26 2011 +0900 +++ b/state_task.cc Fri Jan 07 23:19:05 2011 +0900 @@ -79,26 +79,26 @@ SetTaskState(STATE21, chara_state21); SetTaskState(STATE22, chara_state22); SetTaskState(STATE23, chara_state23); -#if 0 SetTaskState(STATE24, chara_state24); SetTaskState(STATE25, chara_state25); SetTaskState(STATE26, chara_state26); SetTaskState(STATE27, chara_state27); SetTaskState(STATE28, chara_state28); SetTaskState(STATE29, chara_state29); -#endif SetTaskState(STATE30, chara_state30); -#if 0 SetTaskState(STATE31, chara_state31); SetTaskState(STATE32, chara_state32); +#if 0 SetTaskState(STATE33, chara_state33); SetTaskState(STATE34, chara_state34); SetTaskState(STATE35, chara_state35); SetTaskState(STATE40, chara_state40); SetTaskState(STATE41, chara_state41); +#endif SetTaskState(STATE400, chara_state400); SetTaskState(STATE401, chara_state401); SetTaskState(STATE402, chara_state402); +#if 0 SetTaskState(STATE410, chara_state410); SetTaskState(STATE411, chara_state411); SetTaskState(STATE500, chara_state500); @@ -120,6 +120,17 @@ void +freeObject(SchedTask *s, void *chara, void *obj) +{ + free(obj); + + CHARACTER *p = (CHARACTER*)chara; + int num = GetStateNum(p->task); + p->state = state_list[num]; +} + + +void checkContainer(SchedTask *s, void *chara, void *obj) { CHARACTER *p = (CHARACTER*)chara; @@ -225,7 +236,7 @@ CHARACTER* -BossTask1(CHARACTER *p) +JikiContainerTask(CHARACTER *p) { int task_num = p->task; int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH; @@ -234,9 +245,65 @@ obj->flag = false; obj->length = 0; - state_task->set_param(0, (memaddr)count); + state_task->set_inData(0, p, sizeof(CHARACTER)); + state_task->set_inData(1, &jiki, sizeof(player)); + + state_task->set_outData(0, p, sizeof(CHARACTER)); + state_task->set_outData(1, obj, 0); + + state_task->set_post(checkContainer, (void*)p, (void*)obj); + state_task->set_cpu(SPE_ANY); + state_task->spawn(); + + return p; +} + + +CHARACTER* +AsteroidTask(CHARACTER *p) +{ + asteroiddt[asteroidi] = p; + + int task_num = ASTEROID_TASK; + HTaskPtr state_task = tmanager->create_task(task_num); + + state_task->set_param(0, (memaddr)asteroidi); + + state_task->set_inData(0, p, sizeof(CHARACTER)); + + state_task->set_outData(0, p, sizeof(CHARACTER)); + + int array_size = sizeof(CHARACTER)*asteroidi; + if (array_size > 0) { + CHARACTER *asteroid_array = (CHARACTER*)tmanager->allocate(array_size); + for (int i = 0; i < asteroidi; i++) { + asteroid_array[i] = *asteroiddt[i]; + } + state_task->set_inData(1, asteroid_array, array_size); + state_task->set_post(freeObject, (void*)p, (void*)asteroid_array); + } else { + state_task->set_post(updateState, (void*)p, NULL); + } + state_task->set_cpu(SPE_ANY); + state_task->spawn(); + + asteroidi++; + return p; +} + + +CHARACTER* +Boss1Task1(CHARACTER *p) +{ + int task_num = p->task; + int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH; + HTaskPtr state_task = tmanager->create_task(task_num); + ObjContainerPtr obj = (ObjContainerPtr)tmanager->allocate(obj_size); + obj->flag = false; + obj->length = 0; state_task->set_inData(0, p, sizeof(CHARACTER)); + state_task->set_inData(1, &count, sizeof(int)); state_task->set_outData(0, p, sizeof(CHARACTER)); state_task->set_outData(1, &count, sizeof(int)); @@ -251,7 +318,7 @@ CHARACTER* -BossTask2(CHARACTER *p) +Boss1Task2(CHARACTER *p) { int task_num = p->task; int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH; @@ -260,9 +327,8 @@ obj->flag = false; obj->length = 0; - state_task->set_param(0, (memaddr)count); - state_task->set_inData(0, p, sizeof(CHARACTER)); + state_task->set_inData(1, &count, sizeof(int)); state_task->set_outData(0, p, sizeof(CHARACTER)); state_task->set_outData(1, &count, sizeof(int)); @@ -279,7 +345,7 @@ CHARACTER* -BossTask3(CHARACTER *p) +Boss1Task3(CHARACTER *p) { int task_num = p->task; HTaskPtr state_task = tmanager->create_task(task_num); @@ -301,7 +367,7 @@ CHARACTER* -BossTask4(CHARACTER *p) +Boss1Task4(CHARACTER *p) { int task_num = p->task; int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH; @@ -328,7 +394,7 @@ CHARACTER* -BossTask5(CHARACTER *p) +Boss1Task5(CHARACTER *p) { int task_num = p->task; int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH; @@ -362,7 +428,7 @@ CHARACTER* -BossTask6(CHARACTER *p) +Boss1Task6(CHARACTER *p) { int task_num = p->task; int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH; @@ -373,19 +439,87 @@ state_task->set_param(0, (memaddr)rinkx); state_task->set_param(1, (memaddr)rinky); - state_task->set_param(2, (memaddr)rinkf2); - state_task->set_param(3, (memaddr)count); - state_task->set_param(4, (memaddr)filpcount); - state_task->set_param(5, (memaddr)tekino0->f); - state_task->set_param(6, (memaddr)bomend); + state_task->set_param(2, (memaddr)filpcount); + state_task->set_param(3, (memaddr)tekino0->f); + state_task->set_param(4, (memaddr)count); state_task->set_inData(0, p, sizeof(CHARACTER)); - state_task->set_inData(1, bchar, sizeof(bomchar)*(bomend+1)); + state_task->set_inData(1, bchar, sizeof(bomchar)*100); + state_task->set_inData(2, &bomend, sizeof(int)); + state_task->set_inData(3, &rinkf2, sizeof(int)); state_task->set_outData(0, p, sizeof(CHARACTER)); state_task->set_outData(1, &count, sizeof(int)); state_task->set_outData(2, &bomend, sizeof(int)); - state_task->set_outData(3, obj, 0); + state_task->set_outData(3, bchar, sizeof(bomchar)*100); + state_task->set_outData(4, obj, 0); + + state_task->set_post(checkContainer, (void*)p, (void*)obj); + state_task->set_cpu(SPE_ANY); + state_task->spawn(); + + return p; +} + + +CHARACTER* +Boss2Task1(CHARACTER *p) +{ + int task_num = p->task; + int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH; + HTaskPtr state_task = tmanager->create_task(task_num); + ObjContainerPtr obj = (ObjContainerPtr)tmanager->allocate(obj_size); + obj->flag = false; + obj->length = 0; + + state_task->set_param(0, (memaddr)enemy_part1->f); + state_task->set_param(1, (memaddr)enemy_part5->f); + + state_task->set_inData(0, p, sizeof(CHARACTER)); + state_task->set_inData(1, &count, sizeof(int)); + state_task->set_inData(2, &rinkx, sizeof(int)); + state_task->set_inData(3, &rinkf1, sizeof(int)); + + state_task->set_outData(0, p, sizeof(CHARACTER)); + state_task->set_outData(1, &count, sizeof(int)); + state_task->set_outData(2, &rinkx, sizeof(int)); + state_task->set_outData(3, &rinkf1, sizeof(int)); + state_task->set_outData(4, obj, 0); + + state_task->set_post(checkContainer, (void*)p, (void*)obj); + state_task->set_cpu(SPE_ANY); + state_task->spawn(); + + return p; +} + + +CHARACTER* +Boss2Task2(CHARACTER *p) +{ + int task_num = p->task; + int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH; + HTaskPtr state_task = tmanager->create_task(task_num); + ObjContainerPtr obj = (ObjContainerPtr)tmanager->allocate(obj_size); + obj->flag = false; + obj->length = 0; + + state_task->set_param(0, (memaddr)enemy_part3->f); + state_task->set_param(1, (memaddr)enemy_part4->f); + state_task->set_param(2, (memaddr)enemystate[14].charano); + state_task->set_param(3, (memaddr)enemystate[20].charano); + + state_task->set_inData(0, p, sizeof(CHARACTER)); + state_task->set_inData(1, kyeenemyno, sizeof(CHARACTER)); + state_task->set_inData(2, &count, sizeof(int)); + state_task->set_inData(3, &rinkf1, sizeof(int)); + state_task->set_inData(4, bchar, sizeof(bomchar)*100); + + state_task->set_outData(0, p, sizeof(CHARACTER)); + state_task->set_outData(1, &count, sizeof(int)); + state_task->set_outData(2, &rinkx, sizeof(int)); + state_task->set_outData(3, &rinkf1, sizeof(int)); + state_task->set_outData(4, obj, 0); state_task->set_post(checkContainer, (void*)p, (void*)obj); state_task->set_cpu(SPE_ANY); @@ -487,7 +621,7 @@ kyeenemyno = p; p->task = STATE8; - return BossTask1(p); + return Boss1Task1(p); } @@ -495,7 +629,7 @@ chara_state9(CHARACTER *p) { p->task = STATE9; - return BossTask2(p); + return Boss1Task2(p); } @@ -503,7 +637,7 @@ chara_state10(CHARACTER *p) { p->task =STATE10; - return BossTask3(p); + return Boss1Task3(p); } @@ -511,7 +645,7 @@ chara_state11(CHARACTER *p) { p->task = STATE11; - return BossTask4(p); + return Boss1Task4(p); } @@ -519,7 +653,7 @@ chara_state12(CHARACTER *p) { p->task = STATE12; - return BossTask5(p); + return Boss1Task5(p); } @@ -527,7 +661,7 @@ chara_state13(CHARACTER *p) { p->task = STATE13; - return BossTask6(p); + return Boss1Task6(p); } @@ -548,305 +682,104 @@ //ここまでgetate boss -CHARACTER * chara_state22(CHARACTER *p) +CHARACTER* +chara_state22(CHARACTER *p) { + p->task = STATE22; return SimpleStateTask(p); } -CHARACTER * chara_state23(CHARACTER *p) +CHARACTER* +chara_state23(CHARACTER *p) { -// p=asteroid(p); - return p; + p->task = STATE23; + return AsteroidTask(p); } -#if 0 -CHARACTER * chara_state24(CHARACTER *p) +CHARACTER* +chara_state24(CHARACTER *p) { - kyeenemyno = p; - tekino0 = 0; - enemy_part1 = p->next; - enemy_part2 = enemy_part1->next; - enemy_part3 = enemy_part2->next; - enemy_part4 = enemy_part3->next; - enemy_part5 = enemy_part4->next; - rinkx = 0; - rinky = 0; - rinkf1 = 0; - rinkf2 = 0; - p->state = chara_state25; - return p; -} - -CHARACTER * chara_state25(CHARACTER *p) -{ - int amari; + kyeenemyno = p; + tekino0 = 0; + enemy_part1 = p->next; + enemy_part2 = enemy_part1->next; + enemy_part3 = enemy_part2->next; + enemy_part4 = enemy_part3->next; + enemy_part5 = enemy_part4->next; + rinkx = 0; + rinky = 0; + rinkf1 = 0; + rinkf2 = 0; + p->task = STATE25; - if(p->dt1 <= 360) - { - p->x = Mycos(p->dt1) * 30 / SANKAKU + 82 + 32; - p->y = Mysin(p->dt1) * 30 / SANKAKU + 30; - } - if(p->dt1 > 360) - { - p->x = Mycos(p->dt1) * 30 * -1 /SANKAKU + 142 + 32; - p->y = Mysin(p->dt1) * 30 / SANKAKU + 30; - } - count++; - PutSprite(count, p->x - 42, p->y, 64); - amari = rand() % 160; - if((amari == 1) && (enemy_part5->f == TRUE)) - { - p->state = chara_state26; - rinkf1 = 1; - } - if((amari == 2) && (enemy_part1->f == TRUE)) - { - p->state = chara_state27; - rinkf1 = 5; - rinkx = 0; - return p; - } - if((enemy_part5->f == TRUE) && (enemy_part1->f != TRUE)) - { - p->state = chara_state28; - } - p->dt1 += 3; - if(p->dt1 == 720) - { - p->dt1 = 0; - } - return p; + int num = GetStateNum(p->task); + p->state = state_list[num]; + return p; } -CHARACTER * chara_state26(CHARACTER *p) +CHARACTER* +chara_state25(CHARACTER *p) { - if((p->dt2 > 50) && (p->dt2 < 100)) - { - rinkf1 = 2; - } - if(p->dt2 > 100) - { - rinkf1 = 3; - } - if(p->dt2 == 400) - { - rinkf1 = 4; - } - count++; - PutSprite(count, p->x - 42, p->y, 64); - if(p->dt2 == 401) - { - p->dt2 = 0; - rinkf1 = 0; - p->state = chara_state25; - return p; - } - p->dt2++; - return p; + p->task = STATE25; + return Boss2Task1(p); } -CHARACTER * chara_state27(CHARACTER *p) //rocket punch +CHARACTER* +chara_state26(CHARACTER *p) { - if((p->dt2 > 50) && (p->dt2 < 60) && (p->x > -24) && (p->y > -24)) - { - rinkf1 = 6; - rinkx -= 4; - p->x -= 4; - p->y -= 4; - } - if(p->dt2 == 80) - { - rinkf1 = 7; - } - if(p->dt2 == 81) - { - rinkf1 = 8; - } - if(p->dt2 == 124) - { - rinkf1 = 9; - } - if(p->dt2 == 400) - { - rinkf1 = 10; - } - if(p->dt2 == 444) - { - rinkf1 = 11; - } - if(p->dt2 == 500) - { - rinkf1 = 12; - } - if((p->dt2 > 80) && (p->dt2 < 200)) - { - if((rinkx != 0) && (p->dt2 % 2 == 1)) - { - rinkx++; - p->x++; - p->y++; - } - } - count++; - PutSprite(count, p->x - 32, p->y, 6); - if(rinkf1 == 12) - { - p->dt2 = 0; - rinkf1 = 0; - rinkx = 0; - p->state = chara_state25; - return p; - } - p->dt2++; - return p; + p->task = STATE26; + return Boss2Task1(p); } -CHARACTER * chara_state28(CHARACTER *p) + +CHARACTER* +chara_state27(CHARACTER *p) //rocket punch { - if (p->dt1 <= 360) - { - p->x = Mycos(p->dt1) * 30 / SANKAKU + 82 + 32; - p->y = Mysin(p->dt1) * 30 / SANKAKU + 30; - } - if (p->dt1 > 360) - { - p->x = Mycos(p->dt1) * 30 * -1 / SANKAKU + 142 + 32; - p->y = Mysin(p->dt1) * 30 / SANKAKU + 30; - } - count++; - PutSprite(count, p->x - 42, p->y, 64); - if (p->dt1 % 30 == 3) - { - Putenemy(24, p->x + 14, - p->y + 14, - (rand() % 5 + 0.5) * (rand() % 2 == - 1 ? -1 : 1), - (rand() % 5 + 0.5) * (rand() % 2 == - 1 ? -1 : 1), chara_state29); - } - p->dt1 += 3; - return p; + p->task = STATE27; + return Boss2Task1(p); +} +CHARACTER* +chara_state28(CHARACTER *p) +{ + p->task = STATE28; + return Boss2Task1(p); } -CHARACTER * chara_state29(CHARACTER *p) +CHARACTER* +chara_state29(CHARACTER *p) { - p->x += p->vx; - p->y += p->vy; - if(p->dt1 % 18 == 1) - { - Puttama(0, p->x, p->y); - } - p->dt1++; - return p; + p->task = STATE29; + return sendContainerTask(p); } -#endif + -CHARACTER * chara_state30(CHARACTER *p) +CHARACTER* +chara_state30(CHARACTER *p) { p->task = STATE30; return SimpleStateTask(p); } -#if 0 -CHARACTER * chara_state31(CHARACTER *p) //right hand + +CHARACTER* +chara_state31(CHARACTER *p) //right hand { - - if((enemy_part3->f == FALSE) || (kyeenemyno->f == FALSE)) - { - Bom(p->x, p->y); - p->f = FALSE; - p->state = delete_chara; - p->collision = noaction; - return p; - } - - if(rinkf1 == 0) - { - p->x = kyeenemyno->x + 40; - p->y = kyeenemyno->y + 28; - p->dt2 = 0; - } - if(rinkf1 == 5) - { - p->x = kyeenemyno->x + 52; - p->y = kyeenemyno->y; - count++; - PutSprite(count, p->x - 4, p->y - 20, 80 + p->dt2 % 4); - p->dt2++; - } - if(rinkf1 == 6) - { - if(p->y < 240 - 40) - { - p->y += 6; - } - else - { - return p; - } - count++; - PutSprite(count, p->x - 4, p->y - 20, 90 + p->dt2 % 4); - p->dt2++; - } - if(rinkf1 == 7) - { - Putenemy(22, p->x + 14, p->y + 14, 0, 0, chara_state40); - return p; - } - if(rinkf1 == 11) - { - if(p->y + 20 != p->y) - { - p->y--; - } - else - { - return p; - } - count++; - PutSprite(count, p->x + 8, p->y + 44, 58 + p->dt2 % 4); - p->dt2++; - } - return p; + p->task = STATE31; + return Boss2Task2(p); } -CHARACTER * chara_state32(CHARACTER *p) //left hand +CHARACTER* +chara_state32(CHARACTER *p) //left hand { - if ((enemy_part4->f == FALSE) - || (kyeenemyno->f == FALSE)) - { - Bom(p->x, p->y); - p->f = FALSE; - p->state = delete_chara; - p->collision = noaction; - return p; - } - p->x = kyeenemyno->x - 40; - p->y = kyeenemyno->y + 28; - if (rinkf1 == 5) - { - p->x = kyeenemyno->x - 24 + 4; - p->y = kyeenemyno->y + 28; - p->charano = enemystate[20].charano; - } - if (rinkf1 == 11) - { - p->charano = enemystate[14].charano; - } - if (rinkf1 == 7) - { - Putenemy(23, p->x + 14, - p->y + 14, 0, 0, chara_state41); - // rinkf1=8; - return p; - } - return p; + p->task = STATE32; + return Boss2Task2(p); } +#if 0 CHARACTER * chara_state33(CHARACTER *p) // right shoulder { if (kyeenemyno->f == FALSE) @@ -1051,50 +984,33 @@ p->dt1++; return p; } +#endif CHARACTER * chara_state400(CHARACTER *p) { + p->task = STATE400; return SimpleStateTask(p); } -CHARACTER * chara_state401(CHARACTER *p) +CHARACTER* +chara_state401(CHARACTER *p) { - p->vx++; - p->x += p->vx / 8; - if (p->x > (jiki.x - 32)) - { - p->vy--; - } - p->y += p->vy / 8; - if (p->dt1 % 50 == 37) - { - Puttama(1, p->x + 8, p->y + 24); - } - p->dt1++; - return p; + p->task = STATE401; + return JikiContainerTask(p); } -CHARACTER * chara_state402(CHARACTER *p) +CHARACTER* +chara_state402(CHARACTER *p) { - p->vx--; - p->x += p->vx / 8; - if (p->x < (jiki.x + 32)) - { - p->vy--; - } - p->y += p->vy / 8; - if (p->dt1 % 50 == 37) - { - Puttama(1, p->x + 8, p->y + 24); - } - p->dt1++; - return p; + p->task = STATE402; + return JikiContainerTask(p); } +#if 0 CHARACTER * chara_state410(CHARACTER *p) { kyeenemyno = p; @@ -1265,29 +1181,4 @@ return p; } - -CHARACTER * asteroid(CHARACTER *p) -{ - int i; - - asteroiddt[asteroidi] = p; - // if(asteroidi==0) - // { - p->x += p->vx; - p->y += p->vy; - // } - if (asteroidi > 0) { - for (i = 0; i < asteroidi; i++) { - if ((asteroiddt[i]->x + 32 > p->x) - && (p->x + 32 > asteroiddt[i]->x) - && (asteroiddt[i]->y + 32 > p->y) - && (asteroiddt[i]->y < p->y + 32)) { - p->vx *= -1; - p->vy *= -1; - } - } - } - asteroidi++; - return p; -} #endif