58 lines
1.9 KiB
GDScript
58 lines
1.9 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
|
|
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)
|
|
|
|
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
|