From a136e6767f067a40504c3ab550e7ac9f30370855 Mon Sep 17 00:00:00 2001 From: Niki Date: Sat, 19 Apr 2025 21:26:49 +0200 Subject: [PATCH] CNAME should be opt --- src/tdef/any.c | 6 +++--- src/tdef/any.h | 5 ++++- src/tdef/enemy.c | 2 ++ src/tdef/enemy.h | 3 +++ src/tdef/engine.c | 1 + src/tdef/path.c | 1 + src/tdef/path.h | 1 + src/tdef/tower.c | 23 +++++++++++++++++++++++ src/tdef/tower.h | 7 +++++++ 9 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/tdef/any.c b/src/tdef/any.c index 5d20b01..5e2f20e 100644 --- a/src/tdef/any.c +++ b/src/tdef/any.c @@ -23,19 +23,19 @@ #include "any.h" path_t *anypath(any_t *self) { - if (self && self->_.type == 'p') + if (self && self->_.obj == 'P') return (path_t*)(void*)self; return NULL; } tower_t *anytower(any_t *self) { - if (self && self->_.type == 't') + if (self && self->_.obj == 'T') return (tower_t*)(void*)self; return NULL; } enemy_t *anyenemy(any_t *self) { - if (self && self->_.type == 'e') + if (self && self->_.obj == 'E') return (enemy_t*)(void*)self; return NULL; } diff --git a/src/tdef/any.h b/src/tdef/any.h index 9a1e7b2..99f70b5 100644 --- a/src/tdef/any.h +++ b/src/tdef/any.h @@ -22,7 +22,10 @@ * blablabla */ typedef union { - struct { char _; char type; } _; + struct { + char CNAME[10]; + char obj; + } _; path_t _l; tower_t _t; enemy_t _e; diff --git a/src/tdef/enemy.c b/src/tdef/enemy.c index 2375b91..b27c83f 100644 --- a/src/tdef/enemy.c +++ b/src/tdef/enemy.c @@ -38,6 +38,7 @@ int init_enemy(enemy_t *self, enemy_base_t *base, int id, size_t start_tick) { self->CNAME[sz - 2] = ']'; self->CNAME[sz - 1] = '\0'; + self->obj = 'E'; self->start_tick = start_tick; self->base = base; self->id = id; @@ -60,6 +61,7 @@ void uninit_enemy(enemy_t *self) { } int init_enemy_base(enemy_base_t *self, int type, int hp, int speed, int bits){ + self->obj = 'e'; self->type = type; self->max_hp = hp; self->speed = speed; diff --git a/src/tdef/enemy.h b/src/tdef/enemy.h index 6c5faf4..aa4e395 100644 --- a/src/tdef/enemy.h +++ b/src/tdef/enemy.h @@ -15,6 +15,8 @@ #include typedef struct { + char CNAME[10]; + char obj; // object type: e int type; // identify the unique enemy type int max_hp; int speed; // paths per tick @@ -28,6 +30,7 @@ typedef struct { */ typedef struct { char CNAME[10]; + char obj; // object type: E enemy_base_t *base; size_t start_tick; int index; // index in paths diff --git a/src/tdef/engine.c b/src/tdef/engine.c index 8fcae41..eaae990 100644 --- a/src/tdef/engine.c +++ b/src/tdef/engine.c @@ -244,6 +244,7 @@ int setup_tower_lvl( } tower_lvl_t *lvl = &(base->stats[base->stats_sz]); + init_tower_lvl(lvl); lvl->speed = speed; lvl->attack = attack; lvl->range = range; diff --git a/src/tdef/path.c b/src/tdef/path.c index 70cf979..806952b 100644 --- a/src/tdef/path.c +++ b/src/tdef/path.c @@ -38,6 +38,7 @@ int init_path(path_t *self, int x, int y) { self->CNAME[sz - 2] = ']'; self->CNAME[sz - 1] = '\0'; + self->obj = 'P'; self->x = x; self->y = y; self->index = -1; diff --git a/src/tdef/path.h b/src/tdef/path.h index e4d8c22..5cc8f76 100644 --- a/src/tdef/path.h +++ b/src/tdef/path.h @@ -21,6 +21,7 @@ */ typedef struct { char CNAME[10]; + char obj; // object type: P int x; int y; int index; diff --git a/src/tdef/tower.c b/src/tdef/tower.c index a8e0973..b5a0c5d 100644 --- a/src/tdef/tower.c +++ b/src/tdef/tower.c @@ -46,6 +46,7 @@ int init_tower(tower_t *self, tower_base_t *base, int id, int x, int y) { self->CNAME[sz - 2] = ']'; self->CNAME[sz - 1] = '\0'; + self->obj = 'T'; self->base = base; self->id = id; self->x = x; @@ -77,11 +78,33 @@ void uninit_tower(tower_t *self) { } int init_tower_base(tower_base_t *self, int type) { + size_t sz = sizeof(self->CNAME); + strncpy(self->CNAME, "[tower_base ", sz); + self->CNAME[sz - 2] = ']'; + self->CNAME[sz - 1] = '\0'; + + self->obj = 't'; self->type = type; self->stats_sz = 0; self->super_cost = 0; self->super_power = 0; memset(self->stats, '\0', sizeof(self->stats)); + + return 1; +} + +int init_tower_lvl(tower_lvl_t *self) { + size_t sz = sizeof(self->CNAME); + strncpy(self->CNAME, "[tower_lvl ", sz); + self->CNAME[sz - 2] = ']'; + self->CNAME[sz - 1] = '\0'; + + self->obj = 't'; + self->attack = 0; + self->speed = 0; + self->range = 0; + self->cost = 0; + return 1; } diff --git a/src/tdef/tower.h b/src/tdef/tower.h index 7f490ee..df29411 100644 --- a/src/tdef/tower.h +++ b/src/tdef/tower.h @@ -23,6 +23,8 @@ typedef enum { } target_t; typedef struct { + char CNAME[10]; + char obj; // object type: t int attack; int speed; // fire_delay in ticks int range; @@ -30,6 +32,8 @@ typedef struct { } tower_lvl_t; typedef struct { + char CNAME[10]; + char obj; // object type: t int type; // identify the unique tower type tower_lvl_t stats[6]; int stats_sz; // how many are used @@ -44,6 +48,7 @@ typedef struct { */ typedef struct { char CNAME[10]; + char obj; // Object type: T tower_base_t *base; int id; int x; @@ -111,6 +116,8 @@ void uninit_tower(tower_t *self); int init_tower_base(tower_base_t *self, int type); +int init_tower_lvl(tower_lvl_t *self); + void tower_rearm(tower_t *self); proj_t *tower_fire(tower_t *self, int current_tick, array_t *enemies, -- 2.27.0