randi_range() not working

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By KDX^2

I try to generate a random number using the randi_range() function like this:

var rng = RandomNumberGenerator.new()
var number = rng.randi_range(0, 5)

func _ready():
    print(number)

But everytime I run this code, the console always displays the maxinum number 5. Is there something wrong with my usage of the function?

I think u need to include a call to rng.randomize()

Ethan63 | 2021-02-11 07:05

:bust_in_silhouette: Reply From: whiteshampoo

You need to rnd.randomize() first.

Where to put it?

KDX^2 | 2021-02-11 07:36

var rng : RandomNumberGenerator = RandomNumberGenerator.new()
var number : int  = 0

func _ready() -> void:
    rng.randomize()
    number = rng.randi_range(0, 5)
    print(number)

EDIT 1:
If you need just a random number, and not a whole generator you can also do it like this:

var number : int  = 0

func _ready() -> void:
	randomize()
	number = randi() % 6 # generates random integers between 0 and 5
	#number = 5 + randi() % 11 # generates random integers between 5 and 15
	print(number)

EDIT 2:
You could also code your own function for that:

var number : int  = 0

func _ready() -> void:
	randomize()
	number = randi_range(0, 5)
	print(number)

func randi_range(a : int, b : int) -> int:
	assert(b > a, "b must be greater than a!")
	return a + randi() % (b + 1 - a)

whiteshampoo | 2021-02-11 09:40