xiandie/scene/ground/scene/c02/s02_过道.gd
2025-07-30 22:57:38 +08:00

167 lines
5.0 KiB
GDScript

@tool
extends AnimationRoot
var wind_blows: AnimatedSprite2D
var paper_man: Ambush2D
var music_box: Closeup2D
var flyer
# 用于 reset 存档
# ArchiveManager.get_global_value(&"c02_musicbox_pic_taken")
# ArchiveManager.get_global_value(&"c02_musicbox_danzhu_taken")
# ArchiveManager.get_global_value(&"c02_musicbox_xiaomao_taken")
# ArchiveManager.get_global_value(&"c02_musicbox_xiaochan_taken")
# 覆盖该方法
func _default_data() -> Dictionary:
return {
"first_enter": false,
"flyer_shaven": false,
}
func _ready() -> void:
super._ready()
if Engine.is_editor_hint():
return
func _on_ground_ready() -> void:
Util.timer(4.0, $"Sfx楼道怪声".play)
wind_blows = $"../DeployLayer/WindBlows"
if data.first_enter:
wind_blows.visible = false
else:
_oneshot_wind.call_deferred()
paper_man = $"../DeployLayer/Ambush纸人"
# 0:关闭 1:打开 2:放入小蝉人偶 3:全部放置正确_可摇手柄 4:已播放完成
if 4 <= EventManager.get_stage(&"c02_musicbox_stage"):
_display_paper_man(false)
else:
paper_man.get_node("wall/CollisionShape2D").disabled = true
# paper_man.enabled = false
paper_man.visible = false
$"../DeployLayer/InteractableLeftPortal".interacted.connect(_on_try_exit)
if $"../DeployLayer/Ambush小蝉闪现".played:
$"../DeployLayer/Ambush小蝉闪现/小蝉".visible = false
flyer = $"../DeployLayer/Closeup刮海报"
if data.flyer_shaven:
flyer.enabled = false
flyer.visible = false
$"../DeployLayer/青岛啤酒".enabled = true
else:
flyer.exit.connect(_on_flyer_exit)
music_box = $"../DeployLayer/Closeup八音盒"
music_box.exit.connect(_on_music_box_exited, CONNECT_ONE_SHOT)
func _oneshot_wind():
var player = %MainPlayer as MainPlayer
SceneManager.lock_player()
player.hide_sprite = true
player.set_facing_direction(Vector2.RIGHT)
player.global_position.x = 53.0
$"冷飕飕Sfx".play()
wind_blows.visible = true
wind_blows.play()
await wind_blows.animation_finished
set_data("first_enter", true)
%MainPlayer.hide_sprite = false
wind_blows.visible = false
# 使用气泡文字
await SceneManager.pop_os_with_str("c02_冷飕飕的")
SceneManager.pop_center_notification("ui_center_notify_check_bag")
SceneManager.unlock_player()
func xiaochan_disappear():
var xc = $"../DeployLayer/Ambush小蝉闪现/小蝉" as AnimatedSprite2D
xc.play()
create_tween().tween_property(xc, "modulate:a", 0.0, 2.0)
func _on_flyer_exit(arg):
if arg == true:
$"../DeployLayer/青岛啤酒".enabled = true
set_data("flyer_shaven", true)
flyer.enabled = false
flyer.visible = false
# TODO 发放 steam 成就
SceneManager.pop_debug_dialog_info("程序", "发放 steam 成就")
func lumber_interacted():
SceneManager.call_deferred("enable_prop_item", "prop_火柴")
SceneManager.get_inspector().quit_and_hidden.connect(_on_inspector_quit, CONNECT_ONE_SHOT)
func _on_inspector_quit():
var blink_sprite = $"../DeployLayer/杂物眨眼睛" as AnimatedSprite2D
blink_sprite.visible = true
blink_sprite.play()
blink_sprite.animation_finished.connect(_on_blink_finished.bind(blink_sprite), CONNECT_ONE_SHOT)
func _on_blink_finished(blink_sprite):
blink_sprite.visible = false
func _on_music_box_exited(_arg):
EventManager.set_stage_if_greater(&"handnote_c02_musicbox_needPuppet", 1)
if 2 <= EventManager.get_stage(&"c02_musicbox_stage"):
EventManager.set_stage_if_greater(&"handnote_c02_musicbox_needPuppet", 2)
if 4 <= EventManager.get_stage(&"c02_musicbox_stage"):
_display_paper_man(false)
# _display_paper_man(true)
func _display_paper_man(play_sfx := true):
paper_man.visible = true
# 不启用
# paper_man.enabled = true
if play_sfx:
paper_man.get_node("Sfx").play()
# 第一章阻挡,第二章不阻挡并且左右镜像
if 2 <= EventManager.get_chapter_stage():
paper_man.flip_h = false
else:
paper_man.get_node("wall/CollisionShape2D").disabled = true
func _on_try_exit():
SceneManager.freeze_player(0)
# 退出公寓?
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_纸人互动_离开公寓")
await DialogueManager.dialogue_ended
SceneManager.release_player()
func check_if_show_shoes():
# 不论是否推出,都需要 enable 调整为 false
$"../DeployLayer/Ambush推小鞋子".enabled = false
# 检查是否显示鞋子
if not ArchiveManager.get_global_value(&"c02_s02_mouse_push_shoe", false):
return
var interactable = $"../DeployLayer/Interactable小鞋子"
if interactable.interacted_times > 0:
# 如果已经交互过,则不再推鞋子
return
SceneManager.pop_debug_dialog_info("美术", "推【小鞋子1】的动画待优化")
SceneManager.freeze_player(2.0)
$"../DeployLayer/Note老鼠洞".enabled = false
$"../DeployLayer/老鼠拖鞋".visible = true
$"../DeployLayer/老鼠拖鞋".frame = 0
$"../DeployLayer/老鼠拖鞋".play()
interactable.enabled = true
interactable.interacted.connect(_on_shoes_interacted, CONNECT_ONE_SHOT)
func _on_shoes_interacted():
SceneManager.enable_important_item("prop_单只小鞋子")
$"../DeployLayer/老鼠拖鞋".visible = false
$"../DeployLayer/Note老鼠洞".enabled = true