summaryrefslogtreecommitdiff
path: root/src/scene.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/scene.cpp')
-rw-r--r--src/scene.cpp24
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);
}