@tool extends AnimationRoot # 覆盖该方法 func _default_data() -> Dictionary: return { # 雾是否已经消失, 第一次进入时为 false "fog_disappeared": false, } func _ready() -> void: super._ready() if Engine.is_editor_hint(): return var luren var fog var seller var ambush_seller: Ambush2D var bookstore_portal: Portal2D func _on_ground_ready() -> void: luren = $"../DeployLayer/陆仁舞刀" as ProAnimatedSprite2D fog = $"../DeployLayer/portal_1/Fog" as Fog2D if data.fog_disappeared: # 雾已经消失,直接隐藏 fog.visible = false else: fog.visible = true # 相机左侧逐渐拉过来 var camera = SceneManager.get_camera_marker() camera.limit_left = -400 create_tween().tween_property(camera, "limit_left", 0, 5.0) Util.timer(5.0, _on_fog_disappear) seller = $"../DeployLayer/报童" as AnimatedSprite2D ambush_seller = $"../DeployLayer/报童/Ambush报童" as Ambush2D bookstore_portal = $"../DeployLayer/portal_2" if ambush_seller.played: # 已交互,不再 holding 门 bookstore_portal.holding = false else: # 第一次进入,等待播放动画 bookstore_portal.pre_transport_wait_time = 3.5 bookstore_portal.before_pre_transport_wait.connect(_knock_door) bookstore_portal.get_node("SfxEnter").stream = null if $"../DeployLayer/Ambush陆仁收刀".played: holdback_knife() func holdback_knife() -> void: (luren.sprite_frames as SpriteFrames).set_animation_loop("陆仁舞刀-黄昏带红缨", false) luren.animation_finished.connect(_on_luren_animation_finished, CONNECT_ONE_SHOT) func _on_luren_animation_finished() -> void: luren.play("陆仁收刀") luren.get_node("Sfx2D").stop() # luren.offset = Vector2(-9.5, -0.5) luren.offset = Vector2(-19, -1) $"../DeployLayer/陆仁舞刀/Npc吉祥话4".enabled = true func _knock_door(): # 6 号动作:敲门 SceneManager.lock_player(3.5, 6) await Util.wait(2.2) $"敲门音效".play() await Util.wait(1.2) var stream = preload("uid://ehgd455wq8to") AudioManager.play_sfx(stream) func _on_fog_disappear() -> void: set_data("fog_disappeared", true) # 显示标题 SceneManager.pop_chapter_notification(1) fog.tween_fog(0, Color.TRANSPARENT, Fog2D.FOG_OFFSET_DEFAULT, 15.0, true) func seller_interacted(): bookstore_portal.holding = false # 报童交互 SceneManager.freeze_player(0) seller.play("报童给报纸") # 提前写入 prop 中,防止存档 bug,稍后播放获得动画 SceneManager.enable_prop_item_silently("prop_信碎片2") await Util.wait(1.5) $"报童音效".play() await SceneManager.pop_os_with_str("c01_s07_获得报纸") # 播放获得动画 SceneManager.enable_prop_item("prop_信碎片2") SceneManager.release_player() func jiandu_dialog_triggered() -> void: var jiandu = $"../DeployLayer/举碗小孩/Npc监督小孩" jiandu.hook_speaking() SceneManager.hold_player() DialogueManager.dialogue_ended.connect(_on_jiandu_dialog_ended, CONNECT_ONE_SHOT) func _on_jiandu_dialog_ended(_res) -> void: var jiandu = $"../DeployLayer/举碗小孩/Npc监督小孩" jiandu.unhook_speaking() SceneManager.unhold_player()