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

44 lines
1.2 KiB
GDScript

@tool
class_name XRToolsDesktopMovementJump
extends XRToolsMovementProvider
## XR Tools Movement Provider for Jumping
##
## This script provides jumping mechanics for the player. This script works
## with the [XRToolsPlayerBody] attached to the players [XROrigin3D].
##
## The player enables jumping by attaching an [XRToolsMovementJump] as a
## child of the appropriate [XRController3D], then configuring the jump button
## and jump velocity.
## Movement provider order
@export var order : int = 20
## Button to trigger jump
@export var jump_button_action : String = "ui_accept"
# Node references
@onready var xr_start_node = XRTools.find_xr_child(
XRTools.find_xr_ancestor(self,
"*Staging",
"XRToolsStaging"),"StartXR","Node")
# Add support for is_xr_class on XRTools classes
func is_xr_class(name : String) -> bool:
return name == "XRToolsDesktopMovementJump" or super(name)
# Perform jump movement
func physics_movement(_delta: float, player_body: XRToolsPlayerBody, _disabled: bool):
# Skip if the jump controller isn't active
if !player_body.enabled or xr_start_node.is_xr_active():
return
# Request jump if the button is pressed
if Input.is_action_pressed(jump_button_action):
player_body.request_jump()