diff --git a/NEG/UI/Popup/DefaultPopupData.cs b/NEG/UI/Popup/DefaultPopupData.cs index bcbbefb..036a056 100644 --- a/NEG/UI/Popup/DefaultPopupData.cs +++ b/NEG/UI/Popup/DefaultPopupData.cs @@ -5,7 +5,7 @@ namespace NEG.UI.Popup { public class DefaultPopupData : PopupData { - private readonly IDefaultPopup defaultPopup; + private IDefaultPopup defaultPopup; private readonly string title; private readonly string content; @@ -24,5 +24,12 @@ namespace NEG.UI.Popup defaultPopup.SetContent(title, content, options); base.Show(); } + + public void UpdatePopup(IDefaultPopup newPopup) + { + defaultPopup = newPopup; + popup = newPopup; + Show(); + } } } \ No newline at end of file diff --git a/NEG/UI/Popup/PopupData.cs b/NEG/UI/Popup/PopupData.cs index 9aa2462..23054e9 100644 --- a/NEG/UI/Popup/PopupData.cs +++ b/NEG/UI/Popup/PopupData.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using System; +using UnityEngine; namespace NEG.UI.Popup { @@ -19,8 +20,10 @@ namespace NEG.UI.Popup /// Is this data is still valid. If set to false, popup will not show. /// public bool IsValid { get; protected set; } + + public IPopup Popup => popup; - private readonly IPopup popup; + protected IPopup popup; /// /// PopupData constructor. @@ -40,7 +43,12 @@ namespace NEG.UI.Popup /// /// Hide popup. Close visuals without firing events; /// - public virtual void Hide() => popup.Close(true); + public virtual void Hide() + { + if(popup is MonoBehaviour behaviour && behaviour == null) + return; + popup.Close(true); + } /// /// Invalidate popup, will automatically skip this popup diff --git a/NEG/UI/UiManager.cs b/NEG/UI/UiManager.cs index c25e4b3..dc9513d 100644 --- a/NEG/UI/UiManager.cs +++ b/NEG/UI/UiManager.cs @@ -37,6 +37,8 @@ namespace NEG.UI public IWindow CurrentMainWindow { get; protected set; } public PopupData CurrentPopup => currentShownPopup.data; + + public IDefaultPopup CurrentDefaultPopup => currentDefaultPopup; private IArea currentArea; private (PopupData data, int priority) currentShownPopup; @@ -166,7 +168,13 @@ namespace NEG.UI UpdatePopupsState(false); } - protected void SetDefaultPopup(IDefaultPopup popup) => currentDefaultPopup = popup; + protected void SetDefaultPopup(IDefaultPopup popup) + { + if(currentShownPopup.data != null && currentShownPopup.data is DefaultPopupData defaultData && currentShownPopup.data.Popup == currentDefaultPopup) + defaultData.UpdatePopup(popup); + + currentDefaultPopup = popup; + } private void UpdatePopupsState(bool forceShow, int priority = 0, PopupData data = null) @@ -176,7 +184,8 @@ namespace NEG.UI if(currentShownPopup.data != null && currentShownPopup.priority >= priority) return; - popupsToShow.Enqueue(currentShownPopup.data, currentShownPopup.priority); + if(currentShownPopup.data != null) + popupsToShow.Enqueue(currentShownPopup.data, currentShownPopup.priority); ShowPopup(data, priority); return; } diff --git a/NEG/UI/UnityUi/Area/MonoArea.cs b/NEG/UI/UnityUi/Area/MonoArea.cs index 2829582..85ef7b8 100644 --- a/NEG/UI/UnityUi/Area/MonoArea.cs +++ b/NEG/UI/UnityUi/Area/MonoArea.cs @@ -50,8 +50,10 @@ namespace NEG.UI.Area private void OnDestroy() { +#if !SERVER if (ReferenceEquals(UiManager.Instance.CurrentArea, this)) UiManager.Instance.CurrentArea = null; +#endif } public void TryUseBack(ref IControllable.BackUsed backUsed) => OnBackUsed?.Invoke(backUsed); diff --git a/NEG/UI/UnityUi/Buttons/BaseButton.cs b/NEG/UI/UnityUi/Buttons/BaseButton.cs index 939bdbf..d9b6cce 100644 --- a/NEG/UI/UnityUi/Buttons/BaseButton.cs +++ b/NEG/UI/UnityUi/Buttons/BaseButton.cs @@ -77,11 +77,13 @@ namespace NEG.UI.UnityUi.Buttons protected virtual void Awake() { +#if !SERVER button.onClick.AddListener(OnClicked); if (groupButtonSettings == null) MonoUiManager.Instance.DefaultUiSettings.Apply(this); else groupButtonSettings.Apply(this); +#endif } private void Start() => OnDeselect(null);