From: Niki Date: Sat, 5 Apr 2025 08:34:03 +0000 (+0200) Subject: some work on engine X-Git-Url: http://git.nikiroo.be/?a=commitdiff_plain;h=4114508ed4b091b2da18b1a69151ada2f4492f83;p=tdef.git some work on engine --- diff --git a/src/cutils b/src/cutils index d6fa07c..c90622d 160000 --- a/src/cutils +++ b/src/cutils @@ -1 +1 @@ -Subproject commit d6fa07c12023662e16ace68bba78047e0244a9f7 +Subproject commit c90622df7e4c032152641693b39364a2864abba9 diff --git a/src/tdef/enemy.c b/src/tdef/enemy.c index b611728..79a7302 100644 --- a/src/tdef/enemy.c +++ b/src/tdef/enemy.c @@ -39,6 +39,7 @@ int init_enemy(enemy_t *self, size_t start_tick) { self->CNAME[sz - 1] = '\0'; self->start_tick = start_tick; + self->index = -1; return 1; } diff --git a/src/tdef/enemy.h b/src/tdef/enemy.h index 5702326..2e1ca96 100644 --- a/src/tdef/enemy.h +++ b/src/tdef/enemy.h @@ -24,6 +24,7 @@ typedef struct { size_t start_tick; int hp; int speed; // paths per tick + int index; // index in paths } enemy_t; /** diff --git a/src/tdef/engine.c b/src/tdef/engine.c index ca2c7ff..bdc6239 100644 --- a/src/tdef/engine.c +++ b/src/tdef/engine.c @@ -22,7 +22,7 @@ #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)); @@ -64,10 +64,13 @@ void uninit_engine(engine_t *self) { } 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) @@ -76,18 +79,48 @@ printf("Tick is: %d\n", self->current_tick); 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 +); } diff --git a/src/tdef/tdef.c b/src/tdef/tdef.c index 4c4b914..976ed0f 100644 --- a/src/tdef/tdef.c +++ b/src/tdef/tdef.c @@ -77,14 +77,17 @@ int main(int argc, char **argv) { map_add_tower(map, tower); enemy_t *enemy = new_enemy(1); + enemy->speed = 1; map_enemy(map, enemy); engine_t *engine = new_engine(map); - engine_tick(engine); - display(map); - engine_tick(engine); - display(map); + printf("Paths: %d\n", map->paths->count); + for (int i = 0 ; i < 11 ; i++) { + printf("Tick is: %d\n", engine->current_tick); + engine_tick(engine); + display(map); + } free_engine(engine); return 0;