From 5e371a37549420184f27ca09b6fda6c039f7e5f2 Mon Sep 17 00:00:00 2001 From: Sara Date: Mon, 27 Nov 2023 17:40:11 +0100 Subject: [PATCH] feat: game world now destroys objects for which game_world_destroy has been called --- core/src/game_world.c | 17 +++++++---------- core/src/game_world.h | 2 +- 2 files changed, 8 insertions(+), 11 deletions(-) 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();