FM/Assets/Scripts/Base/UI/UIBase.cs

102 lines
2.6 KiB
C#
Raw Normal View History

2025-04-26 21:05:13 +08:00
using System;
2025-08-20 11:14:21 +08:00
using System.Collections.Generic;
2025-04-26 21:05:13 +08:00
using UnityEngine;
namespace HK
{
2025-06-17 09:31:12 +08:00
[RequireComponent(typeof(CanvasGroup))]
2025-04-26 21:05:13 +08:00
public abstract class UIBase : MonoBehaviour, IUI
{
2025-06-17 09:31:12 +08:00
[SerializeField] private bool isAutoHide = false;
2025-04-26 21:05:13 +08:00
private bool _isPause;
private bool _isActive;
private CanvasGroup _group;
private GameObjectBinding _uiGameObjectBinding;
2025-08-20 11:14:21 +08:00
[SerializeField] private UIBase lastUI;
[SerializeField] private UIBase nextUI;
[SerializeField] protected List<UIItemBase> itemBases = new List<UIItemBase>();
2025-04-26 21:05:13 +08:00
public bool isPause => _isPause;
public bool isActive => _isActive;
public Transform self => gameObject.transform;
public GameObjectBinding uiGameObjectBinding => _uiGameObjectBinding;
2025-08-20 11:14:21 +08:00
public UIBase NextUI
{
get => nextUI;
set => nextUI = value;
}
2025-04-26 21:05:13 +08:00
private void Awake()
{
_group = GetComponent<CanvasGroup>();
_uiGameObjectBinding = GetComponent<GameObjectBinding>();
OnInit();
}
internal T GetValue<T>(string name) where T : Component
{
return _uiGameObjectBinding.GetValue<T>(name);
}
public virtual void OnInit()
{
_isPause = false;
_isActive = !isAutoHide;
2025-06-04 22:49:37 +08:00
_group.alpha = isAutoHide ? 0 : 1;
2025-04-26 21:05:13 +08:00
}
2025-08-20 11:14:21 +08:00
public virtual void OnOpen(UIBase lastUI=null)
2025-04-26 21:05:13 +08:00
{
2025-08-20 11:14:21 +08:00
this.lastUI = lastUI;
2025-04-26 21:05:13 +08:00
_group.alpha = 1;
2025-07-02 10:24:01 +08:00
_group.interactable = true;
_group.blocksRaycasts = true;
2025-04-26 21:05:13 +08:00
}
public void OnUpdate(float dateTime)
{
if (_isPause) return;
}
public virtual void OnClose()
{
2025-08-20 11:14:21 +08:00
foreach (var uiItemBase in itemBases)
{
uiItemBase.OnDispose();
}
2025-04-26 21:05:13 +08:00
_group.alpha = 0;
2025-07-02 10:24:01 +08:00
_group.interactable = false;
_group.blocksRaycasts = false;
2025-04-26 21:05:13 +08:00
}
public virtual void OnPause()
{
_isPause = true;
_group.interactable = false;
_group.blocksRaycasts = false;
2025-04-26 21:05:13 +08:00
}
public virtual void OnResume()
{
_isPause = false;
_group.interactable = true;
_group.blocksRaycasts = true;
2025-04-26 21:05:13 +08:00
}
public virtual void OnDispose()
{
if (gameObject.activeSelf)
{
OnClose();
}
_isActive = false;
_isPause = true;
GameObject.Destroy(this.gameObject);
}
}
}