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