rudimentary clamber

This commit is contained in:
derek
2025-06-17 10:32:31 -05:00
parent 7c76c791f2
commit 4047a1c9a8
13 changed files with 98 additions and 16 deletions

View File

@@ -18,7 +18,7 @@ shape = SubResource("BoxShape3D_gxu3i")
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 0)
[node name="LadderPlayerPos" type="Marker3D" parent="."] [node name="LadderPlayerPos" type="Marker3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.435783) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.748895)
[connection signal="body_entered" from="." to="." method="_on_body_entered"] [connection signal="body_entered" from="." to="." method="_on_body_entered"]
[connection signal="body_exited" from="." to="." method="_on_body_exited"] [connection signal="body_exited" from="." to="." method="_on_body_exited"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=44 format=3 uid="uid://drwae3loscbw7"] [gd_scene load_steps=45 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"]
@@ -12,6 +12,7 @@
[ext_resource type="Script" uid="uid://bgj2bqb5dys41" path="res://scripts/player_wall_running.gd" id="6_1npgd"] [ext_resource type="Script" uid="uid://bgj2bqb5dys41" path="res://scripts/player_wall_running.gd" id="6_1npgd"]
[ext_resource type="Script" uid="uid://boyl3qkg4j4vc" path="res://scripts/player_ground_pound.gd" id="7_2asft"] [ext_resource type="Script" uid="uid://boyl3qkg4j4vc" path="res://scripts/player_ground_pound.gd" id="7_2asft"]
[ext_resource type="AudioStream" uid="uid://bki17g7j4kqn4" path="res://assets/Audio/PickupSound Mixdown 3.wav" id="8_dwqsx"] [ext_resource type="AudioStream" uid="uid://bki17g7j4kqn4" path="res://assets/Audio/PickupSound Mixdown 3.wav" id="8_dwqsx"]
[ext_resource type="Script" uid="uid://cl8wpx8g1b5ce" path="res://scripts/player_clamber.gd" id="8_iwgew"]
[ext_resource type="Script" uid="uid://bb7u0nnktowwp" path="res://scripts/player_on_ladder.gd" id="8_vgdha"] [ext_resource type="Script" uid="uid://bb7u0nnktowwp" path="res://scripts/player_on_ladder.gd" id="8_vgdha"]
[ext_resource type="Shader" uid="uid://djbvmc8hurccm" path="res://assets/Shaders/speedlines.gdshader" id="10_5hu7c"] [ext_resource type="Shader" uid="uid://djbvmc8hurccm" path="res://assets/Shaders/speedlines.gdshader" id="10_5hu7c"]
[ext_resource type="AudioStream" uid="uid://dyd272r7n2ecd" path="res://assets/Audio/footsteps-shoes-jump-land-beach-sand-SBA-300118001.wav" id="10_tn0pn"] [ext_resource type="AudioStream" uid="uid://dyd272r7n2ecd" path="res://assets/Audio/footsteps-shoes-jump-land-beach-sand-SBA-300118001.wav" id="10_tn0pn"]
@@ -148,9 +149,6 @@ initial_state = NodePath("On Foot")
[node name="On Foot" type="Node" parent="StateMachine"] [node name="On Foot" type="Node" parent="StateMachine"]
script = ExtResource("3_ib4e7") script = ExtResource("3_ib4e7")
move_speed = null
move_transition_speed = null
can_climb_new_ladder = null
metadata/_custom_type_script = "uid://dk0vg5btak80a" metadata/_custom_type_script = "uid://dk0vg5btak80a"
[node name="Crouched" type="Node" parent="StateMachine"] [node name="Crouched" type="Node" parent="StateMachine"]
@@ -172,6 +170,9 @@ script = ExtResource("7_2asft")
[node name="Stunned" type="Node" parent="StateMachine"] [node name="Stunned" type="Node" parent="StateMachine"]
[node name="Clamber" type="Node" parent="StateMachine"]
script = ExtResource("8_iwgew")
[node name="On Ladder" type="Node" parent="StateMachine"] [node name="On Ladder" type="Node" parent="StateMachine"]
script = ExtResource("8_vgdha") script = ExtResource("8_vgdha")
move_speed = 5.0 move_speed = 5.0
@@ -376,6 +377,21 @@ 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="ClamberMaxRay" type="RayCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.797, 0)
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.488815)
target_position = Vector3(0, 0, -1)
collision_mask = 33
[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"]

View File

@@ -12,7 +12,7 @@ config_version=5
config/name="First Person Test" config/name="First Person Test"
config/tags=PackedStringArray("fps") config/tags=PackedStringArray("fps")
run/main_scene="uid://c6fykssf7paft" run/main_scene="uid://dsw00ml8rv6xo"
config/features=PackedStringArray("4.4", "Forward Plus") config/features=PackedStringArray("4.4", "Forward Plus")
config/icon="uid://6svuq1l83al5" config/icon="uid://6svuq1l83al5"

View File

@@ -545,4 +545,4 @@ transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -6.987
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.9686, 0.382905, 12.9928) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.9686, 0.382905, 12.9928)
[node name="LadderCollisionCheck" parent="." instance=ExtResource("29_g3x4f")] [node name="LadderCollisionCheck" parent="." instance=ExtResource("29_g3x4f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.9991, 0.0999999, 12.5151) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -16.9991, 0.0999999, 13.0221)

View File

@@ -15,7 +15,12 @@ func standard_movement(delta):
character.velocity.z = lerp(character.velocity.z, character.movement_input().z * move_speed * character.speed_modifiers(),delta * move_transition_speed) character.velocity.z = lerp(character.velocity.z, character.movement_input().z * move_speed * character.speed_modifiers(),delta * move_transition_speed)
func standard_jump(): func standard_jump():
return character.JUMP_VELOCITY * character.speed_modifiers() #first check for clamber, otherwise jump
print("CAN CLAMBER? - ",character.can_clamber())
if character.can_clamber():
Transitioned.emit(self,"clamber")
else:
character.velocity.y += character.JUMP_VELOCITY * character.speed_modifiers()
func apply_gravity(delta): func apply_gravity(delta):
character.velocity.y -= 9.8 * 1.25 * delta character.velocity.y -= 9.8 * 1.25 * delta

View File

@@ -65,6 +65,9 @@ var wall_run_direction
# Ladder # Ladder
var current_ladder var current_ladder
# Clamber
var clamber_point
## GUNS AND AMMO ## GUNS AND AMMO
var gun : Node var gun : Node
var holstered_gun_id : int var holstered_gun_id : int
@@ -136,6 +139,9 @@ var controlled_elsewhere = false
@onready var weapon_select_menu: Control = $Head/Recoil/Camera3D/WeaponSelect @onready var weapon_select_menu: Control = $Head/Recoil/Camera3D/WeaponSelect
@onready var wall_jump_timer: Timer = $WallJumpTimer @onready var wall_jump_timer: Timer = $WallJumpTimer
@onready var remaining_stamina : float = level_control.gamemode.max_stamina @onready var remaining_stamina : float = level_control.gamemode.max_stamina
@onready var clamber_max_ray: RayCast3D = $ClamberMaxRay
@onready var clamber_check_ray: RayCast3D = $ClamberCheckRay
@onready var clamber_point_ray: RayCast3D = $ClamberPointRay
func _ready(): func _ready():
level_control.player = self level_control.player = self
@@ -385,6 +391,31 @@ func speed_modifiers():
return speed_multiplier return speed_multiplier
func can_clamber():
var clamber_ray_collided = false
const CHECK_RESOLUTION = .1
const MAX_RAY_POSITION = .607
const MIN_RAY_POSITION = -.9
while clamber_check_ray.position.y > MIN_RAY_POSITION:
if clamber_check_ray.is_colliding():
clamber_ray_collided = true
break
clamber_check_ray.position.y -= CHECK_RESOLUTION
clamber_check_ray.position.y = MAX_RAY_POSITION
if clamber_ray_collided and !clamber_max_ray.is_colliding():
return true
else:
return false
func get_clamber_point():
if clamber_point_ray.is_colliding():
return clamber_point_ray.get_collision_point()
else:
return clamber_point_ray.global_position
func joypad_walk(): func joypad_walk():
# Joypad right stick look control # Joypad right stick look control
var dir_out = Vector2(0,0) var dir_out = Vector2(0,0)

18
scripts/player_clamber.gd Normal file
View File

@@ -0,0 +1,18 @@
extends PlayerState
class_name PlayerClamber
var clamber_point
func Enter():
clamber_point = character.get_clamber_point()
character.standing_collision.disabled = true
character.crouching_collision.disabled = true
func Physics_Update(delta):
character.velocity = Vector3.ZERO
character.global_position = clamber_point + Vector3(0,1,0)
Transitioned.emit(self,"on foot")
func Exit():
character.standing_collision.disabled = false
character.crouching_collision.disabled = false

View File

@@ -0,0 +1 @@
uid://cl8wpx8g1b5ce

View File

@@ -17,8 +17,8 @@ func Update(delta):
func Physics_Update(delta): func Physics_Update(delta):
if character.is_on_floor(): if character.is_on_floor():
standard_movement(delta) standard_movement(delta)
else:
Transitioned.emit(self,"in air") apply_gravity(delta)
if Input.is_action_just_pressed("crouch"): if Input.is_action_just_pressed("crouch"):
if !character.crouch_check.is_colliding(): if !character.crouch_check.is_colliding():
@@ -32,7 +32,7 @@ func Physics_Update(delta):
if Input.is_action_just_pressed("jump"): if Input.is_action_just_pressed("jump"):
if !character.crouch_check.is_colliding(): if !character.crouch_check.is_colliding():
character.recoil.add_recoil(Vector3(-.2,.03,.03),5,10) character.recoil.add_recoil(Vector3(-.2,.03,.03),5,10)
character.velocity.y += character.JUMP_VELOCITY standard_jump()
transition_out_of_crouch() transition_out_of_crouch()

View File

@@ -18,9 +18,9 @@ func Physics_Update(delta):
enable_wall_rays() enable_wall_rays()
if Input.is_action_just_pressed("jump") and character.jumps_remaining > 0: if Input.is_action_just_pressed("jump") and (character.jumps_remaining > 0 or character.can_clamber()):
character.jumps_remaining -= 1 character.jumps_remaining -= 1
character.velocity.y += character.JUMP_VELOCITY standard_jump()
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

View File

@@ -16,4 +16,4 @@ func Physics_Update(delta):
if Input.is_action_just_pressed("jump"): if Input.is_action_just_pressed("jump"):
character.jumps_remaining -= 1 character.jumps_remaining -= 1
character.velocity.y += standard_jump() standard_jump()

View File

@@ -1,12 +1,23 @@
extends PlayerState extends PlayerState
class_name PlayerOnLadder class_name PlayerOnLadder
var climbing_started = false
func Enter():
climbing_started = false
func Physics_Update(delta): func Physics_Update(delta):
character.global_position.x = lerp(character.global_position.x,character.current_ladder.global_position.x,delta * 8) character.global_position.x = lerp(character.global_position.x,character.current_ladder.global_position.x,delta * 8)
character.global_position.z = lerp(character.global_position.z,character.current_ladder.global_position.z,delta * 8) character.global_position.z = lerp(character.global_position.z,character.current_ladder.global_position.z,delta * 8)
ladder_movement(delta) ladder_movement(delta)
if !character.is_on_floor() and !climbing_started:
climbing_started = true
if character.is_on_floor() and climbing_started:
Transitioned.emit(self, "on foot")
func ladder_movement(delta): func ladder_movement(delta):
var direction = Input.get_vector("move_down","move_up","move_left","move_right").x var direction = Input.get_vector("move_down","move_up","move_left","move_right").x
character.velocity.y = lerp(character.velocity.y, direction * move_speed,delta * move_transition_speed) character.velocity.y = lerp(character.velocity.y, direction * move_speed,delta * move_transition_speed)

View File

@@ -16,7 +16,7 @@ func Physics_Update(delta):
Transitioned.emit(self,"in air") Transitioned.emit(self,"in air")
func wall_jump(): func wall_jump():
character.velocity += (Vector3(0,1,0) + character.wall_run_direction).normalized() * 15 character.velocity += (Vector3(0,1,0) + character.wall_run_direction).normalized() * 15 * character.speed_modifiers()
Transitioned.emit(self,"in air") Transitioned.emit(self,"in air")
func wall_run_movement(delta): func wall_run_movement(delta):
@@ -27,4 +27,4 @@ func wall_run_movement(delta):
Transitioned.emit(self,"in air") Transitioned.emit(self,"in air")
func wall_run_gravity(delta): func wall_run_gravity(delta):
character.velocity.y -= 9.8 * .75 * delta character.velocity.y -= 9.8 * delta