G1000: two-way sim sync, more PFD/MFD fidelity, authentic dialogs
Sync (FlyWithLua companions in plugins/ + server/fmssync.js): - FMS flight-plan two-way sync (App <-> in-sim FMS) via fms-sync.lua - G1000 UI-state publish (page/range/inset) via ui-sync.lua + CDI source, baro, map-range follow - Terrain awareness: elevation grid probe (terrain-probe.lua) -> red/yellow MFD overlay vs aircraft altitude PFD: - AFCS mode annunciation bar from autopilot _status datarefs - CDI source GPS/VLOC colouring, BRG1/BRG2 pointers + DME windows, marker beacons - magenta speed/altitude trend vectors, selected-altitude alerting - time-based (frame-rate-independent) smoothing for attitude/heading/tapes MFD: - nav data bar (DTK/ETE/active leg), airways overlay from earth_awy.dat, compass rose anchored to the ownship Dialogs (NEAREST/FLIGHTPLAN/DIRECT-TO/PROCEDURES): - flat, square, embedded G1000 look (no shadow/rounded/transparency) - compact lower-right placement, no close X (softkey toggles), single window - NEAREST 2-line entries (ILS/VFR, COM freq, runway length), PROC action menu Service worker: network-first HTML so reloads pick up new builds (cache v2). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -60,6 +60,25 @@ export const DATAREFS = {
|
||||
hsiToFrom: 'sim/cockpit2/radios/indicators/hsi_flag_from_to_pilot',
|
||||
navBearing: 'sim/cockpit2/radios/indicators/hsi_bearing_deg_mag_pilot',
|
||||
|
||||
// --- bearing pointers (BRG1/BRG2) + DME + marker beacons ---
|
||||
nav1Brg: 'sim/cockpit2/radios/indicators/nav1_bearing_deg_mag',
|
||||
nav2Brg: 'sim/cockpit2/radios/indicators/nav2_bearing_deg_mag',
|
||||
nav1Dme: 'sim/cockpit2/radios/indicators/nav1_dme_distance_nm',
|
||||
nav2Dme: 'sim/cockpit2/radios/indicators/nav2_dme_distance_nm',
|
||||
mkrOuter: 'sim/cockpit2/radios/indicators/outer_marker_lit',
|
||||
mkrMiddle: 'sim/cockpit2/radios/indicators/middle_marker_lit',
|
||||
mkrInner: 'sim/cockpit2/radios/indicators/inner_marker_lit',
|
||||
|
||||
// --- G1000 UI state (for display sync with the in-sim G1000) ---
|
||||
// CDI/HSI source: 0 = NAV1/VLOC1, 1 = NAV2/VLOC2, 2 = GPS (standard dataref).
|
||||
cdiSrc: 'sim/cockpit2/radios/actuators/HSI_source_select_pilot',
|
||||
// The rest are G1000-internal, so the FlyWithLua companion (ui-sync.lua)
|
||||
// publishes them as custom datarefs. Absent until the plugin runs -> the web
|
||||
// G1000 just keeps its own local UI state (graceful).
|
||||
uiMfdPage: 'glasscockpit/ui/mfd_page', // 0 map, 1 fpl, 2 nrst
|
||||
uiMapRange: 'glasscockpit/ui/map_range_nm', // active map range, NM
|
||||
uiInset: 'glasscockpit/ui/inset', // PFD inset map on/off (0/1)
|
||||
|
||||
// --- G1000 PFD: data fields ---
|
||||
baro: 'sim/cockpit2/gauges/actuators/barometer_setting_in_hg_pilot',
|
||||
tas: 'sim/cockpit2/gauges/indicators/true_airspeed_kts_pilot',
|
||||
@@ -88,6 +107,21 @@ export const DATAREFS = {
|
||||
apSpdBug: 'sim/cockpit2/autopilot/airspeed_dial_kts_mach',
|
||||
apEngaged: 'sim/cockpit2/autopilot/servos_on',
|
||||
navHdef: 'sim/cockpit2/radios/indicators/hsi_relative_bearing_vor_pilot',
|
||||
|
||||
// --- AFCS mode annunciation (the green/white mode strip on a real G1000) ---
|
||||
// X-Plane's per-mode status datarefs: 0 = off, 1 = armed, 2 = active/captured.
|
||||
// These mean the AFCS bar mirrors the sim exactly, no Lua needed.
|
||||
apMode: 'sim/cockpit2/autopilot/autopilot_mode', // 0 off, 1 FD, 2 AP
|
||||
hdgStatus: 'sim/cockpit2/autopilot/hdg_status',
|
||||
navStatus: 'sim/cockpit2/autopilot/nav_status',
|
||||
gpssStatus: 'sim/cockpit2/autopilot/gpss_status',
|
||||
aprStatus: 'sim/cockpit2/autopilot/approach_status',
|
||||
bcStatus: 'sim/cockpit2/autopilot/backcourse_status',
|
||||
altStatus: 'sim/cockpit2/autopilot/alt_hold_status',
|
||||
vsStatus: 'sim/cockpit2/autopilot/vvi_status',
|
||||
flcStatus: 'sim/cockpit2/autopilot/speed_status',
|
||||
gsStatus: 'sim/cockpit2/autopilot/glideslope_status',
|
||||
vnavStatus: 'sim/cockpit2/autopilot/vnav_status',
|
||||
};
|
||||
|
||||
// Datarefs the frontend may WRITE (e.g. turning the heading bug knob).
|
||||
@@ -121,6 +155,17 @@ export const COMMANDS = {
|
||||
xpdrIdent: 'sim/transponder/transponder_ident',
|
||||
};
|
||||
|
||||
// Per-radio standby tuning (coarse = MHz, fine = kHz) + active/standby flip.
|
||||
// These work regardless of the dataref's frequency units, so the web tuner just
|
||||
// fires them — no risky raw frequency writes.
|
||||
for (const r of ['nav1', 'nav2', 'com1', 'com2']) {
|
||||
COMMANDS[`${r}CoarseUp`] = `sim/radios/stby_${r}_coarse_up`;
|
||||
COMMANDS[`${r}CoarseDown`] = `sim/radios/stby_${r}_coarse_down`;
|
||||
COMMANDS[`${r}FineUp`] = `sim/radios/stby_${r}_fine_up`;
|
||||
COMMANDS[`${r}FineDown`] = `sim/radios/stby_${r}_fine_down`;
|
||||
COMMANDS[`${r}Swap`] = `sim/radios/${r}_standby_flip`;
|
||||
}
|
||||
|
||||
// Every clickable G1000 bezel control maps to a real X-Plane command. The PFD
|
||||
// is unit n1, the MFD is unit n3 (the default C172 layout). Aliases are
|
||||
// prefixed pfd_/mfd_ so the frontend just says e.g. command('mfd_fpl').
|
||||
|
||||
Reference in New Issue
Block a user