extends Node2D @export var enabled := true # 追击开始距离 @export var start_distance := 400 # 追击开始方位(左/右) @export var from_left := true # 追击速度 @export var speed := 30 # 脚步声周期时间 @export var footstep_wait_time := 0.7 @onready var sfx_footstep = $SfxFootstep as Sfx var footstep_timer func _ready() -> void: var player = SceneManager.get_player() # 高度对齐 position.y = player.position.y # 脚步声 timer footstep_timer = Timer.new() footstep_timer.autostart = false footstep_timer.wait_time = footstep_wait_time add_child(footstep_timer) footstep_timer.timeout.connect(_on_footstep_timer_timeout) func _on_footstep_timer_timeout() -> void: sfx_footstep.play() # shake camera # 启用/禁用脚步声 func toggle_footstep_sfx(play := true): if play: footstep_timer.start() else: footstep_timer.stop() var move_tween: Tween # 开始追击 func start_chasing() -> void: toggle_footstep_sfx(true) # 初始位置与方向 # 停止追击 func stop_chasing() -> void: toggle_footstep_sfx(false) # 转身追击 func turn_back(): # 呼吸一帧,然后转身 pass # 正在抓取 var catching = false # 检测到猫钻进盒子的过程 var cat_hiding_detacted = false var catch_x_range = Vector2(5, 10) func detact_pos(player_pos: Vector2): if catching: return var signed_x_diff = (player_pos.x - position.x) * sign(position.x) # 检查是否需要转身 # 检查盒子猫状态 cat_hiding_detacted = true # 如果离开一定范围,重置 catch_box_cat cat_hiding_detacted = false # 检查是否抓取 if cat_hiding_detacted and is_in_range(signed_x_diff, catch_x_range): catching = true if not catching: return # 如果距离近,先走到对应位置,然后使用 猪头怪抓盒子猫 # 距离近,使用 猪头怪抓盒子猫后段 直接抓取 func is_in_range(x: float, x_range: Vector2) -> bool: return x > x_range.x and x < x_range.y