using System.Collections; using UI; using UnityEngine; using UnityEngine.SceneManagement; namespace State.Game { public class MainMenuState : MainGameState { private MainMenu _mainMenuInstance; public override void OnEnter(Machine machine) { base.OnEnter(machine); var handle = SceneManager.LoadSceneAsync("MainMenu", LoadSceneMode.Additive); machine.StartCoroutine(LoadMenu(handle)); } private IEnumerator LoadMenu(AsyncOperation handle) { while (!handle.isDone) { yield return null; } SceneManager.SetActiveScene(SceneManager.GetSceneByName("MainMenu")); _mainMenuInstance = Object.Instantiate(MainStateMachine.MainMenuPrefab).GetComponent(); if (_mainMenuInstance == null) { Debug.LogError("Error: MainMenu instance is null"); } _mainMenuInstance.OnStartGame += HandleStartGame; _mainMenuInstance.OnExitGame += () => { #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false; #else Application.Quit(); #endif }; } public override void OnExit() { Object.Destroy(_mainMenuInstance.gameObject); base.OnExit(); } private void HandleStartGame() { _mainMenuInstance.OnStartGame -= HandleStartGame; } } }