playing with physical ledge grab
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=45 format=3 uid="uid://drwae3loscbw7"]
|
||||
[gd_scene load_steps=46 format=3 uid="uid://drwae3loscbw7"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bieeh1iro4ji1" path="res://scripts/player.gd" id="1_x7wms"]
|
||||
[ext_resource type="Script" uid="uid://linvnr16djav" path="res://scripts/PlayerStateMachine.gd" id="2_1npgd"]
|
||||
@@ -134,6 +134,9 @@ _data = {
|
||||
&"punch": SubResource("Animation_llq31")
|
||||
}
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_iwgew"]
|
||||
size = Vector3(1, 0.05, 1.2)
|
||||
|
||||
[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("weapon_holder") groups=["persist", "player"]]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1, 0)
|
||||
collision_layer = 4
|
||||
@@ -379,28 +382,16 @@ target_position = Vector3(0, 0, 1)
|
||||
[node name="WallJumpTimer" type="Timer" parent="."]
|
||||
one_shot = true
|
||||
|
||||
[node name="LedgeLRay" type="RayCast3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.2, 0.969, -0.509)
|
||||
|
||||
[node name="LedgeRRay" type="RayCast3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.2, 0.969, -0.509)
|
||||
|
||||
[node name="ClamberMaxRay" type="RayCast3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.17686, 0.00231841)
|
||||
target_position = Vector3(0, 0, -1)
|
||||
collision_mask = 33
|
||||
|
||||
[node name="ClamberPointRay" type="RayCast3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.987695, -0.600275)
|
||||
target_position = Vector3(0, -1.995, 0)
|
||||
collision_mask = 33
|
||||
|
||||
[node name="ClamberCheckRay" type="RayCast3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.607088, -0.279418)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.795024, -0.279418)
|
||||
target_position = Vector3(0, 0, -1.5)
|
||||
collision_mask = 33
|
||||
hit_back_faces = false
|
||||
|
||||
[node name="LedgeCollision" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.835043, -0.762861)
|
||||
shape = SubResource("BoxShape3D_iwgew")
|
||||
|
||||
[connection signal="tree_entered" from="." to="." method="_on_tree_entered"]
|
||||
[connection signal="body_entered" from="pick_up_detection" to="." method="_on_pick_up_detection_body_entered"]
|
||||
[connection signal="body_entered" from="pick_up_magnet" to="." method="_on_pick_up_magnet_body_entered"]
|
||||
|
||||
@@ -17,15 +17,23 @@ func standard_movement(delta):
|
||||
func jump_with_weight_mod():
|
||||
character.velocity.y += character.JUMP_VELOCITY * character.speed_modifiers()
|
||||
|
||||
func ledge_grab():
|
||||
if Input.is_action_pressed("interact"):
|
||||
character.ledge_collision.disabled = false
|
||||
else:
|
||||
character.ledge_collision.disabled = true
|
||||
|
||||
func is_grabbing_ledge():
|
||||
if character.ledge_collision.disabled == false:
|
||||
return true
|
||||
|
||||
return false
|
||||
|
||||
func standard_jump():
|
||||
if Input.is_action_just_pressed("jump"):
|
||||
#first check for clamber, otherwise jump
|
||||
if character.can_clamber():
|
||||
Transitioned.emit(self,"ledge grab")
|
||||
else:
|
||||
if character.jumps_remaining > 0:
|
||||
character.jumps_remaining -= 1
|
||||
jump_with_weight_mod()
|
||||
if character.jumps_remaining > 0:
|
||||
character.jumps_remaining -= 1
|
||||
jump_with_weight_mod()
|
||||
|
||||
func apply_gravity(delta):
|
||||
character.velocity.y -= 9.8 * 1.25 * delta
|
||||
|
||||
@@ -144,6 +144,8 @@ var controlled_elsewhere = false
|
||||
@onready var clamber_point_ray: RayCast3D = $ClamberPointRay
|
||||
@onready var ledge_l_ray: RayCast3D = $LedgeLRay
|
||||
@onready var ledge_r_ray: RayCast3D = $LedgeRRay
|
||||
@onready var ledge_collision: CollisionShape3D = $LedgeCollision
|
||||
|
||||
|
||||
func _ready():
|
||||
level_control.player = self
|
||||
|
||||
@@ -13,14 +13,9 @@ func Physics_Update(delta):
|
||||
standard_movement(delta)
|
||||
apply_gravity(delta)
|
||||
|
||||
standard_jump()
|
||||
|
||||
if character.is_on_floor():
|
||||
if character.is_on_floor() and !is_grabbing_ledge():
|
||||
Transitioned.emit(self,"on foot")
|
||||
|
||||
enable_wall_rays()
|
||||
|
||||
|
||||
if Input.is_action_just_pressed("sprint") and air_dash_left > 0:
|
||||
air_dash_left -= 1
|
||||
character.velocity += character.movement_input().normalized() * air_dash_amount
|
||||
@@ -28,5 +23,13 @@ func Physics_Update(delta):
|
||||
if Input.is_action_just_pressed("crouch"):
|
||||
Transitioned.emit(self,"ground pound")
|
||||
|
||||
enable_wall_rays()
|
||||
|
||||
if can_wall_run():
|
||||
start_wall_running()
|
||||
|
||||
standard_jump()
|
||||
ledge_grab()
|
||||
|
||||
func Exit():
|
||||
character.ledge_collision.disabled = true
|
||||
|
||||
Reference in New Issue
Block a user