2023-10-14 13:04:52 +00:00
|
|
|
#include "entity.h"
|
|
|
|
#include "state.h"
|
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
tc_entity_s * tc_allocate_entity()
|
|
|
|
{
|
|
|
|
tc_entity_registry_s registry = tc_game_state_g.entity_registry;
|
|
|
|
|
|
|
|
uint32_t entity_index = 0;
|
|
|
|
while(entity_index < registry.entities_capacity)
|
|
|
|
{
|
|
|
|
if(registry.entities[entity_index] == NULL)
|
|
|
|
{
|
2023-10-14 14:38:38 +00:00
|
|
|
registry.entities[entity_index] = calloc(sizeof(tc_entity_s), 1);
|
2023-10-14 13:04:52 +00:00
|
|
|
++registry.num_entities;
|
|
|
|
return registry.entities[entity_index];
|
|
|
|
}
|
|
|
|
++entity_index;
|
|
|
|
}
|
|
|
|
|
|
|
|
registry.entities_capacity *= 2;
|
|
|
|
registry.entities =
|
|
|
|
realloc(registry.entities, sizeof(tc_entity_s *) * registry.entities_capacity);
|
|
|
|
|
|
|
|
registry.entities[registry.num_entities] = malloc(sizeof(tc_entity_s));
|
|
|
|
++registry.num_entities;
|
|
|
|
|
|
|
|
return registry.entities[registry.num_entities-1];
|
|
|
|
}
|
|
|
|
|
|
|
|
void tc_deallocate_entity(tc_entity_s *entity)
|
|
|
|
{
|
|
|
|
if(entity->specific != NULL) free(entity->specific);
|
|
|
|
if(entity->attributes != NULL) free(entity->attributes);
|
|
|
|
|
|
|
|
tc_entity_registry_s registry = tc_game_state_g.entity_registry;
|
|
|
|
|
|
|
|
uint32_t entity_index = 0;
|
|
|
|
while(entity_index < registry.entities_capacity)
|
|
|
|
{
|
|
|
|
if(registry.entities[entity_index] == entity)
|
|
|
|
{
|
|
|
|
registry.entities[entity_index] = NULL;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
++entity_index;
|
|
|
|
}
|
|
|
|
|
|
|
|
free(entity);
|
|
|
|
}
|
|
|
|
|