diff options
Diffstat (limited to 'src/serialization-static-ui.cpp')
| -rw-r--r-- | src/serialization-static-ui.cpp | 135 |
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; } } |
