summaryrefslogtreecommitdiff
path: root/src/level.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/level.cpp')
-rw-r--r--src/level.cpp29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/level.cpp b/src/level.cpp
index 120ef57..27e7722 100644
--- a/src/level.cpp
+++ b/src/level.cpp
@@ -4,6 +4,7 @@
#include "ecs.hpp"
#include "pk.h"
#include "scene.hpp"
+#include "static-ui.hpp"
struct level_mstr {
pk_membucket *bkt;
@@ -98,6 +99,25 @@ struct pk_bkt_arr *pke_level_get_levels() {
return &level_mstr.bc;
}
+void pke_level_tick(double delta) {
+ (void)delta;
+ pk_iter_t<pke_level> iter;
+ bool b;
+
+ b = pk_bkt_arr_iter_begin(&level_mstr.bc, &iter);
+ while (b == true) {
+ if (iter->isMarkedForRemoval) {
+ pk_arr_reset(&iter->scene_instances);
+ pk_arr_reset(&iter->cameras);
+ pk_arr_reset(&iter->root_ui_boxes);
+ pk_arr_reset(&iter->input_handles);
+ pk_bkt_arr_free_handle(&level_mstr.bc, iter->levelHandle);
+ new (&*iter) pke_level{};
+ }
+ b = pk_bkt_arr_iter_increment(&level_mstr.bc, &iter);
+ }
+}
+
void pke_level_teardown(pke_level *level) {
uint32_t u;
assert(level != nullptr);
@@ -106,10 +126,10 @@ void pke_level_teardown(pke_level *level) {
}
ECS_MarkForRemoval(level);
for (u = 0; u < level->scene_instances.next; ++u) {
- pke_scene_remove(level->scene_instances[u].scene_handle);
+ ECS_MarkForRemoval(pke_scene_get_by_handle(level->scene_instances[u].scene_handle));
}
for (u = 0; u < level->cameras.next; ++u) {
- PkeCamera_Destroy(level->cameras[u]->camHandle);
+ ECS_MarkForRemoval(level->cameras[u]);
}
for (u = 0; u < level->input_handles.next; ++u) {
pke_input_deactivate_set(level->input_handles[u]);
@@ -124,11 +144,6 @@ void pke_level_teardown(pke_level *level) {
if (level->bkt != nullptr) {
pk_mem_bucket_destroy(level->bkt);
}
- pk_arr_reset(&level->scene_instances);
- pk_arr_reset(&level->cameras);
- pk_arr_reset(&level->root_ui_boxes);
- pk_arr_reset(&level->input_handles);
- pk_bkt_arr_free_handle(&level_mstr.bc, level->levelHandle);
}
void pke_level_register_camera(pke_level *level, PkeCamera *camera) {