extends State 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 var move_target var look_target func standard_movement(delta): character.velocity.x = lerp(character.velocity.x, character.movement_input().x * 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 jump_with_weight_mod(): 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(): if Input.is_action_just_pressed("jump"): if character.jumps_remaining > 0: character.jumps_remaining -= 1 jump_with_weight_mod() func apply_gravity(delta): character.velocity.y -= 9.8 * 1.25 * delta func enable_wall_rays(): if Input.is_action_pressed("move_left"): character.wall_ray_1.enabled = true else: character.wall_ray_1.enabled = false if Input.is_action_pressed("move_right"): character.wall_ray_2.enabled = true else: character.wall_ray_2.enabled = false 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(): 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 var wall_run_direction if character.wall_ray_1.is_colliding(): running_surface_normal = character.wall_ray_1.get_collision_normal() wall_run_direction = running_surface_normal.rotated(Vector3(0,1,0), deg_to_rad(90)) elif character.wall_ray_2.is_colliding(): running_surface_normal = character.wall_ray_2.get_collision_normal() wall_run_direction = running_surface_normal.rotated(Vector3(0,-1,0), deg_to_rad(90)) print("SURFACE NORMAL : ", running_surface_normal) if running_surface_normal: character.wall_run_direction = wall_run_direction character.wall_run_surface_normal = running_surface_normal Transitioned.emit(self,"wall running")