summaryrefslogtreecommitdiff
path: root/src/window.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2024-01-18 22:37:02 -0500
committerJonathan Bradley <jcb@pikum.xyz>2024-01-18 22:37:02 -0500
commit1b48d1382d2d57a822201f34743a51813798b348 (patch)
tree612672a4be654b38f3b44580f85e4f0637952512 /src/window.cpp
parent2e680ebd77236f7b62b9ded1b083c86f9e13b1c8 (diff)
camera checkpoint - large refactor for attempting to let physics own camera position
Diffstat (limited to 'src/window.cpp')
-rw-r--r--src/window.cpp20
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)) {