diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2024-05-30 21:47:05 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2024-05-30 21:47:05 -0400 |
| commit | 7c73f70312def33a74f1f90d0dbbceb84cd46eae (patch) | |
| tree | 44c8f015c5083f3937c914907db379b7aec44224 | |
| parent | 1b48d1382d2d57a822201f34743a51813798b348 (diff) | |
first-pass update camera
| -rw-r--r-- | editor/editor.cpp | 14 | ||||
| -rw-r--r-- | src/camera.cpp | 16 | ||||
| -rw-r--r-- | src/camera.hpp | 1 |
3 files changed, 31 insertions, 0 deletions
diff --git a/editor/editor.cpp b/editor/editor.cpp index e0ac795..0c6f811 100644 --- a/editor/editor.cpp +++ b/editor/editor.cpp @@ -722,6 +722,7 @@ void RecordImGuiCameras() { ImGui::TableSetupColumn("View"); ImGui::TableSetupColumn("Stale"); ImGui::TableSetupColumn("IsPrimary"); + ImGui::TableSetupColumn("Controls"); ImGui::TableHeadersRow(); int64_t cameraBucketCount = PkeCamera_GetBucketCount(); @@ -759,6 +760,18 @@ void RecordImGuiCameras() { ImGui::Text("%hhu", cam.stale); ImGui::TableSetColumnIndex(6); ImGui::Text("%i", cam.isPrimary); + ImGui::TableSetColumnIndex(7); + if (ImGui::Button("Update Position")) { + InstPos instPos{}; + instPos.mass = 1.f; + ActiveCamera->phys.inst->bt.motionState->getWorldTransform(instPos.posRot); + instPos.scale = ActiveCamera->phys.inst->bt.rigidBody->getCollisionShape()->getLocalScaling(); + ECS_UpdateInstance(cam.phys.inst, instPos, true); + } + ImGui::SameLine(); + if (ImGui::Button("Make Primary")) { + PkeCamera_SetPrimary(cam.camHandle); + } ImGui::PopID(); } ImGui::PopID(); @@ -798,6 +811,7 @@ void RecordImGuiCameras() { } ImGui::EndDisabled(); + } } diff --git a/src/camera.cpp b/src/camera.cpp index f033824..3982642 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -124,6 +124,22 @@ void PkeCamera_DetachFromInstance(CameraHandle cameraHandle, CompInstance *inst) cam.stale = PKE_CAMERA_STALE_POSROT; } +void PkeCamera_SetPrimary(CameraHandle cameraHandle) { + assert(cameraHandle != CameraHandle_MAX); + auto &primaryCam = Camera_BucketContainer.buckets[cameraHandle.bucketIndex][cameraHandle.itemIndex]; + for (PkeHandleBucketIndex_T b = 0; b <= Camera_BucketContainer.pkeHandle.bucketIndex; ++b) { + auto &bkt = Camera_BucketContainer.buckets[b]; + long itemCount = Camera_BucketContainer.pkeHandle.bucketIndex == b ? Camera_BucketContainer.pkeHandle.itemIndex : Camera_BucketContainer.limits.itemIndex; + for (PkeHandleItemIndex_T i = 0; i < itemCount; ++i) { + auto *cam = &bkt[i]; + if (cam->parentHandle != primaryCam.parentHandle) { + continue; + } + cam->isPrimary = cam->camHandle == cameraHandle; + } + } +} + void PkeCamera_Destroy(CameraHandle cameraHandle) { assert(cameraHandle != CameraHandle_MAX); auto *camPtr = &Camera_BucketContainer.buckets[cameraHandle.bucketIndex][cameraHandle.itemIndex]; diff --git a/src/camera.hpp b/src/camera.hpp index a2cce39..f4714c1 100644 --- a/src/camera.hpp +++ b/src/camera.hpp @@ -51,6 +51,7 @@ void PkeCamera_AttachToInstance(CameraHandle cameraHandle, CompInstance *inst); void PkeCamera_DetachFromInstance(CameraHandle cameraHandle, CompInstance *inst); int64_t PkeCamera_GetBucketCount(); PkeCamera *PkeCamera_GetCameras(int64_t bucketIndex, int64_t &count); +void PkeCamera_SetPrimary(CameraHandle handle); void PkeCamera_Destroy(CameraHandle handle); void PkeCamera_Teardown(); void PkeCamera_Tick(double delta); |
