summaryrefslogtreecommitdiff
path: root/src/serialization-camera.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-05-09 20:40:56 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-05-09 20:40:56 -0400
commitecf91229fb5c9150f2d60d97652bf0024a5c3435 (patch)
treed8fcffa8d436222c4304d9f4d538165ddd734055 /src/serialization-camera.cpp
parent9693ff2d4be85d356e07e3192baaa2262a7140ff (diff)
pke-test-serialization: add more complex tests
Diffstat (limited to 'src/serialization-camera.cpp')
-rw-r--r--src/serialization-camera.cpp78
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;
}