From a051415c16e8b9c47af38a260546bacfb1a6a424 Mon Sep 17 00:00:00 2001 From: BitterSmile Date: Tue, 13 Aug 2024 17:12:50 +0200 Subject: [PATCH] WIP --- NEG/UI/AssemblyInfo.cs | 3 ++ NEG/UI/AssemblyInfo.cs.meta | 3 ++ NEG/UI/UiManager.cs | 53 +++++++++++++++-------------- NEG/UI/UnityUi/Window/MonoWindow.cs | 38 ++++++++++++++------- NEG/UI/Window/IWindow.cs | 2 ++ 5 files changed, 61 insertions(+), 38 deletions(-) create mode 100644 NEG/UI/AssemblyInfo.cs create mode 100644 NEG/UI/AssemblyInfo.cs.meta diff --git a/NEG/UI/AssemblyInfo.cs b/NEG/UI/AssemblyInfo.cs new file mode 100644 index 0000000..812e6ab --- /dev/null +++ b/NEG/UI/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("NEG.UI.UnityUi")] \ No newline at end of file diff --git a/NEG/UI/AssemblyInfo.cs.meta b/NEG/UI/AssemblyInfo.cs.meta new file mode 100644 index 0000000..66b1bec --- /dev/null +++ b/NEG/UI/AssemblyInfo.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1bf54cf2dc934c9b85c514bb01057e64 +timeCreated: 1716843793 \ No newline at end of file diff --git a/NEG/UI/UiManager.cs b/NEG/UI/UiManager.cs index 1a4783b..a60245a 100644 --- a/NEG/UI/UiManager.cs +++ b/NEG/UI/UiManager.cs @@ -13,31 +13,6 @@ namespace NEG.UI [PublicAPI] public abstract class UiManager : IDisposable { - private IArea currentArea; - protected IDefaultPopup currentDefaultPopup; - private (PopupData data, int priority) currentShownPopup; - - //TODO: localize - private string localizedYes = "Yes", localizedNo = "No", localizedOk = "Ok"; - - private List mainWindows; - - private PriorityQueue popupsToShow = new(); - - protected UiManager(IArea startArea) - { - if (Instance != null) - { - Debug.LogError("Only one instance od UiManager is allowed"); - return; - } - - Instance = this; - - CurrentArea = startArea; - mainWindows = new List(); - } - public static UiManager Instance { get; protected set; } /// @@ -62,6 +37,31 @@ namespace NEG.UI public IWindow CurrentMainWindow => mainWindows.LastOrDefault(); public PopupData CurrentPopup => currentShownPopup.data; + + private IArea currentArea; + protected IDefaultPopup currentDefaultPopup; + private (PopupData data, int priority) currentShownPopup; + + //TODO: localize + private string localizedYes = "Yes", localizedNo = "No", localizedOk = "Ok"; + + private List mainWindows; + + private PriorityQueue popupsToShow = new(); + private Dictionary registeredWindows = new(); + + protected UiManager(IArea startArea = default) + { + if (Instance != null) + { + Debug.LogError("Only one instance od UiManager is allowed"); + return; + } + + Instance = this; + CurrentArea = startArea; + mainWindows = new List(); + } public virtual void Dispose() => Instance = null; @@ -164,6 +164,9 @@ namespace NEG.UI public void OnWindowClosed(IWindow window) => MainWindowClosed(window); + internal void RegisterWindow(IWindow window) => registeredWindows.Add(window.WindowId, window); + internal void UnRegisterWindow(IWindow window) => registeredWindows.Remove(window.WindowId); + //TODO: select new main window protected void PopupClosed(PopupData data) { diff --git a/NEG/UI/UnityUi/Window/MonoWindow.cs b/NEG/UI/UnityUi/Window/MonoWindow.cs index 6d9639e..ea9c002 100644 --- a/NEG/UI/UnityUi/Window/MonoWindow.cs +++ b/NEG/UI/UnityUi/Window/MonoWindow.cs @@ -12,18 +12,35 @@ namespace NEG.UI.UnityUi.Window [DefaultExecutionOrder(10)] public class MonoWindow : MonoBehaviour, IWindow { + public event Action OnOpened; + public event Action OnClosed; + public event Action OnBackUsed; + + [field: SerializeField] public string WindowId { get; private set; } + + public IEnumerable AvailableSlots => windowSlots; + public IWindowSlot Parent { get; private set; } + + public bool IsOpened { get; protected set; } + + public bool IsMainWindow { get; } + + public GameObject DefaultSelectedItem => defaultSelectedItem; + [SerializeField] private List windowSlots; + [SerializeField] private string windowName; + [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 Awake() + { + UiManager.Instance.RegisterWindow(this); + ((IWindow)this).SetHiddenState(); + } private void OnDestroy() { @@ -31,6 +48,8 @@ namespace NEG.UI.UnityUi.Window return; if (IsOpened) UiManager.Instance.OnWindowClosed(this); + UiManager.Instance.UnRegisterWindow(this); + } private void OnValidate() @@ -41,13 +60,6 @@ namespace NEG.UI.UnityUi.Window #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); diff --git a/NEG/UI/Window/IWindow.cs b/NEG/UI/Window/IWindow.cs index a6cceb5..b003d4c 100644 --- a/NEG/UI/Window/IWindow.cs +++ b/NEG/UI/Window/IWindow.cs @@ -11,6 +11,8 @@ namespace NEG.UI.Window /// Parent slot of this window. /// IWindowSlot Parent { get; } + + string WindowId { get; } /// /// Called internally by slot to open window.