Simplified PacMan state
This commit is contained in:
@@ -12,29 +12,40 @@ namespace Marro.PacManUdon
|
||||
Dead,
|
||||
}
|
||||
|
||||
enum PacManState
|
||||
{
|
||||
Idle,
|
||||
Normal,
|
||||
PowerPellet,
|
||||
Dead,
|
||||
Big,
|
||||
}
|
||||
|
||||
[RequireComponent(typeof(Animator))]
|
||||
[RequireComponent(typeof(Renderer))]
|
||||
public class PacMan : GridMover
|
||||
{
|
||||
private PlayerInput input;
|
||||
private CollisionManager collisionManager;
|
||||
private Animator animator;
|
||||
private new Renderer renderer;
|
||||
|
||||
private Vector2 startPosition;
|
||||
private float defaultSpeed;
|
||||
private float powerPelletSpeed;
|
||||
|
||||
private PacManState state;
|
||||
|
||||
private float speed;
|
||||
private Vector2 startPosition;
|
||||
private Animator animator;
|
||||
new Renderer renderer;
|
||||
private bool hideUntilUnfrozen;
|
||||
private bool dead;
|
||||
private float freezeSeconds;
|
||||
private bool frozen;
|
||||
|
||||
private bool kinematic;
|
||||
|
||||
private bool followingPredefinedPath;
|
||||
private Direction[] predefinedPath;
|
||||
private int predefinedPathIndex;
|
||||
|
||||
private float freezeSeconds;
|
||||
private bool frozen;
|
||||
|
||||
private readonly int animatorKeyState = Animator.StringToHash("State");
|
||||
private readonly int animatorKeyDirection = Animator.StringToHash("Direction");
|
||||
|
||||
@@ -45,7 +56,6 @@ namespace Marro.PacManUdon
|
||||
animator = GetComponent<Animator>();
|
||||
renderer = GetComponent<Renderer>();
|
||||
frozen = false;
|
||||
hideUntilUnfrozen = false;
|
||||
startPosition = startTransform.localPosition;
|
||||
}
|
||||
|
||||
@@ -54,13 +64,13 @@ namespace Marro.PacManUdon
|
||||
SetPosition(startPosition);
|
||||
direction = Direction.Left;
|
||||
targetDirection = Direction.Left;
|
||||
speed = defaultSpeed;
|
||||
kinematic = false;
|
||||
followingPredefinedPath = false;
|
||||
|
||||
SetDead(false);
|
||||
state = PacManState.Idle;
|
||||
|
||||
SetAnimatorState((int)PacManAnimatorState.Idle);
|
||||
UpdateSpeed();
|
||||
UpdateAnimator();
|
||||
}
|
||||
|
||||
public override void SyncedUpdate()
|
||||
@@ -72,12 +82,6 @@ namespace Marro.PacManUdon
|
||||
return;
|
||||
}
|
||||
|
||||
if (hideUntilUnfrozen)
|
||||
{
|
||||
hideUntilUnfrozen = false;
|
||||
SetVisibility(true);
|
||||
}
|
||||
|
||||
float speed = this.speed;
|
||||
if (freezeSeconds > 0)
|
||||
{
|
||||
@@ -220,11 +224,19 @@ namespace Marro.PacManUdon
|
||||
if (!gameObject.activeInHierarchy)
|
||||
return;
|
||||
|
||||
if (dead)
|
||||
switch (state)
|
||||
{
|
||||
SetAnimatorState((int)PacManAnimatorState.Dead);
|
||||
animator.speed = 1;
|
||||
return;
|
||||
case PacManState.Dead:
|
||||
SetAnimatorState((int)PacManAnimatorState.Dead);
|
||||
animator.speed = 1;
|
||||
return;
|
||||
case PacManState.Idle:
|
||||
SetAnimatorState((int)PacManAnimatorState.Idle);
|
||||
return;
|
||||
case PacManState.Big:
|
||||
SetAnimatorState((int)PacManAnimatorState.Big);
|
||||
animator.speed = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
animator.speed = frozen ? 0 : 1;
|
||||
@@ -251,22 +263,22 @@ namespace Marro.PacManUdon
|
||||
private void SetAnimatorState(int value) =>
|
||||
animator.SetFloat(animatorKeyState, value);
|
||||
|
||||
public void SetDead(bool dead)
|
||||
public void Die()
|
||||
{
|
||||
this.dead = dead;
|
||||
state = PacManState.Dead;
|
||||
UpdateAnimator();
|
||||
}
|
||||
|
||||
public void SetFrozen(bool frozen)
|
||||
{
|
||||
this.frozen = frozen;
|
||||
UpdateAnimator();
|
||||
}
|
||||
|
||||
public void HideUntilUnfrozen()
|
||||
{
|
||||
hideUntilUnfrozen = true;
|
||||
SetVisibility(false);
|
||||
if (!frozen && state == PacManState.Idle)
|
||||
{
|
||||
state = PacManState.Normal;
|
||||
}
|
||||
|
||||
UpdateAnimator();
|
||||
}
|
||||
|
||||
public void SetLevel(int level)
|
||||
@@ -278,7 +290,13 @@ namespace Marro.PacManUdon
|
||||
|
||||
public void SetPowerPellet(bool powerPellet)
|
||||
{
|
||||
if (powerPellet)
|
||||
state = powerPellet ? PacManState.PowerPellet : PacManState.Normal;
|
||||
UpdateSpeed();
|
||||
}
|
||||
|
||||
private void UpdateSpeed()
|
||||
{
|
||||
if (state == PacManState.PowerPellet)
|
||||
{
|
||||
speed = powerPelletSpeed;
|
||||
}
|
||||
@@ -312,12 +330,32 @@ namespace Marro.PacManUdon
|
||||
|
||||
public void BecomeBig()
|
||||
{
|
||||
SetAnimatorState((int)PacManAnimatorState.Big);
|
||||
state = PacManState.Big;
|
||||
UpdateAnimator();
|
||||
}
|
||||
|
||||
void SetVisibility(bool visible)
|
||||
public void SetVisibility(bool visible)
|
||||
{
|
||||
renderer.enabled = visible;
|
||||
}
|
||||
|
||||
public override void CollectSyncedData(byte[] data, ref int index, NetworkEventType eventType)
|
||||
{
|
||||
data.AppendAsByte((int)state, ref index);
|
||||
data.Append(freezeSeconds, ref index);
|
||||
data.Append(frozen, ref index);
|
||||
|
||||
base.CollectSyncedData(data, ref index, eventType);
|
||||
}
|
||||
|
||||
public override bool WriteSyncedData(byte[] data, ref int index, NetworkEventType eventType)
|
||||
{
|
||||
state = (PacManState)data.ReadByte(ref index);
|
||||
freezeSeconds = data.ReadFloat(ref index);
|
||||
frozen = data.ReadBool(ref index);
|
||||
UpdateSpeed();
|
||||
|
||||
return base.WriteSyncedData(data, ref index, eventType);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user