@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.
- package/LICENSE +23 -0
- package/README.md +598 -0
- package/dist/engine.d.ts +113 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9628 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces.d.ts +223 -0
- package/dist/interfaces.d.ts.map +1 -0
- package/dist/module.d.ts +259 -0
- package/dist/module.d.ts.map +1 -0
- package/dist/modules/forces/behavior.d.ts +78 -0
- package/dist/modules/forces/behavior.d.ts.map +1 -0
- package/dist/modules/forces/boundary.d.ts +58 -0
- package/dist/modules/forces/boundary.d.ts.map +1 -0
- package/dist/modules/forces/collisions.d.ts +34 -0
- package/dist/modules/forces/collisions.d.ts.map +1 -0
- package/dist/modules/forces/environment.d.ts +62 -0
- package/dist/modules/forces/environment.d.ts.map +1 -0
- package/dist/modules/forces/fluids.d.ts +73 -0
- package/dist/modules/forces/fluids.d.ts.map +1 -0
- package/dist/modules/forces/grab.d.ts +56 -0
- package/dist/modules/forces/grab.d.ts.map +1 -0
- package/dist/modules/forces/interaction.d.ts +59 -0
- package/dist/modules/forces/interaction.d.ts.map +1 -0
- package/dist/modules/forces/joints.d.ts +87 -0
- package/dist/modules/forces/joints.d.ts.map +1 -0
- package/dist/modules/forces/sensors.d.ts +81 -0
- package/dist/modules/forces/sensors.d.ts.map +1 -0
- package/dist/modules/index.d.ts +13 -0
- package/dist/modules/index.d.ts.map +1 -0
- package/dist/modules/render/lines.d.ts +55 -0
- package/dist/modules/render/lines.d.ts.map +1 -0
- package/dist/modules/render/particles.d.ts +53 -0
- package/dist/modules/render/particles.d.ts.map +1 -0
- package/dist/modules/render/trails.d.ts +36 -0
- package/dist/modules/render/trails.d.ts.map +1 -0
- package/dist/oscillators.d.ts +66 -0
- package/dist/oscillators.d.ts.map +1 -0
- package/dist/particle.d.ts +19 -0
- package/dist/particle.d.ts.map +1 -0
- package/dist/runtimes/cpu/engine.d.ts +60 -0
- package/dist/runtimes/cpu/engine.d.ts.map +1 -0
- package/dist/runtimes/cpu/spatial-grid.d.ts +56 -0
- package/dist/runtimes/cpu/spatial-grid.d.ts.map +1 -0
- package/dist/runtimes/webgpu/builders/program.d.ts +56 -0
- package/dist/runtimes/webgpu/builders/program.d.ts.map +1 -0
- package/dist/runtimes/webgpu/builders/render-pass.d.ts +26 -0
- package/dist/runtimes/webgpu/builders/render-pass.d.ts.map +1 -0
- package/dist/runtimes/webgpu/engine.d.ts +73 -0
- package/dist/runtimes/webgpu/engine.d.ts.map +1 -0
- package/dist/runtimes/webgpu/gpu-resources.d.ts +141 -0
- package/dist/runtimes/webgpu/gpu-resources.d.ts.map +1 -0
- package/dist/runtimes/webgpu/module-registry.d.ts +53 -0
- package/dist/runtimes/webgpu/module-registry.d.ts.map +1 -0
- package/dist/runtimes/webgpu/particle-store.d.ts +43 -0
- package/dist/runtimes/webgpu/particle-store.d.ts.map +1 -0
- package/dist/runtimes/webgpu/render-pipeline.d.ts +49 -0
- package/dist/runtimes/webgpu/render-pipeline.d.ts.map +1 -0
- package/dist/runtimes/webgpu/shaders.d.ts +8 -0
- package/dist/runtimes/webgpu/shaders.d.ts.map +1 -0
- package/dist/runtimes/webgpu/simulation-pipeline.d.ts +22 -0
- package/dist/runtimes/webgpu/simulation-pipeline.d.ts.map +1 -0
- package/dist/runtimes/webgpu/spacial-grid.d.ts +27 -0
- package/dist/runtimes/webgpu/spacial-grid.d.ts.map +1 -0
- package/dist/spawner.d.ts +40 -0
- package/dist/spawner.d.ts.map +1 -0
- package/dist/vector.d.ts +61 -0
- package/dist/vector.d.ts.map +1 -0
- package/dist/view.d.ts +43 -0
- package/dist/view.d.ts.map +1 -0
- 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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"}
|
package/dist/module.d.ts
ADDED
|
@@ -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":"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"}
|
|
@@ -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"}
|