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