50 lines
1.7 KiB
GDScript
50 lines
1.7 KiB
GDScript
extends State
|
|
class_name PlayerState
|
|
|
|
@export var move_speed: float = 12
|
|
@export var move_transition_speed : float = 7
|
|
|
|
@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,delta * move_transition_speed)
|
|
character.velocity.z = lerp(character.velocity.z, character.movement_input().z * move_speed,delta * move_transition_speed)
|
|
|
|
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():
|
|
return true
|
|
|
|
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")
|