2025-01-14 10:20:31 +00:00
|
|
|
|
@tool
|
|
|
|
|
extends AnimationRoot
|
|
|
|
|
|
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-31 10:44:30 +00:00
|
|
|
|
var bed_reading: AnimatedSprite2D
|
2025-01-21 12:41:24 +00:00
|
|
|
|
|
2025-01-14 10:20:31 +00:00
|
|
|
|
# 覆盖该方法
|
|
|
|
|
func _default_data() -> Dictionary:
|
2025-01-27 15:13:37 +00:00
|
|
|
|
return {
|
|
|
|
|
"frame_relocated": false
|
|
|
|
|
}
|
2025-01-14 10:20:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _ready() -> void:
|
|
|
|
|
super._ready()
|
2025-01-24 14:19:17 +00:00
|
|
|
|
oneshot_animation_finished.connect(show_interact_help)
|
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-31 10:44:30 +00:00
|
|
|
|
bed_reading = $"../DeployLayer/小小蝶看书"
|
|
|
|
|
bed_reading.frame_changed.connect(_on_bed_reading_frame_changed)
|
2025-01-21 10:52:36 +00:00
|
|
|
|
# 画框是否已经正位
|
2025-01-27 15:13:37 +00:00
|
|
|
|
data.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-27 15:13:37 +00:00
|
|
|
|
if data.frame_relocated:
|
2025-01-20 13:45:47 +00:00
|
|
|
|
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-27 15:13:37 +00:00
|
|
|
|
if data.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-31 10:44:30 +00:00
|
|
|
|
func _on_bed_reading_frame_changed():
|
|
|
|
|
if bed_reading.animation == "c01_小小蝶_床上看书" and bed_reading.frame == 10:
|
|
|
|
|
# 播放结束,0.5s 后释放角色
|
|
|
|
|
get_tree().create_timer(0.5).timeout.connect(SceneManager.release_player)
|
|
|
|
|
|
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-24 14:19:17 +00:00
|
|
|
|
var inspector = SceneManager.get_inspector() as PropInspector
|
|
|
|
|
if inspector:
|
|
|
|
|
# 显示互动提示
|
|
|
|
|
inspector.quit_and_hidden.connect(
|
|
|
|
|
SceneManager.pop_center_notification.bind(tr("ui_press_b")), CONNECT_ONE_SHOT
|
|
|
|
|
)
|
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))
|
2025-01-24 14:19:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func show_interact_help():
|
2025-02-10 10:59:19 +00:00
|
|
|
|
pass
|
|
|
|
|
# 暂时无需使用背包系统
|
|
|
|
|
# SceneManager.pop_center_notification(tr("ui_press_e"))
|