refactor(input): own gameplay action routing

Move the sole semantic action-priority graph, combat and diagnostic commands, and retained-root item-drop lifetime behind focused typed owners. Preserve retail toggle behavior, explicit auto-wield cancellation, shutdown quiescence, and symmetric callback cleanup.

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-22 12:43:05 +02:00
parent 8b8afeefa3
commit 4eae9b4f5a
25 changed files with 2608 additions and 418 deletions

View file

@ -44,9 +44,11 @@ public sealed class CombatInputPlannerTests
{
var held = Equipped(EquipMask.Held, ItemType.Misc, combatUse: 0);
Assert.Equal(
CombatMode.NonCombat,
CombatInputPlanner.GetDefaultCombatMode([held]));
DefaultCombatModeDecision decision =
CombatInputPlanner.GetDefaultCombatModeDecision([held]);
Assert.Equal(CombatMode.NonCombat, decision.Mode);
Assert.Same(held, decision.IncompatibleHeldItem);
}
[Fact]
@ -64,6 +66,9 @@ public sealed class CombatInputPlannerTests
Assert.Equal(
CombatMode.Missile,
CombatInputPlanner.ToggleMode(CombatMode.NonCombat, CombatMode.Missile));
Assert.Equal(
CombatMode.NonCombat,
CombatInputPlanner.ToggleMode(CombatMode.NonCombat, CombatMode.NonCombat));
}
[Fact]
@ -71,6 +76,7 @@ public sealed class CombatInputPlannerTests
{
Assert.Equal(CombatMode.NonCombat, CombatInputPlanner.ToggleMode(CombatMode.Melee));
Assert.Equal(CombatMode.NonCombat, CombatInputPlanner.ToggleMode(CombatMode.Magic));
Assert.Equal(CombatMode.NonCombat, CombatInputPlanner.ToggleMode(CombatMode.Undef));
}
[Theory]