xiandie/scene/ground/script/c02/谢幕演出.gd

100 lines
3.1 KiB
GDScript3
Raw Normal View History

extends CanvasLayer
2025-06-22 14:13:57 +00:00
signal exit
@onready var a_match = $"火柴/A火" as AnimatedSprite2D
@onready var l_match = $"火柴/L火柴" as PointLight2D
@onready var l_vibe = $"火柴/L光晕" as PointLight2D
@onready var root_match = $"火柴" as Node2D
@onready var a_xiaochan = $"BG_小蝉/A小蝉侧头" as AnimatedSprite2D
@onready var a_eye = $"小蝶脸部/A眼睛" as AnimatedSprite2D
@onready var a_mouth = $"小蝶脸部/A嘴巴" as AnimatedSprite2D
@onready var a_hand_root = $"小蝉手" as Node2D
@onready var a_hand_shadow = $"小蝉手/A小蝉捂脸阴影" as AnimatedSprite2D
@onready var a_hand_arm = $"小蝉手/A小蝉捂脸胳膊" as AnimatedSprite2D
@onready var a_hand = $"小蝉手/A小蝉捂脸手" as AnimatedSprite2D
@onready var animation_player = $AnimationPlayer as AnimationPlayer
var sprite_frames: SpriteFrames
func _ready() -> void:
layer = GlobalConfig.CANVAS_LAYER_LITTLE_GAME
sprite_frames = a_match.sprite_frames
a_match.frame_changed.connect(_on_match_frame_changed.call_deferred)
start()
func _on_match_frame_changed():
# 火柴光替换 L火柴 的 texture
l_match.texture = sprite_frames.get_frame_texture("火柴光", a_match.frame)
# frame == 3 时最大,共 7 frames
l_vibe.texture_scale = 1.0 + smoothstep(0, 4, pingpong(a_match.frame, 3)) * 0.3
var dialogue_c02 = preload("res://asset/dialogue/c02.dialogue")
func start():
# 配合嘴巴动效
DialogueManager.got_dialogue.connect(_on_got_dialogue)
DialogueManager.dialogue_ended.connect(_on_dialogue_ended)
root_match.hide()
await create_tween().tween_interval(3.0).finished
#### part1: 擦火柴
root_match.position.y = 100
$"Sfx擦火柴".play()
await create_tween().tween_interval(0.3).finished
root_match.show()
# 伸手
var tween = create_tween()
tween.tween_property(root_match, "position:y", 0, 2.0)
tween.tween_interval(2.0)
await tween.finished
#### part2: 小蝉浮现,对话
# 小蝉侧过来
a_xiaochan.play("小婵探头出来")
await a_xiaochan.animation_finished
await create_tween().tween_interval(0.5).finished
# 斜眼看
a_eye.play("眼睛斜看")
await a_eye.animation_finished
a_eye.play("左下看闭眼动效")
await create_tween().tween_interval(1.5).finished
# 和小蝉对话
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s11_谢幕交谈1")
await DialogueManager.dialogue_ended
#### part3: 小蝉捂眼,瞎子、胖子声音
# 小蝉身体回正、捂眼
a_xiaochan.play("小婵探头回去")
await a_xiaochan.animation_finished
animation_player.play("小蝉捂眼")
await animation_player.animation_finished
SceneManager.pop_debug_dialog_info("音效", "小蝉笑声/耳鸣")
await create_tween().tween_interval(3.0).finished
# 瞎子打断
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s11_谢幕交谈2")
await DialogueManager.dialogue_ended
#### part4: 结束
ArchiveManager.set_global_entry("c02_burning_end", true)
2025-06-22 14:13:57 +00:00
exit.emit()
func _on_got_dialogue(line: DialogueLine):
toggle_speak(line.character == "吕萍")
func _on_dialogue_ended(_res):
toggle_speak(false)
func toggle_speak(talking := true):
if talking:
a_mouth.play("嘴巴动效")
else:
a_mouth.stop()
a_mouth.frame = 0