xiandie/scene/entity/note.gd

48 lines
992 B
GDScript

extends Sprite2D
# @export var title := ""
@export var notes := [] as Array[String]
@export var dialogs := [] as Array[String]
@onready var sign_mark = %Sign as Sprite2D
@onready var area2d = %Area2D as Area2D
var played_time = 0
var mutex = Mutex.new()
func _ready() -> void:
area2d.body_entered.connect(_reset)
area2d.body_exited.connect(_on_cancel)
sign_mark.interacted.connect(_on_interacted)
sign_mark.cancel.connect(_on_cancel)
func _on_interacted() -> void:
if notes.is_empty():
return
var note_time = notes.size() * 2.0
# 0.5s 内锁定播放
mutex.lock()
if Time.get_ticks_msec() - played_time < note_time * 1000 + 500:
mutex.unlock()
return
# show note
played_time = Time.get_ticks_msec()
mutex.unlock()
%Sfx.play()
for note in notes:
SceneManager.pop_note(note, "white", 2.0)
var player = SceneManager.get_player()
# TODO note viewing animation
player.freeze_player(note_time, "")
func _on_cancel(_body = null):
pass
func _reset(_body):
pass