From b84438b140c64b084919ea3366d4f4ff66e5b1c7 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Thu, 25 Sep 2025 12:05:37 -0400 Subject: pke: pke_level unregister root ui box Necessary for editor + manually managing boxes without using invisibility --- src/level.cpp | 17 +++++++++++++++++ src/level.hpp | 2 ++ 2 files changed, 19 insertions(+) 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(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 */ -- cgit v1.2.3