Toggle player rigidbody on safe zone instead of zone's collider
This commit is contained in:
parent
b275bcc1db
commit
0fa139faca
@ -209,7 +209,7 @@ CircleCollider2D:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 9196727423716235681}
|
m_GameObject: {fileID: 9196727423716235681}
|
||||||
m_Enabled: 0
|
m_Enabled: 1
|
||||||
m_Density: 1
|
m_Density: 1
|
||||||
m_Material: {fileID: 0}
|
m_Material: {fileID: 0}
|
||||||
m_IsTrigger: 0
|
m_IsTrigger: 0
|
||||||
|
|||||||
@ -239,7 +239,7 @@ Rigidbody2D:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 1214567908930553593}
|
m_GameObject: {fileID: 1214567908930553593}
|
||||||
m_BodyType: 0
|
m_BodyType: 1
|
||||||
m_Simulated: 1
|
m_Simulated: 1
|
||||||
m_UseFullKinematicContacts: 0
|
m_UseFullKinematicContacts: 0
|
||||||
m_UseAutoMass: 0
|
m_UseAutoMass: 0
|
||||||
|
|||||||
@ -15,6 +15,13 @@ public class PlayerMovement : MonoBehaviour {
|
|||||||
|
|
||||||
void Awake() => rb = GetComponent<Rigidbody2D>();
|
void Awake() => rb = GetComponent<Rigidbody2D>();
|
||||||
|
|
||||||
|
void Start() => currentState.EnterState(this);
|
||||||
|
|
||||||
|
void Update() {
|
||||||
|
if (currentState.UpdateState(this) is {} newState)
|
||||||
|
SwitchState(newState);
|
||||||
|
}
|
||||||
|
|
||||||
void FixedUpdate() {
|
void FixedUpdate() {
|
||||||
if (currentState.FixedUpdateState(this) is {} newState)
|
if (currentState.FixedUpdateState(this) is {} newState)
|
||||||
SwitchState(newState);
|
SwitchState(newState);
|
||||||
@ -69,6 +76,12 @@ public class PlayerMovement : MonoBehaviour {
|
|||||||
safeZone = null;
|
safeZone = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetRigidbodyEnabled(bool enabled) {
|
||||||
|
rb.velocity = Vector2.zero;
|
||||||
|
rb.angularVelocity = 0f;
|
||||||
|
rb.isKinematic = !enabled;
|
||||||
|
}
|
||||||
|
|
||||||
class BaseState {
|
class BaseState {
|
||||||
public virtual void EnterState(PlayerMovement playerMovement) {}
|
public virtual void EnterState(PlayerMovement playerMovement) {}
|
||||||
|
|
||||||
@ -104,8 +117,6 @@ public class PlayerMovement : MonoBehaviour {
|
|||||||
public override void EnterState(PlayerMovement playerMovement) {
|
public override void EnterState(PlayerMovement playerMovement) {
|
||||||
startPosition = playerMovement.transform.position;
|
startPosition = playerMovement.transform.position;
|
||||||
startTime = Time.time;
|
startTime = Time.time;
|
||||||
|
|
||||||
playerMovement.rb.velocity = Vector2.zero;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override BaseState? FixedUpdateState(PlayerMovement playerMovement) {
|
public override BaseState? FixedUpdateState(PlayerMovement playerMovement) {
|
||||||
@ -136,7 +147,7 @@ public class PlayerMovement : MonoBehaviour {
|
|||||||
base.EnterState(playerMovement);
|
base.EnterState(playerMovement);
|
||||||
|
|
||||||
safeZone.EnterSafeZone();
|
safeZone.EnterSafeZone();
|
||||||
playerMovement.rb.velocity = Vector2.zero;
|
playerMovement.SetRigidbodyEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override BaseState Transition() => new ImmobileMovementState();
|
protected override BaseState Transition() => new ImmobileMovementState();
|
||||||
@ -154,13 +165,19 @@ public class PlayerMovement : MonoBehaviour {
|
|||||||
base.EnterState(playerMovement);
|
base.EnterState(playerMovement);
|
||||||
|
|
||||||
safeZone.ExitSafeZone();
|
safeZone.ExitSafeZone();
|
||||||
playerMovement.rb.velocity = Vector2.zero;
|
playerMovement.SetRigidbodyEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override float ModifyLerpTime(float t) => safeZone.stats.JumpSpeedCurve.Evaluate(t);
|
protected override float ModifyLerpTime(float t) => safeZone.stats.JumpSpeedCurve.Evaluate(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
class ImmobileMovementState : BaseState {
|
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
|
#if UNITY_EDITOR
|
||||||
public override void OnDrawGizmos(PlayerMovement playerMovement) {
|
public override void OnDrawGizmos(PlayerMovement playerMovement) {
|
||||||
if (playerMovement.safeZone is null)
|
if (playerMovement.safeZone is null)
|
||||||
|
|||||||
@ -11,12 +11,10 @@ public class SafeZone : MonoBehaviour {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void EnterSafeZone() {
|
public void EnterSafeZone() {
|
||||||
moatCollider.enabled = false;
|
|
||||||
IsInSafeZone = true;
|
IsInSafeZone = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ExitSafeZone() {
|
public void ExitSafeZone() {
|
||||||
moatCollider.enabled = true;
|
|
||||||
IsInSafeZone = false;
|
IsInSafeZone = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user