#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;
}
* blablabla
*/
typedef union {
- struct { char _; char type; } _;
+ struct {
+ char CNAME[10];
+ char obj;
+ } _;
path_t _l;
tower_t _t;
enemy_t _e;
self->CNAME[sz - 2] = ']';
self->CNAME[sz - 1] = '\0';
+ self->obj = 'E';
self->start_tick = start_tick;
self->base = base;
self->id = id;
}
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;
#include <stddef.h>
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
*/
typedef struct {
char CNAME[10];
+ char obj; // object type: E
enemy_base_t *base;
size_t start_tick;
int index; // index in paths
}
tower_lvl_t *lvl = &(base->stats[base->stats_sz]);
+ init_tower_lvl(lvl);
lvl->speed = speed;
lvl->attack = attack;
lvl->range = range;
self->CNAME[sz - 2] = ']';
self->CNAME[sz - 1] = '\0';
+ self->obj = 'P';
self->x = x;
self->y = y;
self->index = -1;
*/
typedef struct {
char CNAME[10];
+ char obj; // object type: P
int x;
int y;
int index;
self->CNAME[sz - 2] = ']';
self->CNAME[sz - 1] = '\0';
+ self->obj = 'T';
self->base = base;
self->id = id;
self->x = x;
}
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;
}
} target_t;
typedef struct {
+ char CNAME[10];
+ char obj; // object type: t
int attack;
int speed; // fire_delay in ticks
int range;
} 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
*/
typedef struct {
char CNAME[10];
+ char obj; // Object type: T
tower_base_t *base;
int id;
int x;
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,