2024-12-26 13:58:37 +00:00
|
|
|
extends Marker2D
|
|
|
|
|
|
|
|
# @export var title := ""
|
|
|
|
@export var notes := [] as Array[String]
|
|
|
|
@onready var sign_mark = %Sign as Sprite2D
|
|
|
|
@onready var area2d = %Area2D as Area2D
|
|
|
|
|
2024-12-27 07:56:45 +00:00
|
|
|
var played_time = 0
|
|
|
|
|
|
|
|
var mutex = Mutex.new()
|
2024-12-26 13:58:37 +00:00
|
|
|
|
|
|
|
|
|
|
|
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:
|
2024-12-27 07:56:45 +00:00
|
|
|
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):
|
2024-12-26 13:58:37 +00:00
|
|
|
pass
|
|
|
|
|
2024-12-27 07:56:45 +00:00
|
|
|
|
|
|
|
func _reset(_body):
|
2024-12-26 13:58:37 +00:00
|
|
|
pass
|