diff --git a/Assets/Prefabs/Arena.prefab b/Assets/Prefabs/Arena.prefab index 62ab885..0a3af7b 100644 --- a/Assets/Prefabs/Arena.prefab +++ b/Assets/Prefabs/Arena.prefab @@ -209,7 +209,7 @@ CircleCollider2D: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 9196727423716235681} - m_Enabled: 0 + m_Enabled: 1 m_Density: 1 m_Material: {fileID: 0} m_IsTrigger: 0 diff --git a/Assets/Prefabs/Vampire.prefab b/Assets/Prefabs/Vampire.prefab index bf73629..c7032e7 100644 --- a/Assets/Prefabs/Vampire.prefab +++ b/Assets/Prefabs/Vampire.prefab @@ -239,7 +239,7 @@ Rigidbody2D: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1214567908930553593} - m_BodyType: 0 + m_BodyType: 1 m_Simulated: 1 m_UseFullKinematicContacts: 0 m_UseAutoMass: 0 diff --git a/Assets/Scripts/PlayerMovement.cs b/Assets/Scripts/PlayerMovement.cs index 4cb4d7a..3a88661 100644 --- a/Assets/Scripts/PlayerMovement.cs +++ b/Assets/Scripts/PlayerMovement.cs @@ -15,6 +15,13 @@ public class PlayerMovement : MonoBehaviour { void Awake() => rb = GetComponent(); + void Start() => currentState.EnterState(this); + + void Update() { + if (currentState.UpdateState(this) is {} newState) + SwitchState(newState); + } + void FixedUpdate() { if (currentState.FixedUpdateState(this) is {} newState) SwitchState(newState); @@ -69,6 +76,12 @@ public class PlayerMovement : MonoBehaviour { safeZone = null; } + void SetRigidbodyEnabled(bool enabled) { + rb.velocity = Vector2.zero; + rb.angularVelocity = 0f; + rb.isKinematic = !enabled; + } + class BaseState { public virtual void EnterState(PlayerMovement playerMovement) {} @@ -104,8 +117,6 @@ public class PlayerMovement : MonoBehaviour { public override void EnterState(PlayerMovement playerMovement) { startPosition = playerMovement.transform.position; startTime = Time.time; - - playerMovement.rb.velocity = Vector2.zero; } public override BaseState? FixedUpdateState(PlayerMovement playerMovement) { @@ -136,7 +147,7 @@ public class PlayerMovement : MonoBehaviour { base.EnterState(playerMovement); safeZone.EnterSafeZone(); - playerMovement.rb.velocity = Vector2.zero; + playerMovement.SetRigidbodyEnabled(false); } protected override BaseState Transition() => new ImmobileMovementState(); @@ -154,13 +165,19 @@ public class PlayerMovement : MonoBehaviour { base.EnterState(playerMovement); safeZone.ExitSafeZone(); - playerMovement.rb.velocity = Vector2.zero; + playerMovement.SetRigidbodyEnabled(true); } protected override float ModifyLerpTime(float t) => safeZone.stats.JumpSpeedCurve.Evaluate(t); } class ImmobileMovementState : BaseState { + public override void EnterState(PlayerMovement playerMovement) { + base.EnterState(playerMovement); + + if (!playerMovement.rb.isKinematic) + Debug.LogWarning("Rigidbody should probably be kinematic when immobile (when in safe zone)."); + } #if UNITY_EDITOR public override void OnDrawGizmos(PlayerMovement playerMovement) { if (playerMovement.safeZone is null) diff --git a/Assets/Scripts/SafeZone.cs b/Assets/Scripts/SafeZone.cs index 967705a..7698380 100644 --- a/Assets/Scripts/SafeZone.cs +++ b/Assets/Scripts/SafeZone.cs @@ -11,12 +11,10 @@ public class SafeZone : MonoBehaviour { } public void EnterSafeZone() { - moatCollider.enabled = false; IsInSafeZone = true; } public void ExitSafeZone() { - moatCollider.enabled = true; IsInSafeZone = false; }