xiandie/scene/ground/scene/c01/s07_书店外.gd
2025-07-03 17:51:21 +08:00

98 lines
2.7 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
# 覆盖该方法
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("res://asset/audio/sfx/交互/序章/03_书店外黄昏_开门.wav")
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()