167 lines
5.0 KiB
GDScript
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
|