toosoon-prng-controllers
Version:
This project provides PRNG functions with a set of controllers for generating pseudo-random values using a seed-based approach
481 lines (480 loc) • 14.1 kB
TypeScript
import { type Seed } from 'toosoon-prng';
import type { WeightedItems } from './types';
/**
* Utility abstract class for generating a pseudo-random values
*
* @class PRNGController
* @abstract
* @template {unknown} [T=unknown]
*/
export declare abstract class PRNGController<T = unknown> {
/**
* Seed string used for pseudo-random generations
*/
seed: string;
/**
* Pseudo-random value generated by this controller
*/
abstract value: T;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
*/
constructor(seed: Seed);
/**
* Generate this controller pseudo-random value
*
* @returns {T} Generated pseudo-random value
*/
abstract getValue(): T;
/**
* Dispose this controller
*/
dispose(): void;
}
/**
* Utility abstract class for managing multiple instances of controllers
*
* @class PRNGGroupController
* @abstract
* @template {unknown} [T=unknown]
* @template {PRNGController<T>} [C=PRNGController<T>]
*/
export declare abstract class PRNGGroupController<T = unknown, C extends PRNGController<T> = PRNGController<T>> {
/**
* Seed string used for pseudo-random generations
*/
seed: string;
/**
* Controllers managed by this group
*/
controllers: C[];
/**
* @param {Seed} seed Seed string used for pseudo-random generations
*/
constructor(seed: Seed);
/**
* Create a new controller
*
* @param {number} index Index of the controller to create
* @returns {C} Created controller
*/
abstract createController(index: number): C;
/**
* Generate a pseudo-random value
*
* @param {number} index Index of the controller to use
* @returns {T} Generated pseudo-random value
*/
getValueAt(index: number): T;
/**
* Dispose this group controllers
*/
dispose(): void;
}
/**
* Utility class for generating pseudo-random boolean values
*
* @exports
* @class BooleanController
* @extends PRNGController
*/
export declare class BooleanController extends PRNGController<boolean> {
/**
* Pseudo-random boolean value generated by this controller
*/
value: boolean;
/**
* Probability to get `true`
*/
probability: number;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {number} [probability=0.5] Probability to get `true`
*/
constructor(seed: Seed, probability?: number);
getValue(): boolean;
}
/**
* Utility class for generating pseudo-random sign values (-1 or 1)
*
* @exports
* @class SignController
* @extends PRNGController
*/
export declare class SignController extends PRNGController<number> {
/**
* Pseudo-random sign value generated by this controller
*/
value: number;
/**
* Probability to get `1`
*/
probability: number;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {number} [probability=0.5] Probability to get `1`
*/
constructor(seed: Seed, probability?: number);
getValue(): number;
}
/**
* Utility class for generating pseudo-random floating-point numbers within a specified range
*
* @exports
* @class FloatController
* @extends PRNGController
*/
export declare class FloatController extends PRNGController<number> {
/**
* Pseudo-random floating-point number value generated by this controller
*/
value: number;
/**
* Minimum boundary
*/
min: number;
/**
* Maximum boundary
*/
max: number;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {number} [min=0] Minimum boundary
* @param {number} [max=1] Maximum boundary
*/
constructor(seed: Seed, min?: number, max?: number);
getValue(): number;
}
/**
* Utility class for generating pseudo-random integer numbers within a specified range
*
* @exports
* @class IntController
* @extends PRNGController
*/
export declare class IntController extends PRNGController<number> {
/**
* Pseudo-random integer number value generated by this controller
*/
value: number;
/**
* Minimum boundary
*/
min: number;
/**
* Maximum boundary
*/
max: number;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {number} min Minimum boundary
* @param {number} max Maximum boundary
*/
constructor(seed: Seed, min: number, max: number);
getValue(): number;
}
/**
* Utility class for generating pseudo-random hexadecimal colors
*
* @exports
* @class HexColorController
* @extends PRNGController
*/
export declare class HexColorController extends PRNGController<string> {
/**
* Pseudo-random hexadecimal color value generated by this controller
*/
value: string;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
*/
constructor(seed: Seed);
getValue(): string;
}
/**
* Utility class for pseudo-randomly picking an item from an array
*
* @exports
* @class ItemController
* @extends PRNGController<T>
* @template {unknown} [T=unknown]
*/
export declare class ItemController<T = unknown> extends PRNGController<T> {
/**
* Item pseudo-randomly picked from the items array
*/
value: T;
/**
* Array of items to pseudo-randomly pick from
*/
items: T[];
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {T[]} items Array of items to pseudo-randomly pick from
*/
constructor(seed: Seed, items: T[]);
getValue(): T;
}
/**
* Utility class for pseudo-randomly picking a property value from an object
*
* @exports
* @class ObjectPropertyController
* @extends PRNGController<T|undefined>
* @template {unknown} [T=unknown]
*/
export declare class ObjectPropertyController<T = unknown> extends PRNGController<T | undefined> {
/**
* Property value pseudo-randomly picked from the object
*/
value: T | undefined;
/**
* Object to pseudo-randomly pick the property value from
*/
object: Record<string, T>;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {object} object Object to pseudo-randomly pick the property value from
*/
constructor(seed: Seed, object: Record<string, T>);
getValue(): T | undefined;
}
/**
* Utility class for pseudo-randomly picking an item from an array of weighted items
*
* @exports
* @class WeightsController
* @extends PRNGController
*/
export declare class WeightsController<T = unknown> extends PRNGController<T> {
/**
* Item pseudo-randomly picked from the weighted items array
*/
value: T;
/**
* Array of weighted items to pseudo-randomly pick from
*/
items: WeightedItems<T>;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {WeightedItems<T>} items Array of weighted items to pseudo-randomly pick from
*/
constructor(seed: Seed, items: WeightedItems<T>);
getValue(): T;
/**
* Array of weights
*/
get weights(): number[];
}
/**
* Utility class for generating pseudo-random numbers fitting a Gaussian (normal) distribution
*
* @exports
* @class GaussianController
* @extends PRNGController
*/
export declare class GaussianController extends PRNGController<number> {
/**
* Pseudo-random number value generated by this controller
*/
value: number;
/**
* Mean (central) value of the distribution
*/
mean: number;
/**
* Spread (standard deviation) of the distribution
*/
spread: number;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {number} [mean=0] Mean (central) value of the distribution
* @param {number} [spread=1] Spread (standard deviation) of the distribution
*/
constructor(seed: Seed, mean?: number, spread?: number);
getValue(): number;
}
/**
* Utility class for managing multiple {@link BooleanController}
*
* @exports
* @class BooleanGroupController
* @extends PRNGGroupController<boolean, BooleanController>
*/
export declare class BooleanGroupController extends PRNGGroupController<boolean, BooleanController> {
/**
* Probability to get `true`
*/
probability: number;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {number} [probability=0.5] Probability to get `true`
*/
constructor(seed: Seed, probability?: number);
createController(index: number): BooleanController;
}
/**
* Utility class for managing multiple {@link SignController}
*
* @exports
* @class SignGroupController
* @extends PRNGGroupController<number, SignController>
*/
export declare class SignGroupController extends PRNGGroupController<number, SignController> {
/**
* Probability to get `1`
*/
probability: number;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {number} [probability=0.5] Probability to get `1`
*/
constructor(seed: Seed, probability?: number);
createController(index: number): SignController;
}
/**
* Utility class for managing multiple {@link FloatController}
*
* @exports
* @class FloatGroupController
* @extends PRNGGroupController<number, FloatController>
*/
export declare class FloatGroupController extends PRNGGroupController<number, FloatController> {
/**
* Minimum boundary
*/
min: number;
/**
* Maximum boundary
*/
max: number;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {number} [min=0] Minimum boundary
* @param {number} [max=1] Maximum boundary
*/
constructor(seed: Seed, min?: number, max?: number);
createController(index: number): FloatController;
}
/**
* Utility class for managing multiple {@link IntController}
*
* @exports
* @class IntGroupController
* @extends PRNGGroupController<number, IntController>
*/
export declare class IntGroupController extends PRNGGroupController<number, IntController> {
/**
* Minimum boundary
*/
min: number;
/**
* Maximum boundary
*/
max: number;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {number} min Minimum boundary
* @param {number} max Maximum boundary
*/
constructor(seed: Seed, min: number, max: number);
createController(index: number): IntController;
}
/**
* Utility class for managing multiple {@link HexColorController}
*
* @exports
* @class HexColorGroupController
* @extends PRNGGroupController<string, HexColorController>
*/
export declare class HexColorGroupController extends PRNGGroupController<string, HexColorController> {
createController(index: number): HexColorController;
}
/**
* Utility class for managing multiple {@link ItemController}
*
* @exports
* @class ItemGroupController
* @extends PRNGGroupController<T, ItemController<T>>
* @template {unknown} [T=unknown]
*/
export declare class ItemGroupController<T = unknown> extends PRNGGroupController<T, ItemController<T>> {
/**
* Array of items to pseudo-randomly pick from
*/
items: T[];
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {T[]} items Array of items to pseudo-randomly pick from
*/
constructor(seed: Seed, items: T[]);
createController(index: number): ItemController<T>;
}
/**
* Utility class for managing multiple {@link ObjectPropertyController}
*
* @exports
* @class ObjectPropertyGroupController
* @extends PRNGGroupController<T|undefined, ObjectPropertyController<T>>
* @template {unknown} [T=unknown]
*/
export declare class ObjectPropertyGroupController<T = unknown> extends PRNGGroupController<T | undefined, ObjectPropertyController<T>> {
/**
* Object to pseudo-randomly pick the property value from
*/
object: Record<string, T>;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {object} object Object to pseudo-randomly pick the property value from
*/
constructor(seed: Seed, object: Record<string, T>);
createController(index: number): ObjectPropertyController<T>;
}
/**
* Utility class for managing multiple {@link WeightsController}
*
* @exports
* @class WeightsGroupController
* @extends PRNGGroupController<T, WeightsController<T>>
* @template {unknown} [T=unknown]
*/
export declare class WeightsGroupController<T = unknown> extends PRNGGroupController<T, WeightsController<T>> {
/**
* Array of weighted items to pseudo-randomly pick from
*/
items: WeightedItems<T>;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {WeightedItems<T>} items Array of weighted items to pseudo-randomly pick from
*/
constructor(seed: Seed, items: WeightedItems<T>);
createController(index: number): WeightsController<T>;
/**
* Array of weights
*/
get weights(): number[];
}
/**
* Utility class for managing multiple {@link GaussianController}
*
* @exports
* @class GaussianGroupController
* @extends PRNGGroupController<number, GaussianController>
*/
export declare class GaussianGroupController extends PRNGGroupController<number, GaussianController> {
/**
* Mean (central) value of the distribution
*/
mean: number;
/**
* Spread (standard deviation) of the distribution
*/
spread: number;
/**
* @param {Seed} seed Seed string used for pseudo-random generations
* @param {number} [mean=0] Mean (central) value of the distribution
* @param {number} [spread=1] Spread (standard deviation) of the distribution
*/
constructor(seed: Seed, mean?: number, spread?: number);
createController(index: number): GaussianController;
}