@cazala/party 0.1.0-next.45.433a20a → 0.1.0-next.48.389a3a7

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 CHANGED
@@ -10,8 +10,9 @@ 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
- - **Session Management**: Export/import complete simulation configurations
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
+ - **Spawner Utility**: Generate particle shapes, including text
15
16
 
16
17
  ## Installation
17
18
 
@@ -82,12 +83,11 @@ await engine.initialize();
82
83
  // Add particles
83
84
  for (let i = 0; i < 100; i++) {
84
85
  engine.addParticle({
85
- x: Math.random() * canvas.width,
86
- y: Math.random() * canvas.height,
87
- vx: (Math.random() - 0.5) * 4,
88
- vy: (Math.random() - 0.5) * 4,
86
+ position: { x: Math.random() * canvas.width, y: Math.random() * canvas.height },
87
+ velocity: { x: (Math.random() - 0.5) * 4, y: (Math.random() - 0.5) * 4 },
89
88
  mass: 1 + Math.random() * 2,
90
89
  size: 3 + Math.random() * 7,
90
+ color: { r: 1, g: 1, b: 1, a: 1 },
91
91
  });
92
92
  }
93
93
 
@@ -111,8 +111,8 @@ const engine = new Engine({
111
111
  constrainIterations: 50, // Constraint solver iterations
112
112
  cellSize: 32, // Spatial grid cell size
113
113
  maxNeighbors: 128, // Max neighbors per particle
114
- maxParticles: 10000, // Particle capacity
115
- clearColor: "#000000", // Background color
114
+ maxParticles: 10000, // WebGPU buffer allocation + effective sim/render cap
115
+ clearColor: { r: 0, g: 0, b: 0, a: 1 }, // Background color
116
116
  });
117
117
 
118
118
  // Lifecycle
@@ -120,7 +120,7 @@ await engine.initialize();
120
120
  engine.play();
121
121
  engine.pause();
122
122
  engine.stop();
123
- engine.destroy();
123
+ await engine.destroy();
124
124
 
125
125
  // State
126
126
  const isPlaying = engine.isPlaying();
@@ -128,7 +128,13 @@ const fps = engine.getFPS();
128
128
  const count = engine.getCount();
129
129
 
130
130
  // Particles
131
- engine.addParticle({ x, y, vx, vy, mass, size });
131
+ engine.addParticle({
132
+ position: { x, y },
133
+ velocity: { x: vx, y: vy },
134
+ mass,
135
+ size,
136
+ color: { r: 1, g: 1, b: 1, a: 1 },
137
+ });
132
138
  engine.setParticles([...particles]);
133
139
  const particles = await engine.getParticles();
134
140
  engine.clear();
@@ -163,11 +169,11 @@ Particles are simple data structures with physics properties:
163
169
 
164
170
  ```typescript
165
171
  const particle = {
166
- x: 100, y: 100, // Position
167
- vx: 1, vy: -2, // Velocity
172
+ position: { x: 100, y: 100 }, // Position
173
+ velocity: { x: 1, y: -2 }, // Velocity
168
174
  mass: 2.5, // Mass (negative = pinned)
169
175
  size: 8, // Visual size
170
- color: 0xff6b35, // Color (24-bit RGB)
176
+ color: { r: 1, g: 0.42, b: 0.21, a: 1 }, // Color (0..1 floats)
171
177
  };
172
178
 
173
179
  // Bulk operations (preferred for performance)
@@ -184,6 +190,36 @@ engine.unpinParticles([0, 1, 2]);
184
190
  engine.unpinAll();
185
191
  ```
186
192
 
193
+ ### Spawner
194
+
195
+ Generate particle arrays from common shapes (including text) using `Spawner`:
196
+
197
+ ```typescript
198
+ import { Spawner } from "@cazala/party";
199
+
200
+ const spawner = new Spawner();
201
+ const particles = spawner.initParticles({
202
+ count: 5000,
203
+ shape: "text",
204
+ center: { x: 0, y: 0 },
205
+ position: { x: 0, y: 0 },
206
+ align: { horizontal: "center", vertical: "center" },
207
+ text: "Party",
208
+ font: "sans-serif",
209
+ textSize: 80,
210
+ size: 3,
211
+ mass: 1,
212
+ colors: ["#ffffff"],
213
+ });
214
+
215
+ engine.setParticles(particles);
216
+ ```
217
+
218
+ Notes:
219
+
220
+ - `size` controls particle radius; `textSize` is the font size used to rasterize text.
221
+ - Playground font options: `sans-serif`, `serif`, `monospace`.
222
+
187
223
  ### Modules
188
224
 
189
225
  Modules are pluggable components that contribute to simulation or rendering:
@@ -590,7 +626,13 @@ Full TypeScript support with comprehensive type definitions:
590
626
  import type { IEngine, IParticle, Module } from "@cazala/party";
591
627
 
592
628
  const engine: IEngine = new Engine({ /* ... */ });
593
- const particle: IParticle = { x: 0, y: 0, vx: 1, vy: 1, mass: 1, size: 5 };
629
+ const particle: IParticle = {
630
+ position: { x: 0, y: 0 },
631
+ velocity: { x: 1, y: 1 },
632
+ mass: 1,
633
+ size: 5,
634
+ color: { r: 1, g: 1, b: 1, a: 1 },
635
+ };
594
636
  ```
595
637
 
596
638
  ## 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): void;
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>;
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}