45 lines
1.2 KiB
GDScript
45 lines
1.2 KiB
GDScript
extends BaseWidgetNode
|
|
class_name CompassWidgetNode
|
|
|
|
|
|
@export_range(0., 359., 0.1) var north_deg = 0.
|
|
var north_rad: float
|
|
var indicator: Sprite2D
|
|
var label: Label
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready() -> void:
|
|
super._ready()
|
|
if north_deg == null:
|
|
north_deg = 0.
|
|
north_rad = deg_to_rad(north_deg)
|
|
indicator = get_node("CompassIndicator")
|
|
label = get_node("Label")
|
|
|
|
func _update_data():
|
|
if label == null:
|
|
return
|
|
#label.rotation = -host_vehicle.heading_rad
|
|
label.text = get_direction_label(host_vehicle.heading_rad)
|
|
|
|
func get_direction_label(heading_rad):
|
|
var heading_deg = rad_to_deg(heading_rad)
|
|
if 0 <= heading_deg and heading_deg <= 22.5:
|
|
return 'N'
|
|
elif 22.5 < heading_deg and heading_deg <= 67.5:
|
|
return "NE"
|
|
elif 67.5 < heading_deg and heading_deg <= 112.5:
|
|
return "E"
|
|
elif 112.5 < heading_deg and heading_deg <= 157.5:
|
|
return "SE"
|
|
elif 157.5 < heading_deg and heading_deg <= 202.5:
|
|
return "S"
|
|
elif 202.5 < heading_deg and heading_deg <= 247.5:
|
|
return "SW"
|
|
elif 247.5 < heading_deg and heading_deg <= 292.5:
|
|
return "W"
|
|
elif 292.5 < heading_deg and heading_deg <= 337.5:
|
|
return "NW"
|
|
else:
|
|
return "N"
|