Add functionality to make track selection less random
This commit is contained in:
parent
8dce1ee84b
commit
abeb696804
1 changed files with 22 additions and 3 deletions
25
src/main.gd
25
src/main.gd
|
@ -6,6 +6,7 @@ extends CanvasLayer
|
||||||
var music_bus = AudioServer.get_bus_index("Music")
|
var music_bus = AudioServer.get_bus_index("Music")
|
||||||
|
|
||||||
var _tracks = []
|
var _tracks = []
|
||||||
|
var current_track
|
||||||
|
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
@ -37,6 +38,7 @@ func _play():
|
||||||
audio_stream_player.stream = load(song.track)
|
audio_stream_player.stream = load(song.track)
|
||||||
audio_stream_player.play()
|
audio_stream_player.play()
|
||||||
music_display.show_song(song)
|
music_display.show_song(song)
|
||||||
|
current_track = song
|
||||||
|
|
||||||
|
|
||||||
func _stop():
|
func _stop():
|
||||||
|
@ -52,12 +54,29 @@ func _get_track():
|
||||||
if _tracks.size() == 0:
|
if _tracks.size() == 0:
|
||||||
return null
|
return null
|
||||||
|
|
||||||
var weight = _tracks.reduce(func(accum, track): return accum + (track.weight if track.has("weight") else 1), 0)
|
var reduced_tracks = _tracks
|
||||||
|
var random_type_split = randf()
|
||||||
|
|
||||||
|
if reduced_tracks.size() > 1:
|
||||||
|
reduced_tracks = reduced_tracks.filter(func(track): return track.track != current_track.track)
|
||||||
|
|
||||||
|
var temp_tracks
|
||||||
|
|
||||||
|
if current_track:
|
||||||
|
if random_type_split < 0.4:
|
||||||
|
temp_tracks = reduced_tracks.filter(func(track): return track.artist == current_track.artist)
|
||||||
|
elif random_type_split < 0.8:
|
||||||
|
temp_tracks = reduced_tracks.filter(func(track): return track.definition_file == current_track.definition_file)
|
||||||
|
|
||||||
|
if temp_tracks.size() > 0:
|
||||||
|
reduced_tracks = temp_tracks
|
||||||
|
|
||||||
|
var weight = reduced_tracks.reduce(func(accum, track): return accum + (track.weight if track.has("weight") else 1), 0)
|
||||||
|
|
||||||
var rand = randf() * weight
|
var rand = randf() * weight
|
||||||
var current_weight = 0
|
var current_weight = 0
|
||||||
|
|
||||||
for track in _tracks:
|
for track in reduced_tracks:
|
||||||
current_weight += track.weight if track.has("weight") else 1
|
current_weight += track.weight if track.has("weight") else 1
|
||||||
|
|
||||||
if current_weight >= rand:
|
if current_weight >= rand:
|
||||||
|
@ -66,7 +85,6 @@ func _get_track():
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func _load_tracks():
|
func _load_tracks():
|
||||||
_load_directory("res://tracks")
|
_load_directory("res://tracks")
|
||||||
print("Loaded music")
|
print("Loaded music")
|
||||||
|
@ -88,6 +106,7 @@ func _load_directory(path: String):
|
||||||
for track in new_tracks:
|
for track in new_tracks:
|
||||||
if track.has("disabled") and track.disabled:
|
if track.has("disabled") and track.disabled:
|
||||||
continue
|
continue
|
||||||
|
track.definition_file = "%s/%s" % [path, file_name]
|
||||||
_tracks.push_back(track)
|
_tracks.push_back(track)
|
||||||
else:
|
else:
|
||||||
_load_directory("res://tracks/%s" % [file_name])
|
_load_directory("res://tracks/%s" % [file_name])
|
||||||
|
|
Loading…
Reference in a new issue