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 路由守卫 /// /// 注册路由守卫 /// /// 守卫实例 void AddGuard(IUiRouteGuard guard); /// /// 注册路由守卫(泛型方法) /// /// 守卫类型,必须实现 IUiRouteGuard 且有无参构造函数 void AddGuard() where T : IUiRouteGuard, new(); /// /// 移除路由守卫 /// /// 守卫实例 void RemoveGuard(IUiRouteGuard guard); #endregion }