Ludo-3D/Assets/Scripts/State/GameManager.cs

84 lines
2.3 KiB
C#
Raw Normal View History

using UnityEngine;
public enum GameState
{
InMenu,
InGame,
IsPaused,
2026-01-30 21:51:33 +05:30
GameOver,
}
public class GameManager : MonoBehaviour, IBase, IBootLoader, IDataLoader
{
private UIManager uiManager;
private TilesManager tilesManager;
private MusicManager musicManager;
2026-01-30 21:51:33 +05:30
private GameplayManager gameplayManager;
public GameState CurrentGameState
{
get; private set;
}
2026-02-02 19:27:17 +05:30
private GameState PrevGameState;
public void Initialize()
{
InterfaceManager.Instance.RegisterInterface<GameManager>(this);
}
public void InitializeData()
{
uiManager = InterfaceManager.Instance.GetInterfaceInstance<UIManager>();
tilesManager = InterfaceManager.Instance.GetInterfaceInstance<TilesManager>();
2026-01-30 21:51:33 +05:30
gameplayManager = InterfaceManager.Instance.GetInterfaceInstance<GameplayManager>();
musicManager = InterfaceManager.Instance.GetInterfaceInstance<MusicManager>();
2026-01-30 21:51:33 +05:30
OnGameStateChanged(GameState.InMenu);
}
public void SetGameState(GameState gameState)
{
Debug.Log($"### GameState: {gameState}");
PrevGameState = CurrentGameState;
CurrentGameState = gameState;
}
public void OnGameStateChanged(GameState gameState)
{
SetGameState(gameState);
2026-02-02 17:21:38 +05:30
Debug.Log($"OnGameStateChanged: {gameState}");
switch (gameState)
{
case GameState.InMenu:
musicManager.PlayMusicClip(MusicType.HomeMusic);
if (IsComingFromGame()) ResetGameDatas();
uiManager.OnInMenuScreen();
2026-02-02 19:27:17 +05:30
break;
case GameState.InGame:
Debug.Log($"Logging in-game state");
musicManager.PlayMusicClip(MusicType.GameMusic);
uiManager.OnInGameScreen();
break;
case GameState.IsPaused:
break;
2026-01-30 21:51:33 +05:30
case GameState.GameOver:
musicManager.PlayMusicClip(MusicType.GameOverMusic);
2026-01-30 21:51:33 +05:30
uiManager.OnGameOver();
break;
}
}
2026-02-02 19:27:17 +05:30
private bool IsComingFromGame() => PrevGameState == GameState.IsPaused;
2026-02-02 19:27:17 +05:30
public void ResetGameDatas()
{
gameplayManager.ResetTileDatasForPlayers();
gameplayManager.ResetData();
tilesManager.ResetData();
gameplayManager.PlayerBaseHandler.ResetPlayerBaseData();
}
}