177 lines
5.6 KiB
GDScript
177 lines
5.6 KiB
GDScript
@tool
|
|
extends AnimationRoot
|
|
|
|
|
|
# 覆盖该方法
|
|
func _default_data() -> Dictionary:
|
|
return {}
|
|
|
|
|
|
func _ready() -> void:
|
|
super._ready()
|
|
if Engine.is_editor_hint():
|
|
return
|
|
|
|
|
|
var flower
|
|
var mice
|
|
var ghost
|
|
var ghost_start_x = -200
|
|
var begger
|
|
var ambush_begger: Ambush2D
|
|
var interactable_bowl: Interactable2D
|
|
|
|
|
|
func _on_ground_ready() -> void:
|
|
flower = $"../DeployLayer/自动枯萎的花朵"
|
|
mice = $"../DeployLayer/自动枯萎的花朵/自动跟随的老鼠"
|
|
ghost = $"../DeployLayer/Ghost"
|
|
ghost_start_x = ghost.global_position.x
|
|
begger = $"../DeployLayer/举碗小孩"
|
|
ambush_begger = $"../DeployLayer/举碗小孩/Ambush举碗小孩"
|
|
interactable_bowl = $"../DeployLayer/举碗小孩/Interactable碗"
|
|
interactable_bowl.interacted.connect(_on_interactable_bowl_interacted, CONNECT_ONE_SHOT)
|
|
# 玩家先和小孩互动,再和碗互动
|
|
if ambush_begger.played:
|
|
interactable_bowl.enabled = true
|
|
if interactable_bowl.interacted_times == 0:
|
|
begger.play("杂戏团夜晚_小孩放下碗")
|
|
else:
|
|
# 害怕过渡 -> 害怕
|
|
begger.play("举碗小孩害怕过渡")
|
|
var kids = $"../DeployLayer/其余小孩"
|
|
kids.play("夜晚其余小孩杂耍到害怕过渡")
|
|
var kid = $"../DeployLayer/举腿小孩"
|
|
kid.play("夜晚举腿小孩杂耍到害怕过渡")
|
|
_setup_catching_game()
|
|
# 鬼差追逐
|
|
player_been_catched.call_deferred(false)
|
|
|
|
# 雾气浓度逐渐上升到 1.0
|
|
# create_tween().tween_property($"../DeployLayer/Fog", "modulate:a", 1.0, 10.0)
|
|
$"../DeployLayer/飘动的寻人启事".visible = true
|
|
|
|
|
|
func intro() -> void:
|
|
begger.play("杂戏团夜晚_小孩举碗呼吸")
|
|
# SceneManager.freeze_player(0)
|
|
# SceneManager.focus_node(begger, 5.)
|
|
Util.timer(1., _intro_dialog)
|
|
|
|
|
|
func _intro_dialog() -> void:
|
|
DialogueManager.show_dialogue_balloon(dialogue_c01, "c01_s12_诡异的书店外发钱")
|
|
# DialogueManager.dialogue_ended.connect(_on_intro_dialogue_ended, CONNECT_ONE_SHOT)
|
|
# func _on_intro_dialogue_ended(_res) -> void:
|
|
# SceneManager.focus_player_and_reset_zoom(5.)
|
|
# SceneManager.release_player()
|
|
|
|
|
|
func ambush_begger_interacted():
|
|
begger.play("杂戏团夜晚_小孩放下碗")
|
|
SceneManager.lock_player(0)
|
|
await Util.wait(1)
|
|
DialogueManager.show_dialogue_balloon(dialogue_c01, "c01_s12_小孩放下碗")
|
|
await DialogueManager.dialogue_ended
|
|
SceneManager.unlock_player()
|
|
interactable_bowl.enabled = true
|
|
|
|
|
|
func _ghost_appear_sfx():
|
|
$"Sfx鬼差出场".play()
|
|
Util.timer(3.0, $"Bgm鬼差追逐".start)
|
|
|
|
|
|
func _on_interactable_bowl_interacted() -> void:
|
|
SceneManager.freeze_player(0)
|
|
# ⼩男孩询问吕萍银元从哪⾥弄来的
|
|
DialogueManager.show_dialogue_balloon(dialogue_c01, "c01_s12_鬼差来之前对话")
|
|
await DialogueManager.dialogue_ended
|
|
_ghost_move()
|
|
await Util.wait(1)
|
|
# 害怕过渡 -> 害怕
|
|
begger.play("举碗小孩害怕过渡")
|
|
var kids = $"../DeployLayer/其余小孩"
|
|
kids.play("夜晚其余小孩杂耍到害怕过渡")
|
|
var kid = $"../DeployLayer/举腿小孩"
|
|
kid.play("夜晚举腿小孩杂耍到害怕过渡")
|
|
_ghost_appear_sfx()
|
|
await Util.wait(1)
|
|
DialogueManager.show_dialogue_balloon(dialogue_c01, "c01_s12_鬼差来了")
|
|
var tween = create_tween()
|
|
var camera = SceneManager.get_camera_marker() as CameraFocusMarker
|
|
tween.tween_interval(1.5)
|
|
tween.tween_property(camera, "force_offset", Vector2(-100, 0), 2.0)
|
|
SceneManager.get_player().set_facing_direction(Vector2.LEFT)
|
|
await DialogueManager.dialogue_ended
|
|
SceneManager.release_player()
|
|
tween = create_tween()
|
|
tween.tween_property(camera, "force_offset", Vector2(0, 0), 2.0)
|
|
|
|
|
|
var ghost_move_tween
|
|
|
|
|
|
func _ghost_move() -> void:
|
|
if GlobalConfig.DEBUG:
|
|
print("鬼差移动")
|
|
SceneManager.pop_debug_dialog_info("音效", "鬼差出现")
|
|
_setup_catching_game()
|
|
# ghost.play()
|
|
ghost_move_tween = create_tween()
|
|
ghost_move_tween.tween_property(ghost, "global_position", Vector2(2500, 0), 40.0).as_relative()
|
|
ghost.get_node("脚步声2D").start_loop()
|
|
|
|
|
|
func _setup_catching_game():
|
|
ghost.visible = true
|
|
# 启用 success ambush
|
|
$"../DeployLayer/Fog/AmbushSuccess".enabled = true
|
|
ghost.get_node("Ambush玩家被抓").enabled = true
|
|
# 追逐时禁止进入书店
|
|
$"../DeployLayer/portal_2".enabled = false
|
|
mice.flush_right_and_disable()
|
|
# 允许玩家向右跑,解锁右边界
|
|
SceneManager.get_player().player_movement_rect.size.x = 4000
|
|
SceneManager.get_camera_marker().limit_right = 4000
|
|
|
|
|
|
func player_been_catched(transition := true) -> void:
|
|
$"Bgm鬼差追逐".stop(1.5)
|
|
$"Sfx鬼差擦肩而过".play()
|
|
SceneManager.freeze_player(0)
|
|
if ghost_move_tween:
|
|
ghost_move_tween.kill()
|
|
ghost.get_node("脚步声2D").pause_loop()
|
|
var player_start_x = 1800.0
|
|
if transition:
|
|
# 玩家被抓
|
|
SceneManager.pop_debug_dialog_info("美术", "玩家被鬼差抓住")
|
|
# 等待动画播放完成
|
|
# TODO 添加转场前效果?
|
|
await Util.wait(1.5)
|
|
# 传送到起点,继续跑
|
|
await SceneManager.toggle_ground_mask(true).finished
|
|
# 恢复花朵
|
|
flower.reset_all_blooming()
|
|
await SceneManager.toggle_ground_mask(false).finished
|
|
# reset player and ghost position
|
|
ghost.global_position.x = ghost_start_x + 100.0
|
|
SceneManager.get_player().global_position.x = player_start_x
|
|
_ghost_appear_sfx()
|
|
DialogueManager.show_dialogue_balloon(dialogue_c01, "c01_s12_鬼差来了")
|
|
await DialogueManager.dialogue_ended
|
|
SceneManager.release_player()
|
|
|
|
ghost_move_tween = create_tween()
|
|
ghost_move_tween.tween_property(ghost, "global_position", Vector2(2500, 0), 40.0).as_relative()
|
|
ghost.get_node("脚步声2D").start_loop()
|
|
ghost.visible = true
|
|
ghost.get_node("Ambush玩家被抓").enabled = true
|
|
|
|
|
|
func player_run_away() -> void:
|
|
# 玩家继续逃脱,传送到公寓楼外
|
|
# 无缝转场过程
|
|
SceneManager.get_ground_loader().transition_to_scene("c01_s09", "1", 0.0)
|