diff options
Diffstat (limited to 'src/camera.cpp')
| -rw-r--r-- | src/camera.cpp | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/src/camera.cpp b/src/camera.cpp index 134e9f7..8635211 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -142,18 +142,20 @@ void PkeCamera_UntargetInstance(CameraHandle cameraHandle) { } void PkeCamera_SetPrimary(CameraHandle cameraHandle) { + bool b; + pk_iter_t<PkeCamera> iter_cam{}; assert(cameraHandle != CameraHandle_MAX); - auto check_stale = [](void *user_data, void *cam_ptr) { - CameraHandle handle = *reinterpret_cast<CameraHandle*>(user_data); - auto &cam = *reinterpret_cast<PkeCamera*>(cam_ptr); + + b = pk_bkt_arr_iter_begin(&cam_mstr.bktc_cameras, &iter_cam); + while (b == true) { // TODO 2025-05-28 JCB // There was some speculative scene filtering happening here. // I removed it because it was comparing entity parents and I don't // think that is accurate. // Instead, should be a per-viewport or per-world check? - cam.isPrimary = (cam.camHandle == handle); - }; - pk_bkt_arr_iterate(&cam_mstr.bktc_cameras, check_stale, &cameraHandle); + iter_cam->isPrimary = iter_cam->camHandle == cameraHandle; + b = pk_bkt_arr_iter_increment(&cam_mstr.bktc_cameras, &iter_cam); + } } void PkeCamera_Destroy(CameraHandle cameraHandle) { @@ -217,25 +219,22 @@ void PkeCamera_Tick(double delta) { * See the camera serializer for more. */ (void)delta; - auto check_stale = [](void *user_data, void *cam_ptr) { - (void)user_data; - auto &cam = *reinterpret_cast<PkeCamera*>(cam_ptr); - /* 2025-05-28 JCB - if you see me, delete me, i wasn't needed - if (cam.handle == EntityHandle_MAX || cam.phys.instHandle == InstanceHandle_MAX) { - return; - } - */ - CompInstance *inst = ECS_GetInstance(cam.phys.instHandle); + bool b; + pk_iter_t<PkeCamera> iter_cam{}; + b = pk_bkt_arr_iter_begin(&cam_mstr.bktc_cameras, &iter_cam); + while (b == true) { + CompInstance *inst = ECS_GetInstance(iter_cam->phys.instHandle); assert(inst != nullptr); if (inst->isNeedingUpdated == true) { - cam.stale = cam.stale | PKE_CAMERA_STALE_POSROT; + iter_cam->stale = iter_cam->stale | PKE_CAMERA_STALE_POSROT; inst->isNeedingUpdated = false; } - if (cam.phys.target_inst_uuid == pk_uuid_zed) { - return; + if (iter_cam->phys.target_inst_uuid == pk_uuid_zed) { + b = pk_bkt_arr_iter_increment(&cam_mstr.bktc_cameras, &iter_cam); + continue; } - cam.stale = cam.stale | PKE_CAMERA_STALE_POSROT; + iter_cam->stale = iter_cam->stale | PKE_CAMERA_STALE_POSROT; + b = pk_bkt_arr_iter_increment(&cam_mstr.bktc_cameras, &iter_cam); }; - pk_bkt_arr_iterate(&cam_mstr.bktc_cameras, check_stale, NULL); } |
