using NEG.UI.Area; using NEG.UI.UnityUi.Buttons; using NEG.UI.UnityUi.WindowSlot; using NEG.UI.Window; using NEG.UI.WindowSlot; using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; namespace NEG.UI.UnityUi.Window { public class MonoWindow : MonoBehaviour, IWindow { public IEnumerable AvailableSlots => windowSlots; public IWindowSlot Parent { get; private set; } public bool IsMainWindow { get; private set; } private IWindowSlot DefaultWindowSlot => windowSlots[0]; [SerializeField] private List windowSlots; [SerializeField] private WindowController controller; [SerializeField] private GameObject defaultSelectedItem; public void SetOpenedState(IWindowSlot parentSlot) { gameObject.SetActive(true); Parent = parentSlot; EventSystem.current.SetSelectedGameObject(defaultSelectedItem); if (controller != null) controller.OnOpened(); } public void SetData(object data) { if (controller != null) controller.SetData(data); } public void SetClosedState() { gameObject.SetActive(false); Parent = null; ((ISlotsHolder)this).CloseAllWindows(); if(controller != null) controller.OnClosed(); } public void SetHiddenState() => gameObject.SetActive(false); public void SeVisibleState() => gameObject.SetActive(true); private void Awake() => ((IWindow)this).SetHiddenState(); private void OnValidate() { if (controller == null) controller = GetComponent(); #if !NEG_UI_DISABLE_WARNING_DEFAULT_SELECTION if(defaultSelectedItem == null) Debug.LogWarning($"Window {name} should have default selected item set"); #endif } public void OpenWindow(IWindow window, object data = null) { DefaultWindowSlot.AttachWindow(window); window.SetData(data); } public void SetDefaultSelectedItem(GameObject item) => defaultSelectedItem = item; } }