diff --git a/src/main.gd b/src/main.gd index 0bc2ed9..679cce1 100644 --- a/src/main.gd +++ b/src/main.gd @@ -52,7 +52,18 @@ func _get_track(): if _tracks.size() == 0: return null - return _tracks.pick_random() + var weight = _tracks.reduce(func(accum, track): return accum + (track.weight if track.has("weight") else 1), 0) + + var rand = randf() * weight + var current_weight = 0 + + for track in _tracks: + current_weight += track.weight if track.has("weight") else 1 + + if current_weight >= rand: + return track + + return null