73 lines
2.2 KiB
GDScript
73 lines
2.2 KiB
GDScript
@tool
|
|
class_name DemoStaging
|
|
extends XRToolsStaging
|
|
|
|
## Introduction
|
|
#
|
|
# This is an example of using the staging system in XRTools
|
|
# to create an environment in which you can background load
|
|
# scenes and switch between them.
|
|
#
|
|
# There is also some example code here on how to react to
|
|
# the player taking their headset on/off.
|
|
#
|
|
# The primary function here is to trigger the
|
|
# "Press to continue" dialog when switching scenes.
|
|
# We do not want to enter our just loaded scene when the
|
|
# player is still thumbling around putting their headset on
|
|
# so if we detect they hadn't put their headset on yet
|
|
# when we were scene switching, we prompt the user.
|
|
#
|
|
# Finally this shows an example of how to react to pause
|
|
# a game. This is not implemented in this demo (yet) but
|
|
# note that most XR runtimes stop giving us controller
|
|
# tracking data at this point.
|
|
|
|
var scene_is_loaded : bool = false
|
|
|
|
# Stores which hand the control pad is bound to
|
|
var control_pad_hand : String = "LEFT"
|
|
|
|
|
|
func _ready() -> void:
|
|
# In Godot 4 we must now manually call our super class ready function
|
|
super()
|
|
|
|
|
|
func _on_Staging_scene_loaded(_scene, _user_data):
|
|
# We only show the press to continue the first time we load a scene
|
|
# to give the player time to put their headset on.
|
|
prompt_for_continue = false
|
|
scene_is_loaded = true
|
|
|
|
|
|
func _on_Staging_scene_exiting(_scene, _user_data):
|
|
# We no longer have an active scene
|
|
scene_is_loaded = false
|
|
|
|
|
|
func _on_Staging_xr_started():
|
|
# We get the 'xr_started' signal when the user puts on their headset,
|
|
# or returns from the system menus.
|
|
# If the user did so while we were already scene switching
|
|
# we leave our prompt for continue on,
|
|
# else we turn our prompt for continue off.
|
|
if scene_is_loaded:
|
|
# No longer need our prompt
|
|
prompt_for_continue = false
|
|
|
|
# This would be a good moment to unpause your game
|
|
|
|
|
|
func _on_Staging_xr_ended():
|
|
# We get the 'xr_ended' whenever the player removes their headset (or goes
|
|
# into the menu system).
|
|
#
|
|
# If the user doesn't put their headset on again before we load a
|
|
# new scene, we'll want to show the prompt so we don't load the
|
|
# next scene in while the player is still adjusting their position
|
|
prompt_for_continue = true
|
|
|
|
if scene_is_loaded:
|
|
# This would be a good moment to pause your game
|
|
pass
|