@cazala/party 0.2.0 → 0.3.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/README.md +24 -13
- package/dist/engine.d.ts +8 -2
- package/dist/engine.d.ts.map +1 -1
- package/dist/index.js +471 -61
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +45 -2
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/modules/forces/boundary.d.ts.map +1 -1
- package/dist/modules/forces/fluids.d.ts.map +1 -1
- package/dist/runtimes/cpu/engine.d.ts +9 -2
- package/dist/runtimes/cpu/engine.d.ts.map +1 -1
- package/dist/runtimes/webgpu/engine.d.ts +9 -2
- package/dist/runtimes/webgpu/engine.d.ts.map +1 -1
- package/dist/runtimes/webgpu/gpu-resources.d.ts +5 -0
- package/dist/runtimes/webgpu/gpu-resources.d.ts.map +1 -1
- package/dist/runtimes/webgpu/local-query.d.ts +26 -0
- package/dist/runtimes/webgpu/local-query.d.ts.map +1 -0
- package/dist/runtimes/webgpu/particle-store.d.ts +12 -1
- package/dist/runtimes/webgpu/particle-store.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ A high-performance TypeScript particle physics engine with dual runtime support
|
|
|
10
10
|
- **Spatial Grid Optimization**: Efficient O(1) neighbor queries for collision detection
|
|
11
11
|
- **Real-time Oscillators**: Animate any module parameter with configurable frequency and bounds
|
|
12
12
|
- **Advanced Rendering**: Trails, particle instancing, line rendering with multiple color modes
|
|
13
|
-
- **
|
|
13
|
+
- **Export/Import Presets**: Export/import module settings (inputs + enabled state)
|
|
14
14
|
- **Cross-platform**: Works in all modern browsers with automatic feature detection
|
|
15
15
|
|
|
16
16
|
## Installation
|
|
@@ -82,12 +82,11 @@ await engine.initialize();
|
|
|
82
82
|
// Add particles
|
|
83
83
|
for (let i = 0; i < 100; i++) {
|
|
84
84
|
engine.addParticle({
|
|
85
|
-
x: Math.random() * canvas.width,
|
|
86
|
-
y: Math.random() *
|
|
87
|
-
vx: (Math.random() - 0.5) * 4,
|
|
88
|
-
vy: (Math.random() - 0.5) * 4,
|
|
85
|
+
position: { x: Math.random() * canvas.width, y: Math.random() * canvas.height },
|
|
86
|
+
velocity: { x: (Math.random() - 0.5) * 4, y: (Math.random() - 0.5) * 4 },
|
|
89
87
|
mass: 1 + Math.random() * 2,
|
|
90
88
|
size: 3 + Math.random() * 7,
|
|
89
|
+
color: { r: 1, g: 1, b: 1, a: 1 },
|
|
91
90
|
});
|
|
92
91
|
}
|
|
93
92
|
|
|
@@ -111,8 +110,8 @@ const engine = new Engine({
|
|
|
111
110
|
constrainIterations: 50, // Constraint solver iterations
|
|
112
111
|
cellSize: 32, // Spatial grid cell size
|
|
113
112
|
maxNeighbors: 128, // Max neighbors per particle
|
|
114
|
-
maxParticles: 10000, //
|
|
115
|
-
clearColor:
|
|
113
|
+
maxParticles: 10000, // WebGPU buffer allocation + effective sim/render cap
|
|
114
|
+
clearColor: { r: 0, g: 0, b: 0, a: 1 }, // Background color
|
|
116
115
|
});
|
|
117
116
|
|
|
118
117
|
// Lifecycle
|
|
@@ -120,7 +119,7 @@ await engine.initialize();
|
|
|
120
119
|
engine.play();
|
|
121
120
|
engine.pause();
|
|
122
121
|
engine.stop();
|
|
123
|
-
engine.destroy();
|
|
122
|
+
await engine.destroy();
|
|
124
123
|
|
|
125
124
|
// State
|
|
126
125
|
const isPlaying = engine.isPlaying();
|
|
@@ -128,7 +127,13 @@ const fps = engine.getFPS();
|
|
|
128
127
|
const count = engine.getCount();
|
|
129
128
|
|
|
130
129
|
// Particles
|
|
131
|
-
engine.addParticle({
|
|
130
|
+
engine.addParticle({
|
|
131
|
+
position: { x, y },
|
|
132
|
+
velocity: { x: vx, y: vy },
|
|
133
|
+
mass,
|
|
134
|
+
size,
|
|
135
|
+
color: { r: 1, g: 1, b: 1, a: 1 },
|
|
136
|
+
});
|
|
132
137
|
engine.setParticles([...particles]);
|
|
133
138
|
const particles = await engine.getParticles();
|
|
134
139
|
engine.clear();
|
|
@@ -163,11 +168,11 @@ Particles are simple data structures with physics properties:
|
|
|
163
168
|
|
|
164
169
|
```typescript
|
|
165
170
|
const particle = {
|
|
166
|
-
x: 100, y: 100,
|
|
167
|
-
|
|
171
|
+
position: { x: 100, y: 100 }, // Position
|
|
172
|
+
velocity: { x: 1, y: -2 }, // Velocity
|
|
168
173
|
mass: 2.5, // Mass (negative = pinned)
|
|
169
174
|
size: 8, // Visual size
|
|
170
|
-
color:
|
|
175
|
+
color: { r: 1, g: 0.42, b: 0.21, a: 1 }, // Color (0..1 floats)
|
|
171
176
|
};
|
|
172
177
|
|
|
173
178
|
// Bulk operations (preferred for performance)
|
|
@@ -590,7 +595,13 @@ Full TypeScript support with comprehensive type definitions:
|
|
|
590
595
|
import type { IEngine, IParticle, Module } from "@cazala/party";
|
|
591
596
|
|
|
592
597
|
const engine: IEngine = new Engine({ /* ... */ });
|
|
593
|
-
const particle: IParticle = {
|
|
598
|
+
const particle: IParticle = {
|
|
599
|
+
position: { x: 0, y: 0 },
|
|
600
|
+
velocity: { x: 1, y: 1 },
|
|
601
|
+
mass: 1,
|
|
602
|
+
size: 5,
|
|
603
|
+
color: { r: 1, g: 1, b: 1, a: 1 },
|
|
604
|
+
};
|
|
594
605
|
```
|
|
595
606
|
|
|
596
607
|
## License
|
package/dist/engine.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IEngine, IParticle } from "./interfaces";
|
|
1
|
+
import { IEngine, IParticle, GetParticlesInRadiusOptions, GetParticlesInRadiusResult } from "./interfaces";
|
|
2
2
|
import { Module } from "./module";
|
|
3
3
|
export type EngineOptions = {
|
|
4
4
|
canvas: HTMLCanvasElement;
|
|
@@ -76,9 +76,15 @@ export declare class Engine implements IEngine {
|
|
|
76
76
|
getOscillatorsElapsedSeconds(): number;
|
|
77
77
|
setOscillatorsElapsedSeconds(seconds: number): void;
|
|
78
78
|
setParticles(p: IParticle[]): void;
|
|
79
|
-
addParticle(p: IParticle):
|
|
79
|
+
addParticle(p: IParticle): number;
|
|
80
|
+
setParticle(index: number, p: IParticle): void;
|
|
81
|
+
setParticleMass(index: number, mass: number): void;
|
|
80
82
|
getParticles(): Promise<IParticle[]>;
|
|
81
83
|
getParticle(index: number): Promise<IParticle>;
|
|
84
|
+
getParticlesInRadius(center: {
|
|
85
|
+
x: number;
|
|
86
|
+
y: number;
|
|
87
|
+
}, radius: number, opts?: GetParticlesInRadiusOptions): Promise<GetParticlesInRadiusResult>;
|
|
82
88
|
pinParticles(indexes: number[]): Promise<void>;
|
|
83
89
|
unpinParticles(indexes: number[]): Promise<void>;
|
|
84
90
|
unpinAll(): Promise<void>;
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|