diff options
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); } |
