42 lines
1.5 KiB
GDScript
42 lines
1.5 KiB
GDScript
extends Control
|
|
|
|
@export var TheTexture: GradientTexture2D
|
|
@export var Note: PackedScene
|
|
|
|
var Audio: AudioStreamOggVorbis = null
|
|
|
|
func SetLabel(named: String):
|
|
get_node("Label").text = named
|
|
|
|
func AddSection(Streamed: AudioStreamOggVorbis):
|
|
var children = get_child_count() - 1
|
|
var thing = TextureRect.new()
|
|
# change some variables so it works
|
|
thing.name = "NoteArea" + str(children)
|
|
thing.custom_minimum_size = Vector2(100, 50)
|
|
thing.position = Vector2(100 * children, 0)
|
|
thing.texture = TheTexture
|
|
self.custom_minimum_size = self.custom_minimum_size + Vector2(100, 0)
|
|
# add the audio
|
|
Audio = Streamed
|
|
# show the damn thing
|
|
add_child(thing)
|
|
|
|
# add a note
|
|
func _on_gui_input(event):
|
|
var AdjustPosition = floor(event.position.x / 25)
|
|
if Input.get_action_raw_strength("Add Note") == 1:
|
|
var thing = Note.instantiate()
|
|
thing.get_node("Audio").stream = Audio
|
|
thing.position = Vector2(floor(25 * AdjustPosition / 2), 0)
|
|
# if there is a duplicate note, remove it. It will cause problems.
|
|
for i in get_children():
|
|
if thing.position == i.position && !i.name.contains("NoteArea") && !i.name.contains("Label"):
|
|
i.queue_free()
|
|
# there was a stupid bug where we couldn't add anything to the right of a note after it was placed.
|
|
# solution: make a control node, parent it, and then parent the note onto the control node.
|
|
# why does it work? I don't fucking know.
|
|
var controlled = Control.new()
|
|
controlled.position = Vector2(floor(25 * AdjustPosition / 2), 0)
|
|
add_child(controlled)
|
|
controlled.add_child(thing)
|