using UnityEngine; public enum GameState { InMenu, InGame, GameOver, } public class GameManager : MonoBehaviour, IBase, IBootLoader, IDataLoader { private UIManager uiManager; private TilesManager tilesManager; private MusicManager musicManager; private GameplayManager gameplayManager; public GameState GameState { 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 OnGameStateChanged(GameState gameState) { PrevGameState = GameState; GameState = gameState; Debug.Log($"OnGameStateChanged: {gameState}"); switch (gameState) { case GameState.InMenu: musicManager.PlayMusicClip(MusicType.HomeMusic); CheckPrevGameState(); uiManager.OnInMenuScreen(); break; case GameState.InGame: musicManager.PlayMusicClip(MusicType.GameMusic); uiManager.OnInGameScreen(); 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(); } }