80 lines
2.2 KiB
GDScript
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
|