extends Marker2D # @export var title := "" @export var notes := [] 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.5 # 0.5s 内锁定播放 mutex.lock() if Time.get_ticks_msec() - played_time < note_time * 1000 + 500: return # show note played_time = Time.get_ticks_msec() mutex.unlock() for note in notes: SceneManager.pop_note(note, "white", 2.5) var player = SceneManager.get_player() player.check_note(note_time) func _on_cancel(_body = null): pass func _reset(_body): pass