#include "world.h" #include "platform.h" #include "error.h" void init_world(World* world) { int i, s = sizeof *world; for (i = 0; i < s; i++) { ((char*)world)[i] = 0; } } Entity new_entity(World* world) { Entity e; #if DEBUG if ( world->entity_count >= max_entities && world->recycle_bin_count == 0 ) { platform_err("Too many entities.\n"); platform_abort(error_out_of_memory); } #endif e = world->recycle_bin_count > 0 ? world->recycle_bin[--world->recycle_bin_count] : world->entity_count++; world->bitmask[e] = 0; world->gmemory--; return e; } void destroy_entity(World* world, Entity e) { world->recycle_bin[world->recycle_bin_count++] = e; if (world->bitmask[e] & ctype_enemy) { world->enemy_count--; } world->bitmask[e] = 0; world->gmemory++; } void add_components(World* world, Entity e, CType bits) { world->bitmask[e] |= bits; } void remove_components(World* world, Entity e, CType bits) { world->bitmask[e] &= ~bits; }