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) { }
}
}