diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-04-07 14:12:28 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-04-07 14:30:50 -0400 |
| commit | 7b43a9b51d9df0bc0e18102415f877772031f440 (patch) | |
| tree | bbbdc15d8972ee4ca4d4a8379ffddb0be62752e3 /src/serialization-camera.cpp | |
| parent | ff63a4b2bf9f096f8cf8c6824e826b3b4d79e747 (diff) | |
pke: save and load camera target in scenes
Diffstat (limited to 'src/serialization-camera.cpp')
| -rw-r--r-- | src/serialization-camera.cpp | 51 |
1 files changed, 19 insertions, 32 deletions
diff --git a/src/serialization-camera.cpp b/src/serialization-camera.cpp index 501be6e..0183e29 100644 --- a/src/serialization-camera.cpp +++ b/src/serialization-camera.cpp @@ -11,7 +11,6 @@ #include "vendor-glm-include.hpp" void pke_serialize_camera(srlztn_serialize_helper *h, const PkeCamera *cam) { - NULL_CHAR_ARR(handleStr, 23); PkeCamera c{}; if (cam->uuid != pk_uuid_zed && cam->uuid != pk_uuid_max) { h->o << SRLZTN_CAMERA_UUID << cam->uuid << std::endl; @@ -22,13 +21,8 @@ void pke_serialize_camera(srlztn_serialize_helper *h, const PkeCamera *cam) { if (cam->view != c.view) { h->o << SRLZTN_CAMERA_ORIENTATION << int(static_cast<PkeCameraView_T>(cam->view)) << std::endl; } - if (cam->phys.instHandle != InstanceHandle_MAX) { - snprintf(handleStr, 22, "0x%08X 0x%08X", cam->phys.instHandle.bucketIndex, cam->phys.instHandle.itemIndex); - h->o << SRLZTN_CAMERA_INSTANCE_HANDLE << handleStr << std::endl; - } - if (cam->phys.targetInstHandle != InstanceHandle_MAX) { - snprintf(handleStr, 22, "0x%08X 0x%08X", cam->phys.targetInstHandle.bucketIndex, cam->phys.targetInstHandle.itemIndex); - h->o << SRLZTN_CAMERA_TARGET_INSTANCE_UUID << handleStr << std::endl; + if (cam->phys.target_inst_uuid != pk_uuid_zed) { + h->o << SRLZTN_CAMERA_TARGET_INSTANCE_UUID << cam->phys.target_inst_uuid << std::endl; } if (cam->isPrimary != c.isPrimary) { h->o << SRLZTN_CAMERA_IS_PRIMARY << cam->isPrimary << std::endl; @@ -59,12 +53,11 @@ bool FindFirstInstanceHandle(void *handle, void *mapping) { return inst_mapping->serialized_uuid == *reinterpret_cast<pk_uuid *>(handle); } void pke_deserialize_camera(srlztn_deserialize_helper *h) { - PK_STN_RES stn_res; + PK_STN_RES stn_res = PK_STN_RES(0); PkeCamera cam{}; cam.type = PKE_CAMERA_TYPE_PERSPECTIVE; cam.view = PKE_CAMERA_VIEW_FREE; InstPos instPos; - InstanceHandle instanceHandle = InstanceHandle_MAX; pk_uuid target_uuid = pk_uuid_zed; glm::vec3 pos = glm::vec3(0); glm::quat quat_rot = glm::quat(0, 0, 0, 1); @@ -75,10 +68,12 @@ void pke_deserialize_camera(srlztn_deserialize_helper *h) { while (h->i->getline(h->read_line, h->read_line_len)) { if (strcmp(h->read_line, SRLZTN_OBJ_END) == 0) { - int64_t targetInstanceIndex = -1; - + uint32_t targetInstanceIndex = -1; if (target_uuid != pk_uuid_zed) { targetInstanceIndex = pk_arr_find_first_index(&h->mapping, &target_uuid, FindFirstInstanceHandle); + 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; @@ -93,7 +88,8 @@ void pke_deserialize_camera(srlztn_deserialize_helper *h) { rCam.view = cam.view; rCam.isPrimary = cam.isPrimary; pke_scene_register_camera(h->scene->scene_handle, rCam.camHandle); - if (targetInstanceIndex > -1) { + 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) { @@ -111,43 +107,34 @@ void pke_deserialize_camera(srlztn_deserialize_helper *h) { } if (strncmp(h->read_line, SRLZTN_CAMERA_TYPE, strlen(SRLZTN_CAMERA_TYPE)) == 0) { uint64_t prefixLen = strlen(SRLZTN_CAMERA_TYPE); - stn_res = pk_stn(&cam.type, h->read_line + prefixLen, nullptr); + PkeCameraType_T cam_type; + stn_res = pk_stn(&cam_type, h->read_line + prefixLen, nullptr); + cam.type = PkeCameraType(cam_type); if (stn_res != PK_STN_RES_SUCCESS) { - fprintf(stderr, "[%s] Err '%u' parsing camera type from: '%s'", __FILE__, stn_res, h->read_line); + fprintf(stderr, "[%s] Err '%u' parsing camera type from: '%s'\n", __FILE__, stn_res, h->read_line); } continue; } if (strncmp(h->read_line, SRLZTN_CAMERA_ORIENTATION, strlen(SRLZTN_CAMERA_ORIENTATION)) == 0) { uint64_t prefixLen = strlen(SRLZTN_CAMERA_ORIENTATION); - stn_res = pk_stn(&cam.view, h->read_line + prefixLen, nullptr); + PkeCameraView_T cam_view; + stn_res = pk_stn(&cam_view, h->read_line + prefixLen, nullptr); + cam.view = PkeCameraView(cam_view); if (stn_res != PK_STN_RES_SUCCESS) { - fprintf(stderr, "[%s] Err '%u' parsing camera view from: '%s'", __FILE__, stn_res, h->read_line); - } - continue; - } - if (strstr(h->read_line, SRLZTN_CAMERA_INSTANCE_HANDLE)) { - uint64_t prefixLen = strlen(SRLZTN_CAMERA_INSTANCE_HANDLE); - h->read_line[prefixLen + 10] = '\0'; - stn_res = pk_stn(&instanceHandle.bucketIndex, h->read_line + prefixLen, nullptr, 16); - if (stn_res != PK_STN_RES_SUCCESS) { - fprintf(stderr, "[%s] Err '%u' parsing camera instance handle from: '%s'", __FILE__, stn_res, h->read_line); - } - stn_res = pk_stn(&instanceHandle.itemIndex, h->read_line + prefixLen + 11, nullptr, 16); - if (stn_res != PK_STN_RES_SUCCESS) { - fprintf(stderr, "[%s] Err '%u' parsing camera instance handle from: '%s'", __FILE__, stn_res, h->read_line); + fprintf(stderr, "[%s] Err '%u' parsing camera view from: '%s'\n", __FILE__, stn_res, h->read_line); } continue; } if (strstr(h->read_line, SRLZTN_CAMERA_TARGET_INSTANCE_UUID)) { uint64_t prefixLen = strlen(SRLZTN_CAMERA_TARGET_INSTANCE_UUID); - (h->read_line + prefixLen) >> cam.uuid; + (h->read_line + prefixLen) >> target_uuid; continue; } if (strstr(h->read_line, SRLZTN_CAMERA_IS_PRIMARY)) { uint64_t prefixLen = strlen(SRLZTN_CAMERA_IS_PRIMARY); stn_res = pk_stn(&cam.isPrimary, h->read_line + prefixLen, nullptr); if (stn_res != PK_STN_RES_SUCCESS) { - fprintf(stderr, "[%s] Err '%u' parsing camera primary from: '%s'", __FILE__, stn_res, h->read_line); + fprintf(stderr, "[%s] Err '%u' parsing camera primary from: '%s'\n", __FILE__, stn_res, h->read_line); } continue; } |
