Mercurial > hg > Members > koba > t_dandy
diff state_task.cc @ 19:00c3272a801f
fix.
author | koba <koba@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 26 Dec 2010 18:57:08 +0900 |
parents | c330ded6d728 |
children | 5f1abbe03b9a |
line wrap: on
line diff
--- a/state_task.cc Fri Dec 17 22:18:11 2010 +0900 +++ b/state_task.cc Sun Dec 26 18:57:08 2010 +0900 @@ -10,50 +10,177 @@ #include "bom.h" #include "count2.h" #include "sgoex.h" +#include "sankaku.h" +#include "tama.h" #include "TaskManager.h" #include "Func.h" #include "property.h" #include "state_task.h" +extern SpriteTable sptable[DEFOBJ]; +extern TaskManager *tmanager; + +CHARACTER *kyeenemyno; +CHARACTER *tekino0; +CHARACTER *enemy_part1; +CHARACTER *enemy_part2; +CHARACTER *enemy_part3; +CHARACTER *enemy_part4; +CHARACTER *enemy_part5; + +//int tekino0; +int rinkx; +int rinky; +int rinkf1 = 0, rinkf2 = 0; +CHARACTER *asteroiddt[200]; +int asteroidi = 0; +int enemyfaste = 0; +int fastebos = 0; + +State state_list[LIST_NUM]; + +int +GetStateNum(int task_num) +{ + int num = task_num % LIST_NUM; + + return num; +} + void +SetTaskState(int task_num, CHARACTER *(state)(CHARACTER *chara)) +{ + int num = GetStateNum(task_num); + + state_list[num] = state; +} + +void +initStateList() +{ + SetTaskState(DELETE_CHARA, delete_chara); + SetTaskState(STATE0, chara_state0); + SetTaskState(STATE1, chara_state1); + SetTaskState(STATE2, chara_state2); +// SetTaskState(STATE3, chara_state3); + SetTaskState(STATE4, chara_state4); + SetTaskState(STATE5, chara_state5); + SetTaskState(STATE6, chara_state6); +#if 0 + SetTaskState(STATE7, chara_state7); + SetTaskState(STATE8, chara_state8); + SetTaskState(STATE9, chara_state9); + SetTaskState(STATE10, chara_state10); + SetTaskState(STATE11, chara_state11); + SetTaskState(STATE12, chara_state12); + SetTaskState(STATE13, chara_state13); + SetTaskState(STATE20, chara_state20); + SetTaskState(STATE21, chara_state21); + SetTaskState(STATE22, chara_state22); + SetTaskState(STATE23, chara_state23); + SetTaskState(STATE24, chara_state24); + SetTaskState(STATE25, chara_state25); + SetTaskState(STATE26, chara_state26); + SetTaskState(STATE27, chara_state27); + SetTaskState(STATE28, chara_state28); + SetTaskState(STATE29, chara_state29); + SetTaskState(STATE30, chara_state30); + SetTaskState(STATE31, chara_state31); + SetTaskState(STATE32, chara_state32); + SetTaskState(STATE33, chara_state33); + SetTaskState(STATE34, chara_state34); + SetTaskState(STATE35, chara_state35); + SetTaskState(STATE40, chara_state40); + SetTaskState(STATE41, chara_state41); + SetTaskState(STATE400, chara_state400); + SetTaskState(STATE401, chara_state401); + SetTaskState(STATE402, chara_state402); + SetTaskState(STATE410, chara_state410); + SetTaskState(STATE411, chara_state411); + SetTaskState(STATE500, chara_state500); + SetTaskState(STATE501, chara_state501); + SetTaskState(STATE600, chara_state600); + SetTaskState(STATE601, chara_state601); + SetTaskState(STATE602, chara_state602); +#endif +} + +void +updateState(SchedTask *s, void *chara, void *arg) +{ + CHARACTER *p = (CHARACTER*)chara; + + int num = GetStateNum(p->task); + p=state_list[num](p); +} + +CHARACTER* SimpleStateTask(CHARACTER *p) { - HTaskPtr state_task = tmanager->create_task(SIMPLE_STATE); + int task_num = p->task; + HTaskPtr state_task = tmanager->create_task(task_num); state_task->add_inData(p, sizeof(CHARACTER)); state_task->add_outData(p, sizeof(CHARACTER)); + state_task->set_post(updateState, (void*)p, NULL); state_task->set_cpu(SPE_ANY); state_task->spawn(); + + return p; +} + +CHARACTER* +withJikiTask(CHARACTER *p) +{ + int task_num = p->task; + HTaskPtr state_task = tmanager->create_task(task_num); + + state_task->add_inData(p, sizeof(CHARACTER)); + state_task->add_inData(&jiki, sizeof(player)); + state_task->add_outData(p, sizeof(CHARACTER)); + state_task->set_post(updateState, (void*)p, NULL); + + state_task->set_cpu(SPE_ANY); + state_task->spawn(); + + return p; +} + +CHARACTER* +noaction(CHARACTER *p) +{ + p->state = noaction; + return p; +} + +CHARACTER * +delete_chara(CHARACTER *p) +{ + + CHARACTER *parent = p; + p->f = FALSE; + p->state = noaction; + p->collision = noaction; + return parent; } CHARACTER * chara_state0(CHARACTER *p) { - p->x += p->vx; - p->y += p->vy; - p->state = STATE0; - - return 0; + return SimpleStateTask(p); } CHARACTER * chara_state1(CHARACTER *p) { - p->x -= p->vx; - p->y -= p->vy; - p->state = STATE1; - - return 0; + return SimpleStateTask(p); } CHARACTER * chara_state2(CHARACTER *p) { - p->vy -= 0.25; - p->y += p->vy; - p->state = chara_state2; - //PutSprite(count, p->x, p->y, p->charano); - return 0; + return SimpleStateTask(p); } +#if 0 CHARACTER * chara_state3(CHARACTER *p) { p->x += p->vx; @@ -67,56 +194,26 @@ p->dt1++; p->state = chara_state3; //PutSprite(count, p->x, p->y, p->charano); - return 0; + return p; } +#endif CHARACTER * chara_state4(CHARACTER *p) { - p->y += p->vy; - p->x += p->vx; - if(p->y < jiki.y && p->y + 16 > jiki.y) - { - p->vy = -2; - p->vx = ((jiki.x > p->x) ? 4 : -4); - p->state = chara_state7; - } - else p->state = chara_state4; - //PutSprite(count, p->x, p->y, p->charano); - return 0; + return withJikiTask(p); } CHARACTER * chara_state5(CHARACTER *p) { - p->y += p->vy; - p->x += p->vx; - if(p->y + 96 < jiki.y - && p->y + 128 > jiki.y) - { - p->vy = -2; - p->vx = ((jiki.x > p->x) ? 4 : -4); - p->state = chara_state0; - } - else p->state = chara_state5; - //PutSprite(count, p->x, p->y, p->charano); - return 0; + return withJikiTask(p); } CHARACTER * chara_state6(CHARACTER *p) { - p->y += p->vy; - p->x += p->vx; - if(p->y + 96 < jiki.y - && p->y + 128 > jiki.y) - { - p->vy = 2; - p->vx = ((jiki.x > p->x) ? 4 : -4); - p->state = chara_state0; - } - else p->state = chara_state6; - //PutSprite(count, p->x, p->y, p->charano); - return 0; + return withJikiTask(p); } +#if 0 CHARACTER * chara_state7(CHARACTER *p) { p->x += p->vx; @@ -129,7 +226,7 @@ p->dt1++; p->state = chara_state7; //PutSprite(count, p->x, p->y, p->charano); - return 0; + return p; } // state1 boss patern @@ -146,10 +243,10 @@ p->dt1 = 512; p->s = 0.125; p->state = chara_state8; - return 0; + return p; } p->state = chara_state9; - return 0; + return p; } CHARACTER * chara_state9(CHARACTER *p) @@ -162,7 +259,7 @@ DefSpriteEx(54, 16*4, 32*4); PutSpriteEx(54, (p->x * 4), (p->y * 4), p->s, p->s, 1); p->state = chara_state9; - return 0; + return p; } count++; DefSpriteEx(54, 16, 32); @@ -173,7 +270,7 @@ Putenemy(5, rinkx - 16, rinky - 16, -1, 0, chara_state10); p->state = chara_state11; p->dt1 = 8192; - return 0; + return p; } @@ -186,13 +283,13 @@ p->dt1++; p->state = chara_state10; //PutSprite(count, p->x, p->y, - return 0; + return p; } rinkf1 = 1; p->dt1 = rinkx; p->dt2 = rinky; p->state = chara_state13; - return 0; + return p; } @@ -204,12 +301,12 @@ DefSpriteEx(54, 16, 32); PutSpriteEx(54, p->x, p->y, p->s, p->s, 1); p->state = chara_state11; - return 0; + return p; } p->dt1 = 0; p->dt2 = 0; p->state = chara_state12; - return 0; + return p; } CHARACTER * chara_state12(CHARACTER *p) @@ -226,7 +323,7 @@ DefSpriteEx(54, 16, 32); PutSpriteEx(54, p->x, p->y, 2, 2, 1); p->state = chara_state12; - return 0; + return p; } if(p->dt1 <= 60) { @@ -333,7 +430,7 @@ count++; DefSpriteEx(54, 16, 32); PutSpriteEx(54, p->x, p->y, 2, 2, 1); - return 0; + return p; } @@ -344,7 +441,7 @@ p->f = FALSE; p->state = delete_chara; p->collision = noaction; - return 0; + return p; } p->x += rinkx - p->dt1; @@ -378,67 +475,33 @@ Puttama(5, p->x + 8, p->y + 24); } } - return 0; + return p; } - +#endif CHARACTER * chara_state20(CHARACTER *p) { - p->x += p->vx; - p->y += p->vy; - p->vy -= 0.5; - p->vy += 0.4; - return 0; + return SimpleStateTask(p); } CHARACTER * chara_state21(CHARACTER *p) { - p->x += p->vx; - p->y += p->vy; - p->vx += 0.5; - p->vy += 0.4; - return 0; + return SimpleStateTask(p); } +#if 0 //ここまでgetate boss CHARACTER * chara_state22(CHARACTER *p) { - int sf; - - sf = rand() % 4; - if((sf == 0) || (sf == 1)) - { - p->x = -35; - p->y = rand() % (120 - 35); - p->vx = (rand() % 4 + 1); - p->vy = rand() % 3 + 1; - p->state = chara_state23; - } - if((sf == 2)) - { - p->x = rand() % 290; - p->y = -30; - p->vx = rand() % 3 - 1; - p->vy = (rand() % 4 + 1); - p->state = chara_state23; - } - if(sf == 3) - { - p->x = 320; - p->y = rand() % (120 - 35); - p->vx = (rand() % 4 + 1) * -1; - p->vy = rand() % 3 -1; - p->state = chara_state23; - } - return 0; + return SimpleStateTask(p); } CHARACTER * chara_state23(CHARACTER *p) { p=asteroid(p); - return 0; + return p; } CHARACTER * chara_state24(CHARACTER *p) @@ -455,7 +518,7 @@ rinkf1 = 0; rinkf2 = 0; p->state = chara_state25; - return 0; + return p; } CHARACTER * chara_state25(CHARACTER *p) @@ -485,7 +548,7 @@ p->state = chara_state27; rinkf1 = 5; rinkx = 0; - return 0; + return p; } if((enemy_part5->f == TRUE) && (enemy_part1->f != TRUE)) { @@ -496,7 +559,7 @@ { p->dt1 = 0; } - return 0; + return p; } CHARACTER * chara_state26(CHARACTER *p) @@ -520,10 +583,10 @@ p->dt2 = 0; rinkf1 = 0; p->state = chara_state25; - return 0; + return p; } p->dt2++; - return 0; + return p; } CHARACTER * chara_state27(CHARACTER *p) //rocket punch @@ -576,10 +639,10 @@ rinkf1 = 0; rinkx = 0; p->state = chara_state25; - return 0; + return p; } p->dt2++; - return 0; + return p; } CHARACTER * chara_state28(CHARACTER *p) { @@ -605,7 +668,7 @@ 1 ? -1 : 1), chara_state29); } p->dt1 += 3; - return 0; + return p; } @@ -618,17 +681,16 @@ Puttama(0, p->x, p->y); } p->dt1++; - return 0; + return p; } - +#endif CHARACTER * chara_state30(CHARACTER *p) { - p->x = p->x - 32; - p->y = p->y; - return 0; + return SimpleStateTask(p); } +#if 0 CHARACTER * chara_state31(CHARACTER *p) //right hand { @@ -638,7 +700,7 @@ p->f = FALSE; p->state = delete_chara; p->collision = noaction; - return 0; + return p; } if(rinkf1 == 0) @@ -663,7 +725,7 @@ } else { - return 0; + return p; } count++; PutSprite(count, p->x - 4, p->y - 20, 90 + p->dt2 % 4); @@ -672,7 +734,7 @@ if(rinkf1 == 7) { Putenemy(22, p->x + 14, p->y + 14, 0, 0, chara_state40); - return 0; + return p; } if(rinkf1 == 11) { @@ -682,13 +744,13 @@ } else { - return 0; + return p; } count++; PutSprite(count, p->x + 8, p->y + 44, 58 + p->dt2 % 4); p->dt2++; } - return 0; + return p; } @@ -701,7 +763,7 @@ p->f = FALSE; p->state = delete_chara; p->collision = noaction; - return 0; + return p; } p->x = kyeenemyno->x - 40; p->y = kyeenemyno->y + 28; @@ -720,9 +782,9 @@ Putenemy(23, p->x + 14, p->y + 14, 0, 0, chara_state41); // rinkf1=8; - return 0; + return p; } - return 0; + return p; } @@ -734,7 +796,7 @@ p->f = FALSE; p->state = delete_chara; p->collision = noaction; - return 0; + return p; } p->x = kyeenemyno->x + 32; p->y = kyeenemyno->y; @@ -748,7 +810,7 @@ { p->charano = enemystate[11].charano; } - return 0; + return p; } @@ -760,7 +822,7 @@ p->f = FALSE; p->state = delete_chara; p->collision = noaction; - return 0; + return p; } p->x = kyeenemyno->x - 32; p->y = kyeenemyno->y; @@ -772,7 +834,7 @@ { p->charano = enemystate[12].charano; } - return 0; + return p; } CHARACTER * chara_state35(CHARACTER *p) // bust @@ -783,7 +845,7 @@ p->f = FALSE; p->state = delete_chara; p->collision = noaction; - return 0; + return p; } p->x = kyeenemyno->x; p->y = kyeenemyno->y + 32; @@ -825,7 +887,7 @@ p->charano = enemystate[15].charano; p->dt2 = 0; } - return 0; + return p; } @@ -837,7 +899,7 @@ p->f = FALSE; p->state = delete_chara; p->collision = noaction; - return 0; + return p; } if ((rinkf1 == 8) && (p->dt1 % 3 == 1)) { @@ -849,7 +911,7 @@ else { // rinkf1=9; - return 0; + return p; } } if (rinkf1 == 9) @@ -875,7 +937,7 @@ } } p->dt1++; - return 0; + return p; } @@ -887,7 +949,7 @@ p->f = FALSE; p->state = delete_chara; p->collision = noaction; - return 0; + return p; } p->x = kyeenemyno->x - 20 - 7; p->y = kyeenemyno->y + 28 + 15; @@ -901,7 +963,7 @@ else { rinkf1 = 9; - return 0; + return p; } } if (rinkf1 == 9) @@ -923,21 +985,18 @@ p->f = FALSE; p->state = delete_chara; p->collision = noaction; - return 0; + return p; // rinkf1=11; } } p->dt1++; - return 0; + return p; } CHARACTER * chara_state400(CHARACTER *p) { - p->vy++; - p->y += p->vy / 4; - p->state = chara_state400; - return 0; + return SimpleStateTask(p); } @@ -955,7 +1014,7 @@ Puttama(1, p->x + 8, p->y + 24); } p->dt1++; - return 0; + return p; } @@ -973,7 +1032,7 @@ Puttama(1, p->x + 8, p->y + 24); } p->dt1++; - return 0; + return p; } @@ -981,7 +1040,7 @@ { kyeenemyno = p; p->state = chara_state411; - return 0; + return p; } @@ -1030,7 +1089,7 @@ { p->y = 232; } - return 0; + return p; } @@ -1066,7 +1125,7 @@ if (p->dt1 == 50) { /*Putenemy(44,0,0,1,1,411); */ } - return 0; + return p; } @@ -1079,7 +1138,7 @@ Puttama(11, p->x, p->y); } p->dt1++; - return 0; + return p; } @@ -1104,7 +1163,7 @@ p->y = 0; if (p->y > 232) p->y = 232; - return 0; + return p; } @@ -1129,7 +1188,7 @@ if (p->dt2 > 800) { p->state = chara_state602; } - return 0; + return p; } @@ -1144,7 +1203,7 @@ p->state = chara_state600; p->dt2 = 0; } - return 0; + return p; } @@ -1170,5 +1229,6 @@ } } asteroidi++; - return 0; + return p; } +#endif