diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2024-01-18 22:37:02 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2024-01-18 22:37:02 -0500 |
| commit | 1b48d1382d2d57a822201f34743a51813798b348 (patch) | |
| tree | 612672a4be654b38f3b44580f85e4f0637952512 /src/window.cpp | |
| parent | 2e680ebd77236f7b62b9ded1b083c86f9e13b1c8 (diff) | |
camera checkpoint - large refactor for attempting to let physics own camera position
Diffstat (limited to 'src/window.cpp')
| -rw-r--r-- | src/window.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/window.cpp b/src/window.cpp index 1d27664..db817e6 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1,3 +1,4 @@ +#include "math-helpers.hpp" #include "static/missing-texture.hpp" #define GLFW_INCLUDE_NONE #define GLFW_INCLUDE_VULKAN @@ -907,14 +908,27 @@ void UpdatePresentDescriptorSets() { } void UpdateCamera() { + if (ActiveCamera->stale == PkeCameraStaleFlags{0}) return; + glm::vec3 gPos; + glm::quat gRot; + btTransform trfm; + ActiveCamera->phys.inst->bt.motionState->getWorldTransform(trfm); + BulletToGlm(trfm.getOrigin(), gPos); + BulletToGlm(trfm.getRotation(), gRot); if (bool(ActiveCamera->stale & PKE_CAMERA_STALE_POS)) { - UBO.model = glm::translate(glm::mat4(1.f), ActiveCamera->pos); + UBO.model = glm::translate(glm::mat4(1.f), gPos); } if (bool(ActiveCamera->stale & PKE_CAMERA_STALE_ROT)) { if (bool(ActiveCamera->view == PKE_CAMERA_VIEW_FREE)) { - UBO.view = glm::mat4_cast(ActiveCamera->rot); + UBO.view = glm::mat4_cast(gRot); } else if (bool(ActiveCamera->view == PKE_CAMERA_VIEW_TARGET)) { - UBO.view = glm::lookAt(glm::vec3(0), ActiveCamera->pos - ActiveCamera->target, glm::vec3(0.f, 1.f, 0.f)); + glm::vec3 gTargetPos{0.f, 0.f, 0.f}; + if (ActiveCamera->phys.targetInst != nullptr && ActiveCamera->phys.targetInst != CAFE_BABE(CompInstance)) { + btTransform targetTrfm; + ActiveCamera->phys.targetInst->bt.motionState->getWorldTransform(targetTrfm); + BulletToGlm(trfm.getOrigin(), gTargetPos); + } + UBO.view = glm::lookAt(glm::vec3(0), gPos - gTargetPos, glm::vec3(0.f, 1.f, 0.f)); } } if (bool(ActiveCamera->stale & PKE_CAMERA_STALE_PERSPECTIVE)) { |
