godot-plateformer/_player/states/ghost.gd

48 lines
1.3 KiB
GDScript3
Raw Normal View History

2025-12-29 11:54:31 +08:00
''' Dash的生命周期
1.
'''
extends LimboState
const DASH_FREEZE_TIME: float = .05
@export var dash_time: float = .15
var _dash_timer: float
func _enter() -> void:
get_root().blackboard.set_var(&"is_dashing",true) ##BB里锁住Dash状态
#禁用原本Locomotion Component的更新
agent.locomotion_comp.stop_movement()
agent.locomotion_comp.suspend_movement()
var dash_start_on_ground: bool = agent.is_on_floor()
agent.locomotion_comp.integrate_dash(_get_dash_direction())
_dash_timer = dash_time
func _exit() -> void:
blackboard.set_var(&"is_dashing",false) ##BB里清除Dash状态
agent.locomotion_comp.enable_movement()
agent.locomotion_comp.can_dash = false
func _update(delta: float) -> void:
if _dash_timer > 0:
_dash_timer -= delta
return
if agent.is_on_floor():
self.dispatch(&"exit_on_ground")
else:
self.dispatch(&"exit_on_air")
return
func _get_dash_direction() -> Vector2:
var r : Vector2
r = Vector2(1,0) if agent.direction == Player.Direction.RIGHT else Vector2(-1,0)
var dash_direction_x = Input.get_axis(&"move_left",&"move_right") as float
var dash_direction_y = Input.get_axis(&"move_up",&"move_down") as float
if dash_direction_x != 0 or dash_direction_y != 0:
r = Vector2(dash_direction_x,dash_direction_y)
return r