diff options
Diffstat (limited to 'src/level.cpp')
| -rw-r--r-- | src/level.cpp | 29 |
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) { |
