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

@@ -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