visualisation-marsh/project/instruments/pfd.gd

50 lines
1.6 KiB
GDScript

@tool
class_name PFD
extends Node2D
@export var euler_attitude_deg: Vector3:
set(value):
euler_attitude_deg = value
horizon_pivot.rotation = deg_to_rad(-value.x)
const px_per_deg: float = 6.56
horizon_background.position.y = px_per_deg * clamp(value.y, -30, 30)
heading_ticks.rotation = deg_to_rad(-value.z)
heading_label.text = "%03d" % (int(round(value.z) + 360) % 360)
@export var airspeed: float:
set(value):
airspeed = value
airspeed_label.text = str(int(round(value)))
@export var groundspeed: float:
set(value):
groundspeed = value
groundspeed_label.text = str(int(round(value)))
@export var altitude: float:
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:
set(value):
climbrate = value
climbrate_arrow.scale.y = clamp(value / 1000.0, -1, 1)
@onready var horizon_pivot: Node2D = $HorizonMask/HorizonOrigin/Pivot
@onready var horizon_background: Node2D = $HorizonMask/HorizonOrigin/Pivot/Background
@onready var heading_ticks: Node2D = $HeadingOrigin/Ticks
@onready var climbrate_arrow: Node2D = $ClimbrateOrigin/Polygon2D
@onready var airspeed_label: Label = $Airspeed
@onready var groundspeed_label: Label = $Groundspeed
@onready var altitude_label: Label = $Altitude
@onready var heading_label: Label = $Heading
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)