diff --git a/Game/CourierOld/Assets/Code/Configs/CharacterConfig.cs b/Game/CourierOld/Assets/Code/Configs/CharacterConfig.cs index e600519..dac0a0d 100644 --- a/Game/CourierOld/Assets/Code/Configs/CharacterConfig.cs +++ b/Game/CourierOld/Assets/Code/Configs/CharacterConfig.cs @@ -1,5 +1,4 @@ using UnityEngine; -using UnityEngine.Serialization; namespace Code.Configs { diff --git a/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/Abilities/WallRunningMechanic.cs b/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/Abilities/WallRunningMechanic.cs index ebc55bf..fe12720 100644 --- a/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/Abilities/WallRunningMechanic.cs +++ b/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/Abilities/WallRunningMechanic.cs @@ -97,21 +97,25 @@ namespace Code.Gameplay.Character.Controller.Abilities public void HandleWallRun(ref Vector3 currentVelocity, CharacterInputs inputs, float deltaTime) { if (!_isWallRunning) return; - - if (!IsWallStillPresent()) - { - DetachFromWall(false); - return; - } + if (!IsWallStillPresent()) { DetachFromWall(false); return; } Vector3 moveInputWorld = _inputHandler.MoveInputVector; + Vector3 moveInWallPlane = Vector3.ProjectOnPlane(moveInputWorld, _wallNormal); + + Vector3 wsMove = Vector3.Project(moveInWallPlane, _wallTangentRight); - Vector3 moveInWallPlane = Vector3.ProjectOnPlane(moveInputWorld, _wallNormal).normalized; + float ad = inputs.MoveAxisRight; - float inputMagnitude = moveInputWorld.magnitude; - moveInWallPlane *= inputMagnitude; + float sideDot = Vector3.Dot(_wallNormal, _motor.CharacterRight); + if (sideDot < 0) + ad = -ad; - Vector3 targetVelocity = moveInWallPlane * WallRunSpeed; + Vector3 adMove = _wallTangentUp * (-ad); + + Vector3 finalMove = wsMove + adMove; + finalMove = finalMove.normalized * moveInputWorld.magnitude; + + Vector3 targetVelocity = finalMove * WallRunSpeed; currentVelocity = Vector3.Lerp( currentVelocity, @@ -119,8 +123,7 @@ namespace Code.Gameplay.Character.Controller.Abilities 1f - Mathf.Exp(-WallRunAcceleration * deltaTime) ); - Vector3 gravity = Physics.gravity * WallRunGravityScale; - currentVelocity += gravity * deltaTime; + currentVelocity += Physics.gravity * WallRunGravityScale * deltaTime; float distanceToWall = Vector3.Dot(_motor.TransientPosition - _wallContactPoint, _wallNormal); if (Mathf.Abs(distanceToWall) > 0.8f)