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

89 lines
2.4 KiB
C#

using UnityEngine;
public enum GameState
{
InMenu,
InGame,
IsPaused,
GameOver,
}
public class GameManager : MonoBehaviour, IBase, IBootLoader, IDataLoader
{
private UIManager uiManager;
private TilesManager tilesManager;
private MusicManager musicManager;
private GameplayManager gameplayManager;
public GameState CurrentGameState
{
get; private set;
}
private GameState PrevGameState;
public void Initialize()
{
InterfaceManager.Instance.RegisterInterface<GameManager>(this);
}
public void InitializeData()
{
uiManager = InterfaceManager.Instance.GetInterfaceInstance<UIManager>();
tilesManager = InterfaceManager.Instance.GetInterfaceInstance<TilesManager>();
gameplayManager = InterfaceManager.Instance.GetInterfaceInstance<GameplayManager>();
musicManager = InterfaceManager.Instance.GetInterfaceInstance<MusicManager>();
OnGameStateChanged(GameState.InMenu);
}
public void SetGameState(GameState gameState)
{
Debug.Log($"### GameState: {gameState}");
PrevGameState = CurrentGameState;
CurrentGameState = gameState;
}
public void OnGameStateChanged(GameState gameState)
{
SetGameState(gameState);
Debug.Log($"OnGameStateChanged: {gameState}");
switch (gameState)
{
case GameState.InMenu:
musicManager.PlayMusicClip(MusicType.HomeMusic);
CheckPrevGameState();
uiManager.OnInMenuScreen();
break;
case GameState.InGame:
Debug.Log($"Logging in-game state");
musicManager.PlayMusicClip(MusicType.GameMusic);
uiManager.OnInGameScreen();
break;
case GameState.IsPaused:
break;
case GameState.GameOver:
musicManager.PlayMusicClip(MusicType.GameOverMusic);
uiManager.OnGameOver();
break;
}
}
private void CheckPrevGameState()
{
if (PrevGameState == GameState.InGame) // returning to menu from in-game
{
ResetGameDatas();
}
}
public void ResetGameDatas()
{
gameplayManager.ResetTileDatasForPlayers();
gameplayManager.ResetData();
tilesManager.ResetData();
gameplayManager.PlayerBaseHandler.ResetPlayerBaseData();
}
}