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
};
}
}