summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-10-02 10:45:09 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-10-02 10:45:09 -0400
commit3dd940cc0a9f985f7c7520f5064840cf7a25d5c9 (patch)
tree716cbe6626b8878fb1f9a0ad2e080c02b0faac04 /src
parent784aafce17590613543f7042357bb1c8def87cd4 (diff)
pke: use explicit bucket on input set
Diffstat (limited to 'src')
-rw-r--r--src/player-input.cpp6
-rw-r--r--src/player-input.hpp3
-rw-r--r--src/serialization-input.cpp9
-rw-r--r--src/static-ui.cpp11
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(&registeredInputSets, 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(&registeredInputSets, 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) {