Class: Random
Seedable pseudo-random number generator + helpers. Uses Mulberry32 — a tiny, fast 32-bit PRNG with good statistical properties for game RNG. NOT cryptographically secure; never use for tokens / signatures. The seed/state is a plain uint32, so it's trivially serializable for replays / save-load.
Determinism: identical seeds produce identical sequences across platforms and JS engines. That's the whole point — it lets you reproduce a "lucky drop" run in QA or freeze RNG in a unit test without bringing your own seeded PRNG library.
Two ways to use:
new Random(seed)for a private stream (encounters, drops, particle bursts per scene).Random.sharedglobal instance for fire-and-forget calls — auto-seeded from performance.now() at module load. UseRandom.shared.SetSeed(...)to pin it.
Constructors
Constructor
ts
new Random(seed?): Random;Parameters
| Parameter | Type |
|---|---|
seed | number |
Returns
Random
Properties
| Property | Modifier | Type | Description |
|---|---|---|---|
shared | readonly | Random | Public global. Auto-seeded once at module load — replace seed via SetSeed for reproducible runs. |
Methods
Angle()
ts
Angle(): number;Unit-length 2D direction vector. Returns the angle in radians — callers convert as needed via Math.cos/sin or Vector2.FromAngle.
Returns
number
Bool()
ts
Bool(p?): boolean;True with probability p in [0, 1]. Default 0.5 — coin flip.
Parameters
| Parameter | Type | Default value |
|---|---|---|
p | number | 0.5 |
Returns
boolean
Gaussian()
ts
Gaussian(mean?, stdDev?): number;Approximate normal distribution via Box-Muller. mean shifts, stdDev scales. Useful for natural-feeling particle spread (size jitter, lifetime variance, etc.).
Parameters
| Parameter | Type | Default value |
|---|---|---|
mean | number | 0 |
stdDev | number | 1 |
Returns
number
GetState()
ts
GetState(): number;Returns
number
InRect()
ts
InRect(
minX,
minY,
maxX,
maxY,
out
): object;Uniform point inside an axis-aligned rect. Writes into out.
Parameters
| Parameter | Type |
|---|---|
minX | number |
minY | number |
maxX | number |
maxY | number |
out | { x: number; y: number; } |
out.x | number |
out.y | number |
Returns
object
| Name | Type |
|---|---|
x | number |
y | number |
Int()
ts
Int(min, max): number;Uniform integer in [min, max] inclusive on both ends.
Parameters
| Parameter | Type |
|---|---|
min | number |
max | number |
Returns
number
InUnitCircle()
ts
InUnitCircle(out): object;Uniform point inside a unit circle. Writes into out to avoid allocation. The sqrt() is what keeps the distribution uniform — without it, points cluster near the center.
Parameters
| Parameter | Type |
|---|---|
out | { x: number; y: number; } |
out.x | number |
out.y | number |
Returns
object
| Name | Type |
|---|---|
x | number |
y | number |
Next()
ts
Next(): number;Uniform float in [0, 1). Mulberry32 — drop-in for Math.random() with a 2^32 period.
Returns
number
Pick()
ts
Pick<T>(array): T | undefined;Pick a random element from a non-empty array. Returns undefined for empty arrays.
Type Parameters
| Type Parameter |
|---|
T |
Parameters
| Parameter | Type |
|---|---|
array | readonly T[] |
Returns
T | undefined
Range()
ts
Range(min, max): number;Uniform float in [min, max).
Parameters
| Parameter | Type |
|---|---|
min | number |
max | number |
Returns
number
SetSeed()
ts
SetSeed(seed): void;Parameters
| Parameter | Type |
|---|---|
seed | number |
Returns
void
SetState()
ts
SetState(state): void;Parameters
| Parameter | Type |
|---|---|
state | number |
Returns
void
Shuffled()
ts
Shuffled<T>(array): T[];Allocating shuffle — for callers that want to keep the original order.
Type Parameters
| Type Parameter |
|---|
T |
Parameters
| Parameter | Type |
|---|---|
array | readonly T[] |
Returns
T[]
ShuffleInPlace()
ts
ShuffleInPlace<T>(array): T[];Fisher-Yates in place. Mutates and returns the input array.
Type Parameters
| Type Parameter |
|---|
T |
Parameters
| Parameter | Type |
|---|---|
array | T[] |
Returns
T[]
Sign()
ts
Sign(): number;+1 / -1 with equal probability. Convenient for flipping a direction.
Returns
number
WeightedIndex()
ts
WeightedIndex(weights): number;Pick an index from an array of weights — Pick-equivalent for non-uniform distributions. Negative weights are clamped to 0. Returns -1 if total weight is 0.
Parameters
| Parameter | Type |
|---|---|
weights | readonly number[] |
Returns
number