summaryrefslogtreecommitdiff
path: root/src/serialization-static-ui.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/serialization-static-ui.cpp')
-rw-r--r--src/serialization-static-ui.cpp135
1 files changed, 104 insertions, 31 deletions
diff --git a/src/serialization-static-ui.cpp b/src/serialization-static-ui.cpp
index 67c0c1e..b790978 100644
--- a/src/serialization-static-ui.cpp
+++ b/src/serialization-static-ui.cpp
@@ -8,7 +8,7 @@
#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) {
+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{};
pke_kve_container kvec{};
@@ -21,27 +21,12 @@ pk_handle pke_serialize_ui_box_internal(srlztn_serialize_helper *h, pke_ui_box_t
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);
- }
+ compt_a<4==sizeof(pke_ui_box_type_data::pke_ui_box_type_data_text)>();
{
- 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.key = SRLZTN_UI_BOX_DATA_TEXT_FONT_RENDER_UUID;
+ s = pk_new_arr<char>(37, h->bkt);
+ FontRender *fr = FontType_GetFontRender(data->font_render_handle);
+ sprintf(s, pk_uuid_printf_format, pk_uuid_printf_var(fr->uuid));
kve.val = s;
kve.end = SRLZTN_KVE_END;
pk_arr_append_t(&kvec.arr, kve);
@@ -56,7 +41,7 @@ pk_handle pke_serialize_ui_box_internal(srlztn_serialize_helper *h, pke_ui_box_t
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) {
+pk_handle pke_serialize_ui_box_internal(srlztn_serialize_helper *h, pke_ui_box_type_data::pke_ui_box_type_data_button_text *data) {
char *s;
pke_kve kve{};
pke_kve_container kvec{};
@@ -69,9 +54,9 @@ pk_handle pke_serialize_ui_box_internal(srlztn_serialize_helper *h, pke_ui_box_t
kvec.child_handles.bkt = h->bkt;
h->handle_head.itemIndex++;
- compt_a<4==sizeof(pke_ui_box_type_data::pke_ui_box_type_data_text)>();
+ compt_a<16==sizeof(pke_ui_box_type_data::pke_ui_box_type_data_button_text)>();
{
- kve.key = SRLZTN_UI_BOX_DATA_TEXT_FONT_RENDER_UUID;
+ kve.key = SRLZTN_UI_BOX_DATA_BUTTON_TEXT_FONT_RENDER_UUID;
s = pk_new_arr<char>(37, h->bkt);
FontRender *fr = FontType_GetFontRender(data->font_render_handle);
sprintf(s, pk_uuid_printf_format, pk_uuid_printf_var(fr->uuid));
@@ -79,6 +64,55 @@ 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-09-24 TODO JCB
+ // data->pke_event_handle;
+ // data->ev_id;
+
+ 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_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
@@ -108,6 +142,30 @@ 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_text *data) {
+ (void)h;
+ assert(kvec != nullptr);
+ assert(data != nullptr);
+ assert(kvec->arr.next == 1);
+ pk_uuid font_render_uuid = pk_uuid_zed;
+
+ // TODO
+ data->font_render_handle = FontRenderHandle_MAX;
+ data->pke_event_handle = PkeEventHandle_MAX;
+ data->ev_id = pk_ev_id_T{0};
+
+ compt_a<16==sizeof(pke_ui_box_type_data::pke_ui_box_type_data_button_text)>();
+ if (strstr(SRLZTN_UI_BOX_DATA_BUTTON_TEXT_FONT_RENDER_UUID, kvec->arr[0].key)) {
+ kvec->arr[0].val >> font_render_uuid;
+ }
+
+ assert(font_render_uuid != pk_uuid_zed);
+
+ FontRender *fr = static_cast<FontRender *>(ECS_GetEntityByUUID(font_render_uuid));
+
+ 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;
@@ -117,7 +175,7 @@ void pke_deserialize_ui_box_internal(srlztn_deserialize_helper *h, pke_kve_conta
assert(kvec->arr.next == 3);
data->gr_binds_bkt_arr_handle = pk_bkt_arr_handle_MAX;
- data->pke_event_handle = PkeEventMgrHandle_MAX;
+ data->pke_event_handle = PkeEventHandle_MAX;
data->ev_id = {};
compt_a<64==sizeof(pke_ui_box_type_data::pke_ui_box_type_data_button_image)>();
@@ -159,11 +217,21 @@ pk_handle pke_serialize_ui_box(srlztn_serialize_helper *h, pke_ui_box *box) {
kvec.child_handles.bkt = h->bkt;
- 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));
+ switch (box->type) {
+ case PKE_UI_BOX_TYPE_STANDARD:
+ break;
+ case PKE_UI_BOX_TYPE_TEXT:
+ pk_arr_append_t(&kvec.child_handles, pke_serialize_ui_box_internal(h, &box->type_data->text));
+ break;
+ case PKE_UI_BOX_TYPE_BUTTON_TEXT:
+ pk_arr_append_t(&kvec.child_handles, pke_serialize_ui_box_internal(h, &box->type_data->button_text));
+ break;
+ case PKE_UI_BOX_TYPE_BUTTON_IMAGE:
+ pk_arr_append_t(&kvec.child_handles, pke_serialize_ui_box_internal(h, &box->type_data->button_image));
+ break;
+ default:
+ fprintf(stderr, "[pke_serialize_ui_box] unhandled box type: %hhu\n", static_cast<PKE_UI_BOX_TYPE_T>(box->type));
+ return PK_HANDLE_MAX;
}
kvec.srlztn_handle = h->handle_head;
@@ -423,6 +491,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_TEXT:
case PKE_UI_BOX_TYPE_BUTTON_IMAGE:
break;
default:
@@ -471,11 +540,15 @@ 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_TEXT:
+ pke_deserialize_ui_box_internal(h, kvec->children[0], &bx.type_data->button_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;
+ fprintf(stderr, "[pke_deserialize_ui_box] unhandled box type: %hhu\n", static_cast<PKE_UI_BOX_TYPE_T>(bx.type));
+ return;
}
}