A 3D game engine from scratch.
at main 101 lines 2.4 kB view raw
1// (c) 2020 Vlad-Stefan Harbuz <vlad@vladh.net> 2 3#include "entities.hpp" 4#include "engine.hpp" 5 6 7entities::State *entities::state = nullptr; 8 9 10entities::Handle 11entities::make_handle() 12{ 13 if (entities::state->next_handle == NO_ENTITY_HANDLE) { 14 entities::state->next_handle++; 15 } 16 return entities::state->next_handle++; 17} 18 19 20entities::Entity * 21entities::add_entity_to_set(char const *debug_name) 22{ 23 Handle new_handle = make_handle(); 24 Entity *new_entity = get_entity(new_handle); 25 new_entity->handle = new_handle; 26 strcpy(new_entity->debug_name, debug_name); 27 return new_entity; 28} 29 30 31void 32entities::mark_first_non_internal_handle() 33{ 34 entities::state->first_non_internal_handle = entities::state->next_handle; 35} 36 37 38entities::Handle 39entities::get_first_non_internal_handle() 40{ 41 return entities::state->first_non_internal_handle; 42} 43 44 45void 46entities::destroy_non_internal_entities() 47{ 48 for ( 49 u32 idx = entities::state->first_non_internal_handle; 50 idx < entities::state->entities.length; 51 idx++ 52 ) { 53 drawable::destroy_component(drawable::get_component(idx)); 54 } 55 56 entities::state->next_handle = entities::state->first_non_internal_handle; 57 58 entities::state->entities.delete_elements_after_index( 59 entities::state->first_non_internal_handle); 60 61 lights::get_components()->delete_elements_after_index( 62 entities::state->first_non_internal_handle); 63 spatial::get_components()->delete_elements_after_index( 64 entities::state->first_non_internal_handle); 65 drawable::get_components()->delete_elements_after_index( 66 entities::state->first_non_internal_handle); 67 behavior::get_components()->delete_elements_after_index( 68 entities::state->first_non_internal_handle); 69 anim::get_components()->delete_elements_after_index( 70 entities::state->first_non_internal_handle); 71} 72 73 74u32 75entities::get_n_entities() 76{ 77 return entities::state->entities.length; 78} 79 80 81Array<entities::Entity> * 82entities::get_entities() 83{ 84 return &entities::state->entities; 85} 86 87 88entities::Entity * 89entities::get_entity(entities::Handle entity_handle) 90{ 91 return entities::state->entities[entity_handle]; 92} 93 94 95void 96entities::init(entities::State *entities_state, memory::Pool *asset_memory_pool) 97{ 98 entities::state = entities_state; 99 entities::state->entities = Array<entities::Entity>( 100 asset_memory_pool, MAX_N_ENTITIES, "entities", true, 1); 101}