From 73c5e170260638cc566cba2689ea570caee39251 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Tue, 16 Sep 2025 16:58:02 -0400 Subject: pke: major object lifetime overhaul. Added pke-test-load-unload to ensure objects are managed as expected. --- src/scene.cpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'src/scene.cpp') diff --git a/src/scene.cpp b/src/scene.cpp index ecc0fc8..4d5cc76 100644 --- a/src/scene.cpp +++ b/src/scene.cpp @@ -86,15 +86,19 @@ pk_bkt_arr *pke_scene_get_scenes() { return &scene_mstr.bc; } -void pke_scene_remove(SceneHandle handle) { - pke_scene *scn = &scene_mstr.bc[handle]; - assert(scn != nullptr && "[pke_scene_remove] Failed to find scene by requested SceneHandle"); - ECS_MarkForRemoval(scn); - if (scn->file_path.reserved > 0) { - pk_delete_arr(scn->file_path.val, scn->file_path.reserved); +void pke_scene_tick(double delta) { + (void)delta; + pk_iter_t iter; + bool b; + b = pk_bkt_arr_iter_begin(&scene_mstr.bc, &iter); + while (b == true) { + if (iter->isMarkedForRemoval == true) { + if (iter->file_path.reserved > 0) { + pk_delete_arr(iter->file_path.val, iter->file_path.reserved); + } + pk_bkt_arr_free_handle(&scene_mstr.bc, iter->scene_handle); + new (&*iter) pke_scene{}; + } + b = pk_bkt_arr_iter_increment(&scene_mstr.bc, &iter); } - scn->file_path = {}; - scn->name[0] = '\0'; - scn->scene_handle = SceneHandle_MAX; - pk_bkt_arr_free_handle(&scene_mstr.bc, handle); } -- cgit v1.2.3