From 801354c15d96343b00963183f6f08219bd375ee8 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 17 Feb 2025 22:35:35 +0300 Subject: [PATCH] fix: camera rotation not updating when menu is open --- src/logic/PlayerController.cpp | 15 +++++++++++++-- src/logic/PlayerController.hpp | 3 ++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/logic/PlayerController.cpp b/src/logic/PlayerController.cpp index e0c70f52..8da49514 100644 --- a/src/logic/PlayerController.cpp +++ b/src/logic/PlayerController.cpp @@ -49,10 +49,20 @@ CameraControl::CameraControl( offset(0.0f, 0.7f, 0.0f) { } -void CameraControl::refresh() { +void CameraControl::refreshPosition() { camera->position = player.getPosition() + offset; } +void CameraControl::refreshRotation() { + const glm::vec3& rotation = player.getRotation(); + camera->rotation = glm::mat4(1.0f); + camera->rotate( + glm::radians(rotation.y), + glm::radians(rotation.x), + glm::radians(rotation.z) + ); +} + void CameraControl::updateMouse(PlayerInput& input) { glm::vec3 rotation = player.getRotation(); @@ -177,7 +187,7 @@ void CameraControl::update( const auto& spCamera = player.spCamera; const auto& tpCamera = player.tpCamera; - refresh(); + refreshPosition(); camera->updateVectors(); if (player.currentCamera == spCamera) { @@ -274,6 +284,7 @@ void PlayerController::postUpdate(float delta, bool input, bool pause) { if (!pause && input) { camControl.updateMouse(this->input); } + camControl.refreshRotation(); player.postUpdate(); camControl.update(this->input, pause ? 0.0f : delta, *player.chunks); if (input) { diff --git a/src/logic/PlayerController.hpp b/src/logic/PlayerController.hpp index 88e3a5f4..00299e4c 100644 --- a/src/logic/PlayerController.hpp +++ b/src/logic/PlayerController.hpp @@ -42,7 +42,8 @@ public: CameraControl(Player& player, const CameraSettings& settings); void updateMouse(PlayerInput& input); void update(PlayerInput input, float delta, const Chunks& chunks); - void refresh(); + void refreshPosition(); + void refreshRotation(); }; class PlayerController {