xrjamfeb2025/addons/godot-xr-tools/desktop-support/controler_hider.gd

54 lines
1.6 KiB
GDScript

@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