diff --git a/Assets/Scenes/PacMan.unity b/Assets/Scenes/PacMan.unity index 92a148f..79ad492 100644 --- a/Assets/Scenes/PacMan.unity +++ b/Assets/Scenes/PacMan.unity @@ -2356,7 +2356,7 @@ GameObject: m_Component: - component: {fileID: 106401850} m_Layer: 0 - m_Name: General Improvements + m_Name: Bugs m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -2376,6 +2376,9 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 339867315} + - {fileID: 211342679} + - {fileID: 1483874449} + - {fileID: 1980948889} m_Father: {fileID: 1886023632} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &107806787 @@ -5286,6 +5289,37 @@ Transform: m_CorrespondingSourceObject: {fileID: 1315692994360949719, guid: 00a825a5aeafee94789192f61cbb3a5a, type: 3} m_PrefabInstance: {fileID: 1989589316} m_PrefabAsset: {fileID: 0} +--- !u!1 &211342678 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 211342679} + m_Layer: 0 + m_Name: Return sound does not end + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &211342679 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 211342678} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 106401850} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &213614170 GameObject: m_ObjectHideFlags: 0 @@ -19776,7 +19810,13 @@ MonoBehaviour: pacStart: {fileID: 8300000, guid: 785e7b0273a31d944b0494c11d16c6e0, type: 3} pacDot1: {fileID: 8300000, guid: 849983f9f45501b4a9cceb08a54571af, type: 3} pacDot2: {fileID: 8300000, guid: fea5136a0bdc133499b59e680f5c98df, type: 3} + pacDie1: {fileID: 8300000, guid: 0392b3961b71caa4fa91c839f217d867, type: 3} + pacFruit: {fileID: 8300000, guid: 38b046b5cc294fe498cf3e0bd6682f98, type: 3} + pacCoin: {fileID: 8300000, guid: 77fe0b5680863514e8dadf65bbdae1ba, type: 3} + pacGhostEat: {fileID: 8300000, guid: b4d0f00ea7f448140b701a2cd61719f2, type: 3} pacGhost1: {fileID: 8300000, guid: e2c9d17676b91b94dbc072b2d76090d2, type: 3} + pacGhostBlue: {fileID: 8300000, guid: 614583c8ee1ca744c942497b41bb917d, type: 3} + pacGhostRetreat: {fileID: 8300000, guid: 4c9f001814f4c8145a67b384905031b0, type: 3} --- !u!1001 &725915629 PrefabInstance: m_ObjectHideFlags: 0 @@ -39750,6 +39790,37 @@ Transform: m_CorrespondingSourceObject: {fileID: 1315692994360949719, guid: 00a825a5aeafee94789192f61cbb3a5a, type: 3} m_PrefabInstance: {fileID: 654135149} m_PrefabAsset: {fileID: 0} +--- !u!1 &1483874448 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1483874449} + m_Layer: 0 + m_Name: Blinky speed stays on demo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1483874449 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483874448} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 106401850} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1485745523 stripped GameObject: m_CorrespondingSourceObject: {fileID: 4099390335584803315, guid: 00a825a5aeafee94789192f61cbb3a5a, type: 3} @@ -41046,7 +41117,7 @@ MonoBehaviour: label1UPText: {fileID: 968783086} score1UPText: {fileID: 254787490} labelHighScoreText: {fileID: 73410383} - scoreHighScoreText: {fileID: 73410383} + scoreHighScoreText: {fileID: 2048252611} debugText: {fileID: 1114020677} debugText2: {fileID: 146126538} gameOverText: {fileID: 1200105220} @@ -53088,6 +53159,37 @@ Transform: m_Children: [] m_Father: {fileID: 712073434} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1980948888 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1980948889} + m_Layer: 0 + m_Name: Death sound plays on demo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1980948889 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1980948888} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 106401850} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1981441952 stripped GameObject: m_CorrespondingSourceObject: {fileID: 4099390335584803315, guid: 00a825a5aeafee94789192f61cbb3a5a, type: 3} diff --git a/Assets/Scripts/GameController.cs b/Assets/Scripts/GameController.cs index 081eaaa..68bbed6 100644 --- a/Assets/Scripts/GameController.cs +++ b/Assets/Scripts/GameController.cs @@ -121,9 +121,7 @@ namespace Marro.PacManUdon private void StartAttractMode() { #if RECORDING_DEMO - attractScreen.Initialize(); // recorder.gameObject.SetActive(true); - gameState = PacManGameState.AttractMode; StartTimeSequence(PacManTimeSequence.AttractScreenIntroduction); #else SetGameState(PacManGameState.AttractMode); @@ -170,6 +168,7 @@ namespace Marro.PacManUdon ghostManager.Reset(); pacMan.Reset(); bonusFruit.Despawn(); + soundManager.Reset(); pelletManager.SetPowerPelletsBlink(false); } @@ -204,12 +203,14 @@ namespace Marro.PacManUdon AddScore(50); ghostManager.SetPowerPellet(true); pacMan.SetPowerPellet(true); + soundManager.StartGhostSound(true); } public void EndPowerPellet() { ghostManager.SetPowerPellet(false); pacMan.SetPowerPellet(false); + soundManager.StartGhostSound(false); } public void GotFruit() @@ -236,6 +237,11 @@ namespace Marro.PacManUdon StartTimeSequence(PacManTimeSequence.PacManCaught); } + public void NoGhostsRetreating() + { + soundManager.EndGhostRetreat(); + } + void BoardClearAnimation() { ghostManager.gameObject.SetActive(false); @@ -614,7 +620,7 @@ namespace Marro.PacManUdon case PacManTimeSequence.GhostCaught: return DeltaToAbsolute(new float[] { 0, 0.91667f }); case PacManTimeSequence.PacManCaught: - return DeltaToAbsolute(new float[] { 0, 1, 2.65f, 2f }); + return DeltaToAbsolute(new float[] { 0, 1, 0.35f, 2.40f, 2f }); case PacManTimeSequence.RestartLevel: return DeltaToAbsolute(new float[] { 0, 0.016f, 0.064f, 0.032f, 1.85f, 0.016f }); case PacManTimeSequence.GameOver: @@ -644,7 +650,10 @@ namespace Marro.PacManUdon { case 0: SetGameState(PacManGameState.AttractMode); + // Initialize + soundManager.SuppressSound(true); + RestartLevel(); HideEverything(); SetFrozen(true); attractScreen.gameObject.SetActive(true); @@ -1157,6 +1166,7 @@ namespace Marro.PacManUdon case 0: SetGameState(PacManGameState.WaitForStart); HideEverything(); + soundManager.SuppressSound(false); soundManager.PlayCoinSound(); break; case 1: @@ -1200,6 +1210,7 @@ namespace Marro.PacManUdon InitializeLevel(); RestartLevel(); SetFrozen(true); + soundManager.SuppressSound(false); soundManager.PlayGameStartSound(); break; case 1: @@ -1241,7 +1252,7 @@ namespace Marro.PacManUdon break; case 6: // Start game, end sequence - soundManager.StartGhostSound(); + soundManager.StartGhostSound(false); SetFrozen(false); break; } @@ -1317,7 +1328,7 @@ namespace Marro.PacManUdon case 4: // Unfreeze SetFrozen(false); - soundManager.StartGhostSound(); + soundManager.StartGhostSound(false); break; } } @@ -1337,6 +1348,7 @@ namespace Marro.PacManUdon SetPacManActive(true); SetFrozen(false); ghostManager.GhostCaughtContinue(); + soundManager.StartGhostRetreat(); break; } } @@ -1356,6 +1368,10 @@ namespace Marro.PacManUdon pacMan.SetDead(true); break; case 2: + // Start playing death sound + soundManager.PlayDeathSound(); + break; + case 3: // Hide pacman, start next state SetPacManActive(false); if (gameState == PacManGameState.AttractModeDemo) @@ -1370,7 +1386,7 @@ namespace Marro.PacManUdon InsertTimeSequence(PacManTimeSequence.GameOver); break; - case 3: + case 4: if (gameState == PacManGameState.AttractModeDemo) { #if RECORDING_DEMO @@ -1414,7 +1430,7 @@ namespace Marro.PacManUdon case 5: // Unfreeze SetFrozen(false); - soundManager.StartGhostSound(); + soundManager.StartGhostSound(false); break; } } diff --git a/Assets/Scripts/Ghost.cs b/Assets/Scripts/Ghost.cs index c9a6e0c..8e9b6d2 100644 --- a/Assets/Scripts/Ghost.cs +++ b/Assets/Scripts/Ghost.cs @@ -362,6 +362,7 @@ namespace Marro.PacManUdon case PacManGhostState.Entering: offGrid = true; SetState(PacManGhostState.Home); + ghostManager.GhostReturned(); if (!target.Equals(idlePosition1)) { // This is idlePosition1 if PacManGhostStartState == TargetingIdlePosition1 SetOffGridTarget(idlePosition2, false); diff --git a/Assets/Scripts/GhostManager.cs b/Assets/Scripts/GhostManager.cs index 3d5494d..7523df9 100644 --- a/Assets/Scripts/GhostManager.cs +++ b/Assets/Scripts/GhostManager.cs @@ -224,6 +224,20 @@ gameController.PacManCaught(); } + public void GhostReturned() + { + foreach (var ghost in ghosts) + { + var state = ghost.GetGhostState(); + if (state == PacManGhostState.CaughtScore || state == PacManGhostState.Returning || state == PacManGhostState.Entering) + { + return; + } + } + + gameController.NoGhostsRetreating(); + } + void SetGhostBlinking(bool blinking) { blinkingActivated = blinking; diff --git a/Assets/Scripts/SoundManager.asset b/Assets/Scripts/SoundManager.asset index e91b95a..f6d3c12 100644 --- a/Assets/Scripts/SoundManager.asset +++ b/Assets/Scripts/SoundManager.asset @@ -43,7 +43,7 @@ MonoBehaviour: Data: - Name: Entry: 12 - Data: 10 + Data: 16 - Name: Entry: 7 Data: @@ -331,13 +331,13 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: pacFruit + Data: pacDie1 - Name: $v Entry: 7 Data: 19|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: pacFruit + Data: pacDie1 - Name: k__BackingField Entry: 9 Data: 10 @@ -385,13 +385,13 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: pacCoin + Data: pacFruit - Name: $v Entry: 7 Data: 22|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: pacCoin + Data: pacFruit - Name: k__BackingField Entry: 9 Data: 10 @@ -439,13 +439,13 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: pacGhostEat + Data: pacCoin - Name: $v Entry: 7 Data: 25|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: pacGhostEat + Data: pacCoin - Name: k__BackingField Entry: 9 Data: 10 @@ -493,13 +493,13 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: pacGhost1 + Data: pacGhostEat - Name: $v Entry: 7 Data: 28|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: pacGhost1 + Data: pacGhostEat - Name: k__BackingField Entry: 9 Data: 10 @@ -547,13 +547,175 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: nextDotSound + Data: pacGhost1 - Name: $v Entry: 7 Data: 31|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: nextDotSound + Data: pacGhost1 + - Name: k__BackingField + Entry: 9 + Data: 10 + - Name: k__BackingField + Entry: 9 + Data: 10 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 32|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 33|UnityEngine.SerializeField, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: pacGhostBlue + - Name: $v + Entry: 7 + Data: 34|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: pacGhostBlue + - Name: k__BackingField + Entry: 9 + Data: 10 + - Name: k__BackingField + Entry: 9 + Data: 10 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 35|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 36|UnityEngine.SerializeField, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: pacGhostRetreat + - Name: $v + Entry: 7 + Data: 37|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: pacGhostRetreat + - Name: k__BackingField + Entry: 9 + Data: 10 + - Name: k__BackingField + Entry: 9 + Data: 10 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 38|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 39|UnityEngine.SerializeField, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _nextDotSound + - Name: $v + Entry: 7 + Data: 40|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _nextDotSound - Name: k__BackingField Entry: 9 Data: 10 @@ -574,7 +736,157 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 32|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 41|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _isRetreating + - Name: $v + Entry: 7 + Data: 42|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _isRetreating + - Name: k__BackingField + Entry: 7 + Data: 43|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Boolean, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 43 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 44|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _isBlue + - Name: $v + Entry: 7 + Data: 45|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _isBlue + - Name: k__BackingField + Entry: 9 + Data: 43 + - Name: k__BackingField + Entry: 9 + Data: 43 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 46|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _suppress + - Name: $v + Entry: 7 + Data: 47|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _suppress + - Name: k__BackingField + Entry: 9 + Data: 43 + - Name: k__BackingField + Entry: 9 + Data: 43 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 48|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 diff --git a/Assets/Scripts/SoundManager.cs b/Assets/Scripts/SoundManager.cs index 451fa17..d989912 100644 --- a/Assets/Scripts/SoundManager.cs +++ b/Assets/Scripts/SoundManager.cs @@ -12,16 +12,41 @@ public class SoundManager : UdonSharpBehaviour [SerializeField] private AudioClip pacStart; [SerializeField] private AudioClip pacDot1; [SerializeField] private AudioClip pacDot2; + [SerializeField] private AudioClip pacDie1; [SerializeField] private AudioClip pacFruit; [SerializeField] private AudioClip pacCoin; [SerializeField] private AudioClip pacGhostEat; [SerializeField] private AudioClip pacGhost1; + [SerializeField] private AudioClip pacGhostBlue; + [SerializeField] private AudioClip pacGhostRetreat; - private AudioClip nextDotSound; + private AudioClip _nextDotSound; + private bool _isRetreating; + private bool _isBlue; + + private bool _suppress; public void Initialize() { - nextDotSound = pacDot2; + Reset(); + } + + public void Reset() + { + _nextDotSound = pacDot2; + _isRetreating = false; + _isBlue = false; + _suppress = false; + } + + public void SuppressSound(bool suppress) + { + _suppress = suppress; + + if (suppress) + { + StopAllSound(); + } } public void PlayGameStartSound() @@ -31,8 +56,13 @@ public class SoundManager : UdonSharpBehaviour public void PlayPelletSound() { - PlaySound(audioSourcePlayer, nextDotSound); - nextDotSound = nextDotSound == pacDot1 ? pacDot2 : pacDot1; + PlaySound(audioSourcePlayer, _nextDotSound); + _nextDotSound = _nextDotSound == pacDot1 ? pacDot2 : pacDot1; + } + + public void PlayDeathSound() + { + PlaySound(audioSourcePlayer, pacDie1); } public void PlayFruitSound() @@ -50,9 +80,36 @@ public class SoundManager : UdonSharpBehaviour PlaySound(audioSourcePlayer, pacGhostEat); } - public void StartGhostSound() + public void StartGhostSound(bool isBlue) { - PlaySound(audioSourceGhosts, pacGhost1, true); + _isBlue = isBlue; + + if (_isRetreating) + { + // Retreating overrides other ghost sound + return; + } + + var sound = _isBlue ? pacGhostBlue : pacGhost1; + PlaySound(audioSourceGhosts, sound, true); + } + + public void StartGhostRetreat() + { + _isRetreating = true; + PlaySound(audioSourceGhosts, pacGhostRetreat, true); + } + + public void EndGhostRetreat() + { + if (!_isRetreating) + { + return; + } + + _isRetreating = false; + + StartGhostSound(_isBlue); } public void StopAllSound() @@ -63,6 +120,17 @@ public class SoundManager : UdonSharpBehaviour private void PlaySound(AudioSource audioSource, AudioClip audioClip, bool loop = false) { + if (_suppress) + { + return; + } + + if (loop && audioSource.clip == audioClip) + { + // Don't restart a looping sound + return; + } + audioSource.clip = audioClip; audioSource.Play(); audioSource.loop = loop; diff --git a/Assets/Sounds/pacdie1.wav b/Assets/Sounds/pacdie1.wav new file mode 100644 index 0000000..c281f46 Binary files /dev/null and b/Assets/Sounds/pacdie1.wav differ diff --git a/Assets/Sounds/pacdie1.wav.meta b/Assets/Sounds/pacdie1.wav.meta new file mode 100644 index 0000000..749c666 --- /dev/null +++ b/Assets/Sounds/pacdie1.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 0392b3961b71caa4fa91c839f217d867 +AudioImporter: + externalObjects: {} + serializedVersion: 7 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sounds/pacghostblue.wav b/Assets/Sounds/pacghostblue.wav new file mode 100644 index 0000000..be908ee Binary files /dev/null and b/Assets/Sounds/pacghostblue.wav differ diff --git a/Assets/Sounds/pacghostblue.wav.meta b/Assets/Sounds/pacghostblue.wav.meta new file mode 100644 index 0000000..538c785 --- /dev/null +++ b/Assets/Sounds/pacghostblue.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 614583c8ee1ca744c942497b41bb917d +AudioImporter: + externalObjects: {} + serializedVersion: 7 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sounds/pacghosteat.wav b/Assets/Sounds/pacghosteat.wav index 6f4c012..cc1644f 100644 Binary files a/Assets/Sounds/pacghosteat.wav and b/Assets/Sounds/pacghosteat.wav differ diff --git a/Assets/Sounds/pacghostretreat.wav b/Assets/Sounds/pacghostretreat.wav new file mode 100644 index 0000000..0a443fa Binary files /dev/null and b/Assets/Sounds/pacghostretreat.wav differ diff --git a/Assets/Sounds/pacghostretreat.wav.meta b/Assets/Sounds/pacghostretreat.wav.meta new file mode 100644 index 0000000..fba1bd4 --- /dev/null +++ b/Assets/Sounds/pacghostretreat.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 4c9f001814f4c8145a67b384905031b0 +AudioImporter: + externalObjects: {} + serializedVersion: 7 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: