50 lines
1.6 KiB
GDScript
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)
|