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://bieeh1iro4ji1" path="res://scripts/player.gd" id="1_x7wms"]
|
||||||
[ext_resource type="Script" uid="uid://linvnr16djav" path="res://scripts/PlayerStateMachine.gd" id="2_1npgd"]
|
[ext_resource type="Script" uid="uid://linvnr16djav" path="res://scripts/PlayerStateMachine.gd" id="2_1npgd"]
|
||||||
@@ -134,6 +134,9 @@ _data = {
|
|||||||
&"punch": SubResource("Animation_llq31")
|
&"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"]]
|
[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)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1, 0)
|
||||||
collision_layer = 4
|
collision_layer = 4
|
||||||
@@ -379,28 +382,16 @@ target_position = Vector3(0, 0, 1)
|
|||||||
[node name="WallJumpTimer" type="Timer" parent="."]
|
[node name="WallJumpTimer" type="Timer" parent="."]
|
||||||
one_shot = true
|
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="."]
|
[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)
|
target_position = Vector3(0, 0, -1.5)
|
||||||
collision_mask = 33
|
collision_mask = 33
|
||||||
hit_back_faces = false
|
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="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_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"]
|
[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():
|
func jump_with_weight_mod():
|
||||||
character.velocity.y += character.JUMP_VELOCITY * character.speed_modifiers()
|
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():
|
func standard_jump():
|
||||||
if Input.is_action_just_pressed("jump"):
|
if Input.is_action_just_pressed("jump"):
|
||||||
#first check for clamber, otherwise jump
|
if character.jumps_remaining > 0:
|
||||||
if character.can_clamber():
|
character.jumps_remaining -= 1
|
||||||
Transitioned.emit(self,"ledge grab")
|
jump_with_weight_mod()
|
||||||
else:
|
|
||||||
if character.jumps_remaining > 0:
|
|
||||||
character.jumps_remaining -= 1
|
|
||||||
jump_with_weight_mod()
|
|
||||||
|
|
||||||
func apply_gravity(delta):
|
func apply_gravity(delta):
|
||||||
character.velocity.y -= 9.8 * 1.25 * 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 clamber_point_ray: RayCast3D = $ClamberPointRay
|
||||||
@onready var ledge_l_ray: RayCast3D = $LedgeLRay
|
@onready var ledge_l_ray: RayCast3D = $LedgeLRay
|
||||||
@onready var ledge_r_ray: RayCast3D = $LedgeRRay
|
@onready var ledge_r_ray: RayCast3D = $LedgeRRay
|
||||||
|
@onready var ledge_collision: CollisionShape3D = $LedgeCollision
|
||||||
|
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
level_control.player = self
|
level_control.player = self
|
||||||
|
|||||||
@@ -13,14 +13,9 @@ func Physics_Update(delta):
|
|||||||
standard_movement(delta)
|
standard_movement(delta)
|
||||||
apply_gravity(delta)
|
apply_gravity(delta)
|
||||||
|
|
||||||
standard_jump()
|
if character.is_on_floor() and !is_grabbing_ledge():
|
||||||
|
|
||||||
if character.is_on_floor():
|
|
||||||
Transitioned.emit(self,"on foot")
|
Transitioned.emit(self,"on foot")
|
||||||
|
|
||||||
enable_wall_rays()
|
|
||||||
|
|
||||||
|
|
||||||
if Input.is_action_just_pressed("sprint") and air_dash_left > 0:
|
if Input.is_action_just_pressed("sprint") and air_dash_left > 0:
|
||||||
air_dash_left -= 1
|
air_dash_left -= 1
|
||||||
character.velocity += character.movement_input().normalized() * air_dash_amount
|
character.velocity += character.movement_input().normalized() * air_dash_amount
|
||||||
@@ -28,5 +23,13 @@ func Physics_Update(delta):
|
|||||||
if Input.is_action_just_pressed("crouch"):
|
if Input.is_action_just_pressed("crouch"):
|
||||||
Transitioned.emit(self,"ground pound")
|
Transitioned.emit(self,"ground pound")
|
||||||
|
|
||||||
|
enable_wall_rays()
|
||||||
|
|
||||||
if can_wall_run():
|
if can_wall_run():
|
||||||
start_wall_running()
|
start_wall_running()
|
||||||
|
|
||||||
|
standard_jump()
|
||||||
|
ledge_grab()
|
||||||
|
|
||||||
|
func Exit():
|
||||||
|
character.ledge_collision.disabled = true
|
||||||
|
|||||||
Reference in New Issue
Block a user