45 lines
No EOL
910 B
C
45 lines
No EOL
910 B
C
typedef enum Entity_Archetype {
|
|
ARCH_nil = 0,
|
|
ARCH_player = 1,
|
|
ARCH_spider = 2,
|
|
ARCH_mutant = 3,
|
|
ARCH_tree = 4,
|
|
ARCH_weapon = 5,
|
|
} Entity_Archetype;
|
|
|
|
typedef struct Entity {
|
|
bool alive;
|
|
bool renderable;
|
|
Entity_Archetype arch;
|
|
Vector2 pos;
|
|
Sprite_ID sprite_id;
|
|
float32 health, damage;
|
|
Vector2 hitbox[4];
|
|
Vector2 weapon_owner_pos;
|
|
Vector2 weapon_dir;
|
|
float32 weapon_rads;
|
|
} Entity;
|
|
|
|
#define MAX_ENTITIES 1024
|
|
typedef struct World {
|
|
Entity entities[MAX_ENTITIES];
|
|
} World;
|
|
World* world = 0;
|
|
|
|
Entity* entity_create() {
|
|
Entity* entity_found = 0;
|
|
for (int i = 0; i < MAX_ENTITIES; i++) {
|
|
Entity* existing_entity = &world->entities[i];
|
|
if (!existing_entity->alive) {
|
|
entity_found = existing_entity;
|
|
break;
|
|
}
|
|
}
|
|
assert(entity_found, "Entity Overflow!");
|
|
entity_found->alive = true;
|
|
return entity_found;
|
|
}
|
|
|
|
void entity_destroy(Entity* entity) {
|
|
memset(entity, 0, sizeof(Entity));
|
|
} |