using GFramework.Core.Abstractions.system; using GFramework.Game.Abstractions.enums; namespace GFramework.Game.Abstractions.ui; /// /// UI路由管理器接口,用于管理UI界面的导航和切换操作 /// public interface IUiRouter : ISystem { /// /// 获取当前UI栈深度 /// int Count { get; } /// /// 绑定UI根节点 /// /// UI根节点接口实例 void BindRoot(IUiRoot root); /// /// 将指定的UI界面压入路由栈,显示新的UI界面 /// /// UI界面的唯一标识符 /// 进入界面的参数,可为空 /// 界面切换策略,默认为Exclusive(独占) /// 实例管理策略,默认为Reuse(复用) void Push(string uiKey, IUiPageEnterParam? param = null, UiTransitionPolicy policy = UiTransitionPolicy.Exclusive, UiInstancePolicy instancePolicy = UiInstancePolicy.Reuse); /// /// 将已存在的UI页面压入路由栈 /// 用于预挂载节点或调试场景 /// /// 已创建的UI页面行为实例 /// 进入界面的参数,可为空 /// 界面切换策略,默认为Exclusive(独占) void Push(IUiPageBehavior page, IUiPageEnterParam? param = null, UiTransitionPolicy policy = UiTransitionPolicy.Exclusive); /// /// 弹出路由栈顶的UI界面,返回到上一个界面 /// /// 界面弹出策略,默认为Destroy(销毁) void Pop(UiPopPolicy policy = UiPopPolicy.Destroy); /// /// 替换当前所有页面为新页面(基于uiKey) /// /// 新UI页面标识符 /// 页面进入参数,可为空 /// 弹出页面时的销毁策略,默认为销毁 /// 推入页面时的过渡策略,默认为独占 /// 实例管理策略 public void Replace( string uiKey, IUiPageEnterParam? param = null, UiPopPolicy popPolicy = UiPopPolicy.Destroy, UiTransitionPolicy pushPolicy = UiTransitionPolicy.Exclusive, UiInstancePolicy instancePolicy = UiInstancePolicy.Reuse); /// /// 替换当前所有页面为已存在的页面(基于实例) /// /// 已创建的UI页面行为实例 /// 页面进入参数,可为空 /// 弹出页面时的销毁策略,默认为销毁 /// 推入页面时的过渡策略,默认为独占 public void Replace( IUiPageBehavior page, IUiPageEnterParam? param = null, UiPopPolicy popPolicy = UiPopPolicy.Destroy, UiTransitionPolicy pushPolicy = UiTransitionPolicy.Exclusive); /// /// 清空所有UI界面,重置路由状态 /// void Clear(); /// /// 注册UI切换处理器 /// /// 处理器实例 /// 执行选项 void RegisterHandler(IUiTransitionHandler handler, UiTransitionHandlerOptions? options = null); /// /// 注销UI切换处理器 /// /// 处理器实例 void UnregisterHandler(IUiTransitionHandler handler); /// /// 获取当前栈顶UI的Key /// /// 当前UI Key,如果栈为空返回空字符串 string PeekKey(); /// /// 获取当前栈顶的UI页面行为对象 /// /// 栈顶的IUiPageBehavior对象,如果栈为空则返回null IUiPageBehavior Peek(); /// /// 判断指定UI是否为当前栈顶UI /// bool IsTop(string uiKey); /// /// 判断指定UI是否存在于UI栈中 /// bool Contains(string uiKey); #region 层级管理 /// /// 在指定层级显示UI(非栈管理) /// /// UI标识符 /// UI层级 /// 进入参数 /// 实例策略 void Show( string uiKey, UiLayer layer, IUiPageEnterParam? param = null, UiInstancePolicy instancePolicy = UiInstancePolicy.Reuse); /// /// 在指定层级显示UI(基于实例) /// /// UI页面实例 /// UI层级 void Show(IUiPageBehavior page, UiLayer layer); /// /// 隐藏指定层级的UI /// /// UI标识符 /// UI层级 /// 是否销毁实例 void Hide(string uiKey, UiLayer layer, bool destroy = false); /// /// 清空指定层级的所有UI /// /// UI层级 /// 是否销毁实例 void ClearLayer(UiLayer layer, bool destroy = false); /// /// 获取指定层级的UI实例 /// /// UI标识符 /// UI层级 /// UI实例,不存在则返回null IUiPageBehavior? GetFromLayer(string uiKey, UiLayer layer); /// /// 判断指定层级是否有UI显示 /// /// UI层级 /// 是否有UI显示 bool HasVisibleInLayer(UiLayer layer); #endregion }