GFramework/GFramework.Game/Input/UiInputDispatcher.cs
gewuyou 5f9589ed3c fix(input): 修复输入绑定快照与导入语义
- 修复 InputBindingStore 只读查询会污染导出快照的问题

- 修复 Godot 输入绑定导入时未清理残留动作绑定的问题

- 补充输入运行时与 Godot backend 的 XML 契约说明和 README 入口

- 更新 ai-plan 跟踪并补充针对 PR #346 的回归测试
2026-05-11 08:53:14 +08:00

41 lines
1.4 KiB
C#

// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Game.Abstractions.Input;
using GFramework.Game.Abstractions.UI;
namespace GFramework.Game.Input;
/// <summary>
/// 提供逻辑动作到 UI 路由语义分发的默认桥接。
/// </summary>
public sealed class UiInputDispatcher : IUiInputDispatcher
{
private readonly IUiInputActionMap _actionMap;
private readonly IUiRouter _router;
/// <summary>
/// 初始化 UI 输入分发器。
/// </summary>
/// <param name="actionMap">动作映射表。</param>
/// <param name="router">目标 UI 路由器。</param>
/// <exception cref="ArgumentNullException">当 <paramref name="actionMap" /> 为 <see langword="null" /> 时抛出。</exception>
/// <exception cref="ArgumentNullException">当 <paramref name="router" /> 为 <see langword="null" /> 时抛出。</exception>
public UiInputDispatcher(IUiInputActionMap actionMap, IUiRouter router)
{
_actionMap = actionMap ?? throw new ArgumentNullException(nameof(actionMap));
_router = router ?? throw new ArgumentNullException(nameof(router));
}
/// <inheritdoc />
public bool TryDispatch(string actionName)
{
if (!_actionMap.TryMap(actionName, out var action))
{
return false;
}
return _router.TryDispatchUiAction(action);
}
}