45 lines
1.0 KiB
GDScript
45 lines
1.0 KiB
GDScript
extends Node
|
|
static func bound_val(val, lower, upper):
|
|
return min(max(val,lower),upper)
|
|
|
|
static func logistic_func(x, x0=0, k=1):
|
|
return 1/(1+pow(1.6,-k*(x - x0)))
|
|
|
|
static func randint(lower, upper):
|
|
# Inclusive random integer
|
|
return randi() % (upper - lower + 1) + lower
|
|
|
|
static func within_bounds(val, lower, upper, inclusive = true):
|
|
if inclusive:
|
|
return val<=upper and val>=lower
|
|
else:
|
|
return val<upper and val>lower
|
|
|
|
static func rng_check(prob):
|
|
assert (prob <= 1)
|
|
return randf() < prob
|
|
|
|
static func flip_coin():
|
|
return randint(0,1) == 1
|
|
|
|
static func roll_die(n_times=1, n_sides=6):
|
|
assert (n_times > 0)
|
|
assert (n_sides >= 1)
|
|
var total = 0
|
|
for i in range(n_times):
|
|
total += randint(1, n_sides)
|
|
return total
|
|
|
|
static func inv_negexp(A, B):
|
|
return A * (1-exp(-B))
|
|
|
|
static func negexp(A, B):
|
|
return A * exp(-B)
|
|
|
|
static func calc_wall_speed(wall_density):
|
|
# Returns positive value
|
|
var spd = 4 + min(Global.wall_difficulty*0.4,4)
|
|
if wall_density > 1:
|
|
spd /= bound_val(wall_density*0.45, 1, 5)
|
|
return spd
|