117 lines
3.2 KiB
GDScript
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
|