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