using NEG.UI.UnityUi.WindowSlot; using NEG.UI.Window; using NEG.UI.WindowSlot; using NegUtils.NEG.UI; using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; namespace NEG.UI.UnityUi.Window { [DefaultExecutionOrder(10)] public class MonoWindow : MonoBehaviour, IWindow { [SerializeField] private List windowSlots; [SerializeField] private GameObject defaultSelectedItem; public bool IsMainWindow { get; } public bool IsOpened { get; protected set; } private IWindowSlot DefaultWindowSlot => windowSlots[0]; public GameObject DefaultSelectedItem => defaultSelectedItem; private void Awake() => ((IWindow)this).SetHiddenState(); private void OnDestroy() { if (UiManager.Instance == null) return; if (IsOpened) UiManager.Instance.OnWindowClosed(this); } private void OnValidate() { #if !NEG_UI_DISABLE_WARNING_DEFAULT_SELECTION if (defaultSelectedItem == null) Debug.LogWarning($"Window {name} should have default selected item set"); #endif } public event Action OnOpened; public event Action OnClosed; public event Action OnBackUsed; public IEnumerable AvailableSlots => windowSlots; public IWindowSlot Parent { get; private set; } public void SetOpenedState(IWindowSlot parentSlot, object data) { gameObject.SetActive(true); IsOpened = true; Parent = parentSlot; EventSystem.current.SetSelectedGameObject(defaultSelectedItem); if (parentSlot.OpenWindowAsMain) UiManager.Instance.SetMainWindow(this); OnOpened?.Invoke(data); } public void SetClosedState() { gameObject.SetActive(false); IsOpened = false; Parent = null; ((ISlotsHolder)this).CloseAllWindows(); UiManager.Instance.OnWindowClosed(this); OnClosed?.Invoke(); } public void SetHiddenState() => gameObject.SetActive(false); public void SeVisibleState() => gameObject.SetActive(true); public void OpenWindow(IWindow window, object data = null) => DefaultWindowSlot.AttachWindow(window, data); public void TryUseBack(ref IControllable.BackUsed backUsed) => OnBackUsed?.Invoke(backUsed); public void SetDefaultSelectedItem(GameObject item) => defaultSelectedItem = item; } }