From 05870c1f03570f9a41980d11fc73906a8d4351be Mon Sep 17 00:00:00 2001 From: Kelsi Date: Sat, 7 Feb 2026 13:56:58 -0800 Subject: [PATCH] Only face target when in combat, not when selecting friendly NPCs --- include/rendering/renderer.hpp | 2 ++ src/rendering/renderer.cpp | 5 ++--- src/ui/game_screen.cpp | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/include/rendering/renderer.hpp b/include/rendering/renderer.hpp index f2d97279..0799eccc 100644 --- a/include/rendering/renderer.hpp +++ b/include/rendering/renderer.hpp @@ -120,6 +120,7 @@ public: // Targeting support void setTargetPosition(const glm::vec3* pos); + void setInCombat(bool combat) { inCombat_ = combat; } bool isMoving() const; void triggerMeleeSwing(); void setEquippedWeaponType(uint32_t inventoryType) { equippedWeaponInvType_ = inventoryType; meleeAnimId = 0; } @@ -228,6 +229,7 @@ private: // Target facing const glm::vec3* targetPosition = nullptr; + bool inCombat_ = false; // Selection circle rendering uint32_t selCircleVAO = 0; diff --git a/src/rendering/renderer.cpp b/src/rendering/renderer.cpp index e07a54ac..6ce25d8a 100644 --- a/src/rendering/renderer.cpp +++ b/src/rendering/renderer.cpp @@ -872,12 +872,11 @@ void Renderer::update(float deltaTime) { // Movement-facing comes from camera controller and is decoupled from LMB orbit. if (cameraController->isMoving() || cameraController->isRightMouseHeld()) { characterYaw = cameraController->getFacingYaw(); - } else if (targetPosition && !emoteActive && !cameraController->isMoving()) { - // Face target when idle + } else if (inCombat_ && targetPosition && !emoteActive) { + // Face target when in combat and idle glm::vec3 toTarget = *targetPosition - characterPosition; if (glm::length(glm::vec2(toTarget.x, toTarget.y)) > 0.1f) { float targetYaw = glm::degrees(std::atan2(toTarget.y, toTarget.x)); - // Smooth rotation toward target float diff = targetYaw - characterYaw; while (diff > 180.0f) diff -= 360.0f; while (diff < -180.0f) diff += 360.0f; diff --git a/src/ui/game_screen.cpp b/src/ui/game_screen.cpp index 45a3643a..356efde0 100644 --- a/src/ui/game_screen.cpp +++ b/src/ui/game_screen.cpp @@ -167,6 +167,7 @@ void GameScreen::render(game::GameHandler& gameHandler) { // Update renderer face-target position and selection circle auto* renderer = core::Application::getInstance().getRenderer(); if (renderer) { + renderer->setInCombat(gameHandler.isAutoAttacking()); static glm::vec3 targetGLPos; if (gameHandler.hasTarget()) { auto target = gameHandler.getTarget();