Compare commits

...

2 Commits

Author SHA1 Message Date
a251763158 Fixed stuff 2025-12-24 21:09:26 +01:00
8e9936274f Separated time sequence finish 2025-12-24 19:09:49 +01:00
19 changed files with 275 additions and 114 deletions

View File

@@ -134,14 +134,14 @@ namespace Marro.PacManUdon
private void StartAttractMode() private void StartAttractMode()
{ {
#if RECORDING_DEMO // #if RECORDING_DEMO
// recorder.gameObject.SetActive(true); // recorder.gameObject.SetActive(true);
StartTimeSequence(PacManTimeSequence.AttractScreenIntroduction); StartTimeSequence(PacManTimeSequence.AttractScreenIntroduction);
#else // #else
SetGameState(PacManGameState.AttractMode); // SetGameState(PacManGameState.AttractMode);
HideEverything(); // HideEverything();
demo.gameObject.SetActive(true); // demo.gameObject.SetActive(true);
#endif // #endif
} }
private void InitializeNewGame() private void InitializeNewGame()
@@ -499,6 +499,7 @@ namespace Marro.PacManUdon
// I'm not redoing this unless I get instantiatable classes before I wrap up this project. // I'm not redoing this unless I get instantiatable classes before I wrap up this project.
bool currentlyInTimeSequence; bool currentlyInTimeSequence;
bool waitingForTimeSequenceFinish;
PacManTimeSequence currentTimeSequence; PacManTimeSequence currentTimeSequence;
bool hasTimeSequenceQueued; bool hasTimeSequenceQueued;
private DataList timeSequenceQueue; private DataList timeSequenceQueue;
@@ -589,11 +590,28 @@ namespace Marro.PacManUdon
if (timeSequenceProgress >= timeSequenceKeyframeTimes.Length) if (timeSequenceProgress >= timeSequenceKeyframeTimes.Length)
{ {
currentlyInTimeSequence = false; currentlyInTimeSequence = false;
TimeSequencePrepareForFinish();
break; break;
} }
} }
} }
private void TimeSequencePrepareForFinish()
{
if (Networking.IsOwner(gameObject))
{
TimeSequenceExecuteFinalize();
if (!hasTimeSequenceQueued)
{
TimeSequenceExecuteFinished();
}
}
else
{
waitingForTimeSequenceFinish = true;
}
}
private void TimeSequenceExecuteStep(int sequenceProgress) private void TimeSequenceExecuteStep(int sequenceProgress)
{ {
// Debug.Log($"{gameObject} Triggered time sequence step for sequence {currentTimeSequence} with progress {sequenceProgress}"); // Debug.Log($"{gameObject} Triggered time sequence step for sequence {currentTimeSequence} with progress {sequenceProgress}");
@@ -611,9 +629,6 @@ namespace Marro.PacManUdon
case PacManTimeSequence.WaitForStart: case PacManTimeSequence.WaitForStart:
TimeSequenceStepWaitForStart(sequenceProgress); TimeSequenceStepWaitForStart(sequenceProgress);
break; break;
case PacManTimeSequence.WaitForStartTimeout:
TimeSequenceStepWaitForStartTimeout(sequenceProgress);
break;
case PacManTimeSequence.StartNewGame: case PacManTimeSequence.StartNewGame:
TimeSequenceStepStartNewGame(sequenceProgress); TimeSequenceStepStartNewGame(sequenceProgress);
break; break;
@@ -644,6 +659,102 @@ namespace Marro.PacManUdon
case PacManTimeSequence.Intermission3: case PacManTimeSequence.Intermission3:
TimeSequenceStepIntermission3(sequenceProgress); TimeSequenceStepIntermission3(sequenceProgress);
break; break;
case PacManTimeSequence.AttractScreenWaitToRestart:
case PacManTimeSequence.WaitForStartTimeout:
// These don't have steps
break;
}
}
private void TimeSequenceExecuteFinalize()
{
// Debug.Log($"{gameObject} Triggered time sequence step for sequence {currentTimeSequence} with progress {sequenceProgress}");
switch (currentTimeSequence)
{
default:
Debug.LogError($"{gameObject} No time sequence finalize known for sequence {currentTimeSequence}");
break;
case PacManTimeSequence.AttractScreenIntroduction:
TimeSequenceFinalizeAttractScreenIntroduction();
break;
case PacManTimeSequence.WaitForStart:
TimeSequenceFinalizeWaitForStart();
break;
case PacManTimeSequence.WaitForStartTimeout:
TimeSequenceFinalizeWaitForStart();
break;
case PacManTimeSequence.StartNewGame:
TimeSequenceFinalizeStartNewGame();
break;
case PacManTimeSequence.StartNewLevel:
TimeSequenceFinalizeStartNewLevel();
break;
case PacManTimeSequence.GhostCaught:
TimeSequenceFinalizeGhostCaught();
break;
case PacManTimeSequence.RestartLevel:
TimeSequenceFinalizeRestartLevel();
break;
case PacManTimeSequence.Intermission2:
TimeSequenceFinalizeIntermission2();
break;
case PacManTimeSequence.Intermission3:
TimeSequenceFinalizeIntermission3();
break;
case PacManTimeSequence.AttractScreenDemo:
case PacManTimeSequence.AttractScreenWaitToRestart:
case PacManTimeSequence.GameOver:
case PacManTimeSequence.Intermission1:
case PacManTimeSequence.PacManCaught:
case PacManTimeSequence.BoardClear:
// These don't have a finalize
break;
}
}
private void TimeSequenceExecuteFinished()
{
// Debug.Log($"{gameObject} Triggered time sequence step for sequence {currentTimeSequence} with progress {sequenceProgress}");
switch (currentTimeSequence)
{
default:
Debug.LogError($"{gameObject} No time sequence finish known for sequence {currentTimeSequence}");
break;
case PacManTimeSequence.AttractScreenIntroduction:
TimeSequenceFinishedAttractScreenIntroduction();
break;
case PacManTimeSequence.AttractScreenDemo:
TimeSequenceFinishedAttractScreenDemo();
break;
case PacManTimeSequence.AttractScreenWaitToRestart:
TimeSequenceFinishedAttractScreenWaitToRestart();
break;
case PacManTimeSequence.BoardClear:
TimeSequenceFinishedBoardClear();
break;
case PacManTimeSequence.PacManCaught:
TimeSequenceFinishedPacManCaught();
break;
case PacManTimeSequence.GameOver:
TimeSequenceFinishedGameOver();
break;
case PacManTimeSequence.Intermission1:
TimeSequenceFinishedIntermission1();
break;
case PacManTimeSequence.Intermission2:
TimeSequenceFinishedIntermission2();
break;
case PacManTimeSequence.Intermission3:
TimeSequenceFinishedIntermission3();
break;
case PacManTimeSequence.RestartLevel:
case PacManTimeSequence.StartNewLevel:
case PacManTimeSequence.GhostCaught:
case PacManTimeSequence.WaitForStart:
case PacManTimeSequence.WaitForStartTimeout:
case PacManTimeSequence.StartNewGame:
// These don't have a finished
break;
} }
} }
@@ -659,10 +770,10 @@ namespace Marro.PacManUdon
5f, 0.2f, 2f, 0.91667f, 2f, 0.91667f, 2f, 0.91667f, 2f, 0.91667f }); 5f, 0.2f, 2f, 0.91667f, 2f, 0.91667f, 2f, 0.91667f, 2f, 0.91667f });
case PacManTimeSequence.AttractScreenDemo: case PacManTimeSequence.AttractScreenDemo:
return DeltaToAbsolute(new float[] { 0, 0.016f, 0.05f, 0.16f, 0.33f, 1.85f, 54f }); return DeltaToAbsolute(new float[] { 0, 0.016f, 0.05f, 0.16f, 0.33f, 1.85f, 54f });
case PacManTimeSequence.AttractScreenWaitToRestart:
return DeltaToAbsolute(new float[] { 0, 2f });
case PacManTimeSequence.WaitForStart: case PacManTimeSequence.WaitForStart:
return DeltaToAbsolute(new float[] { 0, 0.016f }); return DeltaToAbsolute(new float[] { 0, 0.016f });
case PacManTimeSequence.WaitForStartTimeout:
return DeltaToAbsolute(new float[] { 0, 5f });
case PacManTimeSequence.StartNewGame: case PacManTimeSequence.StartNewGame:
return DeltaToAbsolute(new float[] { 0, 0.016f, 2.2f, 0.032f, 0.032f, 1.92f, 0.032f }); return DeltaToAbsolute(new float[] { 0, 0.016f, 2.2f, 0.032f, 0.032f, 1.92f, 0.032f });
case PacManTimeSequence.BoardClear: case PacManTimeSequence.BoardClear:
@@ -672,7 +783,7 @@ namespace Marro.PacManUdon
case PacManTimeSequence.GhostCaught: case PacManTimeSequence.GhostCaught:
return DeltaToAbsolute(new float[] { 0, 0.91667f }); return DeltaToAbsolute(new float[] { 0, 0.91667f });
case PacManTimeSequence.PacManCaught: case PacManTimeSequence.PacManCaught:
return DeltaToAbsolute(new float[] { 0, 1, 0.35f, 2.40f, 2f }); return DeltaToAbsolute(new float[] { 0, 1, 0.35f, 2.40f });
case PacManTimeSequence.RestartLevel: case PacManTimeSequence.RestartLevel:
return DeltaToAbsolute(new float[] { 0, 0.016f, 0.064f, 0.032f, 1.85f, 0.016f }); return DeltaToAbsolute(new float[] { 0, 0.016f, 0.064f, 0.032f, 1.85f, 0.016f });
case PacManTimeSequence.GameOver: case PacManTimeSequence.GameOver:

View File

@@ -34,6 +34,7 @@ namespace Marro.PacManUdon
{ {
AttractScreenIntroduction, AttractScreenIntroduction,
AttractScreenDemo, AttractScreenDemo,
AttractScreenWaitToRestart,
WaitForStart, WaitForStart,
WaitForStartTimeout, WaitForStartTimeout,
StartNewGame, StartNewGame,

View File

@@ -338,13 +338,14 @@ namespace Marro.PacManUdon
// Unfreeze // Unfreeze
SetFrozen(false); SetFrozen(false);
break; break;
// case 6: case 6:
// if (!hasTimeSequenceQueued) break;
// {
// StartTimeSequence(PacManTimeSequence.AttractScreenWaitForStart);
// }
// break;
} }
} }
private void TimeSequenceFinishedAttractScreenDemo()
{
StartTimeSequence(PacManTimeSequence.AttractScreenWaitToRestart);
}
} }
} }

View File

@@ -165,15 +165,18 @@ namespace Marro.PacManUdon
case 26: case 26:
ghostManager.Ghosts[3].ReturnHome(); ghostManager.Ghosts[3].ReturnHome();
ghostManager.Ghosts[3].SetActive(false); ghostManager.Ghosts[3].SetActive(false);
// Hide elements, start demo
attractScreen.gameObject.SetActive(false);
if (!hasTimeSequenceQueued)
{
StartTimeSequence(PacManTimeSequence.AttractScreenDemo);
}
break; break;
} }
} }
private void TimeSequenceFinalizeAttractScreenIntroduction()
{
attractScreen.gameObject.SetActive(false);
}
private void TimeSequenceFinishedAttractScreenIntroduction()
{
StartTimeSequence(PacManTimeSequence.AttractScreenDemo);
}
} }
} }

View File

@@ -0,0 +1,10 @@
namespace Marro.PacManUdon
{
public partial class GameManager
{
private void TimeSequenceFinishedAttractScreenWaitToRestart()
{
StartAttractMode();
}
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: a584f98f4d7e35146ae110c947f41176 guid: 2b178dfcf6f9185448d2a2cdd4869abd
MonoImporter: MonoImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2

View File

@@ -36,29 +36,33 @@ namespace Marro.PacManUdon
statusDisplay.SetLevelDisplayVisible(true); statusDisplay.SetLevelDisplayVisible(true);
break; break;
case 6: case 6:
// Call handler for what should happen next
PacManTimeSequence nextSequence;
switch (level)
{
case 2:
nextSequence = PacManTimeSequence.Intermission1;
break;
case 5:
nextSequence = PacManTimeSequence.Intermission2;
break;
case 9:
case 13:
case 17:
nextSequence = PacManTimeSequence.Intermission3;
break;
default:
nextSequence = PacManTimeSequence.StartNewLevel;
break;
}
InsertTimeSequence(nextSequence);
break; break;
} }
} }
private void TimeSequenceFinishedBoardClear()
{
// Call handler for what should happen next
PacManTimeSequence nextSequence;
switch (level)
{
case 2:
nextSequence = PacManTimeSequence.Intermission1;
break;
case 5:
nextSequence = PacManTimeSequence.Intermission2;
break;
case 9:
case 13:
case 17:
nextSequence = PacManTimeSequence.Intermission3;
break;
default:
nextSequence = PacManTimeSequence.StartNewLevel;
break;
}
InsertTimeSequence(nextSequence);
}
} }
} }

View File

@@ -12,11 +12,15 @@ namespace Marro.PacManUdon
pelletManager.FreezePowerPelletsBlink(true); pelletManager.FreezePowerPelletsBlink(true);
break; break;
case 1: case 1:
// Stop text blinking, transition to attract screen
statusDisplay.SetLabel1UPTextBlinking(false);
StartAttractMode();
break; break;
} }
} }
private void TimeSequenceFinishedGameOver()
{
// Stop text blinking, transition to attract screen
statusDisplay.SetLabel1UPTextBlinking(false);
StartAttractMode();
}
} }
} }

View File

@@ -13,13 +13,17 @@ namespace Marro.PacManUdon
soundManager.PlayGhostEatSound(); soundManager.PlayGhostEatSound();
break; break;
case 1: case 1:
// Unfreeze and reveal pacman
SetPacManActive(true);
SetFrozen(false);
ghostManager.GhostCaughtContinue();
soundManager.SetGhostRetreat(true);
break; break;
} }
} }
private void TimeSequenceFinalizeGhostCaught()
{
// Unfreeze and reveal pacman
SetPacManActive(true);
SetFrozen(false);
ghostManager.GhostCaughtContinue();
soundManager.SetGhostRetreat(true);
}
} }
} }

View File

@@ -61,9 +61,13 @@ namespace Marro.PacManUdon
// End cutscene // End cutscene
soundManager.StopAllSound(); soundManager.StopAllSound();
SetFrozen(true); SetFrozen(true);
StartTimeSequence(PacManTimeSequence.StartNewLevel);
break; break;
} }
} }
private void TimeSequenceFinishedIntermission1()
{
StartTimeSequence(PacManTimeSequence.StartNewLevel);
}
} }
} }

View File

@@ -78,12 +78,20 @@ namespace Marro.PacManUdon
break; break;
case 11: case 11:
// End cutscene // End cutscene
SetIntermissionScreenVisible(false);
soundManager.StopAllSound();
SetFrozen(true); SetFrozen(true);
StartTimeSequence(PacManTimeSequence.StartNewLevel);
break; break;
} }
} }
private void TimeSequenceFinalizeIntermission2()
{
SetIntermissionScreenVisible(false);
soundManager.StopAllSound();
}
private void TimeSequenceFinishedIntermission2()
{
StartTimeSequence(PacManTimeSequence.StartNewLevel);
}
} }
} }

View File

@@ -56,11 +56,21 @@ namespace Marro.PacManUdon
break; break;
case 5: case 5:
// End cutscene // End cutscene
soundManager.StopAllSound();
SetFrozen(true); SetFrozen(true);
StartTimeSequence(PacManTimeSequence.StartNewLevel);
break; break;
} }
} }
private void TimeSequenceFinalizeIntermission3()
{
soundManager.StopAllSound();
StartTimeSequence(PacManTimeSequence.StartNewLevel);
}
private void TimeSequenceFinishedIntermission3()
{
soundManager.StopAllSound();
StartTimeSequence(PacManTimeSequence.StartNewLevel);
}
} }
} }

View File

@@ -2,7 +2,7 @@ namespace Marro.PacManUdon
{ {
public partial class GameManager public partial class GameManager
{ {
private void TimeSequenceStepPacManCaught(int sequenceProgress) private void TimeSequenceStepPacManCaught(int sequenceProgress)
{ {
switch (sequenceProgress) switch (sequenceProgress)
{ {
@@ -23,28 +23,27 @@ namespace Marro.PacManUdon
case 3: case 3:
// Hide pacman, start next state // Hide pacman, start next state
SetPacManActive(false); SetPacManActive(false);
if (gameState == PacManGameState.AttractModeDemo)
{
break;
}
if (extraLives > 0)
{
InsertTimeSequence(PacManTimeSequence.RestartLevel);
break;
}
InsertTimeSequence(PacManTimeSequence.GameOver);
break;
case 4:
if (gameState == PacManGameState.AttractModeDemo)
{
#if RECORDING_DEMO
// recorder.gameObject.SetActive(false);
#endif
InsertTimeSequence(PacManTimeSequence.AttractScreenIntroduction);
}
break; break;
} }
} }
private void TimeSequenceFinishedPacManCaught()
{
PacManTimeSequence nextSequence;
if (gameState == PacManGameState.AttractModeDemo)
{
nextSequence = PacManTimeSequence.AttractScreenWaitToRestart;
}
else if (extraLives > 0)
{
nextSequence = PacManTimeSequence.RestartLevel;
}
else
{
nextSequence = PacManTimeSequence.GameOver;
}
InsertTimeSequence(nextSequence);
}
} }
} }

View File

@@ -32,13 +32,17 @@ namespace Marro.PacManUdon
statusDisplay.SetReadyTextVisible(false); statusDisplay.SetReadyTextVisible(false);
break; break;
case 5: case 5:
// Unfreeze
SetFrozen(false);
soundManager.SuppressSound(false);
soundManager.StartGhostSound();
soundManager.UpdatePelletCount(pelletCountRemaining);
break; break;
} }
} }
private void TimeSequenceFinalizeRestartLevel()
{
// Unfreeze
SetFrozen(false);
soundManager.SuppressSound(false);
soundManager.StartGhostSound();
soundManager.UpdatePelletCount(pelletCountRemaining);
}
} }
} }

View File

@@ -61,11 +61,15 @@ namespace Marro.PacManUdon
statusDisplay.SetReadyTextVisible(false); statusDisplay.SetReadyTextVisible(false);
break; break;
case 6: case 6:
// Start game, end sequence
soundManager.StartGhostSound();
SetFrozen(false);
break; break;
} }
} }
private void TimeSequenceFinalizeStartNewGame()
{
// Start game, end sequence
soundManager.StartGhostSound();
SetFrozen(false);
}
} }
} }

View File

@@ -31,11 +31,15 @@ namespace Marro.PacManUdon
statusDisplay.SetReadyTextVisible(false); statusDisplay.SetReadyTextVisible(false);
break; break;
case 4: case 4:
// Unfreeze
SetFrozen(false);
soundManager.StartGhostSound();
break; break;
} }
} }
private void TimeSequenceFinalizeStartNewLevel()
{
// Unfreeze
SetFrozen(false);
soundManager.StartGhostSound();
}
} }
} }

View File

@@ -14,12 +14,16 @@ namespace Marro.PacManUdon
break; break;
case 1: case 1:
SetPressStartButtonScreenVisible(true); SetPressStartButtonScreenVisible(true);
if (playerInput.active == false && hasTimeSequenceQueued == false)
{
StartTimeSequence(PacManTimeSequence.WaitForStartTimeout);
}
break; break;
} }
} }
private void TimeSequenceFinalizeWaitForStart()
{
if (playerInput.active == false)
{
StartTimeSequence(PacManTimeSequence.WaitForStartTimeout);
}
}
} }
} }

View File

@@ -1,7 +0,0 @@
namespace Marro.PacManUdon
{
public partial class GameManager
{
}
}

View File

@@ -2,18 +2,11 @@ namespace Marro.PacManUdon
{ {
public partial class GameManager public partial class GameManager
{ {
private void TimeSequenceStepWaitForStartTimeout(int sequenceProgress) private void TimeSequenceFinishedWaitForStartTimeout()
{ {
switch (sequenceProgress) if (playerInput.active == false)
{ {
case 0: StartAttractMode();
break;
case 1:
if (playerInput.active == false && hasTimeSequenceQueued == false)
{
StartAttractMode();
}
break;
} }
} }
} }