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 and various algorithms

303 lines (302 loc) 11.9 kB
import type { FolderApi as Folder, FolderParams, BindingApi as Binding, BindingParams } from '@tweakpane/core'; export interface PRNGController<T = unknown> { seed: string; value: T; addGUI(gui: Folder, params?: BindingParams): Binding; getValue(): T; dispose(): void; } export interface PRNGGroupController<T = unknown> { seed: string; addGUI(gui: Folder, params?: Partial<FolderParams>): Folder; createController(index: number): PRNGController<T>; getValueAt(index: number): T; dispose(): void; } /** * Utility abstract class for generating pseudo-random values * * @class BasePRNGController * @implements PRNGController * @abstract */ declare abstract class BasePRNGController<T> implements PRNGController<T> { seed: string; abstract value: T; gui: Binding; constructor(seed: string); abstract addGUI(gui: Folder, params?: BindingParams): Binding; abstract getValue(): T; dispose(): void; } /** * Utility abstract class for managing multiple instances of individual controllers * * @class BasePRNGGroupController * @implements PRNGGroupController * @abstract */ declare abstract class BasePRNGGroupController<T> implements PRNGGroupController<T> { seed: string; controllers: PRNGController<T>[]; gui: Folder; guiParams: BindingParams; constructor(seed: string); addGUI(gui: Folder, params?: Partial<FolderParams>): Folder; abstract createController(index: number): PRNGController<T>; getValueAt(index: number): T; dispose(): void; get title(): string; } /** * Utility class for generating pseudo-random boolean value * * @exports * @class BooleanController * @extends BasePRNGController */ export declare class BooleanController extends BasePRNGController<boolean> { value: boolean; probability: number; constructor(seed: string, probability?: number); addGUI(gui: Folder, params?: BindingParams): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding.js").BindingController<unknown, import("@tweakpane/core").ValueController<unknown, import("@tweakpane/core").View, import("@tweakpane/core").Value<unknown>>, import("@tweakpane/core").BindingValue<unknown>>>; getValue(): boolean; } /** * Utility class for generating pseudo-random sign value (-1 or 1) * * @exports * @class SignController * @extends BasePRNGController */ export declare class SignController extends BasePRNGController<number> { value: number; probability: number; constructor(seed: string, probability?: number); addGUI(gui: Folder, params?: Omit<BindingParams, 'options'>): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding.js").BindingController<unknown, import("@tweakpane/core").ValueController<unknown, import("@tweakpane/core").View, import("@tweakpane/core").Value<unknown>>, import("@tweakpane/core").BindingValue<unknown>>>; getValue(): number; } /** * Utility class for generating pseudo-random floating-point number within a specified range * * @exports * @class FloatController * @extends BasePRNGController */ export declare class FloatController extends BasePRNGController<number> { value: number; min: number; max: number; constructor(seed: string, min?: number, max?: number); addGUI(gui: Folder, { min, max, step, ...params }?: BindingParams): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding.js").BindingController<unknown, import("@tweakpane/core").ValueController<unknown, import("@tweakpane/core").View, import("@tweakpane/core").Value<unknown>>, import("@tweakpane/core").BindingValue<unknown>>>; getValue(): number; } /** * Utility class for generating pseudo-random integer number within a specified range * * @exports * @class IntController * @extends BasePRNGController */ export declare class IntController extends BasePRNGController<number> { value: number; min: number; max: number; constructor(seed: string, min: number, max: number); addGUI(gui: Folder, { min, max, step, ...params }?: BindingParams): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding.js").BindingController<unknown, import("@tweakpane/core").ValueController<unknown, import("@tweakpane/core").View, import("@tweakpane/core").Value<unknown>>, import("@tweakpane/core").BindingValue<unknown>>>; getValue(): number; } /** * Utility class for generating pseudo-random hexadecimal color * * @exports * @class HexColorController * @extends BasePRNGController */ export declare class HexColorController extends BasePRNGController<string> { value: string; constructor(seed: string); addGUI(gui: Folder, { view, ...params }?: BindingParams): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding.js").BindingController<unknown, import("@tweakpane/core").ValueController<unknown, import("@tweakpane/core").View, import("@tweakpane/core").Value<unknown>>, import("@tweakpane/core").BindingValue<unknown>>>; getValue(): string; } /** * Utility class for picking a pseudo-random item from a given array * * @exports * @class ItemController * @extends BasePRNGController */ export declare class ItemController<T = unknown> extends BasePRNGController<T> { value: T; items: T[]; constructor(seed: string, items: T[]); addGUI(gui: Folder, params?: Omit<BindingParams, 'options'>): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding.js").BindingController<unknown, import("@tweakpane/core").ValueController<unknown, import("@tweakpane/core").View, import("@tweakpane/core").Value<unknown>>, import("@tweakpane/core").BindingValue<unknown>>>; getValue(): T; } /** * Utility class for picking a pseudo-random property value from a given object * * @exports * @class ObjectPropertyController * @extends BasePRNGController */ export declare class ObjectPropertyController<T = unknown> extends BasePRNGController<T> { value: T; object: Record<string, T>; constructor(seed: string, object: Record<string, T>); addGUI(gui: Folder, params?: Omit<BindingParams, 'options'>): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding.js").BindingController<unknown, import("@tweakpane/core").ValueController<unknown, import("@tweakpane/core").View, import("@tweakpane/core").Value<unknown>>, import("@tweakpane/core").BindingValue<unknown>>>; getValue(): T; } type WeightsItems<T> = Array<{ weight: number; value: T; }>; /** * Utility class for selecting a pseudo-random index from an array of weighted items * * @exports * @class WeightsController * @extends BasePRNGController */ export declare class WeightsController<T = unknown> extends BasePRNGController<T> { value: T; items: WeightsItems<T>; weights: number[]; constructor(seed: string, items: WeightsItems<T>); addGUI(gui: Folder, params?: Omit<BindingParams, 'options'>): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding.js").BindingController<unknown, import("@tweakpane/core").ValueController<unknown, import("@tweakpane/core").View, import("@tweakpane/core").Value<unknown>>, import("@tweakpane/core").BindingValue<unknown>>>; getValue(): T; } /** * Utility class for generating a pseudo-random number fitting a Gaussian (normal) distribution * * @exports * @class GaussianController * @extends BasePRNGController */ export declare class GaussianController extends BasePRNGController<number> { value: number; mean: number; spread: number; constructor(seed: string, mean?: number, spread?: number); addGUI(gui: Folder, { min, max, step, ...params }?: BindingParams): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding.js").BindingController<unknown, import("@tweakpane/core").ValueController<unknown, import("@tweakpane/core").View, import("@tweakpane/core").Value<unknown>>, import("@tweakpane/core").BindingValue<unknown>>>; getValue(): number; } /** * Utility class for managing multiple `BooleanController` * * @exports * @class BooleanGroupController * @extends BasePRNGGroupController */ export declare class BooleanGroupController extends BasePRNGGroupController<boolean> { probability: number; controllers: BooleanController[]; constructor(seed: string, probability: number); createController(index: number): BooleanController; } /** * Utility class for managing multiple `SignController` * * @exports * @class SignGroupController * @extends BasePRNGGroupController */ export declare class SignGroupController extends BasePRNGGroupController<number> { probability: number; controllers: SignController[]; constructor(seed: string, probability: number); createController(index: number): SignController; } /** * Utility class for managing multiple `FloatController` * * @exports * @class FloatGroupController * @extends BasePRNGGroupController */ export declare class FloatGroupController extends BasePRNGGroupController<number> { min: number; max: number; controllers: FloatController[]; constructor(seed: string, min: number, max: number); createController(index: number): FloatController; } /** * Utility class for managing multiple `IntController` * * @exports * @class IntGroupController * @extends BasePRNGGroupController */ export declare class IntGroupController extends BasePRNGGroupController<number> { min: number; max: number; controllers: IntController[]; constructor(seed: string, min: number, max: number); createController(index: number): IntController; } /** * Utility class for managing multiple `HexColorController` * * @exports * @class HexColorGroupController * @extends BasePRNGGroupController */ export declare class HexColorGroupController extends BasePRNGGroupController<string> { controllers: HexColorController[]; createController(index: number): HexColorController; } /** * Utility class for managing multiple `ItemController` * * @exports * @class ItemGroupController * @extends BasePRNGGroupController */ export declare class ItemGroupController<T = unknown> extends BasePRNGGroupController<T> { items: T[]; controllers: ItemController<T>[]; constructor(seed: string, items: T[]); createController(index: number): ItemController<T>; } /** * Utility class for managing multiple `ObjectPropertyController` * * @exports * @class ObjectPropertyGroupController * @extends BasePRNGGroupController */ export declare class ObjectPropertyGroupController<T = unknown> extends BasePRNGGroupController<T> { object: Record<string, T>; controllers: ObjectPropertyController<T>[]; constructor(seed: string, object: Record<string, T>); createController(index: number): ObjectPropertyController<T>; } /** * Utility class for managing multiple `WeightsController` * * @exports * @class WeightsGroupController * @extends BasePRNGGroupController */ export declare class WeightsGroupController<T = unknown> extends BasePRNGGroupController<T> { items: WeightsItems<T>; controllers: WeightsController<T>[]; constructor(seed: string, items: WeightsItems<T>); createController(index: number): WeightsController<T>; } /** * Utility class for managing multiple `GaussianController` * * @exports * @class GaussianGroupController * @extends BasePRNGGroupController */ export declare class GaussianGroupController extends BasePRNGGroupController<number> { controllers: GaussianController[]; mean: number; spread: number; constructor(seed: string, mean?: number, spread?: number); createController(index: number): GaussianController; } export {};