This project provides PRNG functions for generating pseudo-random values using a seed-based approach and various algorithms
npm install toosoon-prngThis project provides PRNG functions for generating pseudo-random values using a seed-based approach. These are particularly useful for applications requiring deterministic randomization, such as procedural generation or simulations.

Yarn:
``properties`
$ yarn add toosoon-prng
NPM:
`properties`
$ npm install toosoon-prng
Using default PRNG instance.
`ts
import prng from 'toosoon-prng';
prng.setSeed('seed');
prng.randomFloat('angle', 0, Math.PI); // Pseudo-random number in the interval 0, PI)
`
Using PRNG class constructor.
`ts
import { PRNG } from 'toosoon-prng';
const prng = new PRNG('seed');
prng.randomFloat('angle', 0, Math.PI); // Pseudo-random number in the interval [0, PI)
`
Utility class for generating pseudo-random values.
- [new PRNG(seed?, generator?)
- .seed: stringFunction
- .generator: void
- .setSeed(seed?): number
- .random(subseed): boolean
- .randomBoolean(subseed, probability?): number
- .randomSign(subseed, probability?): number
- .randomFloat(subseed, min?, max?, precision?): number
- .randomInt(subseed, min, max): string
- .randomHexColor(subseed): unknown|undefined
- .randomItem(subseed, array): unknown|undefined
- .randomObjectProperty(subseed, object): number
- .randomIndex(subseed, weights): number
- .randomGaussian(subseed, mean?, spread?):
#### Types
`ts
type Seed = string | number;
type Generator = (...hashes: number[]) => number;
`
| Parameter | Type | Default | Description |
| ----------- | ----------- | ------- | ------------------------------------------------------ |
| [seed] | Seed | | Seed string used for pseudo-random generations. |Generator
| [generator] | | sfc32 | Generator function used for pseudo-random generations. |
#### Properties
Seed string used for pseudo-random generations.
`ts`
PRNG.seed: string;
Generator function used for pseudo-random generations.
`ts`
PRNG.generator: Generator;
#### Methods
Set the PRNG instance seed.
- seed
`ts`
PRNG.setSeed(seed: Seed): void;
Generate a pseudo-random number between 0 and 1 (0 inclusive, 1 exclusive).
Pseudo-random equivalent of Math.random().
- subseed
`ts`
PRNG.random(subseed: Seed): number;
##### .randomBoolean(subseed, probability?)
Generate a pseudo-random boolean (true or false).
- subseed[probability=0.5]
- : Probability to get true.
`ts`
PRNG.randomBoolean(subseed: Seed, probability?: number): boolean;
##### .randomSign(subseed, probability?)
Generate a pseudo-random sign (1 or -1).
- subseed[probability=0.5]
- : Probability to get 1.
`ts`
PRNG.randomSign(subseed: Seed, probability?: number): number;
##### .randomFloat(subseed, min?, max?, precision?)
Generate a pseudo-random floating-point number within a specified range.
- subseed[min=0]
- : Minimum boundary.[max=1]
- : Maximum boundary.[precison=2]
- : Number of digits after the decimal point.
`ts`
PRNG.randomFloat(subseed: Seed, min?: number, max?: number1, precision?: number): number;
##### .randomInt(subseed, min, max)
Generate a pseudo-random integer number within a specified range.
- subseedmin
- : Minimum boundary.max
- : Maximum boundary.
`ts`
PRNG.randomInt(subseed: Seed, min: number, max: number): void;
##### .randomHexColor(subseed)
Generate a pseudo-random hexadecimal color.
- subseed
`ts`
PRNG.randomHexColor(subseed: Seed): string;
##### .randomItem(subseed, array)
Pseudo-randomly pick an item from an array.
- subseedarray
- : Array to pick the item from.
`ts`
PRNG.randomItem
##### .randomObjectProperty(subseed, object)
Pseudo-randomly pick a property value from an object.
- subseedobject
- : Object to pick the property from.
`ts`
PRNG.randomObjectProperty
##### .randomIndex(subseed, weights)
Select a pseudo-random index from an array of weighted items.
- subseedweights
- : Array of weights.
`ts`
PRNG.randomIndex(subseed: Seed, weights: number[]): number;
##### .randomGaussian(subseed, mean?, spread?)
Generate a pseudo-random number fitting a Gaussian (normal) distribution.
- subseed[mean=0]
- : Mean (central) value of the distribution.[spread=1]
- : Spread (standard deviation) of the distribution.
`ts`
PRNG.randomGaussian(subseed: Seed, mean?: number, spread?: number): number;
By default, the library is using _SplitMix32_ generator for generating the pseudo-random values but it is possible to change the generator used by one of the following:
- sfc32: _Simple Fast Counter_, Generator with a 128-bit state.jsf32
- : _Jenkins' Small Fast_, Generator with a 128-bit state.xoshiro128ss
- : _xoshiro128\\_, Generator with a 128-bit state.mulberry32
- : _Mulberry32_, Generator with a 32-bit state.splitmix32
- : _SplitMix32_, Generator with a 32-bit state.
`ts
import { PRNG, sfc32 } from 'toosoon-prng';
const prng = new PRNG('seed', { generator: sfc32 });
`
##### randomSeed(length?)
Generate a random string that can be used as a seed.
- [length=64]: Length of the generated seed string.
`ts`
randomSeed(length?: number): string;
DEFAULT_SEED`
MIT License, see LICENSE for details.