using GFramework.Game.Abstractions.enums;
namespace GFramework.Game.Abstractions.ui;
///
/// UI切换事件,包含UI切换过程中的上下文信息
///
public sealed class UiTransitionEvent
{
///
/// 用户自定义数据字典,用于Handler之间传递数据
///
private readonly Dictionary _context = new(StringComparer.Ordinal);
///
/// 源UI的标识符,切换前的UI key
///
public string FromUiKey { get; init; } = string.Empty;
///
/// 目标UI的标识符,切换后的UI key
///
public string? ToUiKey { get; init; } = string.Empty;
///
/// UI切换类型
///
public UiTransitionType TransitionType { get; init; }
///
/// UI切换策略
///
public UiTransitionPolicy Policy { get; init; }
///
/// UI进入参数
///
public IUiPageEnterParam? EnterParam { get; init; }
///
/// 获取用户自定义数据
///
/// 数据类型
/// 数据键
/// 默认值(当键不存在或类型不匹配时返回)
/// 用户数据
public T Get(string key, T defaultValue = default!)
{
if (_context.TryGetValue(key, out var obj) && obj is T value)
return value;
return defaultValue;
}
///
/// 尝试获取用户自定义数据
///
/// 数据类型
/// 数据键
/// 输出值
/// 是否成功获取
public bool TryGet(string key, out T value)
{
if (_context.TryGetValue(key, out var obj) && obj is T t)
{
value = t;
return true;
}
value = default!;
return false;
}
///
/// 设置用户自定义数据
///
/// 数据类型
/// 数据键
/// 数据值
public void Set(string key, T value)
{
_context[key] = value!;
}
///
/// 检查是否存在指定的用户数据键
///
/// 数据键
/// 是否存在
public bool Has(string key)
{
return _context.ContainsKey(key);
}
///
/// 移除指定的用户数据
///
/// 数据键
/// 是否成功移除
public bool Remove(string key)
{
return _context.Remove(key);
}
}