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(this); } public void InitializeData() { uiManager = InterfaceManager.Instance.GetInterfaceInstance(); tilesManager = InterfaceManager.Instance.GetInterfaceInstance(); gameplayManager = InterfaceManager.Instance.GetInterfaceInstance(); musicManager = InterfaceManager.Instance.GetInterfaceInstance(); 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(); } }