@cazala/party 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +598 -0
  3. package/dist/engine.d.ts +113 -0
  4. package/dist/engine.d.ts.map +1 -0
  5. package/dist/index.d.ts +8 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +9628 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/interfaces.d.ts +223 -0
  10. package/dist/interfaces.d.ts.map +1 -0
  11. package/dist/module.d.ts +259 -0
  12. package/dist/module.d.ts.map +1 -0
  13. package/dist/modules/forces/behavior.d.ts +78 -0
  14. package/dist/modules/forces/behavior.d.ts.map +1 -0
  15. package/dist/modules/forces/boundary.d.ts +58 -0
  16. package/dist/modules/forces/boundary.d.ts.map +1 -0
  17. package/dist/modules/forces/collisions.d.ts +34 -0
  18. package/dist/modules/forces/collisions.d.ts.map +1 -0
  19. package/dist/modules/forces/environment.d.ts +62 -0
  20. package/dist/modules/forces/environment.d.ts.map +1 -0
  21. package/dist/modules/forces/fluids.d.ts +73 -0
  22. package/dist/modules/forces/fluids.d.ts.map +1 -0
  23. package/dist/modules/forces/grab.d.ts +56 -0
  24. package/dist/modules/forces/grab.d.ts.map +1 -0
  25. package/dist/modules/forces/interaction.d.ts +59 -0
  26. package/dist/modules/forces/interaction.d.ts.map +1 -0
  27. package/dist/modules/forces/joints.d.ts +87 -0
  28. package/dist/modules/forces/joints.d.ts.map +1 -0
  29. package/dist/modules/forces/sensors.d.ts +81 -0
  30. package/dist/modules/forces/sensors.d.ts.map +1 -0
  31. package/dist/modules/index.d.ts +13 -0
  32. package/dist/modules/index.d.ts.map +1 -0
  33. package/dist/modules/render/lines.d.ts +55 -0
  34. package/dist/modules/render/lines.d.ts.map +1 -0
  35. package/dist/modules/render/particles.d.ts +53 -0
  36. package/dist/modules/render/particles.d.ts.map +1 -0
  37. package/dist/modules/render/trails.d.ts +36 -0
  38. package/dist/modules/render/trails.d.ts.map +1 -0
  39. package/dist/oscillators.d.ts +66 -0
  40. package/dist/oscillators.d.ts.map +1 -0
  41. package/dist/particle.d.ts +19 -0
  42. package/dist/particle.d.ts.map +1 -0
  43. package/dist/runtimes/cpu/engine.d.ts +60 -0
  44. package/dist/runtimes/cpu/engine.d.ts.map +1 -0
  45. package/dist/runtimes/cpu/spatial-grid.d.ts +56 -0
  46. package/dist/runtimes/cpu/spatial-grid.d.ts.map +1 -0
  47. package/dist/runtimes/webgpu/builders/program.d.ts +56 -0
  48. package/dist/runtimes/webgpu/builders/program.d.ts.map +1 -0
  49. package/dist/runtimes/webgpu/builders/render-pass.d.ts +26 -0
  50. package/dist/runtimes/webgpu/builders/render-pass.d.ts.map +1 -0
  51. package/dist/runtimes/webgpu/engine.d.ts +73 -0
  52. package/dist/runtimes/webgpu/engine.d.ts.map +1 -0
  53. package/dist/runtimes/webgpu/gpu-resources.d.ts +141 -0
  54. package/dist/runtimes/webgpu/gpu-resources.d.ts.map +1 -0
  55. package/dist/runtimes/webgpu/module-registry.d.ts +53 -0
  56. package/dist/runtimes/webgpu/module-registry.d.ts.map +1 -0
  57. package/dist/runtimes/webgpu/particle-store.d.ts +43 -0
  58. package/dist/runtimes/webgpu/particle-store.d.ts.map +1 -0
  59. package/dist/runtimes/webgpu/render-pipeline.d.ts +49 -0
  60. package/dist/runtimes/webgpu/render-pipeline.d.ts.map +1 -0
  61. package/dist/runtimes/webgpu/shaders.d.ts +8 -0
  62. package/dist/runtimes/webgpu/shaders.d.ts.map +1 -0
  63. package/dist/runtimes/webgpu/simulation-pipeline.d.ts +22 -0
  64. package/dist/runtimes/webgpu/simulation-pipeline.d.ts.map +1 -0
  65. package/dist/runtimes/webgpu/spacial-grid.d.ts +27 -0
  66. package/dist/runtimes/webgpu/spacial-grid.d.ts.map +1 -0
  67. package/dist/spawner.d.ts +40 -0
  68. package/dist/spawner.d.ts.map +1 -0
  69. package/dist/vector.d.ts +61 -0
  70. package/dist/vector.d.ts.map +1 -0
  71. package/dist/view.d.ts +43 -0
  72. package/dist/view.d.ts.map +1 -0
  73. package/package.json +67 -0
@@ -0,0 +1,223 @@
1
+ import { View } from "./view";
2
+ import type { Module } from "./module";
3
+ import { OscillatorManager, AddOscillatorOptions } from "./oscillators";
4
+ export interface IParticle {
5
+ position: {
6
+ x: number;
7
+ y: number;
8
+ };
9
+ velocity: {
10
+ x: number;
11
+ y: number;
12
+ };
13
+ size: number;
14
+ mass: number;
15
+ color: {
16
+ r: number;
17
+ g: number;
18
+ b: number;
19
+ a: number;
20
+ };
21
+ }
22
+ export interface IEngine {
23
+ initialize(): Promise<void>;
24
+ play(): void;
25
+ pause(): void;
26
+ stop(): void;
27
+ toggle(): void;
28
+ isPlaying(): boolean;
29
+ destroy(): Promise<void>;
30
+ getSize(): {
31
+ width: number;
32
+ height: number;
33
+ };
34
+ setSize(width: number, height: number): void;
35
+ setCamera(x: number, y: number): void;
36
+ getCamera(): {
37
+ x: number;
38
+ y: number;
39
+ };
40
+ setZoom(z: number): void;
41
+ getZoom(): number;
42
+ addParticle(p: IParticle): void;
43
+ setParticles(p: IParticle[]): void;
44
+ getParticles(): Promise<IParticle[]>;
45
+ getParticle(index: number): Promise<IParticle>;
46
+ clear(): void;
47
+ getCount(): number;
48
+ getFPS(): number;
49
+ export(): Record<string, Record<string, number>>;
50
+ import(settings: Record<string, Record<string, number>>): void;
51
+ getClearColor(): {
52
+ r: number;
53
+ g: number;
54
+ b: number;
55
+ a: number;
56
+ };
57
+ setClearColor(color: {
58
+ r: number;
59
+ g: number;
60
+ b: number;
61
+ a: number;
62
+ }): void;
63
+ getCellSize(): number;
64
+ setCellSize(size: number): void;
65
+ getMaxNeighbors(): number;
66
+ setMaxNeighbors(size: number): void;
67
+ getMaxParticles(): number | null;
68
+ setMaxParticles(value: number | null): void;
69
+ getConstrainIterations(): number;
70
+ setConstrainIterations(iterations: number): void;
71
+ getModule(name: string): Module | undefined;
72
+ addOscillator(params: {
73
+ moduleName: string;
74
+ inputName: string;
75
+ min: number;
76
+ max: number;
77
+ speedHz: number;
78
+ options?: AddOscillatorOptions;
79
+ }): string;
80
+ removeOscillator(moduleName: string, inputName: string): void;
81
+ updateOscillatorSpeed(moduleName: string, inputName: string, speedHz: number): void;
82
+ updateOscillatorBounds(moduleName: string, inputName: string, min: number, max: number): void;
83
+ hasOscillator(moduleName: string, inputName: string): boolean;
84
+ getOscillator(moduleName: string, inputName: string): {
85
+ moduleName: string;
86
+ inputName: string;
87
+ min: number;
88
+ max: number;
89
+ speedHz: number;
90
+ curveExponent: number;
91
+ jitterMultiplier: number;
92
+ phaseOffset: number;
93
+ lastDirection: -1 | 0 | 1;
94
+ lastValue: number;
95
+ active: boolean;
96
+ } | undefined;
97
+ clearOscillators(): void;
98
+ clearModuleOscillators(moduleName: string): void;
99
+ addOscillatorListener(moduleName: string, inputName: string, handler: (value: number) => void): void;
100
+ removeOscillatorListener(moduleName: string, inputName: string, handler: (value: number) => void): void;
101
+ setOscillatorState(moduleName: string, inputName: string, lastValue: number, lastDirection: -1 | 0 | 1): boolean;
102
+ getOscillatorsElapsedSeconds(): number;
103
+ setOscillatorsElapsedSeconds(seconds: number): void;
104
+ }
105
+ export declare abstract class AbstractEngine implements IEngine {
106
+ protected playing: boolean;
107
+ protected lastTime: number;
108
+ protected fpsEstimate: number;
109
+ protected fpsSmoothing: number;
110
+ protected constrainIterations: number;
111
+ protected clearColor: {
112
+ r: number;
113
+ g: number;
114
+ b: number;
115
+ a: number;
116
+ };
117
+ protected cellSize: number;
118
+ protected maxNeighbors: number;
119
+ protected maxParticles: number | null;
120
+ protected view: View;
121
+ protected modules: Module[];
122
+ protected maxSize: number;
123
+ protected oscillatorManager: OscillatorManager;
124
+ constructor(options: {
125
+ canvas: HTMLCanvasElement;
126
+ forces: Module[];
127
+ render: Module[];
128
+ constrainIterations?: number;
129
+ clearColor?: {
130
+ r: number;
131
+ g: number;
132
+ b: number;
133
+ a: number;
134
+ };
135
+ cellSize?: number;
136
+ maxNeighbors?: number;
137
+ });
138
+ abstract initialize(): Promise<void>;
139
+ abstract destroy(): Promise<void>;
140
+ abstract setSize(width: number, height: number): void;
141
+ abstract addParticle(p: IParticle): void;
142
+ abstract setParticles(p: IParticle[]): void;
143
+ abstract getParticles(): Promise<IParticle[]>;
144
+ abstract getParticle(index: number): Promise<IParticle>;
145
+ abstract clear(): void;
146
+ abstract getCount(): number;
147
+ protected abstract startAnimationLoop(): void;
148
+ protected abstract stopAnimationLoop(): void;
149
+ play(): void;
150
+ pause(): void;
151
+ stop(): void;
152
+ toggle(): void;
153
+ isPlaying(): boolean;
154
+ getSize(): {
155
+ width: number;
156
+ height: number;
157
+ };
158
+ setCamera(x: number, y: number): void;
159
+ getCamera(): {
160
+ x: number;
161
+ y: number;
162
+ };
163
+ setZoom(z: number): void;
164
+ getZoom(): number;
165
+ getFPS(): number;
166
+ addOscillator(params: {
167
+ moduleName: string;
168
+ inputName: string;
169
+ min: number;
170
+ max: number;
171
+ speedHz: number;
172
+ options?: AddOscillatorOptions;
173
+ }): string;
174
+ removeOscillator(moduleName: string, inputName: string): void;
175
+ updateOscillatorSpeed(moduleName: string, inputName: string, speedHz: number): void;
176
+ updateOscillatorBounds(moduleName: string, inputName: string, min: number, max: number): void;
177
+ hasOscillator(moduleName: string, inputName: string): boolean;
178
+ getOscillator(moduleName: string, inputName: string): import("./oscillators").OscillatorPublicConfig | undefined;
179
+ clearOscillators(): void;
180
+ clearModuleOscillators(moduleName: string): void;
181
+ addOscillatorListener(moduleName: string, inputName: string, handler: (value: number) => void): void;
182
+ removeOscillatorListener(moduleName: string, inputName: string, handler: (value: number) => void): void;
183
+ setOscillatorState(moduleName: string, inputName: string, lastValue: number, lastDirection: -1 | 0 | 1): boolean;
184
+ getOscillatorsElapsedSeconds(): number;
185
+ setOscillatorsElapsedSeconds(seconds: number): void;
186
+ export(): Record<string, Record<string, number>>;
187
+ import(settings: Record<string, Record<string, number>>): void;
188
+ protected updateFPS(dt: number): void;
189
+ protected updateOscillators(dt: number): void;
190
+ protected getTimeDelta(): number;
191
+ protected onViewChanged(): void;
192
+ protected onModuleSettingsChanged(): void;
193
+ getClearColor(): {
194
+ r: number;
195
+ g: number;
196
+ b: number;
197
+ a: number;
198
+ };
199
+ setClearColor(color: {
200
+ r: number;
201
+ g: number;
202
+ b: number;
203
+ a: number;
204
+ }): void;
205
+ getCellSize(): number;
206
+ setCellSize(size: number): void;
207
+ getMaxNeighbors(): number;
208
+ setMaxNeighbors(size: number): void;
209
+ getMaxParticles(): number | null;
210
+ setMaxParticles(value: number | null): void;
211
+ getConstrainIterations(): number;
212
+ setConstrainIterations(iterations: number): void;
213
+ getMaxSize(): number;
214
+ protected updateMaxSize(size: number): void;
215
+ protected resetMaxSize(): void;
216
+ protected onClearColorChanged(): void;
217
+ protected onCellSizeChanged(): void;
218
+ protected onConstrainIterationsChanged(): void;
219
+ protected onMaxNeighborsChanged(): void;
220
+ protected onMaxParticlesChanged(): void;
221
+ getModule<T extends Module>(name: string): T | undefined;
222
+ }
223
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,259 @@
1
+ import { Particle } from "./particle";
2
+ import { View } from "./view";
3
+ /**
4
+ * Module descriptors and base Module class
5
+ *
6
+ * Defines the type-level contract for modules and the DSL surface used by the
7
+ * WGSL builders. A `Module` instance provides a `descriptor()` which declares:
8
+ * - role: `system`, `force`, or `render`
9
+ * - bindings: uniform fields exposed to CPU and populated into GPU uniform buffers
10
+ * - for system/force modules: optional global/state/apply/constrain/correct hooks
11
+ * - for render modules: one or more passes (fullscreen or compute) with their bindings
12
+ *
13
+ * The base `Module` offers uniform writer/reader plumbing and enabled toggling,
14
+ * and module authors extend it to implement their descriptor and any runtime API.
15
+ */
16
+ export declare enum ModuleRole {
17
+ Force = "force",
18
+ Render = "render"
19
+ }
20
+ export declare enum DataType {
21
+ NUMBER = "number",
22
+ ARRAY = "array"
23
+ }
24
+ export declare abstract class Module<Name extends string = string, Inputs extends Record<string, number | number[]> = Record<string, number | number[]>, StateKeys extends string = any> {
25
+ abstract readonly name: Name;
26
+ abstract readonly role: ModuleRole;
27
+ abstract readonly inputs: {
28
+ [K in keyof Inputs]: DataType;
29
+ };
30
+ private _state;
31
+ private _writer;
32
+ private _reader;
33
+ private _enabled;
34
+ attachUniformWriter(writer: (values: Partial<Record<string, number | number[]>>) => void): void;
35
+ attachUniformReader(reader: () => Partial<Inputs>): void;
36
+ write(values: Partial<Inputs>): void;
37
+ read(): Partial<Inputs>;
38
+ readValue(key: keyof Inputs | "enabled"): number;
39
+ readArray(key: keyof Inputs | "enabled"): number[];
40
+ isEnabled(): boolean;
41
+ setEnabled(enabled: boolean): void;
42
+ abstract webgpu(): WebGPUDescriptor<Inputs, StateKeys>;
43
+ abstract cpu(): CPUDescriptor<Inputs, StateKeys>;
44
+ }
45
+ export interface WebGPUForceDescriptor<Inputs extends Record<string, number | number[]> = Record<string, number | number[]>, StateKeys extends string | number | symbol = string> {
46
+ states?: readonly StateKeys[];
47
+ global?: (args: {
48
+ getUniform: (id: keyof Inputs, index?: number | string) => string;
49
+ getLength: (id: keyof Inputs) => string;
50
+ }) => string;
51
+ state?: (args: {
52
+ particleVar: string;
53
+ dtVar: string;
54
+ maxSizeVar: string;
55
+ getUniform: (id: keyof Inputs, index?: number | string) => string;
56
+ getLength: (id: keyof Inputs) => string;
57
+ setState: (name: StateKeys, valueExpr: string) => string;
58
+ }) => string;
59
+ apply?: (args: {
60
+ particleVar: string;
61
+ dtVar: string;
62
+ maxSizeVar: string;
63
+ getUniform: (id: keyof Inputs, index?: number | string) => string;
64
+ getLength: (id: keyof Inputs) => string;
65
+ getState: (name: StateKeys, pidVar?: string) => string;
66
+ }) => string;
67
+ constrain?: (args: {
68
+ particleVar: string;
69
+ dtVar: string;
70
+ maxSizeVar: string;
71
+ getUniform: (id: keyof Inputs, index?: number | string) => string;
72
+ getLength: (id: keyof Inputs) => string;
73
+ getState: (name: StateKeys, pidVar?: string) => string;
74
+ }) => string;
75
+ correct?: (args: {
76
+ particleVar: string;
77
+ dtVar: string;
78
+ maxSizeVar: string;
79
+ prevPosVar: string;
80
+ postPosVar: string;
81
+ getUniform: (id: keyof Inputs, index?: number | string) => string;
82
+ getLength: (id: keyof Inputs) => string;
83
+ getState: (name: StateKeys, pidVar?: string) => string;
84
+ }) => string;
85
+ }
86
+ export type FullscreenRenderPass<Inputs extends Record<string, number | number[]> = Record<string, number | number[]>> = {
87
+ kind: RenderPassKind.Fullscreen;
88
+ vertex?: (args: {
89
+ getUniform: (id: keyof Inputs | "canvasWidth" | "canvasHeight", index?: number | string) => string;
90
+ getLength: (id: keyof Inputs) => string;
91
+ }) => string;
92
+ globals?: (args: {
93
+ getUniform: (id: keyof Inputs, index?: number | string) => string;
94
+ getLength: (id: keyof Inputs) => string;
95
+ }) => string;
96
+ fragment: (args: {
97
+ getUniform: (id: keyof Inputs | "canvasWidth" | "canvasHeight" | "clearColorR" | "clearColorG" | "clearColorB", index?: number | string) => string;
98
+ getLength: (id: keyof Inputs) => string;
99
+ sampleScene: (uvExpr: string) => string;
100
+ }) => string;
101
+ bindings: (keyof Inputs)[];
102
+ readsScene?: boolean;
103
+ writesScene?: true;
104
+ instanced?: boolean;
105
+ instanceFrom?: keyof Inputs;
106
+ };
107
+ export declare enum RenderPassKind {
108
+ Fullscreen = "fullscreen",
109
+ Compute = "compute"
110
+ }
111
+ export type ComputeRenderPass<Inputs extends Record<string, number | number[]> = Record<string, number | number[]>> = {
112
+ kind: RenderPassKind.Compute;
113
+ kernel: (args: {
114
+ getUniform: (id: keyof Inputs | "canvasWidth" | "canvasHeight" | "clearColorR" | "clearColorG" | "clearColorB", index?: number | string) => string;
115
+ getLength: (id: keyof Inputs) => string;
116
+ readScene: (coordsExpr: string) => string;
117
+ writeScene: (coordsExpr: string, colorExpr: string) => string;
118
+ }) => string;
119
+ bindings: (keyof Inputs)[];
120
+ readsScene?: boolean;
121
+ writesScene?: true;
122
+ workgroupSize?: [number, number, number];
123
+ globals?: (args: {
124
+ getUniform: (id: keyof Inputs, index?: number | string) => string;
125
+ getLength: (id: keyof Inputs) => string;
126
+ }) => string;
127
+ };
128
+ export type RenderPass<Inputs extends Record<string, number | number[]> = Record<string, number | number[]>> = FullscreenRenderPass<Inputs> | ComputeRenderPass<Inputs>;
129
+ export interface WebGPURenderDescriptor<Inputs extends Record<string, number | number[]> = Record<string, number | number[]>> {
130
+ passes: Array<RenderPass<Inputs>>;
131
+ }
132
+ export type WebGPUDescriptor<Inputs extends Record<string, number | number[]> = Record<string, number | number[]>, StateKeys extends string | number | symbol = string> = WebGPUForceDescriptor<Inputs, StateKeys> | WebGPURenderDescriptor<Inputs>;
133
+ export interface CPUForceDescriptor<Inputs extends Record<string, number | number[]> = Record<string, number | number[]>, StateKeys extends string | number | symbol = never> {
134
+ states?: readonly StateKeys[];
135
+ state?: (args: {
136
+ particle: Particle;
137
+ getNeighbors: (position: {
138
+ x: number;
139
+ y: number;
140
+ }, radius: number) => Particle[];
141
+ dt: number;
142
+ input: Inputs;
143
+ setState: (name: StateKeys, value: number) => void;
144
+ view: View;
145
+ index: number;
146
+ particles: Particle[];
147
+ getImageData: (x: number, y: number, width: number, height: number) => ImageData | null;
148
+ }) => void;
149
+ apply?: (args: {
150
+ particle: Particle;
151
+ getNeighbors: (position: {
152
+ x: number;
153
+ y: number;
154
+ }, radius: number) => Particle[];
155
+ dt: number;
156
+ maxSize: number;
157
+ input: Inputs;
158
+ getState: (name: StateKeys, pid?: number) => number;
159
+ view: View;
160
+ index: number;
161
+ particles: Particle[];
162
+ getImageData: (x: number, y: number, width: number, height: number) => ImageData | null;
163
+ }) => void;
164
+ constrain?: (args: {
165
+ particle: Particle;
166
+ getNeighbors: (position: {
167
+ x: number;
168
+ y: number;
169
+ }, radius: number) => Particle[];
170
+ dt: number;
171
+ maxSize: number;
172
+ input: Inputs;
173
+ getState: (name: StateKeys, pid?: number) => number;
174
+ view: View;
175
+ index: number;
176
+ particles: Particle[];
177
+ getImageData: (x: number, y: number, width: number, height: number) => ImageData | null;
178
+ }) => void;
179
+ correct?: (args: {
180
+ particle: Particle;
181
+ getNeighbors: (position: {
182
+ x: number;
183
+ y: number;
184
+ }, radius: number) => Particle[];
185
+ dt: number;
186
+ maxSize: number;
187
+ prevPos: {
188
+ x: number;
189
+ y: number;
190
+ };
191
+ postPos: {
192
+ x: number;
193
+ y: number;
194
+ };
195
+ input: Inputs;
196
+ getState: (name: StateKeys, pid?: number) => number;
197
+ view: View;
198
+ index: number;
199
+ particles: Particle[];
200
+ getImageData: (x: number, y: number, width: number, height: number) => ImageData | null;
201
+ }) => void;
202
+ }
203
+ export interface CPURenderUtils {
204
+ formatColor(color: {
205
+ r: number;
206
+ g: number;
207
+ b: number;
208
+ a: number;
209
+ }): string;
210
+ drawCircle(x: number, y: number, radius: number, color: {
211
+ r: number;
212
+ g: number;
213
+ b: number;
214
+ a: number;
215
+ }): void;
216
+ drawRect(x: number, y: number, width: number, height: number, color: {
217
+ r: number;
218
+ g: number;
219
+ b: number;
220
+ a: number;
221
+ }): void;
222
+ }
223
+ export declare enum CanvasComposition {
224
+ RequiresClear = "requiresClear",
225
+ HandlesBackground = "handlesBackground",
226
+ Additive = "additive"
227
+ }
228
+ export interface CPURenderDescriptor<Inputs extends Record<string, number | number[]> = Record<string, number | number[]>> {
229
+ composition?: CanvasComposition;
230
+ setup?: (args: {
231
+ context: CanvasRenderingContext2D;
232
+ input: Inputs;
233
+ view: View;
234
+ clearColor: {
235
+ r: number;
236
+ g: number;
237
+ b: number;
238
+ a: number;
239
+ };
240
+ utils: CPURenderUtils;
241
+ particles: Particle[];
242
+ }) => void;
243
+ render?: (args: {
244
+ context: CanvasRenderingContext2D;
245
+ particle: Particle;
246
+ screenX: number;
247
+ screenY: number;
248
+ screenSize: number;
249
+ input: Inputs;
250
+ utils: CPURenderUtils;
251
+ }) => void;
252
+ teardown?: (args: {
253
+ context: CanvasRenderingContext2D;
254
+ input: Inputs;
255
+ utils: CPURenderUtils;
256
+ }) => void;
257
+ }
258
+ export type CPUDescriptor<Inputs extends Record<string, number | number[]> = Record<string, number | number[]>, StateKeys extends string | number | symbol = string> = CPUForceDescriptor<Inputs, StateKeys> | CPURenderDescriptor<Inputs>;
259
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B;;;;;;;;;;;;GAYG;AACH,oBAAY,UAAU;IACpB,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;AAED,oBAAY,QAAQ;IAClB,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED,8BAAsB,MAAM,CAC1B,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CACvD,MAAM,EACN,MAAM,GAAG,MAAM,EAAE,CAClB,EACD,SAAS,SAAS,MAAM,GAAG,GAAG;IAE9B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;SAAG,CAAC,IAAI,MAAM,MAAM,GAAG,QAAQ;KAAE,CAAC;IAE5D,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAWb;IACF,OAAO,CAAC,OAAO,CAEb;IACF,OAAO,CAAC,QAAQ,CAAiB;IAEjC,mBAAmB,CACjB,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,GACnE,IAAI;IAMP,mBAAmB,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAIjD,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAKpC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAKvB,SAAS,CAAC,GAAG,EAAE,MAAM,MAAM,GAAG,SAAS,GAAG,MAAM;IAQhD,SAAS,CAAC,GAAG,EAAE,MAAM,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE;IAQzD,SAAS,IAAI,OAAO;IAIpB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAUlC,QAAQ,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC;IACtD,QAAQ,CAAC,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC;CACjD;AAED,MAAM,WAAW,qBAAqB,CACpC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CACvD,MAAM,EACN,MAAM,GAAG,MAAM,EAAE,CAClB,EACD,SAAS,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM;IAEnD,MAAM,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QACd,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;QAClE,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,KAAK,MAAM,CAAC;KACzC,KAAK,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;QAClE,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,KAAK,MAAM,CAAC;QACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;KAC1D,KAAK,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;QAClE,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,KAAK,MAAM,CAAC;QACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;KACxD,KAAK,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;QAClE,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,KAAK,MAAM,CAAC;QACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;KACxD,KAAK,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;QAClE,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,KAAK,MAAM,CAAC;QACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;KACxD,KAAK,MAAM,CAAC;CACd;AAED,MAAM,MAAM,oBAAoB,CAC9B,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CACvD,MAAM,EACN,MAAM,GAAG,MAAM,EAAE,CAClB,IACC;IACF,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QACd,UAAU,EAAE,CACV,EAAE,EAAE,MAAM,MAAM,GAAG,aAAa,GAAG,cAAc,EACjD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,KACpB,MAAM,CAAC;QACZ,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,KAAK,MAAM,CAAC;KACzC,KAAK,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QACf,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;QAClE,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,KAAK,MAAM,CAAC;KACzC,KAAK,MAAM,CAAC;IACb,QAAQ,EAAE,CAAC,IAAI,EAAE;QACf,UAAU,EAAE,CACV,EAAE,EACE,MAAM,MAAM,GACZ,aAAa,GACb,cAAc,GACd,aAAa,GACb,aAAa,GACb,aAAa,EACjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,KACpB,MAAM,CAAC;QACZ,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,KAAK,MAAM,CAAC;QACxC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;KACzC,KAAK,MAAM,CAAC;IACb,QAAQ,EAAE,CAAC,MAAM,MAAM,CAAC,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B,CAAC;AAEF,oBAAY,cAAc;IACxB,UAAU,eAAe;IACzB,OAAO,YAAY;CACpB;AAED,MAAM,MAAM,iBAAiB,CAC3B,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CACvD,MAAM,EACN,MAAM,GAAG,MAAM,EAAE,CAClB,IACC;IACF,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC;IAC7B,MAAM,EAAE,CAAC,IAAI,EAAE;QACb,UAAU,EAAE,CACV,EAAE,EACE,MAAM,MAAM,GACZ,aAAa,GACb,cAAc,GACd,aAAa,GACb,aAAa,GACb,aAAa,EACjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,KACpB,MAAM,CAAC;QACZ,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,KAAK,MAAM,CAAC;QACxC,SAAS,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;QAC1C,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;KAC/D,KAAK,MAAM,CAAC;IACb,QAAQ,EAAE,CAAC,MAAM,MAAM,CAAC,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QACf,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;QAClE,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,MAAM,KAAK,MAAM,CAAC;KACzC,KAAK,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,UAAU,CACpB,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CACvD,MAAM,EACN,MAAM,GAAG,MAAM,EAAE,CAClB,IACC,oBAAoB,CAAC,MAAM,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,sBAAsB,CACrC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CACvD,MAAM,EACN,MAAM,GAAG,MAAM,EAAE,CAClB;IAED,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;CACnC;AAED,MAAM,MAAM,gBAAgB,CAC1B,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CACvD,MAAM,EACN,MAAM,GAAG,MAAM,EAAE,CAClB,EACD,SAAS,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,IACjD,qBAAqB,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAE9E,MAAM,WAAW,kBAAkB,CACjC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CACvD,MAAM,EACN,MAAM,GAAG,MAAM,EAAE,CAClB,EACD,SAAS,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK;IAElD,MAAM,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;QACb,QAAQ,EAAE,QAAQ,CAAC;QACnB,YAAY,EAAE,CACZ,QAAQ,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,EAClC,MAAM,EAAE,MAAM,KACX,QAAQ,EAAE,CAAC;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QACnD,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,QAAQ,EAAE,CAAC;QACtB,YAAY,EAAE,CACZ,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,KACX,SAAS,GAAG,IAAI,CAAC;KACvB,KAAK,IAAI,CAAC;IACX,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;QACb,QAAQ,EAAE,QAAQ,CAAC;QACnB,YAAY,EAAE,CACZ,QAAQ,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,EAClC,MAAM,EAAE,MAAM,KACX,QAAQ,EAAE,CAAC;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;QACpD,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,QAAQ,EAAE,CAAC;QACtB,YAAY,EAAE,CACZ,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,KACX,SAAS,GAAG,IAAI,CAAC;KACvB,KAAK,IAAI,CAAC;IACX,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QACjB,QAAQ,EAAE,QAAQ,CAAC;QACnB,YAAY,EAAE,CACZ,QAAQ,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,EAClC,MAAM,EAAE,MAAM,KACX,QAAQ,EAAE,CAAC;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;QACpD,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,QAAQ,EAAE,CAAC;QACtB,YAAY,EAAE,CACZ,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,KACX,SAAS,GAAG,IAAI,CAAC;KACvB,KAAK,IAAI,CAAC;IACX,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QACf,QAAQ,EAAE,QAAQ,CAAC;QACnB,YAAY,EAAE,CACZ,QAAQ,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,EAClC,MAAM,EAAE,MAAM,KACX,QAAQ,EAAE,CAAC;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAClC,OAAO,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAClC,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;QACpD,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,QAAQ,EAAE,CAAC;QACtB,YAAY,EAAE,CACZ,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,KACX,SAAS,GAAG,IAAI,CAAC;KACvB,KAAK,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAC3E,UAAU,CACR,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GACpD,IAAI,CAAC;IACR,QAAQ,CACN,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GACpD,IAAI,CAAC;CACT;AAED,oBAAY,iBAAiB;IAE3B,aAAa,kBAAkB;IAE/B,iBAAiB,sBAAsB;IAEvC,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,mBAAmB,CAClC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CACvD,MAAM,EACN,MAAM,GAAG,MAAM,EAAE,CAClB;IAGD,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAGhC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;QACb,OAAO,EAAE,wBAAwB,CAAC;QAClC,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,IAAI,CAAC;QACX,UAAU,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3D,KAAK,EAAE,cAAc,CAAC;QACtB,SAAS,EAAE,QAAQ,EAAE,CAAC;KACvB,KAAK,IAAI,CAAC;IAGX,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QACd,OAAO,EAAE,wBAAwB,CAAC;QAClC,QAAQ,EAAE,QAAQ,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,cAAc,CAAC;KACvB,KAAK,IAAI,CAAC;IAGX,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAChB,OAAO,EAAE,wBAAwB,CAAC;QAClC,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,cAAc,CAAC;KACvB,KAAK,IAAI,CAAC;CACZ;AAED,MAAM,MAAM,aAAa,CACvB,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CACvD,MAAM,EACN,MAAM,GAAG,MAAM,EAAE,CAClB,EACD,SAAS,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,IACjD,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Behavior (Force Module)
3
+ *
4
+ * Boids-like steering behaviors: separation, alignment, cohesion, chase/avoid, wander.
5
+ * Uses the spatial grid neighbor iterator to accumulate local influences and writes
6
+ * into particle acceleration (no extra state). Tuned to avoid heavy branching and
7
+ * zero-velocity edge cases.
8
+ */
9
+ import { Module, type WebGPUDescriptor, ModuleRole, CPUDescriptor, DataType } from "../../module";
10
+ export declare const DEFAULT_BEHAVIOR_WANDER = 20;
11
+ export declare const DEFAULT_BEHAVIOR_COHESION = 1.5;
12
+ export declare const DEFAULT_BEHAVIOR_ALIGNMENT = 1.5;
13
+ export declare const DEFAULT_BEHAVIOR_REPULSION = 2;
14
+ export declare const DEFAULT_BEHAVIOR_CHASE = 0;
15
+ export declare const DEFAULT_BEHAVIOR_AVOID = 0;
16
+ export declare const DEFAULT_BEHAVIOR_SEPARATION = 10;
17
+ export declare const DEFAULT_BEHAVIOR_VIEW_RADIUS = 100;
18
+ export declare const DEFAULT_BEHAVIOR_VIEW_ANGLE: number;
19
+ type BehaviorInputs = {
20
+ wander: number;
21
+ cohesion: number;
22
+ alignment: number;
23
+ repulsion: number;
24
+ chase: number;
25
+ avoid: number;
26
+ separation: number;
27
+ viewRadius: number;
28
+ viewAngle: number;
29
+ };
30
+ export declare class Behavior extends Module<"behavior", BehaviorInputs> {
31
+ readonly name: "behavior";
32
+ readonly role = ModuleRole.Force;
33
+ readonly inputs: {
34
+ readonly wander: DataType.NUMBER;
35
+ readonly cohesion: DataType.NUMBER;
36
+ readonly alignment: DataType.NUMBER;
37
+ readonly repulsion: DataType.NUMBER;
38
+ readonly chase: DataType.NUMBER;
39
+ readonly avoid: DataType.NUMBER;
40
+ readonly separation: DataType.NUMBER;
41
+ readonly viewRadius: DataType.NUMBER;
42
+ readonly viewAngle: DataType.NUMBER;
43
+ };
44
+ constructor(opts?: {
45
+ wander?: number;
46
+ cohesion?: number;
47
+ alignment?: number;
48
+ repulsion?: number;
49
+ chase?: number;
50
+ avoid?: number;
51
+ separation?: number;
52
+ viewRadius?: number;
53
+ viewAngle?: number;
54
+ enabled?: boolean;
55
+ });
56
+ setWander(v: number): void;
57
+ setCohesion(v: number): void;
58
+ setAlignment(v: number): void;
59
+ setRepulsion(v: number): void;
60
+ setChase(v: number): void;
61
+ setAvoid(v: number): void;
62
+ setSeparation(v: number): void;
63
+ setViewRadius(v: number): void;
64
+ setViewAngle(v: number): void;
65
+ getWander(): number;
66
+ getCohesion(): number;
67
+ getAlignment(): number;
68
+ getRepulsion(): number;
69
+ getChase(): number;
70
+ getAvoid(): number;
71
+ getSeparation(): number;
72
+ getViewRadius(): number;
73
+ getViewAngle(): number;
74
+ webgpu(): WebGPUDescriptor<BehaviorInputs>;
75
+ cpu(): CPUDescriptor<BehaviorInputs>;
76
+ }
77
+ export {};
78
+ //# sourceMappingURL=behavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"behavior.d.ts","sourceRoot":"","sources":["../../../src/modules/forces/behavior.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,MAAM,EACN,KAAK,gBAAgB,EACrB,UAAU,EACV,aAAa,EACb,QAAQ,EACT,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAC9C,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,eAAO,MAAM,2BAA2B,QAAgB,CAAC;AAEzD,KAAK,cAAc,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,QAAS,SAAQ,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC;IAC9D,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IACpC,QAAQ,CAAC,IAAI,oBAAoB;IACjC,QAAQ,CAAC,MAAM;;;;;;;;;;MAUJ;gBAEC,IAAI,CAAC,EAAE;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB;IAgBD,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAG1B,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAG5B,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAG7B,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAG7B,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAGzB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAGzB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAG9B,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAG9B,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAI7B,SAAS,IAAI,MAAM;IAGnB,WAAW,IAAI,MAAM;IAGrB,YAAY,IAAI,MAAM;IAGtB,YAAY,IAAI,MAAM;IAGtB,QAAQ,IAAI,MAAM;IAGlB,QAAQ,IAAI,MAAM;IAGlB,aAAa,IAAI,MAAM;IAGvB,aAAa,IAAI,MAAM;IAGvB,YAAY,IAAI,MAAM;IAItB,MAAM,IAAI,gBAAgB,CAAC,cAAc,CAAC;IA4H1C,GAAG,IAAI,aAAa,CAAC,cAAc,CAAC;CAmMrC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Boundary (Force Module)
3
+ *
4
+ * Enforces world bounds using the grid extents. Modes:
5
+ * - bounce: reflect with restitution and tangential friction
6
+ * - warp: wrap to the opposite side once fully outside
7
+ * - kill: set mass=0 to cull particle when fully outside
8
+ * - none: no constraint (repel still optional)
9
+ * Supports optional repel force near edges.
10
+ */
11
+ import { Module, type WebGPUDescriptor, ModuleRole, CPUDescriptor, DataType } from "../../module";
12
+ export type BoundaryMode = "bounce" | "warp" | "kill" | "none";
13
+ export declare const DEFAULT_BOUNDARY_RESTITUTION = 0.9;
14
+ export declare const DEFAULT_BOUNDARY_FRICTION = 0.1;
15
+ export declare const DEFAULT_BOUNDARY_MODE: BoundaryMode;
16
+ export declare const DEFAULT_BOUNDARY_REPEL_DISTANCE = 0;
17
+ export declare const DEFAULT_BOUNDARY_REPEL_STRENGTH = 0;
18
+ type BoundaryInputs = {
19
+ restitution: number;
20
+ friction: number;
21
+ mode: number;
22
+ repelDistance: number;
23
+ repelStrength: number;
24
+ };
25
+ export declare class Boundary extends Module<"boundary", BoundaryInputs> {
26
+ readonly name: "boundary";
27
+ readonly role = ModuleRole.Force;
28
+ readonly inputs: {
29
+ readonly restitution: DataType.NUMBER;
30
+ readonly friction: DataType.NUMBER;
31
+ readonly mode: DataType.NUMBER;
32
+ readonly repelDistance: DataType.NUMBER;
33
+ readonly repelStrength: DataType.NUMBER;
34
+ };
35
+ constructor(opts?: {
36
+ enabled?: boolean;
37
+ restitution?: number;
38
+ friction?: number;
39
+ mode?: BoundaryMode;
40
+ repelDistance?: number;
41
+ repelStrength?: number;
42
+ });
43
+ setRestitution(value: number): void;
44
+ setFriction(value: number): void;
45
+ setMode(mode: BoundaryMode): void;
46
+ setRepelDistance(value: number): void;
47
+ setRepelStrength(value: number): void;
48
+ getRestitution(): number;
49
+ getFriction(): number;
50
+ getMode(): number;
51
+ getRepelDistance(): number;
52
+ getRepelStrength(): number;
53
+ private modeToUniform;
54
+ webgpu(): WebGPUDescriptor<BoundaryInputs>;
55
+ cpu(): CPUDescriptor<BoundaryInputs>;
56
+ }
57
+ export {};
58
+ //# sourceMappingURL=boundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../../src/modules/forces/boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,MAAM,EACN,KAAK,gBAAgB,EACrB,UAAU,EACV,aAAa,EACb,QAAQ,EACT,MAAM,cAAc,CAAC;AAGtB,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE/D,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,qBAAqB,EAAE,YAAuB,CAAC;AAC5D,eAAO,MAAM,+BAA+B,IAAM,CAAC;AACnD,eAAO,MAAM,+BAA+B,IAAM,CAAC;AAEnD,KAAK,cAAc,GAAG;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,qBAAa,QAAS,SAAQ,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC;IAC9D,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IACpC,QAAQ,CAAC,IAAI,oBAAoB;IACjC,QAAQ,CAAC,MAAM;;;;;;MAMJ;gBAEC,IAAI,CAAC,EAAE;QACjB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,YAAY,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB;IAeD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIhC,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAIjC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC,cAAc,IAAI,MAAM;IAGxB,WAAW,IAAI,MAAM;IAGrB,OAAO,IAAI,MAAM;IAGjB,gBAAgB,IAAI,MAAM;IAG1B,gBAAgB,IAAI,MAAM;IAI1B,OAAO,CAAC,aAAa;IAerB,MAAM,IAAI,gBAAgB,CAAC,cAAc,CAAC;IAsH1C,GAAG,IAAI,aAAa,CAAC,cAAc,CAAC;CAsHrC"}