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
285 lines (284 loc) • 11.2 kB
TypeScript
import type { FolderApi as Folder, FolderParams, BindingApi as Binding, BindingParams } from '@tweakpane/core';
/**
* Utility abstract class for generating pseudo-random values
*
* @class PRNGController
* @abstract
*/
export declare abstract class PRNGController<T = unknown> {
seed: string;
abstract value: T;
gui: Binding;
constructor(seed: string | number);
addGUI(gui: Folder, params?: BindingParams): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding").BindingController<unknown, import("@tweakpane/core").ValueController<unknown, import("@tweakpane/core").View, import("@tweakpane/core").Value<unknown>>, import("@tweakpane/core").BindingValue<unknown>>>;
abstract getValue(): T;
dispose(): void;
}
/**
* Utility abstract class for managing multiple instances of individual controllers
*
* @class PRNGGroupController
* @abstract
*/
export declare abstract class PRNGGroupController<T = unknown> {
seed: string;
controllers: PRNGController<T>[];
gui: Folder;
guiParams: BindingParams;
constructor(seed: string | number);
addGUI(gui: Folder, params?: Partial<FolderParams>): Folder;
abstract createController(index: number): PRNGController<T>;
getValueAt(index: number): T;
dispose(): void;
}
/**
* Utility class for generating pseudo-random boolean value
*
* @exports
* @class BooleanController
* @extends PRNGController
*/
export declare class BooleanController extends PRNGController<boolean> {
value: boolean;
probability: number;
constructor(seed: string | number, probability?: number);
getValue(): boolean;
}
/**
* Utility class for generating pseudo-random sign value (-1 or 1)
*
* @exports
* @class SignController
* @extends PRNGController
*/
export declare class SignController extends PRNGController<number> {
value: number;
probability: number;
constructor(seed: string | number, probability?: number);
addGUI(gui: Folder, params?: Omit<BindingParams, 'options'>): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding").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 PRNGController
*/
export declare class FloatController extends PRNGController<number> {
value: number;
min: number;
max: number;
constructor(seed: string | number, min?: number, max?: number);
addGUI(gui: Folder, { min, max, step, ...params }?: BindingParams): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding").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 PRNGController
*/
export declare class IntController extends PRNGController<number> {
value: number;
min: number;
max: number;
constructor(seed: string | number, min: number, max: number);
addGUI(gui: Folder, { min, max, step, ...params }?: BindingParams): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding").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 PRNGController
*/
export declare class HexColorController extends PRNGController<string> {
value: string;
constructor(seed: string | number);
addGUI(gui: Folder, { view, ...params }?: BindingParams): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding").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 PRNGController
*/
export declare class ItemController<T = unknown> extends PRNGController<T> {
value: T;
items: T[];
constructor(seed: string | number, items: T[]);
addGUI(gui: Folder, params?: Omit<BindingParams, 'options'>): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding").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 PRNGController
*/
export declare class ObjectPropertyController<T = unknown> extends PRNGController<T> {
value: T;
object: Record<string, T>;
constructor(seed: string | number, object: Record<string, T>);
addGUI(gui: Folder, params?: Omit<BindingParams, 'options'>): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding").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 PRNGController
*/
export declare class WeightsController<T = unknown> extends PRNGController<T> {
value: T;
items: WeightsItems<T>;
weights: number[];
constructor(seed: string | number, items: WeightsItems<T>);
addGUI(gui: Folder, params?: Omit<BindingParams, 'options'>): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding").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 PRNGController
*/
export declare class GaussianController extends PRNGController<number> {
value: number;
mean: number;
spread: number;
constructor(seed: string | number, mean?: number, spread?: number);
addGUI(gui: Folder, { min, max, step, ...params }?: BindingParams): Binding<unknown, unknown, import("@tweakpane/core/dist/blade/binding/controller/binding").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 PRNGGroupController
*/
export declare class BooleanGroupController extends PRNGGroupController<boolean> {
probability: number;
controllers: BooleanController[];
constructor(seed: string | number, probability: number);
createController(index: number): BooleanController;
}
/**
* Utility class for managing multiple `SignController`
*
* @exports
* @class SignGroupController
* @extends PRNGGroupController
*/
export declare class SignGroupController extends PRNGGroupController<number> {
probability: number;
controllers: SignController[];
constructor(seed: string | number, probability: number);
createController(index: number): SignController;
}
/**
* Utility class for managing multiple `FloatController`
*
* @exports
* @class FloatGroupController
* @extends PRNGGroupController
*/
export declare class FloatGroupController extends PRNGGroupController<number> {
min: number;
max: number;
controllers: FloatController[];
constructor(seed: string | number, min: number, max: number);
createController(index: number): FloatController;
}
/**
* Utility class for managing multiple `IntController`
*
* @exports
* @class IntGroupController
* @extends PRNGGroupController
*/
export declare class IntGroupController extends PRNGGroupController<number> {
min: number;
max: number;
controllers: IntController[];
constructor(seed: string | number, min: number, max: number);
createController(index: number): IntController;
}
/**
* Utility class for managing multiple `HexColorController`
*
* @exports
* @class HexColorGroupController
* @extends PRNGGroupController
*/
export declare class HexColorGroupController extends PRNGGroupController<string> {
controllers: HexColorController[];
createController(index: number): HexColorController;
}
/**
* Utility class for managing multiple `ItemController`
*
* @exports
* @class ItemGroupController
* @extends PRNGGroupController
*/
export declare class ItemGroupController<T = unknown> extends PRNGGroupController<T> {
items: T[];
controllers: ItemController<T>[];
constructor(seed: string | number, items: T[]);
createController(index: number): ItemController<T>;
}
/**
* Utility class for managing multiple `ObjectPropertyController`
*
* @exports
* @class ObjectPropertyGroupController
* @extends PRNGGroupController
*/
export declare class ObjectPropertyGroupController<T = unknown> extends PRNGGroupController<T> {
object: Record<string, T>;
controllers: ObjectPropertyController<T>[];
constructor(seed: string | number, object: Record<string, T>);
createController(index: number): ObjectPropertyController<T>;
}
/**
* Utility class for managing multiple `WeightsController`
*
* @exports
* @class WeightsGroupController
* @extends PRNGGroupController
*/
export declare class WeightsGroupController<T = unknown> extends PRNGGroupController<T> {
items: WeightsItems<T>;
controllers: WeightsController<T>[];
constructor(seed: string | number, items: WeightsItems<T>);
createController(index: number): WeightsController<T>;
}
/**
* Utility class for managing multiple `GaussianController`
*
* @exports
* @class GaussianGroupController
* @extends PRNGGroupController
*/
export declare class GaussianGroupController extends PRNGGroupController<number> {
controllers: GaussianController[];
mean: number;
spread: number;
constructor(seed: string | number, mean?: number, spread?: number);
createController(index: number): GaussianController;
}
export {};