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
text/typescript
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 {};