godot-ultraleap-plugin/demo/scripts/CubeApplication.gd

80 lines
2.2 KiB
GDScript

extends Node3D
@export var origin_hands : OriginHands
@export var rigged_hands : Node3D
@export var spawner : CubeSpawner
@export var cube_material : PhysicsMaterial
var xr_interface: XRInterface
func _ready():
if not ProjectSettings.get_setting_with_override("xr/openxr/enabled"):
var player : Resource = load("res://scenes/Players/Player.tscn")
var player_node : Node3D = player.instantiate()
add_child(player_node)
return
xr_interface = XRServer.find_interface("OpenXR")
if xr_interface and xr_interface.is_initialized():
print("OpenXR initialised successfully")
var player : Resource = load("res://scenes/Players/XRPlayer.tscn")
var player_node : Node3D = player.instantiate()
add_child(player_node)
var source : UltraleapDeviceNode = $HandTracking/UltraleapDeviceNode
var target : Node3D = player_node.get_node("XROrigin3D").get_node("XRCamera3D").get_node("DeviceContainer")
source.reparent(target, false)
# Turn off v-sync!
DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED)
# Change our main viewport to output to the HMD
get_viewport().use_xr = true
else:
print("OpenXR not initialized, please check if your headset is connected")
func disable_gravity():
PhysicsServer3D.area_set_param(get_viewport().find_world_3d().space, PhysicsServer3D.AREA_PARAM_GRAVITY, 0)
func enable_gravity():
PhysicsServer3D.area_set_param(get_viewport().find_world_3d().space, PhysicsServer3D.AREA_PARAM_GRAVITY, 9.8)
func gravity_toggled(button_pressed):
if button_pressed:
enable_gravity()
else:
disable_gravity()
func joints_toggled(button_pressed):
if button_pressed:
origin_hands.show()
else:
origin_hands.hide()
func hands_toggled(button_pressed):
if button_pressed:
rigged_hands.show()
else:
rigged_hands.hide()
func set_spawner_set_force(button_pressed):
spawner.set_force = button_pressed
func set_spawner_set_torque(button_pressed):
spawner.set_torque = button_pressed
func _process(_delta):
if Input.is_action_just_pressed("toggle_dev_panel"):
var panel : Control = get_node("DevPanel")
if panel.is_visible():
panel.hide()
else:
panel.show()
func max_cubes_value_changed(value):
spawner.max_cubes = value
func on_springiness_value_changed(value):
cube_material.bounce = value