3.5 KiB
Optional native flight input observations
Run the existing Core powered-flight case with --flight-input-diagnostics to
append -errFlightInputDiag 1. Without that flag the new observations stay off.
All code is WORKBENCH-only and uses the existing exact owned pilot/aircraft
authority checks. It does not change controls, AI ownership, input bindings,
settings, collective mode, rotor signals or the flight outcome.
The fixture owns one native OnApplyControls hook which calls vanilla first, then
its exact-pilot ApplyPilot method. The optional observer overrides that probe
method: it snapshots the native context before this callback's final writes,
calls the normal implementation once, and captures immediate readback only if
that call actually wrote. It does not add another native hook or integrate the
controller a second time. Preparation is observed separately by the fixture.
Existing two-second telemetry gains at most 120 batches of three lines:
sequence/age, before-write and written inputs, and native rotor signals plus
autohover and collective mode.
writtenFRA and beforeWriteFRA contain cyclic-forward, cyclic-aside and
anti-torque in that order. beforeWriteSequence identifies the most recent
previous write when the next native Apply callback began; the final written
sequence normally advances afterward. These observations reveal native changes
between callbacks, but neither snapshot by itself proves downstream force
application. A callback count of zero or age -1 means no observation. There are
no pass/fail assertions or control writes in this optional diagnostic file.
The flight fixture's mandatory, flag-independent positive rotor-signal gate is
described in the flight experiment.
Installed source confirms:
SCR_CharacterControllerComponent.OnApplyControls(IEntity owner, float timeSlice)atscripts/Game/Character/SCR_CharacterControllerComponent.c:579, matching the native declaration atgenerated/Components/CharacterControllerComponent.c:474.BaseVehicleControllerComponent.GetSignalsManager()and helicopterGetAutohoverEnabled()/GetCollectiveMode()are real getters.SignalsManagerComponent.FindSignalreturns -1 when absent;GetSignalValuereturns0 on an invalid index, so the helper checks the index and printsmissinginstead. No signal is added or assigned.- Stock
Mi8_base.et:878–891connects nativeMainRotorCollective,MainRotorCyclicForward,MainRotorCyclicAside, andTailRotorCollectivesignals to its rotor animation variables. Those exact names are observed.
These signals are stronger downstream observations than an immediate input setter/getter equality. They still do not establish a documented numeric mapping from input to physical thrust, guarantee same-frame simulation ordering, or prove the simulation applied the expected force. The native APIs do not document that mapping or callback ordering sufficiently for those claims. Existing actual motion, RPM, fuel and contact assertions remain necessary. An autohover=true sample discloses another active controller; the diagnostic never toggles it.
Four local source/runner checks pass without launching the engine or audio. The earlier observer compiled and exposed real input overwrites in 100422/101342; the revised before-write/final-write observer awaits its next source-bound native run. A native failure must remain a failure; these observations neither filter errors nor convert missing signals into zeros or successful flight evidence.