From 8fed9c393fdaa8b461cf0fe239ea49821f6ac36c Mon Sep 17 00:00:00 2001 From: kablouser Date: Sat, 25 Sep 2021 17:30:56 +0100 Subject: [PATCH] Fixed character movement stuck bug --- .../Assets/Scripts/Characters/Protagonist.cs | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/UOP1_Project/Assets/Scripts/Characters/Protagonist.cs b/UOP1_Project/Assets/Scripts/Characters/Protagonist.cs index c390ca7aa..2b2732232 100644 --- a/UOP1_Project/Assets/Scripts/Characters/Protagonist.cs +++ b/UOP1_Project/Assets/Scripts/Characters/Protagonist.cs @@ -11,6 +11,7 @@ public class Protagonist : MonoBehaviour private Vector2 _inputVector; private float _previousSpeed; + private double _lastHitTime = double.NegativeInfinity; //These fields are read and manipulated by the StateMachine actions [NonSerialized] public bool jumpInput; @@ -30,7 +31,29 @@ public class Protagonist : MonoBehaviour private void OnControllerColliderHit(ControllerColliderHit hit) { - lastHit = hit; + bool isHitAccepted = false; + double time = Time.timeAsDouble; + if (_lastHitTime < time) + { + // New hit is in new frame, discard our outdated hit + isHitAccepted = true; + } + else + { + // Its the same frame, let's decide which hit to keep + if (lastHit.normal.y < hit.normal.y) + { + // New hit is pointing more upwards, more likely a floor hit + // We should prioritize floor hits over wall hits + isHitAccepted = true; + } + } + + if(isHitAccepted) + { + lastHit = hit; + _lastHitTime = time; + } } //Adds listeners for events being triggered in the InputReader script