xiandie/scene/ground/scene/c01/s08_animation.gd

210 lines
6.3 KiB
GDScript

@tool
extends AnimationRoot
# 覆盖该方法
func _default_data() -> Dictionary:
return {}
var shelf_game_scene = preload("res://scene/little_game/书架/书架.tscn")
var shelf_game_node = shelf_game_scene.instantiate()
var envelope_game_scene = preload("res://scene/little_game/拼凑信件.tscn")
var envelope_game_node = envelope_game_scene.instantiate()
func _ready() -> void:
super._ready()
if Engine.is_editor_hint():
return
shelf_game_node.exiting.connect(_on_shelf_game_exiting)
shelf_game_node.success.connect(_on_shelf_game_success)
envelope_game_node.exiting.connect(_on_envelope_game_exiting)
envelope_game_node.success.connect(_on_envelope_game_success)
var counter: Interactable2D
var envolope_table: Interactable2D
var ladder: Ambush2D
var coin: Ambush2D
var mask: ColorRect
var left_protal: Portal2D
var shelf_game_success = false
var envelope_game_success = false
var manager
var mice
func _on_ground_ready() -> void:
ladder = $"../DeployLayer/Ambush梯子"
envolope_table = $"../DeployLayer/Interactable信件书桌"
mask = $"../DeployLayer/Mask"
left_protal = $"../DeployLayer/portal_left" as Portal2D
counter = $"../DeployLayer/Interactable报纸柜台"
coin = $"../DeployLayer/Ambush银元"
mice = $"../DeployLayer/自动跟随的老鼠"
manager = $"../DeployLayer/老板"
# 首先放报纸,触发动画,领取任务
if counter.interacted_times > 0:
ladder.enabled = true
envolope_table.enabled = true
else:
counter.interacted.connect(assign_tasks, CONNECT_ONE_SHOT)
ladder.enabled = false
envolope_table.enabled = false
envelope_game_success = ArchiveManager.archive.get_global_value("envelope_game_success")
if envelope_game_success:
envolope_table.enabled = false
else:
if envolope_table.interacted_times >= 2:
# 两封信都放后,无需接受
envolope_table.prop_key = ""
envolope_table.prop_key2 = ""
envolope_table.interacted.connect(_on_envolope_table_interacted)
# 书架工作
shelf_game_success = ArchiveManager.archive.get_global_value("shelf_game_success")
if shelf_game_success:
_setup_weird_bookstore()
else:
mice.visible = false
_check_portal()
func _check_portal():
if not shelf_game_success or not envelope_game_success:
left_protal.holding = true
left_protal.holding_reason_key = "c01_s08_书店工作"
elif not coin.played:
left_protal.holding = true
left_protal.holding_reason_key = "c01_s08_书店工钱"
else:
left_protal.holding = false
func _on_envolope_table_interacted() -> void:
if envolope_table.interacted_times >= 2:
# 两封信都放后,无需接受
envolope_table.prop_key = ""
envolope_table.prop_key2 = ""
play_envelope_game()
func first_enter_door() -> void:
await get_tree().create_timer(2.).timeout
SceneManager.freeze_player(0)
DialogueManager.show_dialogue_balloon(dialogue_c01, "c01_s08_书店进门老板台词")
DialogueManager.dialogue_ended.connect(_on_dialogue_ended, CONNECT_ONE_SHOT)
func _on_dialogue_ended(_res) -> void:
SceneManager.release_player()
func assign_tasks() -> void:
# 放报纸动作
SceneManager.freeze_player(0, 8, false)
await get_tree().create_timer(4.5).timeout
$"放报纸音效".play()
DialogueManager.show_dialogue_balloon(dialogue_c01, "c01_s08_书店老板任务")
DialogueManager.dialogue_ended.connect(_on_dialogue_ended, CONNECT_ONE_SHOT)
ladder.enabled = true
envolope_table.enabled = true
func _exit_tree() -> void:
if is_instance_valid(shelf_game_node):
shelf_game_node.queue_free()
func play_shelf_game() -> void:
if shelf_game_node.get_parent() != get_parent():
get_parent().add_child(shelf_game_node)
SceneManager.freeze_player(0)
func _on_shelf_game_exiting() -> void:
if GlobalConfig.DEBUG:
print("书架游戏 exiting")
create_tween().tween_property(mask, "color:a", 0.0, 1.0).from(1.0)
SceneManager.release_player()
var fall_off
func _on_shelf_game_success() -> void:
ArchiveManager.archive.set_global_entry("shelf_game_success", true)
shelf_game_success = true
_setup_weird_bookstore()
var player = SceneManager.get_player() as MainPlayer
player.hide_sprite = true
# 设置朝左,与书架的动画结尾一致
player.set_facing_direction(Vector2(-1, 0))
# 对齐位置
player.global_position.x = 437
# 相机抖动
SceneManager.get_camera_marker().shake_camera()
# 播放小蝶从书架跌倒的动画
fall_off = $"../DeployLayer/小小蝶坠落"
fall_off.visible = true
fall_off.play()
fall_off.animation_finished.connect(_on_fall_off_finished)
# 从 sfx_生死簿演出 中播放
# $"摔倒音效".play()
_check_portal()
func _on_fall_off_finished() -> void:
fall_off.visible = false
# 最后释放玩家
SceneManager.release_player()
SceneManager.get_player().hide_sprite = false
await get_tree().create_timer(1.2).timeout
SceneManager.pop_os_with_str("c01_s08_书架游戏完成")
func _setup_weird_bookstore() -> void:
# 切换背景音效
# $"写字声".stop()
$"环境音".stop()
$"诡异环境音".play()
coin.enabled = true
ladder.enabled = false
manager.visible = false
mice.visible = true
$"../DirectionalLight2D".energy = 0.7
$"../BGSprite2D".texture = preload("res://asset/art/scene/c01/s08_书店/夜晚版/bg_书店夜晚.png")
$"../ParallaxForeground/FGParallaxLayer/FGSprite2D".texture = preload("res://asset/art/scene/c01/s08_书店/夜晚版/fg_书店夜晚前景.png")
ladder.texture = preload("res://asset/art/scene/c01/s08_书店/夜晚版/e_梯子 夜晚.png")
func play_envelope_game() -> void:
if envelope_game_node.get_parent() != get_parent():
get_parent().add_child(envelope_game_node)
SceneManager.freeze_player(0)
func _on_envelope_game_exiting() -> void:
if GlobalConfig.DEBUG:
print("信封游戏 exiting")
create_tween().tween_property(mask, "color:a", 0.0, 1.0).from(1.0)
SceneManager.release_player()
func _on_envelope_game_success() -> void:
SceneManager.release_player()
envolope_table.enabled = false
create_tween().tween_property(mask, "color:a", 0.0, 1.0).from(1.0)
ArchiveManager.archive.set_global_entry("envelope_game_success", true)
envelope_game_success = true
_check_portal()
func pay_off_wage() -> void:
SceneManager.enable_prop_item("prop_银元")
SceneManager.enable_important_item("prop_银元")
SceneManager.get_inspector().quit_and_hidden.connect(
_on_quit_inspect_coin, CONNECT_ONE_SHOT
)
_check_portal()
func _on_quit_inspect_coin() -> void:
SceneManager.pop_os_with_str("c01_s08_获得袁大头后")