Implement note spawner.

This commit is contained in:
2026-02-01 23:17:51 +08:00
parent 3a9d3046b2
commit 7bc4246375
8 changed files with 151 additions and 75 deletions

View File

@@ -7,7 +7,12 @@
## Update the view to be relative to beat.
## Can be connected to a beat update signal.
@abstract func update_current_beat(beat: float) -> void
@abstract func update(beat: float) -> void
## Reset the view.
func reset_view() -> void:
_begin = -1
_end = -1
## Beginning of the range relative to te current beat where notes will be visible.
## Any notes where (hit_beat < current_beat + offset_begin) will NOT be visible.
@@ -32,37 +37,3 @@ func size() -> int:
# ======= IMPLEMENETATION ======= #
var _begin: int = -1
var _end: int = -1
var _current_beat: float = -999
var _previous_beat: float = -999
func _reset_view() -> void:
_begin = -1
_end = -1
_current_beat = -999
_previous_beat = -999
## Update the view to match _current_beat.
func _update_view_relative_to_notes(notes: NoteArray) -> void:
var new_begin = _begin
var new_end = _end
if _current_beat > _previous_beat:
# Update forward.
while(new_begin < notes.size()) and (notes.beat_at(new_begin) < _current_beat + offset_begin):
new_begin += 1
while(new_end < notes.size()) and (notes.beat_at(new_end) <= _current_beat + offset_end):
new_end += 1
elif _current_beat < _previous_beat:
# Update backward.
while(new_begin >= 0) and (notes.beat_at(new_begin) >= _current_beat + offset_begin):
_begin -= 1
while(new_end >= 0) and (notes.beat_at(new_end) > _current_beat + offset_end):
new_end -= 1
if(new_begin != _begin):
new_begin += 1
if(new_end != _end):
new_end += 1
_begin = new_begin
_end = new_end
_previous_beat = _current_beat