WIP: PFD instrument
This commit is contained in:
parent
4be36eb39e
commit
740a72bcb6
23 changed files with 432 additions and 32 deletions
50
project/instruments/pfd.gd
Normal file
50
project/instruments/pfd.gd
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
@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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue