added ladder script

This commit is contained in:
derek
2025-06-16 16:39:24 -05:00
parent be26131b39
commit 07ea71a3ed
9 changed files with 608 additions and 55 deletions

View File

@@ -6,8 +6,8 @@
size = Vector3(1, 10, 1)
[node name="LadderCollisionCheck" type="Area3D"]
collision_layer = 2
collision_mask = 2
collision_layer = 6
collision_mask = 6
script = ExtResource("1_ugi45")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
@@ -17,5 +17,8 @@ shape = SubResource("BoxShape3D_gxu3i")
[node name="CollisionMidpoint" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 0)
[node name="LadderPlayerPos" type="Marker3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.435783)
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
[connection signal="body_exited" from="." to="." method="_on_body_exited"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=43 format=3 uid="uid://drwae3loscbw7"]
[gd_scene load_steps=44 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"]
@@ -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://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="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="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://cjpvibojo13qv" path="res://assets/Audio/clock-ticking-exact-looping-SBA-300062891.wav" id="11_6k4fy"]
@@ -140,36 +141,39 @@ script = ExtResource("1_x7wms")
SENSITIVITY = 0.008
weapon_holder = NodePath("Head/Recoil/Camera3D/WeaponHolder")
[node name="States" type="Node" parent="." node_paths=PackedStringArray("character", "initial_state")]
[node name="StateMachine" type="Node" parent="." node_paths=PackedStringArray("character", "initial_state")]
script = ExtResource("2_1npgd")
character = NodePath("..")
initial_state = NodePath("On Foot")
[node name="On Foot" type="Node" parent="States"]
[node name="On Foot" type="Node" parent="StateMachine"]
script = ExtResource("3_ib4e7")
metadata/_custom_type_script = "uid://dk0vg5btak80a"
[node name="Crouched" type="Node" parent="States"]
[node name="Crouched" type="Node" parent="StateMachine"]
script = ExtResource("4_67mtf")
move_speed = 5.0
move_transition_speed = 4.0
[node name="In Air" type="Node" parent="States"]
[node name="In Air" type="Node" parent="StateMachine"]
script = ExtResource("5_m0ick")
[node name="Wall Running" type="Node" parent="States"]
[node name="Wall Running" type="Node" parent="StateMachine"]
script = ExtResource("6_1npgd")
move_speed = 15.0
move_transition_speed = 15.0
[node name="Ground Pound" type="Node" parent="States"]
[node name="Ground Pound" type="Node" parent="StateMachine"]
script = ExtResource("7_2asft")
[node name="Knocked" type="Node" parent="States"]
[node name="Knocked" type="Node" parent="StateMachine"]
[node name="Stunned" type="Node" parent="States"]
[node name="Stunned" type="Node" parent="StateMachine"]
[node name="On Ladder" type="Node" parent="States"]
[node name="On Ladder" type="Node" parent="StateMachine"]
script = ExtResource("8_vgdha")
move_speed = 5.0
move_transition_speed = 3.0
can_climb_new_ladder = false
[node name="HealthIndicator" type="ColorRect" parent="."]
material = SubResource("CanvasItemMaterial_l5ga0")

View File

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

548
scenes/02_scene_tester.tscn Normal file

File diff suppressed because one or more lines are too long

View File

@@ -3,6 +3,7 @@ class_name PlayerState
@export var move_speed: float = 12
@export var move_transition_speed : float = 7
@export var can_climb_new_ladder = true
@onready var character = get_parent().character
@@ -29,7 +30,14 @@ func enable_wall_rays():
func can_wall_run():
if character.wall_ray_1.is_colliding() or character.wall_ray_2.is_colliding() or character.wall_ray_3.is_colliding():
return true
if character.velocity.length() > 5.0:
return true
func try_climbing_ladder(ladder):
print("LADDERRR")
if can_climb_new_ladder:
character.current_ladder = ladder
Transitioned.emit(self,"on ladder")
func start_wall_running():
var running_surface_normal

View File

@@ -1,39 +1,13 @@
extends Area3D
@onready var collision_midpoint: Node3D = $CollisionMidpoint
var player
var player_on_ladder = false
@onready var level_control = get_tree().current_scene
# Called when the node enters the scene tree for the first time.
func _ready():
pass
class_name Ladder
@onready var ladder_player_pos: Marker3D = $LadderPlayerPos
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
pass
#if player != null:
#if player.is_climbing:
#hold_player()
func _on_body_entered(body):
if body.is_in_group("player"):
body.is_climbing = true
if body.global_position.y < collision_midpoint.global_position.y:
body.global_position.y += .2
#else:
#body.velocity = Vector3(0,0,0)
#body.global_position = Vector3(global_position.x,body.global_position.y,global_position.z)
func _on_body_entered(body: Node3D) -> void:
if body is Player:
body.start_ladder_climb(ladder_player_pos)
func _on_body_exited(body):
if body.is_in_group("player"):
body.is_climbing = false
player_on_ladder = false
body.velocity.y = .1
func hold_player():
var direction_to_ladder = player.global_position.direction_to(self.global_position)
player.velocity = Vector3(direction_to_ladder.x * 10,player.velocity.y,direction_to_ladder.z * 10)
func _on_body_exited(body: Node3D) -> void:
if body is Player:
body.end_ladder_climb()

View File

@@ -62,6 +62,9 @@ var input_dir
var wall_run_surface_normal
var wall_run_direction
# Ladder
var current_ladder
## GUNS AND AMMO
var gun : Node
var holstered_gun_id : int
@@ -87,6 +90,7 @@ var weapon_holder_start_rot
var weapon_holder_start_pos
var controlled_elsewhere = false
@onready var state_machine: PlayerStateMachine = $StateMachine
@onready var dead_player : Resource = load("res://assets/dead_cam.tscn")
@onready var pause_menu: Control = $Head/Recoil/Camera3D/PauseMenu
@onready var gun_ray = $Head/Recoil/Camera3D/GunRay
@@ -431,11 +435,11 @@ func _headbob(time) -> Vector3:
return pos
func ladder_collide():
if is_climbing == true:
gravity = 0.0
else:
gravity = level_control.gamemode.gravity
func start_ladder_climb(ladder):
state_machine.current_state.try_climbing_ladder(ladder)
func end_ladder_climb():
state_machine.on_child_transition(state_machine.current_state,"in air")
func _on_wall_jump_timer_timeout() -> void:
can_wall_jump = true
@@ -623,7 +627,6 @@ func hit(damage, fired_by, target_type):
await get_tree().create_timer(.15).timeout
health_indicator.color = Color(0.471, 0, 0, 0)
func save():
var save_dict = {
"filename" : get_scene_file_path(),

View File

@@ -0,0 +1,12 @@
extends PlayerState
class_name PlayerOnLadder
func Physics_Update(delta):
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)
ladder_movement(delta)
func ladder_movement(delta):
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)

View File

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