extends CanvasLayer signal exit @onready var a_match = $"Root/火柴/A火" as AnimatedSprite2D @onready var l_match = $"Root/火柴/L火柴" as PointLight2D @onready var l_vibe = $"Root/火柴/L光晕" as PointLight2D @onready var root_match = $"Root/火柴" as Node2D @onready var a_xiaochan = $"Root/BG_小蝉/A小蝉侧头" as AnimatedSprite2D @onready var a_eye = $"Root/小蝶脸部/A眼睛" as AnimatedSprite2D @onready var a_mouth = $"Root/小蝶脸部/A嘴巴" as AnimatedSprite2D @onready var a_hand_root = $"Root/小蝉手" as Node2D @onready var a_hand_shadow = $"Root/小蝉手/A小蝉捂脸阴影" as AnimatedSprite2D @onready var a_hand_arm = $"Root/小蝉手/A小蝉捂脸胳膊" as AnimatedSprite2D @onready var a_hand = $"Root/小蝉手/A小蝉捂脸手" as AnimatedSprite2D @onready var animation_player = $Root/AnimationPlayer as AnimationPlayer @onready var mask_all = $"遮罩/MaskAll" 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.position.y = 70 # root_match.hide() await create_tween().tween_interval(1.7).finished #### part1: 擦火柴 # $"Root/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, 1.7) tween.tween_interval(1.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: 小蝉捂眼,瞎子、胖子声音 # 小蝉身体回正、捂眼 DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s11_谢幕交谈2") get_tree().create_timer(5.0).timeout.connect(_hand_cover_eyes) await DialogueManager.dialogue_ended SceneManager.pop_debug_dialog_info("音效", "小蝉笑声/耳鸣") await create_tween().tween_interval(3.0).finished # 瞎子打断 DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s11_谢幕交谈3") # 1.0 渐入 ~ 1.0 渐出 SceneManager.black_transition(1.0) # 对话过程中提前退出 await create_tween().tween_interval(1.0).finished $Root.visible = false exit.emit() func _hand_cover_eyes() -> void: a_xiaochan.play("小婵探头回去") await a_xiaochan.animation_finished animation_player.play("小蝉捂眼") var first_speak = true func _on_got_dialogue(line: DialogueLine): var speak = line.character == "吕萍" if speak: if first_speak: first_speak = false await get_tree().create_timer(2.0).timeout else: await get_tree().create_timer(1.0).timeout toggle_speak(speak) 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