diff options
Diffstat (limited to 'src/serialization-static-ui.cpp')
| -rw-r--r-- | src/serialization-static-ui.cpp | 108 |
1 files changed, 107 insertions, 1 deletions
diff --git a/src/serialization-static-ui.cpp b/src/serialization-static-ui.cpp index 9ed86a0..1fa7cfd 100644 --- a/src/serialization-static-ui.cpp +++ b/src/serialization-static-ui.cpp @@ -1,11 +1,61 @@ #include "serialization-static-ui.hpp" +#include "asset-manager.hpp" #include "compile-time-assert.hpp" #include "ecs.hpp" #include "font.hpp" #include "pk.h" +#include "serialization.hpp" #include "static-ui.hpp" +pk_handle pke_serialize_ui_box_internal(srlztn_serialize_helper *h, pke_ui_box_type_data::pke_ui_box_type_data_button_image *data) { + char *s; + pke_kve kve{}; + pke_kve_container kvec{}; + + kvec.srlztn_handle = h->handle_head; + kvec.type_code = cstring_to_pk_cstr(SRLZTN_OBJ_UI_BOX_TYPE_DATA); + kvec.bkt = h->bkt; + kvec.arr.bkt = h->bkt; + kvec.children.bkt = h->bkt; + kvec.child_handles.bkt = h->bkt; + h->handle_head.itemIndex++; + + compt_a<64==sizeof(pke_ui_box_type_data::pke_ui_box_type_data_button_image)>(); + { + kve.key = SRLZTN_UI_BOX_DATA_BUTTON_IMAGE_ASSET_KEY_DEFAULT; + s = pk_new_arr<char>(AssetKeyLength, h->bkt); + memcpy(s, data->img_key_default, AssetKeyLength); + kve.val = s; + kve.end = SRLZTN_KVE_END; + pk_arr_append_t(&kvec.arr, kve); + } + { + kve.key = SRLZTN_UI_BOX_DATA_BUTTON_IMAGE_ASSET_KEY_HOVERED; + s = pk_new_arr<char>(AssetKeyLength, h->bkt); + memcpy(s, data->img_key_hovered, AssetKeyLength); + kve.val = s; + kve.end = SRLZTN_KVE_END; + pk_arr_append_t(&kvec.arr, kve); + } + { + kve.key = SRLZTN_UI_BOX_DATA_BUTTON_IMAGE_ASSET_KEY_PRESSED; + s = pk_new_arr<char>(AssetKeyLength, h->bkt); + memcpy(s, data->img_key_pressed, AssetKeyLength); + kve.val = s; + kve.end = SRLZTN_KVE_END; + pk_arr_append_t(&kvec.arr, kve); + } + // 2025-08-19 TODO JCB + // pressed callback + + pk_arr_append_t(&h->kvp_containers, kvec); + kvec.arr.data = nullptr; + kvec.children.data = nullptr; + kvec.child_handles.data = nullptr; + return kvec.srlztn_handle; +} + pk_handle pke_serialize_ui_box_internal(srlztn_serialize_helper *h, pke_ui_box_type_data::pke_ui_box_type_data_text *data) { char *s; pke_kve kve{}; @@ -29,6 +79,8 @@ pk_handle pke_serialize_ui_box_internal(srlztn_serialize_helper *h, pke_ui_box_t kve.end = SRLZTN_KVE_END; pk_arr_append_t(&kvec.arr, kve); } + // 2025-08-19 TODO JCB + // pressed callback pk_arr_append_t(&h->kvp_containers, kvec); kvec.arr.data = nullptr; @@ -56,6 +108,49 @@ void pke_deserialize_ui_box_internal(srlztn_deserialize_helper *h, pke_kve_conta data->font_render_handle = fr->fr_handle; } +void pke_deserialize_ui_box_internal(srlztn_deserialize_helper *h, pke_kve_container *kvec, pke_ui_box_type_data::pke_ui_box_type_data_button_image *data) { + (void)h; + uint32_t u; + pke_kve *kve; + assert(kvec != nullptr); + assert(data != nullptr); + assert(kvec->arr.next == 3); + + data->gr_binds_bkt_arr_handle = pk_bkt_arr_handle_MAX; + data->pke_event_handle = PkeEventMgrHandle_MAX; + data->ev_id = {}; + + compt_a<64==sizeof(pke_ui_box_type_data::pke_ui_box_type_data_button_image)>(); + for (u = 0; u < kvec->arr.next; ++u) { + kve = &kvec->arr[u]; + if (strstr(SRLZTN_UI_BOX_DATA_BUTTON_IMAGE_ASSET_KEY_DEFAULT, kve->key)) { + // TODO there's gotta be a more elegant solution to this + if (strlen(kve->val) < AssetKeyLength) { + sprintf(data->img_key_default, "%s", kve->val); + } else { + memcpy(data->img_key_default, kve->val, AssetKeyLength); + } + continue; + } + if (strstr(SRLZTN_UI_BOX_DATA_BUTTON_IMAGE_ASSET_KEY_HOVERED, kve->key)) { + if (strlen(kve->val) < AssetKeyLength) { + sprintf(data->img_key_hovered, "%s", kve->val); + } else { + memcpy(data->img_key_hovered, kve->val, AssetKeyLength); + } + continue; + } + if (strstr(SRLZTN_UI_BOX_DATA_BUTTON_IMAGE_ASSET_KEY_PRESSED, kve->key)) { + if (strlen(kve->val) < AssetKeyLength) { + sprintf(data->img_key_pressed, "%s", kve->val); + } else { + memcpy(data->img_key_pressed, kve->val, AssetKeyLength); + } + continue; + } + } +} + pk_handle pke_serialize_ui_box(srlztn_serialize_helper *h, pke_ui_box *box) { char *s; int len; @@ -67,6 +162,9 @@ pk_handle pke_serialize_ui_box(srlztn_serialize_helper *h, pke_ui_box *box) { if (box->type == PKE_UI_BOX_TYPE_TEXT) { pk_arr_append_t(&kvec.child_handles, pke_serialize_ui_box_internal(h, &box->type_data->text)); } + if (box->type == PKE_UI_BOX_TYPE_BUTTON_IMAGE) { + pk_arr_append_t(&kvec.child_handles, pke_serialize_ui_box_internal(h, &box->type_data->button_image)); + } kvec.srlztn_handle = h->handle_head; kvec.type_code = cstring_to_pk_cstr(SRLZTN_OBJ_UI_BOX); @@ -325,6 +423,7 @@ void pke_deserialize_ui_box(srlztn_deserialize_helper *h, pke_kve_container *kve case PKE_UI_BOX_TYPE_STANDARD: case PKE_UI_BOX_TYPE_TEXT: case PKE_UI_BOX_TYPE_INPUT_TEXT: + case PKE_UI_BOX_TYPE_BUTTON_IMAGE: break; default: fprintf(stderr, "[pke_deserialize_ui_box] Parsed unknown ui box data type from: '%s'\n", kve->val); @@ -372,6 +471,9 @@ void pke_deserialize_ui_box(srlztn_deserialize_helper *h, pke_kve_container *kve case PKE_UI_BOX_TYPE_TEXT: pke_deserialize_ui_box_internal(h, kvec->children[0], &bx.type_data->text); break; + case PKE_UI_BOX_TYPE_BUTTON_IMAGE: + pke_deserialize_ui_box_internal(h, kvec->children[0], &bx.type_data->button_image); + break; default: break; } @@ -394,11 +496,15 @@ void pke_deserialize_ui_box(srlztn_deserialize_helper *h, pke_kve_container *kve // TODO consider type-specific clone functions if (box->type_data != nullptr && bx.type_data != nullptr) { - *box->type_data = *box->type_data; + *box->type_data = *bx.type_data; pk_delete<pke_ui_box_type_data>(bx.type_data); bx.type_data = nullptr; } + if (box->type == PKE_UI_BOX_TYPE_BUTTON_IMAGE) { + pke_ui_box_update_textures(box); + } + srlztn_ecs_mapping map{}; map.serialized_uuid = bx.uuid; map.created_entity = box; |
