From 8e3b2934f374dee0c98aad766342a8cde2362ca6 Mon Sep 17 00:00:00 2001 From: "Marek S. Lukasiewicz" Date: Wed, 17 Dec 2025 15:35:52 +0100 Subject: [PATCH 1/3] Display numeric values on PFD --- project/instruments/pfd.gd | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/project/instruments/pfd.gd b/project/instruments/pfd.gd index bd92309..43790a0 100644 --- a/project/instruments/pfd.gd +++ b/project/instruments/pfd.gd @@ -25,10 +25,6 @@ extends Node2D set(value): altitude = value var step = 1 - if value > 49.5: - step = 5 - if value > 99.5: - step = 10 altitude_label.text = str(int(step * round(value / step))) @export var climbrate: float = 1000: @@ -48,3 +44,15 @@ extends Node2D func update(aircraft: Transform3D, velocity: Vector3): var godot_euler = aircraft.basis.get_euler() euler_attitude_deg = Vector3(godot_euler.z, -godot_euler.x, -godot_euler.y) * rad_to_deg(1) + + const mps_to_kt = 1.94384 + var v_local = aircraft.basis.inverse() * velocity + airspeed = max(0, v_local.z) * mps_to_kt + var v_horizontal = Vector3(velocity.x, 0, velocity.z) + groundspeed = v_horizontal.length() * mps_to_kt + + const mps_to_fpm = 196.848 + climbrate = velocity.y * mps_to_fpm + + const m_to_ft = 3.2808 + altitude = aircraft.origin.y * m_to_ft From 59c9c54e358488ee949b15a0f7709e0b4e9da708 Mon Sep 17 00:00:00 2001 From: "Marek S. Lukasiewicz" Date: Wed, 17 Dec 2025 15:36:17 +0100 Subject: [PATCH 2/3] Fix velocity conversion when using NAV_OFS_HDG --- src/marshconnector.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/marshconnector.cpp b/src/marshconnector.cpp index 5d4266e..d43e511 100644 --- a/src/marshconnector.cpp +++ b/src/marshconnector.cpp @@ -243,7 +243,12 @@ Transform3D MarshConnector::get_aircraft() { return offset * marsh; } -Vector3 MarshConnector::get_velocity() { return last_velocity; } +Vector3 MarshConnector::get_velocity() { + float heading_rad = parameters[NAV_OFS_HDG] * Math_PI / 180.0; + // To rotate clockwise looking from above, that's negative Y in Godot + Quaternion heading_offset = Quaternion(Vector3(0, 1, 0), -heading_rad); + return heading_offset.xform(last_velocity); +} Vector2 MarshConnector::get_cyclic() { return Vector2{last_controls.x, last_controls.y}; From aaef0b04757061e0260f1e63cca948be71d7bea9 Mon Sep 17 00:00:00 2001 From: "Marek S. Lukasiewicz" Date: Wed, 17 Dec 2025 15:36:43 +0100 Subject: [PATCH 3/3] Wrap horizontal aircraft position to map extents --- src/marshconnector.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/marshconnector.cpp b/src/marshconnector.cpp index d43e511..591cf11 100644 --- a/src/marshconnector.cpp +++ b/src/marshconnector.cpp @@ -282,6 +282,10 @@ Vector2 MarshConnector::local_meters_from_global_degrees(double latitude, // Y East is just length along the circle of latitude double y = (lon - lon0) * (EARTH_RADIUS * cos(lat0)); + const double map_size = 3000.0; + x = (Math::fract(x / map_size + 0.5) - 0.5) * map_size; + y = (Math::fract(y / map_size + 0.5) - 0.5) * map_size; + return Vector2(x, y); } void MarshConnector::handle_sim_state(mavlink_message_t message) {