mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-14 06:34:30 +08:00
- 修复 InputBindingStore 只读查询会污染导出快照的问题 - 修复 Godot 输入绑定导入时未清理残留动作绑定的问题 - 补充输入运行时与 Godot backend 的 XML 契约说明和 README 入口 - 更新 ai-plan 跟踪并补充针对 PR #346 的回归测试
3.7 KiB
3.7 KiB
Input System Godot Integration 追踪
2026-05-10
阶段:统一输入抽象与 Godot 适配首轮落地(RP-001)
- 创建长分支
feat/input-system-godot-integration,并在feat/input-system-godot-integration#346上推进独立实现与验证 - 在
GFramework.Game.Abstractions/Input/新增:InputBindingDescriptorInputActionBindingInputBindingSnapshotInputDeviceContextIInputBindingStoreIInputDeviceTrackerIUiInputActionMapIUiInputDispatcher
- 在
GFramework.Game/Input/新增:InputBindingStoreInputDeviceTrackerUiInputActionMapUiInputDispatcher
- 在
GFramework.Godot/Input/新增:GodotInputBindingCodecIGodotInputMapBackendGodotInputMapBackendGodotInputBindingStore
- 关键设计决策:
- 保留字符串动作名,直接复用
InputActions.*常量 - 抽象层只暴露 descriptor / snapshot,不暴露 Godot
InputEvent - Godot backend 改成 descriptor-based contract,避免测试直接依赖原生
InputEvent实例 SetPrimaryBinding(...)改为按完整快照回写后端,以保留冲突交换语义
- 保留字符串动作名,直接复用
- 新增测试:
GFramework.Game.Tests/Input/InputBindingStoreTests.csGFramework.Game.Tests/Input/UiInputDispatcherTests.csGFramework.Godot.Tests/Input/GodotInputBindingStoreTests.cs
- 文档更新:
- 新增
docs/zh-CN/game/input.md - 新增
docs/zh-CN/godot/input.md - 更新
docs/zh-CN/game/index.md - 更新
docs/zh-CN/godot/index.md - 更新
docs/zh-CN/tutorials/godot-integration.md - 更新
GFramework.Game.Abstractions/README.md - 更新
GFramework.Game/README.md - 更新
GFramework.Godot/README.md
- 新增
下一步
- 若继续推进输入系统,优先定义更多逻辑动作与 gameplay 输入桥接,而不是先扩到宿主品牌文案
- 若要增强 Godot 验证,单独准备真实
InputMap/InputEvent集成宿主,而不是依赖普通 VSTest process
2026-05-11
阶段:PR #346 review follow-up(RP-001)
- 核对当前分支 PR
#346的 CodeRabbit review,确认以下问题仍然适用于本地代码:InputBindingStore.GetBindings(...)读取缺失动作时会隐式创建空条目,并污染ExportSnapshot()GodotInputBindingStore.ImportSnapshot(...)只覆盖快照内动作,未清空后端残留绑定InputDeviceTracker/UiInputDispatcher/IGodotInputMapBackend的 XML 文档缺少线程或异常契约GFramework.Game.Abstractions/README.md与GFramework.Game/README.md缺少输入系统文档入口- 公开 trace 中仍包含 worktree 目录名,已改为
feat/input-system-godot-integration#346
- 本轮未跟进
InputBindingDescriptor、InputActionBinding、InputBindingSnapshot、InputDeviceContext改成record的 nitpick- 原因:这些建议偏向值语义风格统一,不是当前 PR 中已验证的行为缺陷;本轮优先收敛真实回归风险与契约缺口
- 新增回归测试:
InputBindingStoreTests.GetBindings_WhenActionMissing_Should_NotMutateSnapshotGodotInputBindingStoreTests.ImportSnapshot_WhenActionMissingFromSnapshot_Should_ClearBackendBindings
- 验证结果:
dotnet test GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release --filter "FullyQualifiedName~InputBindingStoreTests|FullyQualifiedName~UiInputDispatcherTests"通过dotnet test GFramework.Godot.Tests/GFramework.Godot.Tests.csproj -c Release --filter "FullyQualifiedName~GodotInputBindingStoreTests"通过
下一步
- 运行针对本次改动文件的 license-header 检查并补录结果
- 如需继续消化 PR review,再单独评估值对象切换到
record是否值得放进同一个 PR