using System.Collections.Generic; using BaseGames.Core; using BaseGames.Core.Events; namespace BaseGames.Core.States { /// 初始化状态(应用启动时的第一个状态)。 public class InitializingState : IGameState { public GameStateId Id => GameStates.Initializing; public IReadOnlyCollection ValidNextStates { get; } = new HashSet { GameStates.MainMenu }; public void OnEnter(GameStateId prev) { } public void OnExit(GameStateId next) { } public void Tick(float dt) { } } /// 主菜单状态。 public class MainMenuState : IGameState { public GameStateId Id => GameStates.MainMenu; public IReadOnlyCollection ValidNextStates { get; } = new HashSet { GameStates.LoadingScene }; public void OnEnter(GameStateId prev) { } public void OnExit(GameStateId next) { } public void Tick(float dt) { } } /// 场景加载中状态。 public class LoadingSceneState : IGameState { public GameStateId Id => GameStates.LoadingScene; public IReadOnlyCollection ValidNextStates { get; } = new HashSet { GameStates.MainMenu, GameStates.Gameplay }; public void OnEnter(GameStateId prev) { } public void OnExit(GameStateId next) { } public void Tick(float dt) { } } /// 正常游玩状态。 public class GameplayState : IGameState { public GameStateId Id => GameStates.Gameplay; public IReadOnlyCollection ValidNextStates { get; } = new HashSet { GameStates.LoadingScene, GameStates.BossFight, GameStates.Paused, GameStates.Dead, GameStates.Cutscene, }; public void OnEnter(GameStateId prev) { } public void OnExit(GameStateId next) { } public void Tick(float dt) { } } /// Boss 战状态。 public class BossFightState : IGameState { public GameStateId Id => GameStates.BossFight; public IReadOnlyCollection ValidNextStates { get; } = new HashSet { GameStates.LoadingScene, GameStates.Gameplay, GameStates.Paused, GameStates.Dead, }; public void OnEnter(GameStateId prev) { } public void OnExit(GameStateId next) { } public void Tick(float dt) { } } /// 暂停状态。 public class PausedState : IGameState { public GameStateId Id => GameStates.Paused; public IReadOnlyCollection ValidNextStates { get; } = new HashSet { GameStates.Gameplay, GameStates.BossFight, GameStates.MainMenu, }; public void OnEnter(GameStateId prev) { } public void OnExit(GameStateId next) { } public void Tick(float dt) { } } /// 死亡状态。 public class DeadState : IGameState { public GameStateId Id => GameStates.Dead; public IReadOnlyCollection ValidNextStates { get; } = new HashSet { GameStates.LoadingScene, GameStates.GameOver }; public void OnEnter(GameStateId prev) { } public void OnExit(GameStateId next) { } public void Tick(float dt) { } } /// 过场动画状态。 public class CutsceneState : IGameState { public GameStateId Id => GameStates.Cutscene; public IReadOnlyCollection ValidNextStates { get; } = new HashSet { GameStates.Gameplay }; public void OnEnter(GameStateId prev) { } public void OnExit(GameStateId next) { } public void Tick(float dt) { } } /// Game Over 状态(SteelSoul 清档用)。 public class GameOverState : IGameState { public GameStateId Id => GameStates.GameOver; public IReadOnlyCollection ValidNextStates { get; } = new HashSet { GameStates.MainMenu }; public void OnEnter(GameStateId prev) { } public void OnExit(GameStateId next) { } public void Tick(float dt) { } } }