121 lines
3.9 KiB
GDScript
121 lines
3.9 KiB
GDScript
@tool
|
|
extends AnimationRoot
|
|
|
|
|
|
# 覆盖该方法
|
|
func _default_data() -> Dictionary:
|
|
return {}
|
|
|
|
|
|
func _ready() -> void:
|
|
super._ready()
|
|
if Engine.is_editor_hint():
|
|
return
|
|
|
|
|
|
var mice_hole: Interactable2D
|
|
var ball_game_boys_ambush: Ambush2D
|
|
var closeup_ball
|
|
|
|
func _on_ground_ready() -> void:
|
|
if ArchiveManager.get_global_value("c02_burning") and not ArchiveManager.get_global_value("c02_burning_end"):
|
|
# 第一章火灾结束,尾声演出
|
|
_c02_final_show.call_deferred()
|
|
else:
|
|
# 否则,隐藏 c02_final 层
|
|
$"../DeployLayer/c02_final".visible = false
|
|
|
|
mice_hole = $"../DeployLayer/Interactable老鼠洞"
|
|
mice_hole.interacted.connect(_on_mice_hole_interacted)
|
|
|
|
closeup_ball = $"../DeployLayer/Closeup弹珠游戏" as Closeup2D
|
|
|
|
ball_game_boys_ambush = $"../DeployLayer/Ambush三男孩"
|
|
# 0:默认 1:寻找弹珠(老虎钳可以换弹珠) 2:给出弹珠 3:游戏结束
|
|
if (
|
|
ArchiveManager.get_global_value("c02_the_blind_room_entered", false)
|
|
and ArchiveManager.get_global_value("c02_ball_game_stage", 0) < 3
|
|
):
|
|
# 进入瞎子卧室后,可开始弹珠游戏
|
|
ball_game_boys_ambush.enabled = true
|
|
ball_game_boys_ambush.visible = true
|
|
|
|
|
|
func _on_mice_hole_interacted():
|
|
mice_hole.enabled = false
|
|
SceneManager.freeze_player(0)
|
|
var animated_sprite = $"../DeployLayer/小老鼠拖鞋子" as AnimatedSprite2D
|
|
animated_sprite.visible = true
|
|
animated_sprite.frame = 8
|
|
animated_sprite.play()
|
|
await animated_sprite.animation_finished
|
|
animated_sprite.visible = false
|
|
mice_hole.enabled = true
|
|
|
|
if mice_hole.interacted_times >= 2:
|
|
# 触发疯子撞墙,疯子在一楼内侧过道中消失
|
|
ArchiveManager.set_global_entry("c02_madman_hitwall", true)
|
|
ArchiveManager.set_global_entry("c02_s02_mouse_push_shoe1", true)
|
|
|
|
# 老鼠散开并不再跟随
|
|
ArchiveManager.set_global_entry("c02_mouse_follow_player", false)
|
|
$"../DeployLayer/自动跟随的老鼠".flush_right_and_disable()
|
|
|
|
SceneManager.pop_debug_dialog_info("美术", "疯子从左侧过来撞墙")
|
|
var sprite = $"../DeployLayer/疯子撞墙"
|
|
sprite.visible = true
|
|
sprite.play("疯子撞墙")
|
|
await get_tree().create_timer(5.0).timeout
|
|
|
|
|
|
SceneManager.release_player()
|
|
|
|
|
|
func boys_ball_game() -> void:
|
|
# 0:默认 1:寻找弹珠(老虎钳可以换弹珠) 2:给出弹珠 3:游戏结束
|
|
var stage = ArchiveManager.get_global_value("c02_ball_game_stage", 0)
|
|
if stage == 0:
|
|
ArchiveManager.set_global_entry("c02_ball_game_stage", 1)
|
|
ArchiveManager.set_global_entry("c02_pliers_to_ball", true)
|
|
SceneManager.freeze_player(0)
|
|
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s05_三男孩弹珠游戏1")
|
|
await DialogueManager.dialogue_ended
|
|
SceneManager.release_player()
|
|
elif stage == 1 or stage == 2:
|
|
SceneManager.freeze_player(0)
|
|
if stage == 1 and SceneManager.get_current_prop(false) != "prop_弹珠":
|
|
var hud = SceneManager.get_prop_hud() as PropHud
|
|
hud.on_toggle_invalid_prop()
|
|
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s05_三男孩弹珠游戏2")
|
|
await DialogueManager.dialogue_ended
|
|
else:
|
|
# 进入弹珠游戏
|
|
closeup_ball.exit.connect(_on_ball_game_exit)
|
|
closeup_ball.display()
|
|
# closeup_ball.enabled = false
|
|
SceneManager.release_player()
|
|
|
|
|
|
func _on_ball_game_exit(success = null):
|
|
# closeup_ball.enabled = false
|
|
if success:
|
|
ball_game_boys_ambush.enabled = false
|
|
ball_game_boys_ambush.visible = false
|
|
|
|
|
|
# 第一章火灾结束,尾声演出
|
|
func _c02_final_show():
|
|
var player = SceneManager.get_player()
|
|
player.set_facing_direction(Vector2(-1, 0))
|
|
SceneManager.freeze_player(0)
|
|
play("c02_final_show")
|
|
# WARN: 如果不延时,开场直接显示 dialog 可能会显示失败(无报错提示)
|
|
await get_tree().create_timer(0.1).timeout
|
|
player.global_position.x = 650
|
|
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s11_谢幕交谈")
|
|
|
|
|
|
func _c02_final_show_end():
|
|
SceneManager.release_player()
|
|
ArchiveManager.set_global_entry("c02_burning_end", true)
|