using Cysharp.Threading.Tasks; using MessagePipe; using PMaker.Await; using PMaker.MessagePipe; using System.Threading; using System.Transactions; using UniRx; using UnityEngine; using UnityEngine.UIElements; namespace PMaker.UI { public abstract partial class Page : BaseBehaviour, IPage { protected CancellationTokenSource _tokenSource; protected virtual void OnEnable() { _tokenSource = new CancellationTokenSource(); } protected virtual void OnDisable() { _tokenSource?.Cancel(); } public virtual void Hide() { this.gameObject.SetActive(false); } public virtual void Show() { this.gameObject.SetActive(true); } } // message public abstract partial class Page { protected virtual void Awake() { MessageKit.GetAsyncSubscriber() .Subscribe(this.GetType().Name, async (_, token) => { await this.WaitUI(_, token); }) .AddTo(this); MessageKit.GetSubscriber() .Subscribe(this.GetType().Name, (_) => { this.GetUI(_.name).gameObject.SetActive(_.value); }) .AddTo(this); MessageKit.GetFuncSubscriber() .Subscribe(this.GetType().Name, _ => { _.value = this; }) .AddTo(this); } } }