summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-09-25 12:05:37 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-09-25 12:05:37 -0400
commitb84438b140c64b084919ea3366d4f4ff66e5b1c7 (patch)
tree409434d8f9fd8700ffb49eb71bf9cfe56ad8e54c
parent0e6193c2195f4b24bafb6f2ff4012db383180ff9 (diff)
pke: pke_level unregister root ui box
Necessary for editor + manually managing boxes without using invisibility
-rw-r--r--src/level.cpp17
-rw-r--r--src/level.hpp2
2 files changed, 19 insertions, 0 deletions
diff --git a/src/level.cpp b/src/level.cpp
index 27e7722..f839a6e 100644
--- a/src/level.cpp
+++ b/src/level.cpp
@@ -163,3 +163,20 @@ void pke_level_register_root_ui_box(pke_level *level, pke_ui_box *box) {
assert(box != nullptr);
pk_arr_append_t(&level->root_ui_boxes, box);
}
+
+bool find_box_fn(void *user_data, void *item) {
+ (void)user_data;
+ void *box = *reinterpret_cast<pke_ui_box **>(item);
+ return user_data == box;
+}
+
+void pke_level_unregister_root_ui_box(pke_level *level, pke_ui_box *box) {
+ assert(level != nullptr);
+ assert(box != nullptr);
+ uint32_t idx = pk_arr_find_first_index(&level->root_ui_boxes, box, find_box_fn);
+ if (idx < level->root_ui_boxes.next) {
+ pk_arr_remove_at(&level->root_ui_boxes, idx);
+ } else {
+ fprintf(stderr, "[pke_level_unregister_root_ui_box] attempted to unregister ui box that was not registered with level '%*s'!\n", LEVEL_NAME_MAX_LEN, level->name);
+ }
+}
diff --git a/src/level.hpp b/src/level.hpp
index b85a608..8cb9854 100644
--- a/src/level.hpp
+++ b/src/level.hpp
@@ -18,4 +18,6 @@ void pke_level_register_camera(pke_level *level, PkeCamera *camera);
void pke_level_register_input_action_set(pke_level *level, pke_input_action_set_handle handle);
void pke_level_register_root_ui_box(pke_level *level, pke_ui_box *box);
+void pke_level_unregister_root_ui_box(pke_level *level, pke_ui_box *box);
+
#endif /* PKE_LEVEL_HPP */