tres-vfx 0.0.10 → 0.2.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 (3) hide show
  1. package/dist/index.d.ts +671 -1
  2. package/dist/index.js +1045 -1
  3. package/package.json +10 -2
package/dist/index.d.ts CHANGED
@@ -1,2 +1,672 @@
1
+ import * as vue from 'vue';
2
+ import { PropType, Ref } from 'vue';
3
+ import * as THREE from 'three/webgpu';
4
+ import * as core_vfx from 'core-vfx';
5
+ import { VFXParticleSystemOptions, FrictionConfig, FlipbookConfig, Rotation3DInput, StretchConfig, TurbulenceConfig, AttractorConfig, CollisionConfig, EmitterControllerOptions, CoreState } from 'core-vfx';
6
+ export { Appearance, AttractorConfig, AttractorType, BaseParticleProps, Blending, CollisionConfig, CurveChannel, CurveData, CurvePoint, CurveTextureResolved, CurveTextureResult, Easing, EmitterController, EmitterControllerOptions, EmitterShape, FlipbookConfig, FrictionConfig, Lighting, NormalizedParticleProps, ParticleData, Rotation3DInput, StretchConfig, TurbulenceConfig, VFXParticleSystem, VFXParticleSystemOptions, bakeCurveToArray, buildCurveTextureBin, createCombinedCurveTexture, isNonDefaultRotation, isWebGPUBackend, normalizeProps, resolveCurveTexture } from 'core-vfx';
1
7
 
2
- export { }
8
+ declare const VFXParticles: vue.DefineComponent<vue.ExtractPropTypes<{
9
+ name: {
10
+ type: StringConstructor;
11
+ default: undefined;
12
+ };
13
+ debug: {
14
+ type: BooleanConstructor;
15
+ default: boolean;
16
+ };
17
+ maxParticles: {
18
+ type: NumberConstructor;
19
+ default: number;
20
+ };
21
+ size: {
22
+ type: PropType<[number, number] | number>;
23
+ default: () => number[];
24
+ };
25
+ colorStart: {
26
+ type: PropType<string[]>;
27
+ default: () => string[];
28
+ };
29
+ colorEnd: {
30
+ type: PropType<string[] | null>;
31
+ default: null;
32
+ };
33
+ fadeSize: {
34
+ type: PropType<[number, number]>;
35
+ default: () => number[];
36
+ };
37
+ fadeSizeCurve: {
38
+ type: PropType<unknown[] | null>;
39
+ default: null;
40
+ };
41
+ fadeOpacity: {
42
+ type: PropType<[number, number]>;
43
+ default: () => number[];
44
+ };
45
+ fadeOpacityCurve: {
46
+ type: PropType<unknown[] | null>;
47
+ default: null;
48
+ };
49
+ velocityCurve: {
50
+ type: PropType<unknown[] | null>;
51
+ default: null;
52
+ };
53
+ gravity: {
54
+ type: PropType<[number, number, number]>;
55
+ default: () => number[];
56
+ };
57
+ lifetime: {
58
+ type: PropType<[number, number]>;
59
+ default: () => number[];
60
+ };
61
+ direction: {
62
+ type: PropType<VFXParticleSystemOptions["direction"]>;
63
+ default: () => number[][];
64
+ };
65
+ startPosition: {
66
+ type: PropType<VFXParticleSystemOptions["startPosition"]>;
67
+ default: () => number[][];
68
+ };
69
+ speed: {
70
+ type: PropType<[number, number] | number>;
71
+ default: () => number[];
72
+ };
73
+ friction: {
74
+ type: PropType<FrictionConfig>;
75
+ default: () => {
76
+ intensity: number;
77
+ easing: string;
78
+ };
79
+ };
80
+ appearance: {
81
+ type: PropType<string | number>;
82
+ default: "gradient";
83
+ };
84
+ alphaMap: {
85
+ type: PropType<THREE.Texture | null>;
86
+ default: null;
87
+ };
88
+ flipbook: {
89
+ type: PropType<FlipbookConfig | null>;
90
+ default: null;
91
+ };
92
+ rotation: {
93
+ type: PropType<Rotation3DInput>;
94
+ default: () => number[];
95
+ };
96
+ rotationSpeed: {
97
+ type: PropType<Rotation3DInput>;
98
+ default: () => number[];
99
+ };
100
+ rotationSpeedCurve: {
101
+ type: PropType<unknown[] | null>;
102
+ default: null;
103
+ };
104
+ geometry: {
105
+ type: PropType<THREE.BufferGeometry | null>;
106
+ default: null;
107
+ };
108
+ orientToDirection: {
109
+ type: BooleanConstructor;
110
+ default: boolean;
111
+ };
112
+ orientAxis: {
113
+ type: StringConstructor;
114
+ default: string;
115
+ };
116
+ stretchBySpeed: {
117
+ type: PropType<StretchConfig | null>;
118
+ default: null;
119
+ };
120
+ lighting: {
121
+ type: PropType<string | number>;
122
+ default: "standard";
123
+ };
124
+ shadow: {
125
+ type: BooleanConstructor;
126
+ default: boolean;
127
+ };
128
+ blending: {
129
+ type: PropType<string | number>;
130
+ default: 1;
131
+ };
132
+ intensity: {
133
+ type: NumberConstructor;
134
+ default: number;
135
+ };
136
+ position: {
137
+ type: PropType<[number, number, number]>;
138
+ default: () => number[];
139
+ };
140
+ autoStart: {
141
+ type: BooleanConstructor;
142
+ default: boolean;
143
+ };
144
+ delay: {
145
+ type: NumberConstructor;
146
+ default: number;
147
+ };
148
+ backdropNode: {
149
+ type: PropType<unknown>;
150
+ default: null;
151
+ };
152
+ opacityNode: {
153
+ type: PropType<unknown>;
154
+ default: null;
155
+ };
156
+ colorNode: {
157
+ type: PropType<unknown>;
158
+ default: null;
159
+ };
160
+ alphaTestNode: {
161
+ type: PropType<unknown>;
162
+ default: null;
163
+ };
164
+ castShadowNode: {
165
+ type: PropType<unknown>;
166
+ default: null;
167
+ };
168
+ emitCount: {
169
+ type: NumberConstructor;
170
+ default: number;
171
+ };
172
+ emitterShape: {
173
+ type: PropType<string | number>;
174
+ default: 1;
175
+ };
176
+ emitterRadius: {
177
+ type: PropType<[number, number]>;
178
+ default: () => number[];
179
+ };
180
+ emitterAngle: {
181
+ type: NumberConstructor;
182
+ default: number;
183
+ };
184
+ emitterHeight: {
185
+ type: PropType<[number, number]>;
186
+ default: () => number[];
187
+ };
188
+ emitterSurfaceOnly: {
189
+ type: BooleanConstructor;
190
+ default: boolean;
191
+ };
192
+ emitterDirection: {
193
+ type: PropType<[number, number, number]>;
194
+ default: () => number[];
195
+ };
196
+ turbulence: {
197
+ type: PropType<TurbulenceConfig | null>;
198
+ default: null;
199
+ };
200
+ attractors: {
201
+ type: PropType<AttractorConfig[] | null>;
202
+ default: null;
203
+ };
204
+ attractToCenter: {
205
+ type: BooleanConstructor;
206
+ default: boolean;
207
+ };
208
+ startPositionAsDirection: {
209
+ type: BooleanConstructor;
210
+ default: boolean;
211
+ };
212
+ softParticles: {
213
+ type: BooleanConstructor;
214
+ default: boolean;
215
+ };
216
+ softDistance: {
217
+ type: NumberConstructor;
218
+ default: number;
219
+ };
220
+ collision: {
221
+ type: PropType<CollisionConfig | null>;
222
+ default: null;
223
+ };
224
+ curveTexturePath: {
225
+ type: PropType<string | null>;
226
+ default: null;
227
+ };
228
+ depthTest: {
229
+ type: BooleanConstructor;
230
+ default: boolean;
231
+ };
232
+ renderOrder: {
233
+ type: NumberConstructor;
234
+ default: number;
235
+ };
236
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
237
+ [key: string]: any;
238
+ }> | vue.VNode<vue.RendererNode, vue.RendererElement, {
239
+ [key: string]: any;
240
+ }>[] | null, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
241
+ name: {
242
+ type: StringConstructor;
243
+ default: undefined;
244
+ };
245
+ debug: {
246
+ type: BooleanConstructor;
247
+ default: boolean;
248
+ };
249
+ maxParticles: {
250
+ type: NumberConstructor;
251
+ default: number;
252
+ };
253
+ size: {
254
+ type: PropType<[number, number] | number>;
255
+ default: () => number[];
256
+ };
257
+ colorStart: {
258
+ type: PropType<string[]>;
259
+ default: () => string[];
260
+ };
261
+ colorEnd: {
262
+ type: PropType<string[] | null>;
263
+ default: null;
264
+ };
265
+ fadeSize: {
266
+ type: PropType<[number, number]>;
267
+ default: () => number[];
268
+ };
269
+ fadeSizeCurve: {
270
+ type: PropType<unknown[] | null>;
271
+ default: null;
272
+ };
273
+ fadeOpacity: {
274
+ type: PropType<[number, number]>;
275
+ default: () => number[];
276
+ };
277
+ fadeOpacityCurve: {
278
+ type: PropType<unknown[] | null>;
279
+ default: null;
280
+ };
281
+ velocityCurve: {
282
+ type: PropType<unknown[] | null>;
283
+ default: null;
284
+ };
285
+ gravity: {
286
+ type: PropType<[number, number, number]>;
287
+ default: () => number[];
288
+ };
289
+ lifetime: {
290
+ type: PropType<[number, number]>;
291
+ default: () => number[];
292
+ };
293
+ direction: {
294
+ type: PropType<VFXParticleSystemOptions["direction"]>;
295
+ default: () => number[][];
296
+ };
297
+ startPosition: {
298
+ type: PropType<VFXParticleSystemOptions["startPosition"]>;
299
+ default: () => number[][];
300
+ };
301
+ speed: {
302
+ type: PropType<[number, number] | number>;
303
+ default: () => number[];
304
+ };
305
+ friction: {
306
+ type: PropType<FrictionConfig>;
307
+ default: () => {
308
+ intensity: number;
309
+ easing: string;
310
+ };
311
+ };
312
+ appearance: {
313
+ type: PropType<string | number>;
314
+ default: "gradient";
315
+ };
316
+ alphaMap: {
317
+ type: PropType<THREE.Texture | null>;
318
+ default: null;
319
+ };
320
+ flipbook: {
321
+ type: PropType<FlipbookConfig | null>;
322
+ default: null;
323
+ };
324
+ rotation: {
325
+ type: PropType<Rotation3DInput>;
326
+ default: () => number[];
327
+ };
328
+ rotationSpeed: {
329
+ type: PropType<Rotation3DInput>;
330
+ default: () => number[];
331
+ };
332
+ rotationSpeedCurve: {
333
+ type: PropType<unknown[] | null>;
334
+ default: null;
335
+ };
336
+ geometry: {
337
+ type: PropType<THREE.BufferGeometry | null>;
338
+ default: null;
339
+ };
340
+ orientToDirection: {
341
+ type: BooleanConstructor;
342
+ default: boolean;
343
+ };
344
+ orientAxis: {
345
+ type: StringConstructor;
346
+ default: string;
347
+ };
348
+ stretchBySpeed: {
349
+ type: PropType<StretchConfig | null>;
350
+ default: null;
351
+ };
352
+ lighting: {
353
+ type: PropType<string | number>;
354
+ default: "standard";
355
+ };
356
+ shadow: {
357
+ type: BooleanConstructor;
358
+ default: boolean;
359
+ };
360
+ blending: {
361
+ type: PropType<string | number>;
362
+ default: 1;
363
+ };
364
+ intensity: {
365
+ type: NumberConstructor;
366
+ default: number;
367
+ };
368
+ position: {
369
+ type: PropType<[number, number, number]>;
370
+ default: () => number[];
371
+ };
372
+ autoStart: {
373
+ type: BooleanConstructor;
374
+ default: boolean;
375
+ };
376
+ delay: {
377
+ type: NumberConstructor;
378
+ default: number;
379
+ };
380
+ backdropNode: {
381
+ type: PropType<unknown>;
382
+ default: null;
383
+ };
384
+ opacityNode: {
385
+ type: PropType<unknown>;
386
+ default: null;
387
+ };
388
+ colorNode: {
389
+ type: PropType<unknown>;
390
+ default: null;
391
+ };
392
+ alphaTestNode: {
393
+ type: PropType<unknown>;
394
+ default: null;
395
+ };
396
+ castShadowNode: {
397
+ type: PropType<unknown>;
398
+ default: null;
399
+ };
400
+ emitCount: {
401
+ type: NumberConstructor;
402
+ default: number;
403
+ };
404
+ emitterShape: {
405
+ type: PropType<string | number>;
406
+ default: 1;
407
+ };
408
+ emitterRadius: {
409
+ type: PropType<[number, number]>;
410
+ default: () => number[];
411
+ };
412
+ emitterAngle: {
413
+ type: NumberConstructor;
414
+ default: number;
415
+ };
416
+ emitterHeight: {
417
+ type: PropType<[number, number]>;
418
+ default: () => number[];
419
+ };
420
+ emitterSurfaceOnly: {
421
+ type: BooleanConstructor;
422
+ default: boolean;
423
+ };
424
+ emitterDirection: {
425
+ type: PropType<[number, number, number]>;
426
+ default: () => number[];
427
+ };
428
+ turbulence: {
429
+ type: PropType<TurbulenceConfig | null>;
430
+ default: null;
431
+ };
432
+ attractors: {
433
+ type: PropType<AttractorConfig[] | null>;
434
+ default: null;
435
+ };
436
+ attractToCenter: {
437
+ type: BooleanConstructor;
438
+ default: boolean;
439
+ };
440
+ startPositionAsDirection: {
441
+ type: BooleanConstructor;
442
+ default: boolean;
443
+ };
444
+ softParticles: {
445
+ type: BooleanConstructor;
446
+ default: boolean;
447
+ };
448
+ softDistance: {
449
+ type: NumberConstructor;
450
+ default: number;
451
+ };
452
+ collision: {
453
+ type: PropType<CollisionConfig | null>;
454
+ default: null;
455
+ };
456
+ curveTexturePath: {
457
+ type: PropType<string | null>;
458
+ default: null;
459
+ };
460
+ depthTest: {
461
+ type: BooleanConstructor;
462
+ default: boolean;
463
+ };
464
+ renderOrder: {
465
+ type: NumberConstructor;
466
+ default: number;
467
+ };
468
+ }>> & Readonly<{}>, {
469
+ direction: Rotation3DInput;
470
+ startPosition: Rotation3DInput;
471
+ name: string;
472
+ debug: boolean;
473
+ maxParticles: number;
474
+ size: number | [number, number];
475
+ colorStart: string[];
476
+ colorEnd: string[] | null;
477
+ fadeSize: [number, number];
478
+ fadeSizeCurve: unknown[] | null;
479
+ fadeOpacity: [number, number];
480
+ fadeOpacityCurve: unknown[] | null;
481
+ velocityCurve: unknown[] | null;
482
+ gravity: [number, number, number];
483
+ lifetime: [number, number];
484
+ speed: number | [number, number];
485
+ friction: FrictionConfig;
486
+ appearance: string | number;
487
+ alphaMap: THREE.Texture<unknown> | null;
488
+ flipbook: FlipbookConfig;
489
+ rotation: Rotation3DInput;
490
+ rotationSpeed: Rotation3DInput;
491
+ rotationSpeedCurve: unknown[] | null;
492
+ geometry: THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap> | null;
493
+ orientToDirection: boolean;
494
+ orientAxis: string;
495
+ stretchBySpeed: StretchConfig;
496
+ lighting: string | number;
497
+ shadow: boolean;
498
+ blending: string | number;
499
+ intensity: number;
500
+ position: [number, number, number];
501
+ autoStart: boolean;
502
+ delay: number;
503
+ backdropNode: null;
504
+ opacityNode: null;
505
+ colorNode: null;
506
+ alphaTestNode: null;
507
+ castShadowNode: null;
508
+ emitCount: number;
509
+ emitterShape: string | number;
510
+ emitterRadius: [number, number];
511
+ emitterAngle: number;
512
+ emitterHeight: [number, number];
513
+ emitterSurfaceOnly: boolean;
514
+ emitterDirection: [number, number, number];
515
+ turbulence: TurbulenceConfig;
516
+ attractors: AttractorConfig[] | null;
517
+ attractToCenter: boolean;
518
+ startPositionAsDirection: boolean;
519
+ softParticles: boolean;
520
+ softDistance: number;
521
+ collision: CollisionConfig;
522
+ curveTexturePath: string | null;
523
+ depthTest: boolean;
524
+ renderOrder: number;
525
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
526
+ type VFXParticlesProps = InstanceType<typeof VFXParticles>['$props'];
527
+
528
+ declare const VFXEmitter: vue.DefineComponent<vue.ExtractPropTypes<{
529
+ name: {
530
+ type: StringConstructor;
531
+ default: undefined;
532
+ };
533
+ particlesRef: {
534
+ type: ObjectConstructor;
535
+ default: undefined;
536
+ };
537
+ position: {
538
+ type: PropType<[number, number, number]>;
539
+ default: () => number[];
540
+ };
541
+ emitCount: {
542
+ type: NumberConstructor;
543
+ default: number;
544
+ };
545
+ delay: {
546
+ type: NumberConstructor;
547
+ default: number;
548
+ };
549
+ autoStart: {
550
+ type: BooleanConstructor;
551
+ default: boolean;
552
+ };
553
+ loop: {
554
+ type: BooleanConstructor;
555
+ default: boolean;
556
+ };
557
+ localDirection: {
558
+ type: BooleanConstructor;
559
+ default: boolean;
560
+ };
561
+ direction: {
562
+ type: PropType<EmitterControllerOptions["direction"]>;
563
+ default: undefined;
564
+ };
565
+ overrides: {
566
+ type: PropType<Record<string, unknown> | null>;
567
+ default: null;
568
+ };
569
+ onEmit: {
570
+ type: PropType<EmitterControllerOptions["onEmit"]>;
571
+ default: undefined;
572
+ };
573
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
574
+ [key: string]: any;
575
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
576
+ name: {
577
+ type: StringConstructor;
578
+ default: undefined;
579
+ };
580
+ particlesRef: {
581
+ type: ObjectConstructor;
582
+ default: undefined;
583
+ };
584
+ position: {
585
+ type: PropType<[number, number, number]>;
586
+ default: () => number[];
587
+ };
588
+ emitCount: {
589
+ type: NumberConstructor;
590
+ default: number;
591
+ };
592
+ delay: {
593
+ type: NumberConstructor;
594
+ default: number;
595
+ };
596
+ autoStart: {
597
+ type: BooleanConstructor;
598
+ default: boolean;
599
+ };
600
+ loop: {
601
+ type: BooleanConstructor;
602
+ default: boolean;
603
+ };
604
+ localDirection: {
605
+ type: BooleanConstructor;
606
+ default: boolean;
607
+ };
608
+ direction: {
609
+ type: PropType<EmitterControllerOptions["direction"]>;
610
+ default: undefined;
611
+ };
612
+ overrides: {
613
+ type: PropType<Record<string, unknown> | null>;
614
+ default: null;
615
+ };
616
+ onEmit: {
617
+ type: PropType<EmitterControllerOptions["onEmit"]>;
618
+ default: undefined;
619
+ };
620
+ }>> & Readonly<{}>, {
621
+ direction: [[number, number], [number, number], [number, number]] | undefined;
622
+ name: string;
623
+ position: [number, number, number];
624
+ autoStart: boolean;
625
+ delay: number;
626
+ emitCount: number;
627
+ onEmit: ((params: {
628
+ position: [number, number, number] | number[];
629
+ count: number;
630
+ direction: any;
631
+ }) => void) | undefined;
632
+ particlesRef: Record<string, any>;
633
+ loop: boolean;
634
+ localDirection: boolean;
635
+ overrides: Record<string, unknown> | null;
636
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
637
+ /**
638
+ * Composable for programmatic emitter control
639
+ *
640
+ * Usage:
641
+ * const { emit, burst, start, stop } = useVFXEmitter("sparks");
642
+ *
643
+ * // Emit at a position
644
+ * emit([1, 2, 3], 50);
645
+ *
646
+ * // Burst with overrides
647
+ * burst([0, 0, 0], 100, { colorStart: ["#ff0000"] });
648
+ */
649
+ declare function useVFXEmitter(name: string): {
650
+ emit: (position?: [number, number, number], count?: number, overrides?: Record<string, unknown> | null) => boolean;
651
+ burst: (position?: [number, number, number], count?: number, overrides?: Record<string, unknown> | null) => boolean;
652
+ start: () => boolean;
653
+ stop: () => boolean;
654
+ clear: () => boolean;
655
+ isEmitting: () => boolean;
656
+ getUniforms: () => Record<string, unknown> | null;
657
+ getParticles: () => core_vfx.ParticleSystemRef | null;
658
+ };
659
+ type VFXEmitterProps = InstanceType<typeof VFXEmitter>['$props'];
660
+
661
+ declare function useVFXStore(): Ref<CoreState>;
662
+ declare function useVFXStore<T>(selector: (state: CoreState) => T): Ref<T>;
663
+ declare namespace useVFXStore {
664
+ var getState: () => CoreState;
665
+ var setState: {
666
+ (partial: CoreState | Partial<CoreState> | ((state: CoreState) => CoreState | Partial<CoreState>), replace?: false): void;
667
+ (state: CoreState | ((state: CoreState) => CoreState), replace: true): void;
668
+ };
669
+ var subscribe: (listener: (state: CoreState, prevState: CoreState) => void) => () => void;
670
+ }
671
+
672
+ export { VFXEmitter, type VFXEmitterProps, VFXParticles, type VFXParticlesProps, useVFXEmitter, useVFXStore };