using GFramework.Core.Abstractions.Pause; using GFramework.Game.Abstractions.Enums; namespace GFramework.Game.Abstractions.UI; /// /// 描述一个 UI 页面在输入、World 阻断与暂停上的运行时语义。 /// public sealed class UiInteractionProfile { /// /// 获取默认值实例。 /// public static UiInteractionProfile Default { get; } = new(); /// /// 声明当前页面要捕获的语义动作集合。 /// public UiInputActionMask CapturedActions { get; init; } = UiInputActionMask.None; /// /// 指示当前页面是否阻断 World 指针输入,例如地图点击或相机拖拽。 /// public bool BlocksWorldPointerInput { get; init; } /// /// 指示当前页面是否阻断 World 语义动作输入,例如 gameplay 快捷键。 /// public bool BlocksWorldActionInput { get; init; } /// /// 指示当前页面的可见性是否应驱动暂停栈。 /// public UiPauseMode PauseMode { get; init; } = UiPauseMode.None; /// /// 当 生效时使用的暂停组。 /// public PauseGroup PauseGroup { get; init; } = PauseGroup.Global; /// /// 当场景树暂停时,该页面是否仍需继续处理输入与动画。 /// public bool ContinueProcessingWhenPaused { get; init; } /// /// 页面向暂停栈登记时使用的原因文本。 /// public string PauseReason { get; init; } = string.Empty; /// /// 判断当前配置是否捕获了指定动作。 /// /// 要查询的语义动作。 /// 如果当前配置捕获该动作则返回 public bool Captures(UiInputAction action) { return action switch { UiInputAction.Cancel => CapturedActions.HasFlag(UiInputActionMask.Cancel), UiInputAction.Confirm => CapturedActions.HasFlag(UiInputActionMask.Confirm), _ => false }; } /// /// 为指定层级生成默认交互配置。 /// /// UI 层级。 /// 该层级的默认交互语义。 public static UiInteractionProfile CreateDefault(UiLayer layer) { return layer switch { UiLayer.Modal => new UiInteractionProfile { CapturedActions = UiInputActionMask.Cancel, BlocksWorldPointerInput = true, BlocksWorldActionInput = true }, UiLayer.Topmost => new UiInteractionProfile { CapturedActions = UiInputActionMask.Cancel, BlocksWorldPointerInput = true, BlocksWorldActionInput = true }, _ => Default }; } }