xiandie/scene/ground/script/c02/追猫猪头怪.gd

97 lines
1.9 KiB
GDScript3
Raw Normal View History

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