Skip to content

Commit ba5641f

Browse files
authored
Merge flapping improvement from 3.x branch (#432)
Merged additional fixes for Grab Handles layer and usage.
1 parent acacffd commit ba5641f

File tree

6 files changed

+34
-34
lines changed

6 files changed

+34
-34
lines changed

VERSIONS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# 4.1.0 (development)
22
- Enhanced grappling to support collision and target layers
33
- Added Godot Editor XR Tools menu for layers and openxr configuration
4+
- Improved gliding to support roll-turning while flapping
45

56
# 4.0.0
67
- Conversion to Godot 4

addons/godot-xr-tools/functions/movement_glide.gd

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -117,19 +117,17 @@ func physics_movement(delta: float, player_body: XRToolsPlayerBody, disabled: bo
117117

118118
# If wings impulse is active, calculate flapping impulse
119119
if wings_impulse:
120-
# Get head position
121-
var camera_position := _camera_node.global_transform.origin
122-
123120
# Check controllers position relative to head
124-
var left_hand_over_head = camera_position.y < left_position.y + rearm_distance_offset
125-
var right_hand_over_head = camera_position.y < right_position.y + rearm_distance_offset
121+
var cam_local_y := _camera_node.position.y
122+
var left_hand_over_head = cam_local_y < _left_controller.position.y + rearm_distance_offset
123+
var right_hand_over_head = cam_local_y < _right_controller.position.y + rearm_distance_offset
126124
if left_hand_over_head && right_hand_over_head:
127125
flap_armed = true
128126

129127
if flap_armed:
130128
# Get controller local positions
131-
var local_left_position := _left_controller.transform.origin
132-
var local_right_position := _right_controller.transform.origin
129+
var local_left_position := _left_controller.position
130+
var local_right_position := _right_controller.position
133131

134132
# Store last frame controller positions for the first step
135133
if not _has_controller_positions:
@@ -156,20 +154,20 @@ func physics_movement(delta: float, player_body: XRToolsPlayerBody, disabled: bo
156154
last_local_left_position = local_left_position
157155
last_local_right_position = local_right_position
158156

159-
# If not falling, then not gliding
160-
var vertical_velocity := player_body.velocity.dot(player_body.up_gravity_vector)
161-
vertical_velocity += wings_impulse_velocity
162-
if vertical_velocity >= glide_min_fall_speed && wings_impulse_velocity == 0.0:
163-
_set_gliding(false)
164-
return
165-
166157
# Calculate global left to right controller vector
167158
var left_to_right := right_position - left_position
168159

169160
if turn_with_roll:
170161
var angle = -left_to_right.dot(player_body.up_player_vector)
171162
player_body.rotate_player(roll_turn_speed * delta * angle)
172163

164+
# If not falling, then not gliding
165+
var vertical_velocity := player_body.velocity.dot(player_body.up_gravity_vector)
166+
vertical_velocity += wings_impulse_velocity
167+
if vertical_velocity >= glide_min_fall_speed && wings_impulse_velocity == 0.0:
168+
_set_gliding(false)
169+
return
170+
173171
# Set gliding based on hand separation
174172
var separation := left_to_right.length() / XRServer.world_scale
175173
_set_gliding(separation >= glide_detect_distance)

addons/godot-xr-tools/plugin.gd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ func _set_physics_layers() -> void:
4848
ProjectSettings.set("layer_names/3d_physics/layer_5", "Grappling Target")
4949
ProjectSettings.set("layer_names/3d_physics/layer_17", "Held Objects")
5050
ProjectSettings.set("layer_names/3d_physics/layer_18", "Player Hands")
51+
ProjectSettings.set("layer_names/3d_physics/layer_19", "Grab Handles")
5152
ProjectSettings.set("layer_names/3d_physics/layer_20", "Player Body")
5253
ProjectSettings.set("layer_names/3d_physics/layer_21", "Pointable Objects")
5354
ProjectSettings.set("layer_names/3d_physics/layer_22", "Hand Pose Areas")

scenes/sphere_world_demo/objects/tower.tscn

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ material = ExtResource("2")
1111
size = Vector3(3, 8, 3)
1212

1313
[node name="Tower" instance=ExtResource("1")]
14-
collision_layer = 2
15-
collision_mask = 0
14+
collision_layer = 262161
1615

1716
[node name="CollisionShape3D" parent="." index="0"]
1817
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4, 0)

scenes/sphere_world_demo/sphere_world_demo.tscn

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
[gd_scene load_steps=27 format=3 uid="uid://b5o25nkvyv8ho"]
1+
[gd_scene load_steps=28 format=3 uid="uid://b5o25nkvyv8ho"]
22

33
[ext_resource type="PackedScene" uid="uid://qbmx03iibuuu" path="res://addons/godot-xr-tools/staging/scene_base.tscn" id="1"]
44
[ext_resource type="Material" path="res://assets/wahooney.itch.io/green_grid_triplanar.tres" id="2"]
55
[ext_resource type="PackedScene" uid="uid://diyu06cw06syv" path="res://addons/godot-xr-tools/player/player_body.tscn" id="3"]
66
[ext_resource type="PackedScene" uid="uid://bx1xdisoqo1f6" path="res://addons/godot-xr-tools/hands/scenes/lowpoly/left_tac_glove_low.tscn" id="4"]
7+
[ext_resource type="Material" uid="uid://p0q2df2dmy62" path="res://addons/godot-xr-tools/hands/materials/ghost_hand.tres" id="4_3wr22"]
78
[ext_resource type="PackedScene" uid="uid://bl2nuu3qhlb5k" path="res://addons/godot-xr-tools/functions/movement_direct.tscn" id="5"]
89
[ext_resource type="PackedScene" uid="uid://drs4eeq721ojn" path="res://addons/godot-xr-tools/functions/movement_sprint.tscn" id="6"]
910
[ext_resource type="PackedScene" uid="uid://c2q5phg8w08o" path="res://addons/godot-xr-tools/functions/movement_jump.tscn" id="7"]
@@ -42,9 +43,9 @@ environment = ExtResource("19")
4243
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 0)
4344

4445
[node name="LeftHand" parent="XROrigin3D/LeftHand" index="0" instance=ExtResource("4")]
46+
hand_material_override = ExtResource("4_3wr22")
4547

4648
[node name="FunctionPickup" parent="XROrigin3D/LeftHand" index="1" instance=ExtResource("8")]
47-
grab_collision_mask = 6
4849
ranged_enable = false
4950

5051
[node name="MovementDirect" parent="XROrigin3D/LeftHand" index="2" instance=ExtResource("5")]
@@ -59,9 +60,9 @@ jump_button_action = "ax_button"
5960
crouch_button_action = "by_button"
6061

6162
[node name="RightHand" parent="XROrigin3D/RightHand" index="0" instance=ExtResource("10")]
63+
hand_material_override = ExtResource("4_3wr22")
6264

6365
[node name="FunctionPickup" parent="XROrigin3D/RightHand" index="1" instance=ExtResource("8")]
64-
grab_collision_mask = 6
6566
ranged_enable = false
6667

6768
[node name="MovementDirect" parent="XROrigin3D/RightHand" index="2" instance=ExtResource("5")]
Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
1-
[gd_scene load_steps=5 format=2]
1+
[gd_scene load_steps=5 format=3 uid="uid://bfjkswl3pu87m"]
22

3-
[ext_resource path="res://assets/wahooney.itch.io/blue_grid.tres" type="Material" id=1]
4-
[ext_resource path="res://addons/godot-xr-tools/objects/climbable.gd" type="Script" id=2]
3+
[ext_resource type="Material" path="res://assets/wahooney.itch.io/blue_grid.tres" id="1"]
4+
[ext_resource type="PackedScene" uid="uid://cjyilbm4ucc7s" path="res://addons/godot-xr-tools/objects/climbable.tscn" id="1_4eqd4"]
55

6-
[sub_resource type="CubeMesh" id=1]
7-
material = ExtResource( 1 )
8-
size = Vector3( 0.1, 0.5, 0.5 )
6+
[sub_resource type="BoxMesh" id="1"]
7+
material = ExtResource("1")
8+
size = Vector3(0.1, 0.5, 0.5)
99

10-
[sub_resource type="BoxShape" id=2]
11-
extents = Vector3( 0.05, 0.25, 0.25 )
10+
[sub_resource type="BoxShape3D" id="2"]
11+
size = Vector3(0.1, 0.5, 0.5)
1212

13-
[node name="ClimbingHandle" type="Spatial"]
13+
[node name="ClimbingHandle" type="Node3D"]
1414

15-
[node name="StaticBody" type="StaticBody" parent="."]
16-
script = ExtResource( 2 )
15+
[node name="Climbable" parent="." instance=ExtResource("1_4eqd4")]
1716

18-
[node name="MeshInstance" type="MeshInstance" parent="StaticBody"]
19-
mesh = SubResource( 1 )
17+
[node name="MeshInstance" type="MeshInstance3D" parent="Climbable"]
18+
mesh = SubResource("1")
19+
skeleton = NodePath("")
2020

21-
[node name="CollisionShape" type="CollisionShape" parent="StaticBody"]
22-
shape = SubResource( 2 )
21+
[node name="CollisionShape" type="CollisionShape3D" parent="Climbable"]
22+
shape = SubResource("2")

0 commit comments

Comments
 (0)