From db47297ea40f3c2ad50fa4ec14f21856b6063c53 Mon Sep 17 00:00:00 2001 From: Asuro Date: Sat, 21 Jun 2025 00:26:37 +0200 Subject: [PATCH] less sticky movement --- src/game/Level.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/game/Level.cpp b/src/game/Level.cpp index 8dcc1b4..ee4c495 100644 --- a/src/game/Level.cpp +++ b/src/game/Level.cpp @@ -318,14 +318,37 @@ namespace Game else if (player.CameraM == CameraMode::Walk) { auto newTransform = player.PlayerCamTransform; - TranslateLocal(newTransform, {0.0f, 0.0f, inputVec.z}); - TranslateLocal(newTransform, {inputVec.x, 0.0f, 0.0f}); + // Global and local are inverted because camera + Vec3 globalInput = GlobalToLocalDirection(newTransform, {inputVec.x, 0.0f, inputVec.z}); + Translate(newTransform, globalInput); newTransform.Position.y = 3.0f; if (IsOnGround(*this, newTransform.Position)) { player.PlayerCamTransform = newTransform; } + else + { + auto newTransform = player.PlayerCamTransform; + Translate(newTransform, {globalInput.x, 0.0f, 0.0f}); + newTransform.Position.y = 3.0f; + + if (IsOnGround(*this, newTransform.Position)) + { + player.PlayerCamTransform = newTransform; + } + else + { + auto newTransform = player.PlayerCamTransform; + Translate(newTransform, {0.0f, 0.0f, globalInput.z}); + newTransform.Position.y = 3.0f; + + if (IsOnGround(*this, newTransform.Position)) + { + player.PlayerCamTransform = newTransform; + } + } + } player.WalkXRot += rotInput.x; player.WalkYRot += rotInput.y;