feat(combat): port retail basic combat bar

Mount authored gmCombatUI, share one press/hold/release request state machine across DAT buttons and keybindings, and recover the exact 1.0s/0.8s power timing from matching retail x86. The same timer fixes jump charge, while ready-stance, response queueing, auto-repeat, layout binding, migration, and conformance coverage keep behavior architectural rather than panel-local.

Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-11 14:03:28 +02:00
parent 9958458318
commit 2215c76c7e
22 changed files with 1265 additions and 46 deletions

View file

@ -108,6 +108,19 @@ public class KeyBindingsRetailTests
Assert.Equal(InputAction.EscapeKey, hit!.Value.Action);
}
[Theory]
[InlineData(Key.Delete, InputAction.CombatLowAttack)]
[InlineData(Key.End, InputAction.CombatMediumAttack)]
[InlineData(Key.PageDown, InputAction.CombatHighAttack)]
public void CombatAttackHeightBindings_EmitHoldTransitions(Key key, InputAction action)
{
var b = KeyBindings.RetailDefaults();
var hit = b.Find(new KeyChord(key, ModifierMask.None), ActivationType.Hold);
Assert.Equal(action, hit?.Action);
}
[Fact]
public void QuickSlot_5_bareUsesAndCtrlSelects()
{