UNPKG

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
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; }