@tool @icon("res://addons/godot-xr-tools/editor/icons/function.svg") class_name XRToolsDesktopControlerHider extends Node ## XR Tools Controler Hider ## ## This script hides controler if XR is not active. var _pointer_disabler := false var _last_xr_active := true # XRStart node @onready var xr_start_node = XRTools.find_xr_child( XRTools.find_xr_ancestor(self, "*Staging", "XRToolsStaging"),"StartXR","Node") # Parent controller @onready var _controller : XRController3D = XRHelpers.get_xr_controller(self) func _ready() -> void: if get_parent().has_method("is_xr_class"): if get_parent().is_xr_class("XRToolsFunctionPointer"): _pointer_disabler = true if get_parent() is XRToolsFunctionPointer: _pointer_disabler = true # Add support for is_xr_class on XRTools classes func is_xr_class(name : String) -> bool: return name == "XRToolsDesktopControlerHider" func _process(_delta: float) -> void: if Engine.is_editor_hint() or !is_inside_tree(): return if xr_start_node.is_xr_active()==_last_xr_active: return if _pointer_disabler: get_parent().enabled=xr_start_node.is_xr_active() elif is_instance_valid(_controller): _controller.visible=xr_start_node.is_xr_active() _last_xr_active=xr_start_node.is_xr_active() # This method verifies the movement provider has a valid configuration. func _get_configuration_warnings() -> PackedStringArray: var warnings := PackedStringArray() # Check the controller node if !XRHelpers.get_xr_controller(self) \ and !XRTools.find_xr_ancestor(self,"*","XRToolsFunctionPointer"): warnings.append("This node must be within a branch of an XRController3D node") # Return warnings return warnings