67 lines
1.8 KiB
GDScript
67 lines
1.8 KiB
GDScript
extends Control
|
|
|
|
@export var BPM: float = 140
|
|
@export var BeatsInAMeasure: int = 4
|
|
var InternalCounter: float = 0
|
|
var CurrentNote: int = 0
|
|
|
|
@export var NoteScene: PackedScene
|
|
@export var Path: NodePath
|
|
|
|
@export_subgroup("sounds")
|
|
var CurrentInstrument = 0
|
|
@export var PianoSounds: Array[AudioStreamOggVorbis]
|
|
@export var PianoNames: Array[String]
|
|
|
|
# GUI functions above
|
|
func _on_exit_pressed():
|
|
get_tree().quit()
|
|
|
|
func _on_bpm_input_text_changed(new_text):
|
|
BPM = float(new_text)
|
|
|
|
func _on_measures_text_changed(new_text):
|
|
BeatsInAMeasure = int(new_text)
|
|
var children = get_node("ScrollContainer/VBoxContainer").get_children()
|
|
# Remove everything
|
|
for i in children:
|
|
if i.name != "Line":
|
|
i.free()
|
|
# once the notes were removed, we put the notes again.
|
|
ChangeInstrument(CurrentInstrument)
|
|
CurrentNote = 0
|
|
|
|
# These are the instrument functions
|
|
func _ready():
|
|
ChangeInstrument(0)
|
|
|
|
func _process(delta):
|
|
InternalCounter = InternalCounter + delta
|
|
if InternalCounter >= (60 / BPM) / 4:
|
|
InternalCounter = 0
|
|
# move the funny line
|
|
CurrentNote = CurrentNote + 1
|
|
if CurrentNote == BeatsInAMeasure * 16:
|
|
CurrentNote = 0
|
|
get_node(Path).position = Vector2(0 + (CurrentNote * 25), 0)
|
|
|
|
func ChangeInstrument(index: int):
|
|
CurrentInstrument = index
|
|
match index:
|
|
# Piano
|
|
0:
|
|
var newArray = PianoNames.duplicate()
|
|
for i in PianoSounds:
|
|
var thing = NoteScene.instantiate()
|
|
var counter = 0
|
|
thing.SetLabel(newArray.pop_front())
|
|
while BeatsInAMeasure * 4 != counter:
|
|
thing.AddSection(i)
|
|
counter = counter + 1
|
|
get_node("ScrollContainer/VBoxContainer").add_child(thing)
|
|
var sized = get_node("ScrollContainer/VBoxContainer").get_child_count()
|
|
if sized != null:
|
|
get_node(Path).scale = Vector2(1, 25 * sized)
|
|
|
|
func _on_line_area_entered(area):
|
|
area.get_parent().get_node("Audio").play()
|