155 lines
4.9 KiB
GDScript
155 lines
4.9 KiB
GDScript
@tool
|
|
extends AnimationRoot
|
|
|
|
|
|
# 覆盖该方法
|
|
func _default_data() -> Dictionary:
|
|
return {"c04_ghost_trapped_suprised": false}
|
|
|
|
|
|
func _ready() -> void:
|
|
super._ready()
|
|
if Engine.is_editor_hint():
|
|
return
|
|
|
|
|
|
#region node_reference
|
|
var interactable家门: Interactable2D
|
|
#endregion
|
|
|
|
|
|
# 读取设置变量名
|
|
func _setup_node_reference() -> void:
|
|
interactable家门 = $"../DeployLayer/Interactable家门"
|
|
interactable家门.interacted.connect(_on_door_interacted)
|
|
|
|
|
|
func _on_ground_ready() -> void:
|
|
var trap_stage = EventManager.get_stage("c04_ghost_trapped")
|
|
if trap_stage == 1:
|
|
$"../DeployLayer/鬼打墙两侧纸人".show()
|
|
if not data["c04_ghost_trapped_suprised"]:
|
|
set_data("c04_ghost_trapped_suprised", true)
|
|
Util.timer(1.2, SceneManager.pop_os_with_str.bind("c04_鬼打墙_首次传送"))
|
|
elif trap_stage == 2:
|
|
# 开始鬼打墙
|
|
setup_trap()
|
|
|
|
|
|
func _on_door_interacted() -> void:
|
|
SceneManager.lock_player()
|
|
# c04_ghost_trapped: 0:初始化 1:第一次开门 2:进入鬼打墙场景 3:鬼打墙结束 4:排队纸人歪头
|
|
var trap_stage = EventManager.get_stage("c04_ghost_trapped")
|
|
if trap_stage == 0:
|
|
SceneManager.unlock_player()
|
|
EventManager.set_stage("c04_ghost_trapped", 1)
|
|
SceneManager.get_ground_loader().transition_to_scene("c04_s08", "1")
|
|
elif trap_stage == 1 or trap_stage == 2:
|
|
SceneManager.unlock_player()
|
|
EventManager.set_stage("c04_ghost_trapped", 2)
|
|
SceneManager.get_ground_loader().transition_to_scene("c04_s08", "1")
|
|
elif trap_stage == 3:
|
|
SceneManager.unlock_player()
|
|
$"Sfx纸人咔嚓转头".play()
|
|
EventManager.set_stage("c04_ghost_trapped", 4)
|
|
SceneManager.get_ground_loader().transition_to_scene("c04_s05", "left")
|
|
elif trap_stage == 4:
|
|
SceneManager.unlock_player()
|
|
SceneManager.get_ground_loader().transition_to_scene("c04_s05", "left")
|
|
|
|
var camera_rect
|
|
var player_rect
|
|
|
|
func setup_trap() -> void:
|
|
# 设置活动范围
|
|
# 190-700
|
|
camera_rect = SceneManager.get_camera_marker().default_camera_rect
|
|
player_rect = SceneManager.get_player().player_movement_rect
|
|
SceneManager.get_camera_marker().apply_limits(Rect2i(190, -158, 510, 316))
|
|
SceneManager.get_player().player_movement_rect = Rect2(195, -158, 500, 316)
|
|
$"../鬼打墙Layer".show()
|
|
$"../DeployLayer".hide()
|
|
# os
|
|
Util.timer(1.2, SceneManager.pop_os_with_str.bind("c04_鬼打墙_再次开门"))
|
|
|
|
|
|
func ambush_door1() -> void:
|
|
$"../鬼打墙Layer/Ambush门1".enabled = false
|
|
_show_wall(1)
|
|
|
|
|
|
func ambush_door2() -> void:
|
|
$"../鬼打墙Layer/Ambush门2".enabled = false
|
|
_show_wall(2)
|
|
|
|
|
|
func ambush_door3() -> void:
|
|
$"../鬼打墙Layer/Ambush门3".enabled = false
|
|
_show_wall(3)
|
|
|
|
|
|
var wall_count := 0
|
|
|
|
|
|
func _show_wall(id: int) -> void:
|
|
wall_count += 1
|
|
var wall = get_node("../鬼打墙Layer/砖墙" + str(id))
|
|
wall.show()
|
|
wall.modulate.a = 0.0
|
|
create_tween().tween_property(wall, "modulate:a", 1.0, 1.0)
|
|
#TODO
|
|
$"Sfx墙体浮现".play()
|
|
SceneManager.pop_debug_dialog_info("音效", "墙体浮现音效")
|
|
# 烛光抖动
|
|
var candle_l = get_node("../鬼打墙Layer/蜡烛光" + str(id))
|
|
var candle_r = get_node("../鬼打墙Layer/蜡烛光" + str(id + 1))
|
|
var tween = create_tween()
|
|
tween.tween_property(candle_l, "energy", 0.2, 0.8)
|
|
tween.parallel().tween_property(candle_r, "energy", 0.3, 0.7)
|
|
tween.tween_property(candle_l, "energy", 0.6, 0.7)
|
|
tween.parallel().tween_property(candle_r, "energy", 0.6, 0.8)
|
|
if wall_count == 3:
|
|
_game_success()
|
|
|
|
|
|
func _game_success() -> void:
|
|
SceneManager.lock_player()
|
|
# show
|
|
await Util.wait(0.5)
|
|
await SceneManager.pop_os_with_str("c04_鬼打墙_全部交互完")
|
|
await Util.wait(0.5)
|
|
await SceneManager.pop_os_with_str("c04_鬼打墙_捂眼")
|
|
await Util.wait(1.0)
|
|
var animation_player = $"鬼打墙黑手Effect/AnimationPlayer"
|
|
animation_player.play("双手捂屏幕")
|
|
# 重置镜头与玩家活动范围
|
|
SceneManager.get_player().player_movement_rect = player_rect
|
|
var camera = SceneManager.get_camera_marker()
|
|
# 镜头锁定玩家(镜头逐渐移动过去) 提高速度保证紧密贴紧边缘
|
|
camera.speed = 100.0
|
|
var tween = create_tween()
|
|
tween.tween_property(camera, "limit_right", camera_rect.size.x + 250.0, 4.0)
|
|
await animation_player.animation_finished
|
|
await Util.wait(2.0)
|
|
$"../DeployLayer".show()
|
|
_hide_trap_layer()
|
|
await Util.wait(1.5)
|
|
animation_player.play("双手离开屏幕")
|
|
camera.speed = 2.0
|
|
tween = create_tween()
|
|
tween.tween_property(camera, "limit_right", camera_rect.size.x, 2.0)
|
|
EventManager.set_stage("c04_ghost_trapped", 3)
|
|
await Util.wait(1.0)
|
|
SceneManager.unlock_player()
|
|
|
|
|
|
func _hide_trap_layer() -> void:
|
|
var l = $"../鬼打墙Layer"
|
|
var tween = create_tween()
|
|
tween.tween_property(l, "modulate:a", 0.0, 1.0)
|
|
tween.parallel().tween_property(l.get_node("蜡烛光1"), "energy", 0.0, 1.0)
|
|
tween.parallel().tween_property(l.get_node("蜡烛光2"), "energy", 0.0, 1.0)
|
|
tween.parallel().tween_property(l.get_node("蜡烛光3"), "energy", 0.0, 1.0)
|
|
tween.parallel().tween_property(l.get_node("蜡烛光4"), "energy", 0.0, 1.0)
|
|
tween.tween_callback(l.hide)
|