using System; using Cysharp.Threading.Tasks; // ReSharper disable UnassignedGetOnlyAutoProperty namespace BITKit.UX { /// /// 基本UX面板接口,定义了基本的UX面板功能 /// /// ⭐同步打开与关闭 /// ⭐异步打开与关闭 /// ⭐当前可见状态 /// ⭐基本UI导航回调 public interface IUXPanel:IEntryElement,IUpdate { /// /// 该面板是否具有动画 /// bool IsAnimate { get; } /// /// 该面板是否有效,用于检查该面板是否已经被销毁 /// bool IsValid { get; } /// /// 该面板的索引(入口,Key) /// string Index { get; } /// /// 该面板是否启用指针 /// bool AllowCursor { get; } /// /// 该面板是否启用玩家输入 /// bool AllowInput { get; } /// /// 事件回调,当面板被打开时触发 /// event Action OnEntry; /// /// 事件回调,当面板被关闭时触发 /// event Action OnExit; } public abstract class UXPanelImplement:IUXPanel { protected abstract IUXPanel service { get; } private IUXPanel _iuxPanelImplementation => service; public bool IsAnimate => _iuxPanelImplementation.IsAnimate; public bool IsValid => _iuxPanelImplementation.IsValid; public string Index => _iuxPanelImplementation.Index; public bool AllowCursor => _iuxPanelImplementation.AllowCursor; public bool AllowInput => _iuxPanelImplementation.AllowInput; public bool IsEntered { get => service.IsEntered; set => service.IsEntered = value; } public void Entry() { _iuxPanelImplementation.Entry(); } public UniTask EntryAsync() { return service.EntryAsync(); } public void Entered() { service.Entered(); } public void Exit() { _iuxPanelImplementation.Exit(); } public UniTask ExitAsync() { return service.ExitAsync(); } public void Exited() { service.Exited(); } public event Action OnEntry { add => _iuxPanelImplementation.OnEntry += value; remove => _iuxPanelImplementation.OnEntry -= value; } public event Action OnExit { add => _iuxPanelImplementation.OnExit += value; remove => _iuxPanelImplementation.OnExit -= value; } public void OnUpdate(float deltaTime) { service.OnUpdate(deltaTime); } } }