From 99556b81b145a3aea873bc036664852456ccbdcb Mon Sep 17 00:00:00 2001 From: Marro64 Date: Mon, 22 Jun 2026 14:52:53 +0200 Subject: [PATCH] Simplified PacMan state --- Assets/Scripts/GameManager.cs | 1 - Assets/Scripts/PacMan.cs | 104 ++++++++++++++++------- Assets/Scripts/PlayerInput.asset | 56 ++++++------ Assets/Scripts/Sequences/PacManCaught.cs | 2 +- 4 files changed, 103 insertions(+), 60 deletions(-) diff --git a/Assets/Scripts/GameManager.cs b/Assets/Scripts/GameManager.cs index b0250e6..79e395d 100644 --- a/Assets/Scripts/GameManager.cs +++ b/Assets/Scripts/GameManager.cs @@ -227,7 +227,6 @@ namespace Marro.PacManUdon AddScore(scoreBonus); StartTimeSequence(PacManTimeSequence.GhostCaught); - pacMan.HideUntilUnfrozen(); } public void PacManCaught() diff --git a/Assets/Scripts/PacMan.cs b/Assets/Scripts/PacMan.cs index de5d381..0a0c706 100644 --- a/Assets/Scripts/PacMan.cs +++ b/Assets/Scripts/PacMan.cs @@ -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(); renderer = GetComponent(); 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); + } } } \ No newline at end of file diff --git a/Assets/Scripts/PlayerInput.asset b/Assets/Scripts/PlayerInput.asset index a727c3e..5da6c98 100644 --- a/Assets/Scripts/PlayerInput.asset +++ b/Assets/Scripts/PlayerInput.asset @@ -279,11 +279,17 @@ MonoBehaviour: Entry: 1 Data: inputMethod - Name: k__BackingField - Entry: 6 + Entry: 7 + Data: 16|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: Marro.PacManUdon.InputMethod, Assembly-CSharp + - Name: + Entry: 8 Data: - Name: k__BackingField Entry: 7 - Data: 16|System.RuntimeType, mscorlib + Data: 17|System.RuntimeType, mscorlib - Name: Entry: 1 Data: System.Int32, mscorlib @@ -304,7 +310,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 17|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 18|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -328,13 +334,13 @@ MonoBehaviour: Data: resultInput - Name: $v Entry: 7 - Data: 18|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 19|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: resultInput - Name: k__BackingField Entry: 7 - Data: 19|System.RuntimeType, mscorlib + Data: 20|System.RuntimeType, mscorlib - Name: Entry: 1 Data: Marro.PacManUdon.Direction, Assembly-CSharp @@ -343,7 +349,7 @@ MonoBehaviour: Data: - Name: k__BackingField Entry: 9 - Data: 16 + Data: 17 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -358,7 +364,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 20|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 21|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -382,16 +388,16 @@ MonoBehaviour: Data: inputHorizontal - Name: $v Entry: 7 - Data: 21|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 22|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: inputHorizontal - Name: k__BackingField Entry: 9 - Data: 19 + Data: 20 - Name: k__BackingField Entry: 9 - Data: 16 + Data: 17 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -406,7 +412,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 22|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 23|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -430,16 +436,16 @@ MonoBehaviour: Data: inputVertical - Name: $v Entry: 7 - Data: 23|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 24|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: inputVertical - Name: k__BackingField Entry: 9 - Data: 19 + Data: 20 - Name: k__BackingField Entry: 9 - Data: 16 + Data: 17 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -454,7 +460,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 24|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 25|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -478,13 +484,13 @@ MonoBehaviour: Data: horizontalValue - Name: $v Entry: 7 - Data: 25|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 26|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: horizontalValue - Name: k__BackingField Entry: 7 - Data: 26|System.RuntimeType, mscorlib + Data: 27|System.RuntimeType, mscorlib - Name: Entry: 1 Data: System.Single, mscorlib @@ -493,7 +499,7 @@ MonoBehaviour: Data: - Name: k__BackingField Entry: 9 - Data: 26 + Data: 27 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -508,7 +514,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 27|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 28|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -532,16 +538,16 @@ MonoBehaviour: Data: verticalValue - Name: $v Entry: 7 - Data: 28|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 29|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: verticalValue - Name: k__BackingField Entry: 9 - Data: 26 + Data: 27 - Name: k__BackingField Entry: 9 - Data: 26 + Data: 27 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -556,7 +562,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 29|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 30|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -580,7 +586,7 @@ MonoBehaviour: Data: horizontalPriority - Name: $v Entry: 7 - Data: 30|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 31|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: horizontalPriority @@ -604,7 +610,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 31|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 32|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 diff --git a/Assets/Scripts/Sequences/PacManCaught.cs b/Assets/Scripts/Sequences/PacManCaught.cs index 2477201..d11cf2d 100644 --- a/Assets/Scripts/Sequences/PacManCaught.cs +++ b/Assets/Scripts/Sequences/PacManCaught.cs @@ -14,7 +14,7 @@ namespace Marro.PacManUdon case 1: // Hide ghosts, start pacman death animation SetGhostsActive(false); - pacMan.SetDead(true); + pacMan.Die(); break; case 2: // Start playing death sound