Fixed exiting safe zone before game starts
This commit is contained in:
parent
87ef184ec7
commit
bd5efcb31a
@ -3,6 +3,10 @@ using UnityEngine.InputSystem;
|
||||
|
||||
//Could be a singleton
|
||||
public class GameFlowManager : MonoBehaviour {
|
||||
/// <summary>
|
||||
/// True if time is frozen (Start, Pause Menu, Dead)
|
||||
/// </summary>
|
||||
/// <remarks>Could be renamed appropriately</remarks>
|
||||
[field: SerializeField]
|
||||
public bool Paused { get; private set; } = true;
|
||||
public BaseState CurrentState { get; private set; } = null!;
|
||||
|
||||
@ -21,10 +21,11 @@ public class PlayerMovement : MonoBehaviour {
|
||||
bool lastJumpButton;
|
||||
|
||||
#region Unity Messages
|
||||
void Awake(){
|
||||
|
||||
void Awake() {
|
||||
rb = GetComponent<Rigidbody2D>();
|
||||
currentState = new ImmobileMovementState(this);
|
||||
}
|
||||
}
|
||||
|
||||
void Start() => currentState.EnterState();
|
||||
|
||||
@ -65,7 +66,7 @@ public class PlayerMovement : MonoBehaviour {
|
||||
if (!wasJustPressed)
|
||||
return;
|
||||
|
||||
if (safeZone == null)
|
||||
if (gameFlowManager.Paused || safeZone == null)
|
||||
return;
|
||||
|
||||
if (safeZone.IsInSafeZone) {
|
||||
@ -113,16 +114,15 @@ public class PlayerMovement : MonoBehaviour {
|
||||
|
||||
abstract class BaseStatePlayerMovement : BaseState {
|
||||
protected PlayerMovement playerMovement;
|
||||
public BaseStatePlayerMovement(PlayerMovement playerMovement){
|
||||
|
||||
public BaseStatePlayerMovement(PlayerMovement playerMovement) {
|
||||
this.playerMovement = playerMovement;
|
||||
}
|
||||
}
|
||||
|
||||
class NormalMovementState : BaseStatePlayerMovement {
|
||||
public NormalMovementState(PlayerMovement playerMovement) : base(playerMovement){
|
||||
public NormalMovementState(PlayerMovement playerMovement) : base(playerMovement) {}
|
||||
|
||||
}
|
||||
|
||||
public override BaseState? FixedUpdateState() {
|
||||
playerMovement.rb.velocity = (Vector3)playerMovement.moveDirection * playerMovement.stats.movementSpeed;
|
||||
|
||||
@ -167,17 +167,18 @@ public class PlayerMovement : MonoBehaviour {
|
||||
|
||||
class EnterSafeZoneMovementState : JumpingMovementState {
|
||||
readonly SafeZone safeZone;
|
||||
|
||||
public EnterSafeZoneMovementState(PlayerMovement playerMovement, SafeZone safeZone) : base(playerMovement, safeZone.Stats.JumpDuration, safeZone.transform.position) {
|
||||
this.safeZone = safeZone;
|
||||
}
|
||||
|
||||
public override void EnterState() {
|
||||
base.EnterState();
|
||||
|
||||
|
||||
safeZone.EnterSafeZone();
|
||||
playerMovement.SetRigidbodyEnabled(false);
|
||||
}
|
||||
|
||||
|
||||
protected override BaseState Transition() => new ImmobileMovementState(playerMovement);
|
||||
|
||||
protected override float ModifyLerpTime(float t) => safeZone.Stats.JumpSpeedCurve.Evaluate(t);
|
||||
@ -185,13 +186,14 @@ public class PlayerMovement : MonoBehaviour {
|
||||
|
||||
class ExitSafeZoneMovementState : JumpingMovementState {
|
||||
readonly SafeZone safeZone;
|
||||
|
||||
public ExitSafeZoneMovementState(PlayerMovement playerMovement, SafeZone safeZone, Vector2 direction) : base(playerMovement, safeZone.Stats.JumpDuration, safeZone.GetOutsidePosition(direction)) {
|
||||
this.safeZone = safeZone;
|
||||
}
|
||||
|
||||
public override void LeaveState() {
|
||||
base.EnterState();
|
||||
|
||||
|
||||
safeZone.ExitSafeZone();
|
||||
playerMovement.SetRigidbodyEnabled(true);
|
||||
}
|
||||
@ -200,12 +202,10 @@ public class PlayerMovement : MonoBehaviour {
|
||||
}
|
||||
|
||||
class ImmobileMovementState : BaseStatePlayerMovement {
|
||||
public ImmobileMovementState(PlayerMovement playerMovement) : base(playerMovement){
|
||||
|
||||
}
|
||||
public ImmobileMovementState(PlayerMovement playerMovement) : base(playerMovement) {}
|
||||
public override void EnterState() {
|
||||
base.EnterState();
|
||||
|
||||
|
||||
if (!playerMovement.rb.isKinematic)
|
||||
Debug.LogWarning("Rigidbody should probably be kinematic when immobile (when in safe zone).");
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user