Files
gig-line/Docs/controls.md
T
zwitschi bc2e9c3b8e feat(hud): F3 debug overlay — FPS, frame time, worst frame, state
A top-left readout for performance work: smoothed FPS and frame time, the worst
frame in a rolling two-second window, the active view, player speed, a frame
counter and the player's position in metres from the project origin.

- F3 toggles it, through the console variable gigline.Debug so a packaged build can
  be checked without a rebuild (IA_ToggleDebug).
- On automatically for -perf and -qaselftest, so a performance capture never depends
  on pressing a key first; off in the built demo, because a player should not see an
  FPS counter over Hollywood Boulevard.
- The first two seconds are a warm-up window excluded from the worst-frame figure.
  Without it the readout showed "worst 400 ms" for a healthy run: the startup shader
  and streaming hitches dominated the rolling maximum.

Measured cost on the self-test route at 1440p: 2.64 to 2.77 ms average, about 5 %,
still 6x the floor. The release-check number stays the overlay-off run; the
overlay-on series is committed beside it as
Docs/perf/0.2.0-walk-frametimes-overlay.csv.

Docs: controls (F3 row, overlay section, switch table), release checks (cost row),
architecture building block view (HUD and input list).
2026-11-09 12:41:01 +01:00

3.8 KiB

Controls

Keyboard and mouse. The same list is shown in-game, bottom-right of the frame (AGigLineHUD), and the packaged Linux build ships with these bindings.

Action Key Notes
Move forward W 4 m/s walk
Move back S
Strafe right D
Strafe left A
Look Mouse Captured on launch; Escape releases it
Jump Space
Reset to start R Returns to the grounded spawn point
Pause / release mouse Escape Second press resumes and recaptures the mouse
Swap first / third person V First person is the default; the body is hidden in that view
Show / hide debug overlay F3 FPS, frame time, worst frame, view mode, speed and player position

Notes

  • Movement is relative to where you are looking (controller yaw), so the capsule stays upright on the sloped street.
  • The mouse is captured on launch, so looking works without clicking first. Escape toggles the capture as part of pause.
  • Bindings are Enhanced Input actions in /Game/Input built by Tools/ue_create_input_assets.py; the mapping context is IMC_Default.

Changes since 0.1.0

  • V swaps first and third person (0.2.0, IA_ToggleCamera). The shipped default view is still first person, as the owner decided for 0.1.0; third person adds a collision-tested spring-arm camera and a visible, animated body. Escape still pauses and releases the mouse in either view.

Debug overlay

F3 toggles a top-left readout: smoothed FPS and frame time, the worst frame in a rolling two-second window, the active view (first or third person), player speed, a frame counter, and the player's position in metres from the project origin. The first two seconds of a session are a warm-up window and are excluded from the worst-frame figure, because shader and streaming hitches there made a healthy run read as a 400 ms stall.

It is off in the built demo — a player should not see an FPS counter over Hollywood Boulevard — and on automatically when the process is started with -perf or -qaselftest, so a performance capture never depends on someone pressing a key first. In a running build it can also be forced with the console variable gigline.Debug 1.

Cost: about 5 % of frame time at 1440p in the demo (2.64 → 2.77 ms average), measured in the same self-test route. The performance release check is recorded without the overlay for that reason; the overlay run is kept beside it as Docs/perf/0.2.0-walk-frametimes-overlay.csv.

Review and harness switches

These are command-line switches for the screenshot pipeline and QA runs, not player controls. They exist so a capture is reproducible rather than dependent on a human pressing keys at the right moment.

Switch Effect
-thirdperson Starts the pawn in the third-person rig, so a capture shows the body without anyone pressing V
-walk Holds forward input from the first frame — what makes the stride shot possible
-qaselftest Runs the scripted walk / reset / pause / transect checks and quits; also enables the debug overlay
-perf Enables the debug overlay for a manual frame-time check

The walking shot is driven per shot rather than by the switch: the shot actor enables the walk only while a tracking (ShotFollow) camera is being captured, and returns the pawn to spawn afterwards, so the fixed-camera shots still find it in place.

Testing input without a physical keyboard

Tools/input_test.py injects OS-level keyboard/mouse events through a virtual /dev/uinput device (see Tools/input_emulation.py), e.g.:

python3 Tools/input_test.py --sequence move:2,look:3

It drives the focused game window exactly like real hardware, which is how the controls were regression-tested on the packaged build.