using UnityEditor; using UnityEngine; using UnityEngine.UIElements; namespace EscapeRoomEngine.Engine.Runtime.Editor { #if UNITY_EDITOR public class EngineEditor : EditorWindow { private bool _registeredUpdateEvent; private Button _passToNextRoomButton, _skipCurrentRoomButton, _skipAndPassButton; [MenuItem("Window/Engine Editor")] public static void ShowEditor() { var window = GetWindow(); window.titleContent = new GUIContent("Engine Editor"); } public void CreateGUI() { _passToNextRoomButton = new Button(PassToNextRoom) { text = "Pass To Next Room" }; rootVisualElement.Add(_passToNextRoomButton); _skipCurrentRoomButton = new Button(SkipCurrentRoom) { text = "Skip Current Room" }; rootVisualElement.Add(_skipCurrentRoomButton); _skipAndPassButton = new Button(SkipAndPass) { text = "Skip Current And Pass To Next Room" }; rootVisualElement.Add(_skipAndPassButton); EditorApplication.playModeStateChanged += _ => UpdateUI(); UpdateUI(); } private void PassToNextRoom() { if (EditorApplication.isPlaying) { Engine.DefaultEngine.CurrentRoom.Match(some: room => room.EnterRoom()); UpdateUI(); } } private void SkipCurrentRoom() { if (EditorApplication.isPlaying) { Engine.DefaultEngine.CurrentRoom.Match(some: room => room.SkipRoom()); UpdateUI(); } } private void SkipAndPass() { if (EditorApplication.isPlaying) { Engine.DefaultEngine.CurrentRoom.Match(some: room => room.SkipRoom()); Engine.DefaultEngine.CurrentRoom.Match(some: room => room.EnterRoom()); UpdateUI(); } } private void UpdateUI() { if (EditorApplication.isPlaying) { if (!_registeredUpdateEvent) { Engine.DefaultEngine.UpdateUIEvent += UpdateUI; _registeredUpdateEvent = true; } } else { _registeredUpdateEvent = false; } _passToNextRoomButton.SetEnabled(EditorApplication.isPlaying && Engine.DefaultEngine.NumberOfRooms > 1); _skipCurrentRoomButton.SetEnabled(EditorApplication.isPlaying && Engine.DefaultEngine.NumberOfRooms > 0); _skipAndPassButton.SetEnabled(EditorApplication.isPlaying && Engine.DefaultEngine.NumberOfRooms > 0); } } #endif }