godot-ultraleap-plugin/demo/scripts/HUD.gd
rodolpheh 8b932e3a3c Try to improve stability in editor
The more I made changes, the more it crashed. Got it to a point where
it doesn't crash when starting the editor, but it will crash when
exciting.
2023-11-08 22:47:41 +00:00

126 lines
3.4 KiB
GDScript

extends CanvasLayer
@export var tracking : UltraleapHandTracking
signal tracking_mode_request(tracking_mode : UltraleapTypes.TrackingMode)
signal device_selection(serial : String)
signal undistort_toggled(enabled : bool)
signal view_type_selected(index : int)
var latest_update : float = 0
var panel_hidden : bool = true
# This variable is assumed now but we need to check if it can be received
# by the service if another client pause/resume the tracking
var tracking_paused : bool = false
func _ready():
$AnimationPlayer.play("show_subtitle")
$AnimationPlayer.seek(0, true)
$AnimationPlayer.stop(false)
func _physics_process(_delta):
if Time.get_unix_time_from_system() - latest_update > 0.5:
var frame : UltraleapFrame = tracking.get_last_frame()
if frame != null:
$Footer/TrackingFramerate.text = "Tracking Frame Rate: " + str(ceil(frame.framerate))
latest_update = Time.get_unix_time_from_system()
func play_floating_bottom_text(text : String):
$LabelAnchor/Label.text = text
$AnimationPlayer.play("show_subtitle")
func tracking_mode_changed(tracking_mode):
$TrackingChoice.selected = tracking_mode
play_floating_bottom_text("Tracking mode changed to " + tracking_mode_to_str(tracking_mode))
func button_item_selected(index):
var error = emit_signal("tracking_mode_request", index)
if error != OK:
printerr("Failure emitting the signal for tracking mode request")
tracking.set_tracking_mode(index)
func on_device_added(device):
var was_empty : bool = $Devices.item_count == 0
$Devices.add_item(device.serial)
if was_empty:
$Devices.selected = 0
device_selected(0)
func on_device_removed(device):
for i in range($Devices.item_count):
if $Devices.get_item_text(i) == device.serial:
$Devices.remove_item(i)
break
func device_selected(index):
var serial : String = $Devices.get_item_text(index)
var error = emit_signal("device_selection", serial)
if error != OK:
printerr("Failure emitting the signal for device selection")
func tracking_mode_to_str(tracking_mode : UltraleapTypes.TrackingMode):
return ["Desktop", "HMD", "Screentop"][tracking_mode]
func _on_undistort_button_toggled(button_pressed):
emit_signal("undistort_toggled", button_pressed)
func on_view_type_selected(index):
emit_signal("view_type_selected", index)
func on_images_policy_changed(state : bool):
$Toggles/ImagesEnabledToggle.set_pressed_no_signal(state)
func on_images_enabled_toggle_pressed(state : bool):
tracking.set_images_policy(state)
func on_panel_button_pressed():
if (panel_hidden):
$LeftPanelAnimationPlayer.play("Show_Panel")
panel_hidden = false
else:
$LeftPanelAnimationPlayer.play("Hide_Panel")
panel_hidden = true
func on_pause_resume_button_pressed():
if tracking_paused:
$PauseResumeTracking.text = ""
tracking_paused = false
else:
$PauseResumeTracking.text = ""
tracking_paused = true
tracking.set_pause(tracking_paused)
func _on_presence_of_device_changed(is_present):
if is_present:
$TrackingChoice.disabled = false
$Devices.disabled = false
else:
$TrackingChoice.disabled = true
$Devices.clear()
$Devices.disabled = true
func _on_allow_pause_resume_toggle_toggled(button_pressed):
tracking.set_allow_pause_resume_policy(button_pressed)
func _on_allow_pause_resume_policy_changed(state):
$PanelAnchor/Panel/VBoxContainer/AllowPauseResumeToggle.set_pressed_no_signal(state)
$PauseResumeTracking.disabled = !state
func _on_device_changed(device):
$TrackingChoice.selected = tracking.get_tracking_mode()