Overhaul game state logic to support gameplay loop

This commit is contained in:
2025-04-30 00:43:55 -07:00
parent 78cdda97b9
commit 68c91d8f13
60 changed files with 2503 additions and 1116 deletions

View File

@@ -9,13 +9,14 @@ public partial class AppLogic
public partial record State
{
[Meta]
public partial record InGame : State, IGet<Input.GameOver>
public partial record GameStarted : State
{
public InGame()
public GameStarted()
{
this.OnEnter(() =>
{
Output(new Output.SetupGameScene());
Output(new Output.ShowGame());
Get<IAppRepo>().OnEnterGame();
});
@@ -25,12 +26,6 @@ public partial class AppLogic
OnDetach(() => Get<IAppRepo>().GameExited -= OnGameExited);
}
public Transition On(in Input.GameOver input)
{
Output(new Output.RemoveExistingGame());
return To<MainMenu>();
}
public void OnGameExited() => Input(new Input.QuitGame());
}
}

View File

@@ -18,7 +18,7 @@ public partial class AppLogic
public Transition On(in Input.FadeOutFinished input) =>
Get<Data>().ShouldLoadExistingGame
? To<LoadingSaveFile>()
: To<InGame>();
: To<GameStarted>();
}
}
}

View File

@@ -15,7 +15,7 @@ public partial class AppLogic
this.OnEnter(() => Output(new Output.StartLoadingSaveFile()));
}
public Transition On(in Input.SaveFileLoaded input) => To<InGame>();
public Transition On(in Input.SaveFileLoaded input) => To<GameStarted>();
}
}
}

View File

@@ -1,43 +0,0 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
using Zennysoft.Game.Abstractions;
namespace Zennysoft.Ma.Adapter;
public partial class AppLogic
{
public partial record State
{
[Meta]
public partial record MainMenu : State, IGet<Input.NewGame>, IGet<Input.LoadGame>, IGet<Input.QuitGame>
{
public MainMenu()
{
this.OnEnter(() =>
{
Get<Data>().ShouldLoadExistingGame = false;
Output(new Output.SetupGameScene());
Get<IAppRepo>().OnMainMenuEntered();
Output(new Output.ShowMainMenu());
});
}
public Transition On(in Input.NewGame input)
{
return To<LeavingMenu>();
}
public Transition On(in Input.LoadGame input)
{
Get<Data>().ShouldLoadExistingGame = true;
return To<LeavingMenu>();
}
public Transition On(in Input.QuitGame input)
{
Output(new Output.ExitGame());
return ToSelf();
}
}
}
}

View File

@@ -24,7 +24,7 @@ public partial class AppLogic
);
}
public Transition On(in Input.FadeOutFinished input) => To<MainMenu>();
public Transition On(in Input.FadeOutFinished input) => To<GameStarted>();
public void OnSplashScreenSkipped() =>
Output(new Output.HideSplashScreen());