84 lines
1.7 KiB
GDScript
84 lines
1.7 KiB
GDScript
extends CanvasLayer
|
|
|
|
@onready var music_display = $"MusicDisplay"
|
|
@onready var audio_stream_player = $"AudioStreamPlayer"
|
|
|
|
var music_bus = AudioServer.get_bus_index("Music")
|
|
|
|
var _tracks = []
|
|
|
|
|
|
func _ready():
|
|
get_viewport().transparent_bg = true
|
|
AudioServer.set_bus_volume_db(music_bus, linear_to_db(0.5))
|
|
_load_tracks()
|
|
|
|
|
|
func _process(delta):
|
|
if Input.is_action_just_pressed("Play"):
|
|
_play()
|
|
elif Input.is_action_just_pressed("Stop"):
|
|
_stop()
|
|
elif Input.is_action_just_pressed("Display"):
|
|
_display()
|
|
|
|
for i in range(0, 10):
|
|
if Input.is_action_just_pressed("Vol%d" % [i]):
|
|
AudioServer.set_bus_volume_db(music_bus, linear_to_db(float(i)/9))
|
|
|
|
|
|
func _play():
|
|
var song = _get_track()
|
|
|
|
if not song:
|
|
print("NO SONG COULD BE FOUND")
|
|
return
|
|
|
|
audio_stream_player.stream = load(song.track)
|
|
audio_stream_player.play()
|
|
music_display.show_song(song)
|
|
|
|
|
|
func _stop():
|
|
audio_stream_player.stop()
|
|
music_display.hide_song()
|
|
|
|
|
|
func _display():
|
|
music_display.show_song()
|
|
|
|
|
|
func _get_track():
|
|
if _tracks.size() == 0:
|
|
return null
|
|
|
|
return _tracks.pick_random()
|
|
|
|
|
|
|
|
func _load_tracks():
|
|
_load_directory("res://tracks")
|
|
print("Loaded music")
|
|
|
|
|
|
func _load_directory(path: String):
|
|
var dir = DirAccess.open(path)
|
|
|
|
if dir:
|
|
dir.list_dir_begin()
|
|
var file_name = dir.get_next()
|
|
|
|
while file_name != "":
|
|
if not dir.current_is_dir():
|
|
var file = load("%s/%s" % [path, file_name])
|
|
var instance = file.new()
|
|
var new_tracks = instance.get_tracks()
|
|
|
|
for track in new_tracks:
|
|
if track.has("disabled") and track.disabled:
|
|
continue
|
|
_tracks.push_back(track)
|
|
else:
|
|
_load_directory("res://tracks/%s" % [file_name])
|
|
|
|
file_name = dir.get_next()
|