2025-01-14 10:20:31 +00:00
|
|
|
@tool
|
|
|
|
extends AnimationRoot
|
|
|
|
|
2025-01-16 12:24:21 +00:00
|
|
|
var frame_relocated = false
|
2025-01-20 13:45:47 +00:00
|
|
|
var ambush: Ambush2D
|
|
|
|
var frame: Note2D
|
|
|
|
var paper: Interactable2D
|
|
|
|
var right_door: Portal2D
|
2025-01-21 10:52:36 +00:00
|
|
|
var piano: Interactable2D
|
2025-01-14 10:20:31 +00:00
|
|
|
|
2025-01-21 12:41:24 +00:00
|
|
|
|
2025-01-14 10:20:31 +00:00
|
|
|
# 覆盖该方法
|
|
|
|
func _default_data() -> Dictionary:
|
|
|
|
return {}
|
|
|
|
|
|
|
|
|
|
|
|
func _ready() -> void:
|
|
|
|
super._ready()
|
2025-01-21 07:58:21 +00:00
|
|
|
if Engine.is_editor_hint():
|
|
|
|
return
|
2025-01-14 10:20:31 +00:00
|
|
|
|
2025-01-16 12:24:21 +00:00
|
|
|
|
2025-01-20 13:45:47 +00:00
|
|
|
func play_intro_dialogue():
|
|
|
|
# 播放开场对话
|
|
|
|
DialogueManager.show_dialogue_balloon(dialogue_c01, "c01_s05_院长房间_开场")
|
|
|
|
|
|
|
|
|
2025-01-22 13:13:18 +00:00
|
|
|
func _on_ground_ready() -> void:
|
2025-01-20 13:45:47 +00:00
|
|
|
ambush = $"../DeployLayer/ambush鸡毛掸子"
|
|
|
|
frame = $"../DeployLayer/画框"
|
|
|
|
paper = $"../DeployLayer/oneshot纸片"
|
|
|
|
right_door = $"../DeployLayer/portal_right"
|
2025-01-21 10:52:36 +00:00
|
|
|
piano = $"../DeployLayer/钢琴"
|
|
|
|
# 画框是否已经正位
|
2025-01-20 13:45:47 +00:00
|
|
|
frame_relocated = ambush.played and ambush.one_shot
|
2025-01-21 10:52:36 +00:00
|
|
|
# 禁用鸡毛掸子
|
2025-01-20 13:45:47 +00:00
|
|
|
ambush.enabled = false
|
2025-01-21 10:52:36 +00:00
|
|
|
# 画框已经正位时,重制画框状态
|
2025-01-20 13:45:47 +00:00
|
|
|
if frame_relocated:
|
|
|
|
frame.rotation_degrees = 0.0
|
|
|
|
frame.note_key = "c01_摆正的洋相片"
|
2025-01-16 12:24:21 +00:00
|
|
|
if GlobalConfig.DEBUG:
|
|
|
|
print("重置画框位置")
|
2025-01-20 13:45:47 +00:00
|
|
|
else:
|
2025-01-21 10:52:36 +00:00
|
|
|
# 画框未正位时,首先允许互动相框
|
2025-01-20 13:45:47 +00:00
|
|
|
frame.read_note.connect(_on_note_read, CONNECT_ONE_SHOT)
|
|
|
|
ambush.triggered.connect(_on_ambush_triggered)
|
2025-01-21 12:41:24 +00:00
|
|
|
|
2025-01-21 10:52:36 +00:00
|
|
|
# 纸片状态
|
2025-01-20 13:45:47 +00:00
|
|
|
if frame_relocated:
|
2025-01-21 10:52:36 +00:00
|
|
|
# 画框已经正位,纸片已经被拾取
|
2025-01-20 13:45:47 +00:00
|
|
|
if paper.interacted_times > 0:
|
|
|
|
paper.visible = false
|
|
|
|
paper.enabled = false
|
2025-01-21 07:58:21 +00:00
|
|
|
right_door.enabled = true
|
2025-01-20 13:45:47 +00:00
|
|
|
else:
|
2025-01-21 12:41:24 +00:00
|
|
|
# 画框已经正位,纸片未被拾取,直接掉落
|
2025-01-20 13:45:47 +00:00
|
|
|
paper.visible = true
|
|
|
|
paper.enabled = true
|
|
|
|
paper.interacted.connect(_on_paper_interacted, CONNECT_ONE_SHOT)
|
|
|
|
else:
|
2025-01-21 10:52:36 +00:00
|
|
|
# 画框未正位,纸片未掉落
|
2025-01-20 13:45:47 +00:00
|
|
|
paper.visible = false
|
2025-01-21 10:52:36 +00:00
|
|
|
paper.enabled = false
|
2025-01-20 13:45:47 +00:00
|
|
|
paper.interacted.connect(_on_paper_interacted, CONNECT_ONE_SHOT)
|
|
|
|
|
2025-01-21 10:52:36 +00:00
|
|
|
piano.interacted.connect(_on_piano_interacted)
|
|
|
|
|
2025-01-20 13:45:47 +00:00
|
|
|
|
|
|
|
func _on_note_read():
|
|
|
|
frame.enabled = false
|
|
|
|
# 稍加延时后显示鸡毛掸子
|
|
|
|
get_tree().create_timer(1.0).timeout.connect(func(): ambush.enabled = true)
|
|
|
|
|
|
|
|
|
|
|
|
func _on_ambush_triggered():
|
|
|
|
ambush.enabled = false
|
|
|
|
frame.note_key = "c01_摆正的洋相片"
|
|
|
|
get_tree().create_timer(5.5).timeout.connect(func(): frame.enabled = true)
|
|
|
|
# 鸡毛掸子 4.5s,再等待 3s 后掉落纸片
|
|
|
|
get_tree().create_timer(8).timeout.connect(_play_paper_animation)
|
|
|
|
|
|
|
|
|
|
|
|
func _play_paper_animation():
|
|
|
|
# 播放纸片动画
|
|
|
|
paper.enabled = true
|
2025-01-21 10:52:36 +00:00
|
|
|
play("纸片飘落")
|
2025-01-20 13:45:47 +00:00
|
|
|
|
|
|
|
|
|
|
|
func _on_paper_interacted():
|
|
|
|
paper.visible = false
|
|
|
|
paper.enabled = false
|
|
|
|
SceneManager.enable_prop_item("prop_信碎片1")
|
|
|
|
right_door.enabled = true
|
|
|
|
SceneManager.pop_debug_dialog_info("音效", "开门声")
|
|
|
|
$"../sfx_door_open".play()
|
2025-01-21 10:52:36 +00:00
|
|
|
|
2025-01-21 12:41:24 +00:00
|
|
|
|
|
|
|
# 钢琴音效,每次按下播放不同音符
|
|
|
|
# 最长间隔时间
|
|
|
|
var piano_time_epsilon := 2.0
|
|
|
|
# 钢琴音符最大编号
|
|
|
|
var piano_id_max := 10
|
|
|
|
var piano_last_played_time := 0.0
|
|
|
|
var piano_id := 0
|
|
|
|
|
|
|
|
|
2025-01-21 10:52:36 +00:00
|
|
|
func _on_piano_interacted():
|
2025-01-21 12:41:24 +00:00
|
|
|
# 播放音符
|
|
|
|
var now = Time.get_ticks_msec()
|
|
|
|
if now - piano_last_played_time < piano_time_epsilon * 1000:
|
|
|
|
piano_id = wrapi(piano_id + 1, 0, piano_id_max)
|
|
|
|
else:
|
|
|
|
piano_id = 0
|
|
|
|
piano_last_played_time = now
|
|
|
|
SceneManager.pop_debug_dialog_info("音效", "钢琴声: " + str(piano_id))
|