diff spe/Atari.cc @ 60:cfd42ee2ad28

change makefile, spe/task. adjust scale api. worked on ps3-ppe.
author yutaka@localhost.localdomain
date Sun, 06 Feb 2011 17:16:43 +0900
parents c330ded6d728
children
line wrap: on
line diff
--- a/spe/Atari.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/Atari.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -1,59 +1,72 @@
-#include "Atari.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
+#include "../ObjectType.h"
 
-SchedDefineTask(Atari);
+SchedDefineTask1(Atari, atari);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+atari(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     int w = (int)smanager->get_param(0);
     int h = (int)smanager->get_param(1);
-    int enemycount = (int)smanager->get_param(2);
-    int bomend = (int)smanager->get_param(3);
-    int tama_lv1_end = (int)smanager->get_param(4);
-    int tama_lv2_end = (int)smanager->get_param(5);
-    int laser_lv1_end = (int)smanager->get_param(6);
+    long load_id = (long)smanager->get_param(2);
+
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    CollisionPropertyPtr property = 
+	(CollisionPropertyPtr)smanager->global_get(load_id);
+
+    int *p_infg_level = &property->infg_level;
+    int infg_level = *p_infg_level;
 
-    CollisionPropertyPtr property
-	= (CollisionPropertyPtr)smanager->get_input(rbuf, 0);
+    int tama_lv1_end = property->tama_lv1_end;
+    int tama_lv2_end = property->tama_lv2_end;
+    int laser_lv1_end = property->laser_lv1_end;
 
-    int infg_level = property->infg_level;
+    int *enemycount = &property->enemycount;
+
     player *jiki = &property->jiki;
-    CHARACTER *p = &property->p;
-    tama1 *tlv3 = &property->tlv3;
-    stge lg = property->lg;
-    stge infg = property->infg;
+
+    stge *lg = &property->lg;
+    stge *infg = &property->infg;
 
     tama1 *tama_lv1 = property->tama_lv1;
     tama2 *tama_lv2 = property->tama_lv2;
+    tama1 *tlv3 = &property->tlv3;
     laser *laser_lv1 = property->laser_lv1;
-    laser *laser_lv2 = property->laser_lv2;
+    laser *laser_lv2 = &property->laser_lv2;
     laser *laser_lv3 = property->laser_lv3;
-    bomchar *bchar = property->bchar;
 
     int i1, ex, ey;
     int n;
     ex = p->x;
     ey = p->y;
 
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 1);
+    sprite->flag = false;
+    sprite->length = 1;
+
 //自機やられ
 #ifndef INVISIBLE_MODE
     if ((ex < jiki->x + 128 / 2) && (ex + w > jiki->x + 128 / 2)
 	&& (ey < jiki->y + 128 / 2) && (ey + h > jiki->y + 128 / 2)
 	&& jiki->muteki == 0) {
-	Bom(jiki->x + 16, jiki->y + 16, bomend, bchar);
+	
+	sprite->flag = true;
+	Bom(jiki->x + 16, jiki->y + 16, &sprite->data[0]);
+	
 	jiki->bf = FALSE;
 	jiki->zanki--;
-	jiki->muteki = 120;
+	jiki->muteki = 120;	
+	property->jiki = *jiki;
 
-	infg.stg = 0;
+	infg->stg = 0;
 	infg_level--;
 	if (infg_level < 0)
 	    infg_level = 0;
 
-	property->infg_level = infg_level;
-	property->infg = infg;
-	smanager->swap();
+	*p_infg_level = infg_level;
+	*q = *p;
 	return 0;
     }
 #endif
@@ -66,40 +79,40 @@
 	    && (ex + w > tama_lv1[i1].x + 16)
 	    && (tama_lv1[i1].y + 128 > ey) && (tama_lv1[i1].y < ey + h)
 	    && (tama_lv1[i1].r != -1)) {
+
 	    tama_lv1[i1].r = -1;
 	    p->vit -= TAMALV1P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
-		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
-		//p->state = delete_chara;
-		//p->collision = noaction;
+		infg->stg += 4;
+		sprite->flag = true;
+		Bom(p->x, p->y, &sprite->data[0]);
+		*enemycount += (p->score *
+				((infg->stg / 128) + infg_level + 1));
+		p->collision_task = true;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		*q = *p;
 		return 0;
 	    }
 	}
 	if ((tama_lv1[i1].x + 64 > ex) && (ex + w > tama_lv1[i1].x)
 	    && (tama_lv1[i1].y + 128 > ey) && (tama_lv1[i1].y < ey + h)
 	    && (tama_lv1[i1].l != -1)) {
+
 	    tama_lv1[i1].l = -1;
 	    p->vit -= TAMALV1P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
-		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
-		//p->state = delete_chara;
-		//p->collision = noaction;
+		infg->stg += 4;
+		sprite->flag = true;
+		Bom(p->x, p->y, &sprite->data[0]);
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + infg_level + 1));
+		p->collision_task = true;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		*q = *p;
 		return 0;
 	    }
 	}
@@ -110,20 +123,20 @@
 	    && (ex + w > tama_lv2[i1].x + 128)
 	    && (tama_lv2[i1].y + 192 > ey) && (tama_lv2[i1].y < ey + h)
 	    && (tama_lv2[i1].rr != -1)) {
+
 	    tama_lv2[i1].rr = -1;
 	    p->vit -= TAMALV2P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
-		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
-		//p->state = delete_chara;
-		//p->collision = noaction;
+		infg->stg += 4;
+		sprite->flag = true;
+		Bom(p->x, p->y, &sprite->data[0]);
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + infg_level + 1));
+		p->collision_task = true;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		*q = *p;
 		return 0;
 	    }
 	}
@@ -133,20 +146,20 @@
 	    && (tama_lv2[i1].y - 32 + 192 > ey)
 	    && (tama_lv2[i1].y - 32 < ey + h)
 	    && (tama_lv2[i1].sr != -1)) {
+
 	    tama_lv2[i1].sr = -1;
 	    p->vit -= TAMALV2P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
-		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
-		//p->state = delete_chara;
-		//p->collision = noaction;
+		infg->stg += 4;
+		sprite->flag = true;
+		Bom(p->x, p->y, &sprite->data[0]);
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + infg_level + 1));
+		p->collision_task = true;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		*q = *p;
 		return 0;
 	    }
 	}
@@ -154,20 +167,20 @@
 	    && (tama_lv2[i1].y - 32 + 192 > ey)
 	    && (tama_lv2[i1].y - 32 < ey + h)
 	    && (tama_lv2[i1].sl != -1)) {
+
 	    tama_lv2[i1].sl = -1;
 	    p->vit -= TAMALV2P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
-		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
-		//p->state = delete_chara;
-		//p->collision = noaction;
+		infg->stg += 4;
+		sprite->flag = true;
+		Bom(p->x, p->y, &sprite->data[0]);
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + infg_level + 1));
+		p->collision_task = true;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		*q = *p;
 		return 0;
 	    }
 	}
@@ -175,58 +188,58 @@
 	    && (ex + w > tama_lv2[i1].x - 64)
 	    && (tama_lv2[i1].y + 192 > ey) && (tama_lv2[i1].y < ey + h)
 	    && (tama_lv2[i1].ll != -1)) {
+
 	    tama_lv2[i1].ll = -1;
 	    p->vit -= TAMALV2P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
-		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
-		//p->state = delete_chara;
-		//p->collision = noaction;
+		infg->stg += 4;
+		sprite->flag = true;
+		Bom(p->x, p->y, &sprite->data[0]);
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + infg_level + 1));
+		p->collision_task = true;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		*q = *p;
 		return 0;
 	    }
 	}
     }
-    if ((tlv3[0].r > 0) && (jiki->x < ex + w) && (jiki->x + 128 > ex)
+    if ((tlv3->r > 0) && (jiki->x < ex + w) && (jiki->x + 128 > ex)
 	&& (jiki->y > ey + h)) {
+
 	p->vit -= TAMALV3P;
-	infg.stg++;
+	infg->stg++;
 	if (p->vit <= 0) {
-	    infg.stg += 4;
-	    Bom(p->x, p->y, bomend, bchar);
-	    enemycount += (p->score *
-			   ((infg.stg / 128) + infg_level + 1));
-	    //p->state = delete_chara;
-	    //p->collision = noaction;
+	    infg->stg += 4;
+	    sprite->flag = true;
+	    Bom(p->x, p->y, &sprite->data[0]);
+	    *enemycount += (p->score *
+			   ((infg->stg / 128) + infg_level + 1));
+	    p->collision_task = true;
 	    p->f = FALSE;
 
-	    property->infg = infg;
-	    smanager->swap();
+	    *q = *p;
 	    return 0;
 	}
     }
-  jumping:
-    if ((tlv3[0].r > 0) && (jiki->x < ex + w) && (jiki->x + 128 > ex)
+jumping:
+    if ((tlv3->r > 0) && (jiki->x < ex + w) && (jiki->x + 128 > ex)
 	&& (jiki->y + 128 > ey) && (jiki->y < ey + h)) {
+
 	p->vit -= TAMALV3P;
-	infg.stg++;
+	infg->stg++;
 	if (p->vit <= 0) {
-	    infg.stg += 4;
-	    Bom(p->x, p->y, bomend, bchar);
-	    enemycount += (p->score *
-			   ((infg.stg / 128) + infg_level + 1));
-	    //p->state = delete_chara;
-	    //p->collision = noaction;
+	    infg->stg += 4;
+	    sprite->flag = true;
+	    Bom(p->x, p->y, &sprite->data[0]);
+	    *enemycount += (p->score *
+			   ((infg->stg / 128) + infg_level + 1));
+	    p->collision_task = true;
 	    p->f = FALSE;
 
-	    property->infg = infg;
-	    smanager->swap();
+	    *q = *p;
 	    return 0;
 	}
     }
@@ -237,75 +250,77 @@
 	if ((laser_lv1[i1].x + n > ex) && (ex + w > laser_lv1[i1].x)
 	    && (laser_lv1[i1].y + n > ey) && (laser_lv1[i1].y < ey + h)
 	    && (laser_lv1[i1].r != -1)) {
+
 	    laser_lv1[i1].r = -1;
 	    laser_lv1[i1].y = -1;
 	    p->vit -= LASERLV1P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
-		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
-		//p->state = delete_chara;
-		//p->collision = noaction;
+		infg->stg += 4;
+		sprite->flag = true;
+		Bom(p->x, p->y, &sprite->data[0]);
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + infg_level + 1));
+		p->collision_task = true;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		*q = *p;
 		return 0;
 	    }
 	}
     }
     /*shield(laser lv2) */
-    if ((p->tama == TRUE) && (lg.stg > 0) &&
+    if ((p->tama == TRUE) && (lg->stg > 0) &&
 	(laser_lv2[0].x + 128 > ex) && (ex + w > laser_lv2[0].x - 128)
 	&& (laser_lv2[0].y + 128 > ey) && (laser_lv2[0].y - 128 < ey + h)
 	&& (laser_lv2[0].r != 0)) {
+
 	p->vit -= LASERLV2P;
-	lg.stg -= 26;
-	infg.stg++;
+	lg->stg -= 26;
+
+	infg->stg++;
 	if (p->vit <= 0) {
-	    infg.stg += 4;
-	    Bom(p->x, p->y, bomend, bchar);
-	    enemycount += (p->score *
-			   ((infg.stg / 128) + infg_level + 1));
-	    //p->state = delete_chara;
-	    //p->collision = noaction;
+	    infg->stg += 4;
+	    property->infg = *infg;
+
+	    sprite->flag = true;
+	    Bom(p->x, p->y, &sprite->data[0]);
+	    *enemycount += (p->score *
+			   ((infg->stg / 128) + infg_level + 1));
+	    p->collision_task = true;
 	    p->f = FALSE;
-
-	    property->lg = lg;
-	    property->infg = infg;
-	    smanager->swap();
+	    
+	    *q = *p;
 	    return 0;
 	}
     }
     /*bomber(laser lv3) */
     if (laser_lv3[0].r < 62) {
-	for (i1 = 1; i1 < 128; i1++) {
+	for (i1 = 1; i1 < 64; i1++) {
 	    if ((laser_lv3[i1].x + 128 > ex) && (ex + w > laser_lv3[i1].x)
 		&& (laser_lv3[i1].y + 128 > ey)
 		&& (laser_lv3[i1].y < ey + h)
 		&& (laser_lv3[i1].r > 0)) {
+
 		tama_lv2[i1].rr = -1;
 		p->vit -= LASERLV3P;
-		infg.stg++;
+		infg->stg++;
 		if (p->vit <= 0) {
-		    infg.stg += 4;
-		    Bom(p->x, p->y, bomend, bchar);
-		    enemycount += (p->score *
-				   ((infg.stg / 128) + infg_level + 1));
-		    //p->state = delete_chara;
-		    //p->collision = noaction;
+		    infg->stg += 4;
+		    sprite->flag = true;
+		    Bom(p->x, p->y, &sprite->data[0]);
+		    *enemycount += (p->score *
+				   ((infg->stg / 128) + infg_level + 1));
+		    p->collision_task = true;
 		    p->f = FALSE;
 
-		    property->infg = infg;
-		    smanager->swap();
+		    *q = *p;
 		    return 0;
 		}
 	    }
 	}
     }
-    property->infg = infg;
-    smanager->swap();
+
+    *q = *p;
     return 0;
 }