From 4680d09560f51c041307ae3e18879f71b6ae3119 Mon Sep 17 00:00:00 2001 From: MuhamadAjiW <16521119@mahasiswa.itb.ac.id> Date: Sat, 27 Apr 2024 21:33:00 +0700 Subject: [PATCH] fix: sticking to walls --- .../Core/Player/PlayerMovementController.cs | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/Assets/_Scripts/Core/Player/PlayerMovementController.cs b/Assets/_Scripts/Core/Player/PlayerMovementController.cs index 307015ed..a9f76f8b 100644 --- a/Assets/_Scripts/Core/Player/PlayerMovementController.cs +++ b/Assets/_Scripts/Core/Player/PlayerMovementController.cs @@ -60,6 +60,7 @@ public class PlayerMovementController if(movementVector != Vector3.zero) { HandleRotation(movementVector); + HandleStairs(movementVector); } if (aim) @@ -68,14 +69,26 @@ public class PlayerMovementController Vector3 vec = new(cameraForward.x, Mathf.Clamp(cameraForward.y, -CameraConfig.MAX_AIM_ANGLE+50f, CameraConfig.MAX_AIM_ANGLE+50f), cameraForward.z); player.transform.forward = vec; } + } + + public void HandleJump() + { + float snapshotSpeed = Mathf.Abs(player.Rigidbody.velocity.x * 1.1f); + player.stats.snapshotSpeed = Mathf.Abs(snapshotSpeed > player.BaseSpeed? snapshotSpeed : player.BaseSpeed); + Vector3 force = new(0, player.JumpForce, 0); + player.Rigidbody.AddForce(force, ForceMode.Impulse); + } + + public void HandleStairs(Vector3 movementVector) + { float raycastHeight = -0.07f; bool stairFront = false; while (raycastHeight < maxStairHeight) { Vector3 stairDetectorRear = player.model.Bottom + (Vector3.up * raycastHeight); - Vector3 stairDetectorFront = player.model.Bottom + (player.transform.forward * 0.2f) + (Vector3.up * raycastHeight); + Vector3 stairDetectorFront = player.model.Bottom + (movementVector * 0.25f) + (Vector3.up * raycastHeight); bool hit = Physics.Linecast(stairDetectorRear, stairDetectorFront, 1); if(hit) @@ -93,9 +106,10 @@ public class PlayerMovementController raycastHeight += 0.05f; } + // TODO: Could use some smoothing if(stairFront && raycastHeight < maxStairHeight) { - if(inputZ != 0 || inputX != 0) + Debug.Log($"Height: {raycastHeight}"); { // Stair if(raycastHeight > 0.1) @@ -108,8 +122,6 @@ public class PlayerMovementController // Slope else { - Debug.Log("Pushing"); - Debug.Log(player.model.Bottom); Vector3 force = (player.transform.forward + Vector3.up) * 0.1f; player.Rigidbody.AddForce(force, ForceMode.VelocityChange); } @@ -117,15 +129,6 @@ public class PlayerMovementController } } - public void HandleJump() - { - float snapshotSpeed = Mathf.Abs(player.Rigidbody.velocity.x * 1.1f); - player.stats.snapshotSpeed = Mathf.Abs(snapshotSpeed > player.BaseSpeed? snapshotSpeed : player.BaseSpeed); - - Vector3 force = new(0, player.JumpForce, 0); - player.Rigidbody.AddForce(force, ForceMode.Impulse); - } - public void OnAim(bool aim) { // Make the camera zoom in and zoom out based on the aim toggle @@ -147,6 +150,5 @@ public class PlayerMovementController (GameController.Instance.mainCamera.behaviour as CameraFollowObject).followingTime = CameraConfig.DEFAULT_FOLLOWING_SPEED; } } - } } -- GitLab