22class_name XRToolsDesktopMovementSprint
33extends XRToolsMovementProvider
44
5-
65## XR Tools Movement Provider for Sprinting
76##
87## This script provides sprinting movement for the player. It assumes there is
@@ -13,10 +12,10 @@ extends XRToolsMovementProvider
1312## the [XROrigin3D] node rather than to a specific [XRController3D].
1413
1514
16- ## Signal emitted when sprinting starts
15+ ## Emitted when sprinting starts
1716signal sprinting_started ()
1817
19- ## Signal emitted when sprinting finishes
18+ ## Emitted when sprinting finishes
2019signal sprinting_finished ()
2120
2221
@@ -28,57 +27,64 @@ enum SprintType {
2827
2928
3029## Type of sprinting
31- @export var sprint_type : SprintType = SprintType .HOLD_TO_SPRINT
30+ @export var sprint_type : SprintType = SprintType .HOLD_TO_SPRINT
3231
3332## Sprint speed multiplier (multiplier from speed set by direct movement node(s))
34- @export_range (1.0 , 4.0 ) var sprint_speed_multiplier : float = 2.0
33+ @export_range (1.0 , 4.0 ) var sprint_speed_multiplier : float = 2.0
3534
3635## Movement provider order
37- @export var order : int = 11
36+ @export var order : int = 11
3837
39- ## Sprint button
40- @export var sprint_button : String = "action_sprint"
38+ ## Input action for sprinting
39+ @export var sprint_button : String = "action_sprint"
4140
42- # Sprint button down state
43- var _sprint_button_down : bool = false
4441
45- # Variable to hold left controller direct movement node original max speed
46- var _direct_original_max_speed : float = 0.0
42+ # Whether the sprint button is held down
43+ var _sprint_button_down : bool = false
4744
45+ # Direct movement node's original max speed
46+ var _direct_original_max_speed : float = 0.0
4847
49- # XRStart node
50- @onready var xr_start_node = XRTools .find_xr_child (
51- XRTools .find_xr_ancestor (self ,
52- "*Staging" ,
53- "XRToolsStaging" ),"StartXR" ,"Node" )
5448
49+ ## XRStart node
50+ @onready var xr_start_node : XRToolsStartXR = XRTools .find_xr_child (
51+ XRTools .find_xr_ancestor (
52+ self ,
53+ "*Staging" ,
54+ "XRToolsStaging" ,
55+ ),
56+ "StartXR" ,
57+ "Node" ,
58+ )
5559
56- # Variable used to cache left controller direct movement function , if any
60+ # Direct movement node , if any
5761@onready var _desktop_direct_move := XRToolsDesktopMovementDirect .find (self )
5862
5963
60-
61-
62- # Add support for is_xr_class on XRTools classes
63- func is_xr_class (xr_name : String ) -> bool :
64+ ## Add support for is_xr_class on XRTools classes
65+ func is_xr_class (xr_name : String ) -> bool :
6466 return xr_name == "XRToolsDesktopMovementSprint" or super (xr_name )
6567
6668
67- func _ready ():
68- # In Godot 4 we must now manually call our super class ready function
69- super ()
70-
71-
72- # Perform sprinting
73- func physics_movement (_delta : float , player_body : XRToolsPlayerBody , disabled : bool ):
69+ ## Perform sprinting
70+ func physics_movement (
71+ _delta : float ,
72+ player_body : XRToolsPlayerBody ,
73+ disabled : bool ,
74+ ) -> void :
7475 # Skip if the controller isn't active or is not enabled
75- if ! player_body .enabled or xr_start_node .is_xr_active () or disabled == true or ! enabled :
76+ if (
77+ not player_body .enabled
78+ or xr_start_node .is_xr_active ()
79+ or disabled
80+ or not enabled
81+ ):
7682 set_sprinting (false )
7783 return
7884
7985 # Detect sprint button down and pressed states
8086 var sprint_button_down := Input .is_action_pressed (sprint_button )
81- var sprint_button_pressed := sprint_button_down and ! _sprint_button_down
87+ var sprint_button_pressed := sprint_button_down and not _sprint_button_down
8288 _sprint_button_down = sprint_button_down
8389
8490 # Calculate new sprinting state
@@ -91,14 +97,14 @@ func physics_movement(_delta: float, player_body: XRToolsPlayerBody, disabled: b
9197 SprintType .TOGGLE_SPRINT :
9298 # Toggle when button pressed
9399 if sprint_button_pressed :
94- sprinting = ! sprinting
100+ sprinting = not sprinting
95101
96102 # Update sprinting state
97103 if sprinting != is_active :
98104 set_sprinting (sprinting )
99105
100106
101- # Public function used to set sprinting active or not active
107+ ## Toggles sprinting
102108func set_sprinting (active : bool ) -> void :
103109 # Skip if no change
104110 if active == is_active :
@@ -109,8 +115,8 @@ func set_sprinting(active: bool) -> void:
109115
110116 # Handle state change
111117 if is_active :
112- # We are sprinting
113- emit_signal ( " sprinting_started" )
118+ # If we are sprinting
119+ sprinting_started . emit ( )
114120
115121 # Since max speeds could be changed while game is running, check
116122 # now for original max speeds of left and right nodes
@@ -123,21 +129,21 @@ func set_sprinting(active: bool) -> void:
123129 _desktop_direct_move .max_speed = \
124130 _direct_original_max_speed * sprint_speed_multiplier
125131 else :
126- # We are not sprinting
127- emit_signal ( " sprinting_finished" )
132+ # If we are not sprinting
133+ sprinting_finished . emit ( )
128134
129135 # Set both controllers' direct movement functions, if applicable, to
130136 # their original speeds
131137 if _desktop_direct_move :
132138 _desktop_direct_move .max_speed = _direct_original_max_speed
133139
134140
135- # This method verifies the movement provider has a valid configuration.
141+ # Verifies the movement provider has a valid configuration.
136142func _get_configuration_warnings () -> PackedStringArray :
137143 var warnings := super ()
138144
139145 # Make sure player has at least one direct movement node
140- if ! XRToolsDesktopMovementDirect .find (self ):
146+ if not XRToolsDesktopMovementDirect .find (self ):
141147 warnings .append ("Player missing XRToolsDesktopMovementDirect node" )
142148
143149 # Return warnings
0 commit comments