diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-10-02 10:45:09 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-10-02 10:45:09 -0400 |
| commit | 3dd940cc0a9f985f7c7520f5064840cf7a25d5c9 (patch) | |
| tree | 716cbe6626b8878fb1f9a0ad2e080c02b0faac04 /src | |
| parent | 784aafce17590613543f7042357bb1c8def87cd4 (diff) | |
pke: use explicit bucket on input set
Diffstat (limited to 'src')
| -rw-r--r-- | src/player-input.cpp | 6 | ||||
| -rw-r--r-- | src/player-input.hpp | 3 | ||||
| -rw-r--r-- | src/serialization-input.cpp | 9 | ||||
| -rw-r--r-- | src/static-ui.cpp | 11 |
4 files changed, 17 insertions, 12 deletions
diff --git a/src/player-input.cpp b/src/player-input.cpp index c62c957..cc9d109 100644 --- a/src/player-input.cpp +++ b/src/player-input.cpp @@ -582,7 +582,7 @@ void pke_input_init() { prevWindowFocusCallback = glfwSetWindowFocusCallback(window, WindowFocusCallback); } -pke_input_action_set_handle pke_input_register_set(const pke_input_set &set) { +pke_input_action_set_handle pke_input_register_set(const pke_input_set &&set) { pke_input_action_set_handle returnValue{static_cast<pke_input_action_set_handle_T>(registeredInputSets.next)}; pk_arr_append_t(®isteredInputSets, set); return returnValue; @@ -707,8 +707,8 @@ void pke_input_unregister_set(pke_input_action_set_handle handle) { if (pk_arr_find_first_index(&activeInputSetStack, &handle, PkeInput_pke_arr_find_first_handle) != uint32_t(-1)) { pke_input_deactivate_set(handle); } - if (set.actions != nullptr) { - pk_delete_arr<pke_input_action>(set.actions, set.actionCount); + if (set.actions != nullptr && set.bkt != nullptr) { + pk_delete_arr<pke_input_action>(set.actions, set.actionCount, set.bkt); } pk_arr_remove_at(®isteredInputSets, index); } diff --git a/src/player-input.hpp b/src/player-input.hpp index eae5f8b..8c3b04f 100644 --- a/src/player-input.hpp +++ b/src/player-input.hpp @@ -110,6 +110,7 @@ struct pke_input_set { int64_t actionCount; pke_input_action *actions; pke_input_action_set_flag flags; + pk_membucket *bkt = nullptr; }; void pke_input_tick(double delta); @@ -120,7 +121,7 @@ const pke_input_event *pke_input_query_by_action_name(const char *actionName); void pke_input_query_by_mask(pke_input_event_mask mask, pke_input_event &ev); void pke_input_query_mouse_pos(double &x, double &y); void pke_input_init(); -pke_input_action_set_handle pke_input_register_set(const pke_input_set &set); +pke_input_action_set_handle pke_input_register_set(const pke_input_set &&set); void pke_input_activate_set(pke_input_action_set_handle handle); void pke_input_deactivate_set(pke_input_action_set_handle handle); void pke_input_unregister_set(pke_input_action_set_handle handle); diff --git a/src/serialization-input.cpp b/src/serialization-input.cpp index d8a2f86..0fc2d63 100644 --- a/src/serialization-input.cpp +++ b/src/serialization-input.cpp @@ -140,7 +140,7 @@ pk_handle pke_serialize_input_set(srlztn_serialize_helper *h, pke_input_set *inp pk_arr_append_t(&kvec.child_handles, child_handle); } - compt_a<32==sizeof(pke_input_set)>(); + compt_a<40==sizeof(pke_input_set)>(); { kve.key = SRLZTN_INPUT_SET_TITLE; len = strlen(input_set->title)+1; @@ -174,12 +174,13 @@ void pke_deserialize_input_set(srlztn_deserialize_helper *h, pke_kve_container * // TODO specific bucket set.actionCount = kvec->children.next; - set.actions = pk_new_arr<pke_input_action>(kvec->children.next, NULL); + set.bkt = pkeSettings.mem_bkt.game; + set.actions = pk_new_arr<pke_input_action>(kvec->children.next, set.bkt); for (k = 0; k < set.actionCount; ++k) { pke_deserialize_input_action(h, kvec->children[k], set.actions[k]); } - compt_a<40==sizeof(pke_input_action)>(); + compt_a<40==sizeof(pke_input_set)>(); for (i = 0; i < kvec->arr.next; ++i) { kve = &kvec->arr[i]; if (strncmp(kve->key, SRLZTN_INPUT_SET_TITLE, strlen(SRLZTN_INPUT_SET_TITLE)) == 0) { @@ -201,7 +202,7 @@ void pke_deserialize_input_set(srlztn_deserialize_helper *h, pke_kve_container * } } - pke_input_action_set_handle action_set_handle = pke_input_register_set(set); + pke_input_action_set_handle action_set_handle = pke_input_register_set(std::move(set)); if (pkeSettings.rt.activeLevel != nullptr) { pke_level_register_input_action_set(pkeSettings.rt.activeLevel, action_set_handle); } diff --git a/src/static-ui.cpp b/src/static-ui.cpp index 255d81d..836966d 100644 --- a/src/static-ui.cpp +++ b/src/static-ui.cpp @@ -99,7 +99,8 @@ void pke_ui_init() { pke_input_set ui_controls_set{}; ui_controls_set.title = "static ui"; ui_controls_set.actionCount = 3; - ui_controls_set.actions = pk_new_arr<pke_input_action>(ui_controls_set.actionCount); + ui_controls_set.bkt = pke_ui_master.bkt; + ui_controls_set.actions = pk_new_arr<pke_input_action>(ui_controls_set.actionCount, ui_controls_set.bkt); ui_controls_set.flags = PKE_INPUT_ACTION_SET_FLAG_DO_NOT_SERIALIZE; ui_controls_set.actions[0].name = ui_ux_mouse_left; @@ -118,7 +119,7 @@ void pke_ui_init() { .button = GLFW_MOUSE_BUTTON_MIDDLE, }; - pke_ui_master.input_action_set_handle = pke_input_register_set(ui_controls_set); + pke_ui_master.input_action_set_handle = pke_input_register_set(std::move(ui_controls_set)); } @@ -772,8 +773,6 @@ void pke_ui_teardown() { } pk_delete_arr<pke_ui_box *>(pke_ui_master.root_boxes, pke_ui_master.r_root_boxes, pke_ui_master.bkt); pke_ui_master.bindings_texture.~texture_binding_bkt_arr(); - pk_mem_bucket_destroy(pke_ui_master.bkt); - pke_ui_master.bkt = nullptr; pke_ui_master.root_boxes = nullptr; pke_ui_master.h_root_boxes = 0; pke_ui_master.r_root_boxes = 0; @@ -817,7 +816,11 @@ void pke_ui_teardown() { pke_ui_master.bindings.deviceMemoryVert = VK_NULL_HANDLE; pk_arr_reset(&pke_ui_master.boxes_to_delete); + pke_input_unregister_set(pke_ui_master.input_action_set_handle); + + pk_mem_bucket_destroy(pke_ui_master.bkt); + pke_ui_master.bkt = nullptr; } pke_ui_box **pke_ui_get_root_boxes(pke_ui_box_count_T *count) { |
