ProjectDDD/Assets/_DDD/_Scripts/GameUi/BaseUi/PopupUis/BasePopupUi.cs
2025-08-24 20:44:32 +09:00

71 lines
1.9 KiB
C#

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) 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();
}
}