xiandie/scene/ground/scene/c01/s05_animation.gd

136 lines
3.8 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@tool
extends AnimationRoot
var ambush: Ambush2D
var frame: Note2D
var paper: Interactable2D
var right_door: Portal2D
var piano: Interactable2D
var bed_reading: AnimatedSprite2D
# 覆盖该方法
func _default_data() -> Dictionary:
return {
"frame_relocated": false
}
func _ready() -> void:
super._ready()
oneshot_animation_finished.connect(show_interact_help)
func play_intro_dialogue():
# 播放开场对话
DialogueManager.show_dialogue_balloon(dialogue_c01, "c01_s05_院长房间_开场")
func _on_ground_ready() -> void:
ambush = $"../DeployLayer/ambush鸡毛掸子"
frame = $"../DeployLayer/画框"
paper = $"../DeployLayer/oneshot纸片"
right_door = $"../DeployLayer/portal_right"
piano = $"../DeployLayer/钢琴"
bed_reading = $"../DeployLayer/小小蝶看书"
bed_reading.frame_changed.connect(_on_bed_reading_frame_changed)
# 画框是否已经正位
data.frame_relocated = ambush.played and ambush.one_shot
# 禁用鸡毛掸子
ambush.enabled = false
# 画框已经正位时,重制画框状态
if data.frame_relocated:
frame.rotation_degrees = 0.0
frame.note_key = "c01_摆正的洋相片"
if GlobalConfig.DEBUG:
print("重置画框位置")
else:
# 画框未正位时,首先允许互动相框
frame.read_note.connect(_on_note_read, CONNECT_ONE_SHOT)
ambush.triggered.connect(_on_ambush_triggered)
# 纸片状态
if data.frame_relocated:
# 画框已经正位,纸片已经被拾取
if paper.interacted_times > 0:
paper.visible = false
paper.enabled = false
right_door.enabled = true
else:
# 画框已经正位,纸片未被拾取,直接掉落
paper.visible = true
paper.enabled = true
paper.interacted.connect(_on_paper_interacted, CONNECT_ONE_SHOT)
else:
# 画框未正位,纸片未掉落
paper.visible = false
paper.enabled = false
paper.interacted.connect(_on_paper_interacted, CONNECT_ONE_SHOT)
piano.interacted.connect(_on_piano_interacted)
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)
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
play("纸片飘落")
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()
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
)
# 钢琴音效,每次按下播放不同音符
# 最长间隔时间
var piano_time_epsilon := 2.0
# 钢琴音符最大编号
var piano_id_max := 10
var piano_last_played_time := 0.0
var piano_id := 0
func _on_piano_interacted():
# 播放音符
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))
func show_interact_help():
pass
# 暂时无需使用背包系统
# SceneManager.pop_center_notification(tr("ui_press_e"))