40 lines
1.2 KiB
GDScript3
40 lines
1.2 KiB
GDScript3
|
|
extends LimboState
|
|||
|
|
|
|||
|
|
@export var wall_jump_force_time: float = .24
|
|||
|
|
var wall_jump_force_timer: float
|
|||
|
|
|
|||
|
|
func _setup() -> void:
|
|||
|
|
self.add_event_handler(&"completed_jump",_handler_completed_jump)
|
|||
|
|
|
|||
|
|
func _enter() -> void:
|
|||
|
|
agent.locomotion_comp.wall_jump()
|
|||
|
|
wall_jump_force_timer = wall_jump_force_time
|
|||
|
|
|
|||
|
|
get_root().blackboard.set_var(&"lock_direction_changed",true)
|
|||
|
|
|
|||
|
|
func _exit() -> void:
|
|||
|
|
#这里强制重置一下
|
|||
|
|
agent.locomotion_comp.stop_jump()
|
|||
|
|
get_root().blackboard.set_var(&"lock_direction_changed",false)
|
|||
|
|
|
|||
|
|
func _update(delta: float) -> void:
|
|||
|
|
if agent.velocity.y >= 0:
|
|||
|
|
get_root().dispatch(self.EVENT_FINISHED)
|
|||
|
|
|
|||
|
|
|
|||
|
|
var move_dir : float
|
|||
|
|
move_dir = Input.get_axis(&"move_left",&"move_right")
|
|||
|
|
|
|||
|
|
#这里执行一个额外的忽略输入的逻辑,在墙跳的开始阶段,玩家如果存在移动输入,则会被强制归为沿墙壁法向的输入
|
|||
|
|
if wall_jump_force_timer > 0:
|
|||
|
|
wall_jump_force_timer -= delta
|
|||
|
|
#这里的行为是,如果当前存在输入,则不管是什么方向的,都归为法向,否则就是0
|
|||
|
|
move_dir = agent.get_wall_normal().x if Input.get_axis(&"move_left",&"move_right") != 0 else 0
|
|||
|
|
|
|||
|
|
agent.locomotion_comp.add_movement_input(move_dir)
|
|||
|
|
|
|||
|
|
|
|||
|
|
func _handler_completed_jump() -> bool:
|
|||
|
|
agent.locomotion_comp.stop_jump()
|
|||
|
|
return true
|