diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-09 20:40:56 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-09 20:40:56 -0400 |
| commit | ecf91229fb5c9150f2d60d97652bf0024a5c3435 (patch) | |
| tree | d8fcffa8d436222c4304d9f4d538165ddd734055 /src/serialization-camera.cpp | |
| parent | 9693ff2d4be85d356e07e3192baaa2262a7140ff (diff) | |
pke-test-serialization: add more complex tests
Diffstat (limited to 'src/serialization-camera.cpp')
| -rw-r--r-- | src/serialization-camera.cpp | 78 |
1 files changed, 41 insertions, 37 deletions
diff --git a/src/serialization-camera.cpp b/src/serialization-camera.cpp index 963853e..d6563b7 100644 --- a/src/serialization-camera.cpp +++ b/src/serialization-camera.cpp @@ -26,6 +26,15 @@ pk_handle pke_serialize_camera(srlztn_serialize_helper *h, const PkeCamera *cam) glm::quat quat_rot; glm::vec3 glm_scale; + kvec.type_code = cstring_to_pk_cstr(SRLZTN_OBJ_CAMERA); + kvec.bkt = h->bkt; + kvec.arr.bkt = h->bkt; + kvec.children.bkt = h->bkt; + kvec.child_handles.bkt = h->bkt; + pk_arr_reset(&kvec.arr); + pk_arr_reset(&kvec.children); + pk_arr_reset(&kvec.child_handles); + if (PK_HAS_FLAG(cam->entity_flags, ENTITY_FLAG_DO_NOT_SERIALIZE)) { return PK_HANDLE_MAX; } @@ -44,13 +53,8 @@ pk_handle pke_serialize_camera(srlztn_serialize_helper *h, const PkeCamera *cam) inst_pos_handle = pke_serialize_inst_pos(h, glm_pos, quat_rot, glm_scale); kvec.srlztn_handle = h->handle_head; - kvec.type_code = cstring_to_pk_cstr(SRLZTN_OBJ_CAMERA); - kvec.bkt = h->bkt; - kvec.arr.bkt = h->bkt; - kvec.children.bkt = h->bkt; - kvec.child_handles.bkt = h->bkt; h->handle_head.itemIndex++; - pk_arr_append_t(&kvec.child_handles, inst_pos_handle); + pk_arr_append_t<pk_handle>(&kvec.child_handles, inst_pos_handle); if (cam->uuid != pk_uuid_zed && cam->uuid != pk_uuid_max) { kve.key = SRLZTN_CAMERA_UUID; @@ -94,6 +98,9 @@ pk_handle pke_serialize_camera(srlztn_serialize_helper *h, const PkeCamera *cam) } 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; } @@ -120,37 +127,6 @@ void pke_deserialize_camera(srlztn_deserialize_helper *h, pke_kve_container *kve } for (i = 0; i < kvec->arr.next; ++i) { - if (strcmp(kvec->arr[i].key, SRLZTN_OBJ_END) == 0) { - - uint32_t targetInstanceIndex = -1; - if (target_uuid != pk_uuid_zed) { - targetInstanceIndex = pk_arr_find_first_index(&h->mapping, &target_uuid, srlztn_mapping_find_first_handle_by_uuid); - if (targetInstanceIndex == uint32_t(-1)) { - fprintf(stderr, "[pke_deserialize_camera] Camera has target instance uuid '" pk_uuid_printf_format "', but failed to find target instance.", pk_uuid_printf_var(target_uuid)); - } - } - - btVector3 bt_pos; - btQuaternion bt_rot; - GlmToBullet(pos, bt_pos); - GlmToBullet(scale, instPos.scale); - GlmToBullet(quat_rot, bt_rot); - instPos.posRot.setOrigin(bt_pos); - instPos.posRot.setRotation(bt_rot); - auto &rCam = PkeCamera_Register(cam.uuid, instPos); - rCam.type = cam.type; - rCam.view = cam.view; - rCam.isPrimary = cam.isPrimary; - pke_scene_register_camera(h->scene->scene_handle, rCam.camHandle); - if (targetInstanceIndex != uint32_t(-1)) { - rCam.phys.target_inst_handle = h->mapping[targetInstanceIndex].created_instance->instanceHandle; - PkeCamera_TargetInstance(rCam.camHandle, h->mapping[targetInstanceIndex].created_instance); - } - if (rCam.isPrimary == true) { - ActiveCamera = &rCam; - } - return; - } if (strncmp(kvec->arr[i].key, SRLZTN_CAMERA_UUID, strlen(SRLZTN_CAMERA_TYPE)) == 0) { kvec->arr[i].val >> cam.uuid; continue; @@ -185,5 +161,33 @@ void pke_deserialize_camera(srlztn_deserialize_helper *h, pke_kve_container *kve continue; } } + + uint32_t targetInstanceIndex = -1; + if (target_uuid != pk_uuid_zed) { + targetInstanceIndex = pk_arr_find_first_index(&h->mapping, &target_uuid, srlztn_mapping_find_first_handle_by_uuid); + if (targetInstanceIndex == uint32_t(-1)) { + fprintf(stderr, "[pke_deserialize_camera] Camera has target instance uuid '" pk_uuid_printf_format "', but failed to find target instance.", pk_uuid_printf_var(target_uuid)); + } + } + + btVector3 bt_pos; + btQuaternion bt_rot; + GlmToBullet(pos, bt_pos); + GlmToBullet(scale, instPos.scale); + GlmToBullet(quat_rot, bt_rot); + instPos.posRot.setOrigin(bt_pos); + instPos.posRot.setRotation(bt_rot); + auto &rCam = PkeCamera_Register(cam.uuid, instPos); + rCam.type = cam.type; + rCam.view = cam.view; + rCam.isPrimary = cam.isPrimary; + pke_scene_register_camera(h->scene->scene_handle, rCam.camHandle); + if (targetInstanceIndex != uint32_t(-1)) { + rCam.phys.target_inst_handle = h->mapping[targetInstanceIndex].created_instance->instanceHandle; + PkeCamera_TargetInstance(rCam.camHandle, h->mapping[targetInstanceIndex].created_instance); + } + if (rCam.isPrimary == true) { + ActiveCamera = &rCam; + } return; } |
