xiandie/scene/ground/scene/c02/s02_animation.gd
2025-06-07 00:19:37 +08:00

122 lines
3.4 KiB
GDScript

@tool
extends AnimationRoot
var wind_blows: AnimatedSprite2D
var paper_man: Ambush2D
var music_box: Closeup2D
# 覆盖该方法
func _default_data() -> Dictionary:
return {}
func _ready() -> void:
super._ready()
if Engine.is_editor_hint():
return
func _on_ground_ready() -> void:
wind_blows = $"../DeployLayer/WindBlows"
wind_blows.visible = false
paper_man = $"../DeployLayer/Ambush纸人"
if 5 <= ArchiveManager.get_global_value("c02_musicbox_stage", 0):
_display_paper_man(false)
else:
paper_man.get_node("wall/CollisionShape2D").disabled = true
paper_man.enabled = false
paper_man.visible = false
music_box = $"../DeployLayer/Closeup八音盒"
music_box.exit.connect(_on_music_box_exited, CONNECT_ONE_SHOT)
func _oneshot_wind():
SceneManager.get_player().global_position.x = 53
SceneManager.get_player().set_facing_direction(Vector2.RIGHT)
SceneManager.freeze_player(0)
%MainPlayer.visible = false
wind_blows.visible = true
wind_blows.play()
wind_blows.animation_finished.connect(_on_wind_finished, CONNECT_ONE_SHOT)
func _on_wind_finished():
%MainPlayer.visible = true
wind_blows.visible = false
#TODO 使用气泡文字
# DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s02_天冷")
DialogueManager.dialogue_ended.connect(_on_dialogue_ended, CONNECT_ONE_SHOT)
func _on_dialogue_ended(_res):
SceneManager.release_player()
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):
SceneManager.release_player()
if 5 <= ArchiveManager.get_global_value("c02_musicbox_stage"):
_display_paper_man(false)
# _display_paper_man(true)
func _display_paper_man(play_sfx := true):
paper_man.visible = true
# 不启用 ambush
# paper_man.enabled = true
if play_sfx:
paper_man.get_node("Sfx").play()
paper_man.get_node("wall/CollisionShape2D").disabled = false
func display_music_box():
# 展示八音盒
music_box.visible = true
SceneManager.freeze_player(0)
# TODO 打开音效
SceneManager.pop_debug_dialog_info("音效", "显示八音盒")
var current_checked = false
func check_if_show_shoes():
# 检查是否显示鞋子
if not ArchiveManager.get_global_value("c02_s02_mouse_push_shoe1", false) or current_checked:
return
current_checked = true
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_prop_item("prop_小鞋子1")
$"../DeployLayer/老鼠拖鞋".visible = false
$"../DeployLayer/Note老鼠洞".enabled = true