xiandie/scene/ground/scene/c01/s12_书店外_诡异版.gd

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)