started on the enemy logic
authorJohn Tsiombikas <nuclear@member.fsf.org>
Mon, 31 Oct 2022 02:36:21 +0000 (04:36 +0200)
committerJohn Tsiombikas <nuclear@member.fsf.org>
Mon, 31 Oct 2022 02:36:21 +0000 (04:36 +0200)
src/gamescr.c
src/voxscape.c
src/voxscape.h

index b7e35d2..d53943e 100644 (file)
@@ -22,6 +22,8 @@
 #define E_RATE 250
 #define SHOT_TIME      50
 
+#define ENEMY_VIS_RANGE        (2 * FAR / 3)
+
 static int gamescr_start(void);
 static void gamescr_stop(void);
 static void gamescr_frame(void);
@@ -348,6 +350,27 @@ static int update(void)
                vox_view(pos[0], pos[1], -40, angle);
        }
 
+       /* enemy logic */
+       enemy = enemies;
+       for(i=0; i<total_enemies; i++) {
+               int32_t dx, dy;
+
+               if(enemy->hp <= 0 || timer_msec - enemy->last_shot < E_RATE) {
+                       enemy++;
+                       continue;
+               }
+
+               dx = enemy->vobj.x - pos[0];
+               dy = enemy->vobj.y - pos[1];
+               if(abs(dx >> 16) < ENEMY_VIS_RANGE && abs(dy >> 16) < ENEMY_VIS_RANGE) {
+                       if(vox_check_vis(enemy->vobj.x, enemy->vobj.y, pos[0], pos[1])) {
+                               enemy->last_shot = timer_msec;
+                               /* TODO shoot */
+                       }
+               }
+               enemy++;
+       }
+
        snum = 0;
        /* turrets number */
        spr_oam(oam, dynspr_base + snum++, numspr[num_kills][0], 200, 144, SPR_VRECT | SPR_256COL);
index 5cd9e0d..3ccf8e2 100644 (file)
@@ -289,3 +289,9 @@ void vox_objects(struct vox_object *ptr, int count, int stride)
                obj = (struct vox_object*)((char*)obj + stride);
        }
 }
+
+int vox_check_vis(int32_t x0, int32_t y0, int32_t x1, int32_t y1)
+{
+       /* TODO */
+       return 0;
+}
index 314147c..3f07cb8 100644 (file)
@@ -32,4 +32,6 @@ void vox_sky_grad(uint8_t chor, uint8_t ctop);
 
 void vox_objects(struct vox_object *ptr, int count, int stride);
 
+int vox_check_vis(int32_t x0, int32_t y0, int32_t x1, int32_t y1);
+
 #endif /* VOXSCAPE_H_ */