acdream/tests/AcDream.UI.Abstractions.Tests/Input
Erik 111fbba3bb fix(input): free-fly is unreachable, and Escape no longer answers to it
User report: "ESC is hardwired to Freefly which it should not be ... the
freefly should really be discarded. Should not be in the client."

Two separate things were true.

Escape ran a priority chain — cancel target mode, else EXIT FLY MODE, else
leave player mode, else close a window — so in a session that had reached the
free-fly camera, Escape spent itself on that rung instead of doing what the
player expected. The rung is gone; a session somehow in fly mode now falls
through to the next one.

And free-fly was still bound: Ctrl+Shift+F in RetailDefaults (the table
production actually loads) and plain F in AcdreamCurrentDefaults (dead since
K.1c, removed anyway so it cannot be revived by accident). The comment on the
live binding advertised two other ways in — the ImGui View menu and the Debug
panel's "Toggle Free-Fly Mode" button — but BOTH went away with
AcDream.UI.ImGui at Campaign V, so the shortcut was the last route in. It is
now unbound, and a test pins that across both default tables.

This makes free-fly unreachable rather than deleted. The implementation still
spans 25 files (CameraController, FlyCamera, the dispatcher capture, pointer
controller, composition, and a streaming observer source), and ripping that out
at the end of a long session is how a regression lands in the camera. Scoped as
its own follow-up; unbinding is what fixes the reported behaviour today.

The Escape priority test was updated rather than deleted: its middle row now
asserts the fall-through, so the removed rung is documented by a passing test
instead of by its absence.

Solution builds clean; full hermetic gate green.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 09:55:16 +02:00
..
FakeKeyboardSource.cs feat(input): #21 Phase K.1a - input architecture skeleton (parallel to existing handlers) 2026-04-25 23:17:41 +02:00
FakeMouseSource.cs feat(input): #21 Phase K.1a - input architecture skeleton (parallel to existing handlers) 2026-04-25 23:17:41 +02:00
InputDispatcherCaptureTests.cs refactor(settings): OP9 — retire the dead F11 settings surface + fully-superseded GameplaySettings 2026-08-11 13:18:53 +02:00
InputDispatcherClickTests.cs feat(input): assess world objects on right click 2026-07-24 05:42:28 +02:00
InputDispatcherDoubleClickTests.cs test: remove ambient timing from double-click contracts 2026-08-18 11:38:31 +02:00
InputDispatcherIsActionHeldTests.cs refactor(input): own pointer and callback lifetime 2026-07-22 11:59:33 +02:00
InputDispatcherLifetimeTests.cs feat(input): assess world objects on right click 2026-07-24 05:42:28 +02:00
InputDispatcherTests.cs refactor(input): own pointer and callback lifetime 2026-07-22 11:59:33 +02:00
KeyBindingsJsonTests.cs feat(linux): add graphical platform services 2026-07-27 11:54:59 +02:00
KeyBindingsRetailTests.cs fix(input): free-fly is unreachable, and Escape no longer answers to it 2026-08-21 09:55:16 +02:00
KeyBindingsTests.cs test: replace campaign labels with behavior names 2026-08-18 12:25:00 +02:00
KeyChordTests.cs feat(input): #21 Phase K.1a - input architecture skeleton (parallel to existing handlers) 2026-04-25 23:17:41 +02:00
MmbMouseLookTests.cs fix(gameplay): reconcile wield ownership and target facing 2026-07-15 08:19:23 +02:00
ModifierMaskTests.cs feat(input): #21 Phase K.1a - input architecture skeleton (parallel to existing handlers) 2026-04-25 23:17:41 +02:00
MuteChordDispatchTests.cs fix(input): #358 — RetailDefaults() never carried the Ctrl+M mute binding over from AcdreamCurrentDefaults() 2026-08-10 14:48:44 +02:00