added ladder script
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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(),
|
||||
|
||||
12
scripts/player_on_ladder.gd
Normal file
12
scripts/player_on_ladder.gd
Normal 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)
|
||||
1
scripts/player_on_ladder.gd.uid
Normal file
1
scripts/player_on_ladder.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bb7u0nnktowwp
|
||||
Reference in New Issue
Block a user