using UnityEngine; using UnityEngine.EventSystems; namespace DDD { public abstract class BasePopupUi : BaseUi { public bool IsTopPopup => UiManager.Instance.UiState.IsTopPopup(this); public InputActionMaps InputActionMaps { get; protected set; } protected override void Awake() { _enableBlockImage = true; base.Awake(); } protected override void Update() { base.Update(); if (IsOpenPanel() == false || IsInitialized == false || IsTopPopup == false) return; var currentSelectedGameObject = EventSystem.current.currentSelectedGameObject; if (!currentSelectedGameObject || currentSelectedGameObject.activeInHierarchy == false) { var initialSelected = GetInitialSelected(); if (initialSelected) { EventSystem.current.SetSelectedGameObject(initialSelected); } } } protected override void OnDestroy() { base.OnDestroy(); UiManager.Instance?.UiState?.UnregisterPopupUI(this); } protected override void OnCreatedInitialize() { base.OnCreatedInitialize(); UiManager.Instance.UiState.RegisterPopupUI(this); } public virtual void Open(OpenPopupUiEvent evt) { OpenPanel(); var initialSelected = GetInitialSelected(); if (initialSelected != null) { EventSystem.current.SetSelectedGameObject(initialSelected); } transform.SetAsLastSibling(); } public virtual void Close() { var evt = GameEvents.ClosePopupUiEvent; evt.UiType = GetType(); EventBus.Broadcast(evt); } protected abstract GameObject GetInitialSelected(); } }