#include "engine.h"
-void move(engine_t *self, enemy_t *enemy, path_t *path);
+void move(engine_t *self, enemy_t *enemy);
engine_t *new_engine(map_t *map) {
engine_t *self = malloc(sizeof(engine_t));
}
void engine_tick(engine_t *self) {
-printf("Tick is: %d\n", self->current_tick);
array_clear(self->events);
// TODO: all the rest
+ array_deloop(self->map->alive, ptr, enemy_t*) {
+ enemy_t *alive = *ptr;
+ move(self, alive);
+ }
enemy_t *enemy;
if (self->last_enemy)
enemy = array_first(self->map->enemies);
// We allow only one enemy per tick (because one per path!)
- if (enemy->start_tick == self->current_tick) {
- move(self, enemy, array_first(self->map->paths));
+ if (enemy && enemy->start_tick == self->current_tick) {
+ self->last_enemy = enemy;
+ array_push(self->map->alive, &enemy);
+ move(self, enemy);
}
self->current_tick++;
}
-void move(engine_t *self, enemy_t *enemy, path_t *path) {
- if (path->enemy)
- printf("woops: TODO");
+void move(engine_t *self, enemy_t *enemy) {
+ int source = enemy->index;
+ int target = source >= 0 ? source+1 : 0;
+
+ path_t *path_from = NULL;
+ if (enemy->index >= 0)
+ path_from = array_get(self->map->paths, enemy->index);
+ path_t *path_to = array_get(self->map->paths, target);
+
+ if (path_to && path_to->enemy)
+ printf("woops: TODO\n");
+
+ if (path_from) {
+ if (path_from->enemy != enemy) {
+ printf("TODO: DATA ERROR\n");
+ return;
+ }
+ path_from->enemy = NULL;
+ }
+
+ if (!path_to) {
+ printf("TODO: enemy left!\n");
+ return;
+ }
- path->enemy = enemy;
+ if (path_to) {
+ path_to->enemy = enemy;
+ enemy->index = path_to->index;
+ }
+printf("enemy moved from %d (%d,%d) to %d (%d,%d)\n",
+source, path_from?path_from->x:-1, path_from?path_from->y:-1,
+target, path_to ?path_to ->x:-1, path_to ?path_to ->y:-1
+);
}