Skip to content

Commit afb0616

Browse files
authored
Better format and static type Desktop Sprint (#780)
1 parent 338b5b9 commit afb0616

File tree

1 file changed

+45
-39
lines changed

1 file changed

+45
-39
lines changed

addons/godot-xr-tools/desktop-support/movement_desktop_sprint.gd

Lines changed: 45 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
class_name XRToolsDesktopMovementSprint
33
extends 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
1716
signal sprinting_started()
1817

19-
## Signal emitted when sprinting finishes
18+
## Emitted when sprinting finishes
2019
signal 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
102108
func 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.
136142
func _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

Comments
 (0)