84 lines
2.3 KiB
C#
84 lines
2.3 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);
|
|
if (IsComingFromGame()) ResetGameDatas();
|
|
|
|
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 bool IsComingFromGame() => PrevGameState == GameState.IsPaused;
|
|
|
|
public void ResetGameDatas()
|
|
{
|
|
gameplayManager.ResetTileDatasForPlayers();
|
|
gameplayManager.ResetData();
|
|
tilesManager.ResetData();
|
|
gameplayManager.PlayerBaseHandler.ResetPlayerBaseData();
|
|
}
|
|
}
|