managems/tools/random.gd

37 lines
928 B
GDScript

extends Reference
class_name Random
# Generator
var generator: RandomNumberGenerator = RandomNumberGenerator.new()
# Init
func _init():
generator.randomize()
# Generate from a range (inclusive)
func pick_from_range(v1: int, v2: int):
return generator.randi_range(v1, v2)
# Generate from an Array
func pick_from_array(a: Array):
var idx = generator.randi_range(0, a.size() - 1)
return a[idx]
# Generate from a dictionary of (value, weight)
func pick_from_distribution(d: Dictionary):
var keys = d.keys()
var weight_sum = 0
for k in keys:
weight_sum += d[k]
# pick a number between 0 and the total minus 1
var val = generator.randi_range(0, weight_sum - 1)
# Compute the sums until val < current_sum
var current_sum = 0
var ret = keys.front()
for k in keys:
current_sum += d[k]
ret = k
if val < current_sum:
break
return ret