xiandie/scene/ground/scene/c02/s08_animation.gd

117 lines
3.2 KiB
GDScript

@tool
extends AnimationRoot
# 覆盖该方法
func _default_data() -> Dictionary:
return {"hole_interacted_times": 0}
func _ready() -> void:
super._ready()
if Engine.is_editor_hint():
return
var color_mask: ColorRect
func _on_ground_ready() -> void:
color_mask = $"../BGSprite2D/ColorMask"
# 0默认 1拿了麻将 2偷听结束 3已爬出
if data.hole_interacted_times >= 3:
setup_rect_after_entered()
else:
color_mask.color.a = 1.0
# # 如果没有出隧道,则设置镜头右侧 limit + 500
# SceneManager.get_camera_marker().limit_right += 500
var interacting = false
func hole_interacted():
if interacting:
return
interacting = true
# 第一次获得麻将,第二次偷听,第三次出去
var times = data["hole_interacted_times"]
set_data("hole_interacted_times", times + 1)
if GlobalConfig.DEBUG:
print("hole_interacted_times=", times)
interacting = false
if times == 0:
SceneManager.enable_prop_item("prop_麻将")
elif times == 1:
eavesdrop_start()
else:
enter_room()
func eavesdrop_start() -> void:
SceneManager.freeze_player(0, 5)
var sprite = $"../DeployLayer/瞎子小蝉对话" as AnimatedSprite2D
sprite.visible = true
sprite.play()
# 偷听动作
await get_tree().create_timer(2.0).timeout
# 动作后先出声音
DialogueManager.show_dialogue_balloon(
dialogue_c02, "c02_05_瞎子与小蝉"
)
var tween = create_tween()
tween.tween_property(color_mask, "color:a", 0.0, 6.0)
# 运镜查看
var camera = SceneManager.get_camera_marker()
tween.parallel().tween_property(camera, "force_offset", Vector2(-450, 0), 4.0)
await DialogueManager.dialogue_ended
tween = create_tween()
tween.tween_property(camera, "force_offset", Vector2(0, 0), 4.0)
tween.parallel().tween_property(color_mask, "color:a", 1.0, 2.0)
await tween.finished
sprite.visible = false
SceneManager.release_player()
interacting = false
var room_camera_r_limit = 550
# 钻出隧道,进入房间
func enter_room() -> void:
ArchiveManager.set_global_entry("c02_the_blind_room_entered", true)
var player = SceneManager.get_player() as MainPlayer
var player_x = 513.0
SceneManager.freeze_player(0)
var camera = SceneManager.get_camera_marker()
var tween = create_tween()
# 镜头右侧 limit 设置到 room_camera_r_limit
tween.tween_property(camera, "limit_right", room_camera_r_limit, 1.5)
# 关闭黑暗效果
tween.parallel().tween_property(color_mask, "color:a", 0.0, 2.0)
# 光源跟随丝滑移动
tween.parallel().tween_property(player, "position:x", player_x, 2.0)
player.hide_sprite = true
var sprite = $"../DeployLayer/吕萍钻出" as AnimatedSprite2D
sprite.visible = true
sprite.frame = 0
sprite.play()
await tween.finished
player.position.x = player_x
setup_rect_after_entered()
sprite.visible = false
player.hide_sprite = false
SceneManager.release_player()
interacting = false
func setup_rect_after_entered() -> void:
var player = SceneManager.get_player() as MainPlayer
player.character = "吕萍"
SceneManager.get_ground().player_y = 70
var rect = player.player_movement_rect
rect.position.x = 30
rect.size.x = 500 - 30
player.player_movement_rect = rect
SceneManager.get_camera_marker().limit_right = room_camera_r_limit