diff --git a/core/src/game_world.c b/core/src/game_world.c index 8ec093f..2fe6584 100644 --- a/core/src/game_world.c +++ b/core/src/game_world.c @@ -13,7 +13,7 @@ static inline size_t _internal_find_index_for_entity(void* data, const List* list) { for(size_t i = 0; i < _game_entities.len; ++i) { BehaviourEntity* entity = list_at_as(BehaviourEntity, &_game_entities, i); - if(entity->data == entity) { + if(entity->data == data) { return i; } } @@ -23,10 +23,10 @@ size_t _internal_find_index_for_entity(void* data, const List* list) { static inline void _internal_clear_removed() { - list_foreach(size_t*, index, &_remove_queue) { - BehaviourEntity* entity = list_at_as(BehaviourEntity, &_game_entities, *index); + list_foreach(BehaviourEntity*, entity, &_remove_queue) { + size_t index = _internal_find_index_for_entity(entity->data, &_game_entities); entity->drop->drop(entity->data); - list_erase(&_game_entities, *index); + list_erase(&_game_entities, index); } list_empty(&_remove_queue); } @@ -43,7 +43,7 @@ void _internal_process_new() { void game_world_init() { _game_entities = list_from_type(BehaviourEntity); _add_queue = list_from_type(BehaviourEntity); - _remove_queue = list_from_type(size_t); + _remove_queue = list_from_type(BehaviourEntity); } void game_world_close() { @@ -59,11 +59,8 @@ void game_world_add_entity(BehaviourEntity entity) { list_add(&_add_queue, &entity); } -void game_world_remove_entity(void* entity) { - size_t index = _internal_find_index_for_entity(entity, &_game_entities); - if(index != _game_entities.len) { - list_add(&_remove_queue, &index); - } +void game_world_destroy_entity(BehaviourEntity entity) { + list_add(&_remove_queue, &entity); } void game_world_update() { diff --git a/core/src/game_world.h b/core/src/game_world.h index d35c7d2..a963d93 100644 --- a/core/src/game_world.h +++ b/core/src/game_world.h @@ -7,7 +7,7 @@ extern void game_world_init(); extern void game_world_close(); extern void game_world_add_entity(BehaviourEntity entity); -extern void game_world_remove_entity(void* entity); +extern void game_world_destroy_entity(BehaviourEntity entity); extern void game_world_update(); extern void game_world_draw();