diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-09-16 16:58:02 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-09-16 17:00:08 -0400 |
| commit | 73c5e170260638cc566cba2689ea570caee39251 (patch) | |
| tree | 256b36398d33650054a885e572437909f88485cb /src/scene.cpp | |
| parent | e52ef2e49ae660833370befc34ba79d412cb4604 (diff) | |
pke: major object lifetime overhaul.
Added pke-test-load-unload to ensure objects are
managed as expected.
Diffstat (limited to 'src/scene.cpp')
| -rw-r--r-- | src/scene.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
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<char>(scn->file_path.val, scn->file_path.reserved); +void pke_scene_tick(double delta) { + (void)delta; + pk_iter_t<pke_scene> 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<char>(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); } |
