using System; using System.Collections.Generic; using UnityEngine; using FairyGUI; using Articy.Unity; namespace Game { public interface IUIPageBase { void Update(); void FixedUpdate(); void Destroy(); void Create(EuiPage pageType); void Open(params object[] values); void Close(); bool IsActive(); bool IsFullPage(); List GetSubPages(); void AddSubPage(EuiPage subPage); void RemoveSubPage(EuiPage subPage); void RemoveSubPageAll(); } public class UIPageBase : MetaDataHandler, IUIPageBase where T : GComponent, new() { protected T View; private EuiPage _mPageType; private bool _isFullScreenUI; private readonly List _subPageList; protected UIPageBase() { _subPageList = new List(); } public virtual void Update() { } public virtual void FixedUpdate() { } public bool IsActive() { return View.visible; } public bool IsFullPage() { return _isFullScreenUI; } protected virtual void OnInput(PPlayerInput context) { } protected virtual void OnDestroy() { } protected virtual void OnCreate() { } protected virtual void OnOpen() { } protected virtual void OnOpen(params object[] values) { } protected virtual void OnClose() { } public void Create(EuiPage pageType) { _mPageType = pageType; OnCreate(); } public void Destroy() { OnDestroy(); } public void Open(params object[] values) { View.visible = true; EventManager.Instance.AddEvent(EEvent.PlayerInput, OnInput); if (values.Length > 0) { OnOpen(values); } else { OnOpen(); } CreateBind(); } public void Close() { View.visible = false; EventManager.Instance.RemoveEvent(EEvent.PlayerInput, OnInput); ClearBind(); OnClose(); } protected void CreateUI(bool isFull = false) { View = (T)typeof(T).GetMethod("CreateInstance")?.Invoke(null, null); if (View == null) return; View.sortingOrder = (int)_mPageType; View.fairyBatching = true; _isFullScreenUI = isFull; GRoot.inst.AddChild(View); } public List GetSubPages() { return _subPageList; } public void AddSubPage(EuiPage subPage) { _subPageList.Add(subPage); } public void RemoveSubPage(EuiPage subPage) { _subPageList.Remove(subPage); } public void RemoveSubPageAll() { _subPageList.Clear(); } protected Vector3 GetScreenPos(Vector3 pos) { return CameraManager.Instance.GetScreenPos(pos); } protected NTexture Texture(ArticyObject icon) { var texture = Util.LoadDraft(icon); return new NTexture(texture); } } }