tres-vfx 0.1.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/dist/index.d.ts CHANGED
@@ -1,2 +1,670 @@
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
+ }> | null, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
239
+ name: {
240
+ type: StringConstructor;
241
+ default: undefined;
242
+ };
243
+ debug: {
244
+ type: BooleanConstructor;
245
+ default: boolean;
246
+ };
247
+ maxParticles: {
248
+ type: NumberConstructor;
249
+ default: number;
250
+ };
251
+ size: {
252
+ type: PropType<[number, number] | number>;
253
+ default: () => number[];
254
+ };
255
+ colorStart: {
256
+ type: PropType<string[]>;
257
+ default: () => string[];
258
+ };
259
+ colorEnd: {
260
+ type: PropType<string[] | null>;
261
+ default: null;
262
+ };
263
+ fadeSize: {
264
+ type: PropType<[number, number]>;
265
+ default: () => number[];
266
+ };
267
+ fadeSizeCurve: {
268
+ type: PropType<unknown[] | null>;
269
+ default: null;
270
+ };
271
+ fadeOpacity: {
272
+ type: PropType<[number, number]>;
273
+ default: () => number[];
274
+ };
275
+ fadeOpacityCurve: {
276
+ type: PropType<unknown[] | null>;
277
+ default: null;
278
+ };
279
+ velocityCurve: {
280
+ type: PropType<unknown[] | null>;
281
+ default: null;
282
+ };
283
+ gravity: {
284
+ type: PropType<[number, number, number]>;
285
+ default: () => number[];
286
+ };
287
+ lifetime: {
288
+ type: PropType<[number, number]>;
289
+ default: () => number[];
290
+ };
291
+ direction: {
292
+ type: PropType<VFXParticleSystemOptions["direction"]>;
293
+ default: () => number[][];
294
+ };
295
+ startPosition: {
296
+ type: PropType<VFXParticleSystemOptions["startPosition"]>;
297
+ default: () => number[][];
298
+ };
299
+ speed: {
300
+ type: PropType<[number, number] | number>;
301
+ default: () => number[];
302
+ };
303
+ friction: {
304
+ type: PropType<FrictionConfig>;
305
+ default: () => {
306
+ intensity: number;
307
+ easing: string;
308
+ };
309
+ };
310
+ appearance: {
311
+ type: PropType<string | number>;
312
+ default: "gradient";
313
+ };
314
+ alphaMap: {
315
+ type: PropType<THREE.Texture | null>;
316
+ default: null;
317
+ };
318
+ flipbook: {
319
+ type: PropType<FlipbookConfig | null>;
320
+ default: null;
321
+ };
322
+ rotation: {
323
+ type: PropType<Rotation3DInput>;
324
+ default: () => number[];
325
+ };
326
+ rotationSpeed: {
327
+ type: PropType<Rotation3DInput>;
328
+ default: () => number[];
329
+ };
330
+ rotationSpeedCurve: {
331
+ type: PropType<unknown[] | null>;
332
+ default: null;
333
+ };
334
+ geometry: {
335
+ type: PropType<THREE.BufferGeometry | null>;
336
+ default: null;
337
+ };
338
+ orientToDirection: {
339
+ type: BooleanConstructor;
340
+ default: boolean;
341
+ };
342
+ orientAxis: {
343
+ type: StringConstructor;
344
+ default: string;
345
+ };
346
+ stretchBySpeed: {
347
+ type: PropType<StretchConfig | null>;
348
+ default: null;
349
+ };
350
+ lighting: {
351
+ type: PropType<string | number>;
352
+ default: "standard";
353
+ };
354
+ shadow: {
355
+ type: BooleanConstructor;
356
+ default: boolean;
357
+ };
358
+ blending: {
359
+ type: PropType<string | number>;
360
+ default: 1;
361
+ };
362
+ intensity: {
363
+ type: NumberConstructor;
364
+ default: number;
365
+ };
366
+ position: {
367
+ type: PropType<[number, number, number]>;
368
+ default: () => number[];
369
+ };
370
+ autoStart: {
371
+ type: BooleanConstructor;
372
+ default: boolean;
373
+ };
374
+ delay: {
375
+ type: NumberConstructor;
376
+ default: number;
377
+ };
378
+ backdropNode: {
379
+ type: PropType<unknown>;
380
+ default: null;
381
+ };
382
+ opacityNode: {
383
+ type: PropType<unknown>;
384
+ default: null;
385
+ };
386
+ colorNode: {
387
+ type: PropType<unknown>;
388
+ default: null;
389
+ };
390
+ alphaTestNode: {
391
+ type: PropType<unknown>;
392
+ default: null;
393
+ };
394
+ castShadowNode: {
395
+ type: PropType<unknown>;
396
+ default: null;
397
+ };
398
+ emitCount: {
399
+ type: NumberConstructor;
400
+ default: number;
401
+ };
402
+ emitterShape: {
403
+ type: PropType<string | number>;
404
+ default: 1;
405
+ };
406
+ emitterRadius: {
407
+ type: PropType<[number, number]>;
408
+ default: () => number[];
409
+ };
410
+ emitterAngle: {
411
+ type: NumberConstructor;
412
+ default: number;
413
+ };
414
+ emitterHeight: {
415
+ type: PropType<[number, number]>;
416
+ default: () => number[];
417
+ };
418
+ emitterSurfaceOnly: {
419
+ type: BooleanConstructor;
420
+ default: boolean;
421
+ };
422
+ emitterDirection: {
423
+ type: PropType<[number, number, number]>;
424
+ default: () => number[];
425
+ };
426
+ turbulence: {
427
+ type: PropType<TurbulenceConfig | null>;
428
+ default: null;
429
+ };
430
+ attractors: {
431
+ type: PropType<AttractorConfig[] | null>;
432
+ default: null;
433
+ };
434
+ attractToCenter: {
435
+ type: BooleanConstructor;
436
+ default: boolean;
437
+ };
438
+ startPositionAsDirection: {
439
+ type: BooleanConstructor;
440
+ default: boolean;
441
+ };
442
+ softParticles: {
443
+ type: BooleanConstructor;
444
+ default: boolean;
445
+ };
446
+ softDistance: {
447
+ type: NumberConstructor;
448
+ default: number;
449
+ };
450
+ collision: {
451
+ type: PropType<CollisionConfig | null>;
452
+ default: null;
453
+ };
454
+ curveTexturePath: {
455
+ type: PropType<string | null>;
456
+ default: null;
457
+ };
458
+ depthTest: {
459
+ type: BooleanConstructor;
460
+ default: boolean;
461
+ };
462
+ renderOrder: {
463
+ type: NumberConstructor;
464
+ default: number;
465
+ };
466
+ }>> & Readonly<{}>, {
467
+ direction: Rotation3DInput;
468
+ startPosition: Rotation3DInput;
469
+ name: string;
470
+ debug: boolean;
471
+ maxParticles: number;
472
+ size: number | [number, number];
473
+ colorStart: string[];
474
+ colorEnd: string[] | null;
475
+ fadeSize: [number, number];
476
+ fadeSizeCurve: unknown[] | null;
477
+ fadeOpacity: [number, number];
478
+ fadeOpacityCurve: unknown[] | null;
479
+ velocityCurve: unknown[] | null;
480
+ gravity: [number, number, number];
481
+ lifetime: [number, number];
482
+ speed: number | [number, number];
483
+ friction: FrictionConfig;
484
+ appearance: string | number;
485
+ alphaMap: THREE.Texture<unknown> | null;
486
+ flipbook: FlipbookConfig;
487
+ rotation: Rotation3DInput;
488
+ rotationSpeed: Rotation3DInput;
489
+ rotationSpeedCurve: unknown[] | null;
490
+ geometry: THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap> | null;
491
+ orientToDirection: boolean;
492
+ orientAxis: string;
493
+ stretchBySpeed: StretchConfig;
494
+ lighting: string | number;
495
+ shadow: boolean;
496
+ blending: string | number;
497
+ intensity: number;
498
+ position: [number, number, number];
499
+ autoStart: boolean;
500
+ delay: number;
501
+ backdropNode: null;
502
+ opacityNode: null;
503
+ colorNode: null;
504
+ alphaTestNode: null;
505
+ castShadowNode: null;
506
+ emitCount: number;
507
+ emitterShape: string | number;
508
+ emitterRadius: [number, number];
509
+ emitterAngle: number;
510
+ emitterHeight: [number, number];
511
+ emitterSurfaceOnly: boolean;
512
+ emitterDirection: [number, number, number];
513
+ turbulence: TurbulenceConfig;
514
+ attractors: AttractorConfig[] | null;
515
+ attractToCenter: boolean;
516
+ startPositionAsDirection: boolean;
517
+ softParticles: boolean;
518
+ softDistance: number;
519
+ collision: CollisionConfig;
520
+ curveTexturePath: string | null;
521
+ depthTest: boolean;
522
+ renderOrder: number;
523
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
524
+ type VFXParticlesProps = InstanceType<typeof VFXParticles>['$props'];
525
+
526
+ declare const VFXEmitter: vue.DefineComponent<vue.ExtractPropTypes<{
527
+ name: {
528
+ type: StringConstructor;
529
+ default: undefined;
530
+ };
531
+ particlesRef: {
532
+ type: ObjectConstructor;
533
+ default: undefined;
534
+ };
535
+ position: {
536
+ type: PropType<[number, number, number]>;
537
+ default: () => number[];
538
+ };
539
+ emitCount: {
540
+ type: NumberConstructor;
541
+ default: number;
542
+ };
543
+ delay: {
544
+ type: NumberConstructor;
545
+ default: number;
546
+ };
547
+ autoStart: {
548
+ type: BooleanConstructor;
549
+ default: boolean;
550
+ };
551
+ loop: {
552
+ type: BooleanConstructor;
553
+ default: boolean;
554
+ };
555
+ localDirection: {
556
+ type: BooleanConstructor;
557
+ default: boolean;
558
+ };
559
+ direction: {
560
+ type: PropType<EmitterControllerOptions["direction"]>;
561
+ default: undefined;
562
+ };
563
+ overrides: {
564
+ type: PropType<Record<string, unknown> | null>;
565
+ default: null;
566
+ };
567
+ onEmit: {
568
+ type: PropType<EmitterControllerOptions["onEmit"]>;
569
+ default: undefined;
570
+ };
571
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
572
+ [key: string]: any;
573
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
574
+ name: {
575
+ type: StringConstructor;
576
+ default: undefined;
577
+ };
578
+ particlesRef: {
579
+ type: ObjectConstructor;
580
+ default: undefined;
581
+ };
582
+ position: {
583
+ type: PropType<[number, number, number]>;
584
+ default: () => number[];
585
+ };
586
+ emitCount: {
587
+ type: NumberConstructor;
588
+ default: number;
589
+ };
590
+ delay: {
591
+ type: NumberConstructor;
592
+ default: number;
593
+ };
594
+ autoStart: {
595
+ type: BooleanConstructor;
596
+ default: boolean;
597
+ };
598
+ loop: {
599
+ type: BooleanConstructor;
600
+ default: boolean;
601
+ };
602
+ localDirection: {
603
+ type: BooleanConstructor;
604
+ default: boolean;
605
+ };
606
+ direction: {
607
+ type: PropType<EmitterControllerOptions["direction"]>;
608
+ default: undefined;
609
+ };
610
+ overrides: {
611
+ type: PropType<Record<string, unknown> | null>;
612
+ default: null;
613
+ };
614
+ onEmit: {
615
+ type: PropType<EmitterControllerOptions["onEmit"]>;
616
+ default: undefined;
617
+ };
618
+ }>> & Readonly<{}>, {
619
+ direction: [[number, number], [number, number], [number, number]] | undefined;
620
+ name: string;
621
+ position: [number, number, number];
622
+ autoStart: boolean;
623
+ delay: number;
624
+ emitCount: number;
625
+ onEmit: ((params: {
626
+ position: [number, number, number] | number[];
627
+ count: number;
628
+ direction: any;
629
+ }) => void) | undefined;
630
+ particlesRef: Record<string, any>;
631
+ loop: boolean;
632
+ localDirection: boolean;
633
+ overrides: Record<string, unknown> | null;
634
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
635
+ /**
636
+ * Composable for programmatic emitter control
637
+ *
638
+ * Usage:
639
+ * const { emit, burst, start, stop } = useVFXEmitter("sparks");
640
+ *
641
+ * // Emit at a position
642
+ * emit([1, 2, 3], 50);
643
+ *
644
+ * // Burst with overrides
645
+ * burst([0, 0, 0], 100, { colorStart: ["#ff0000"] });
646
+ */
647
+ declare function useVFXEmitter(name: string): {
648
+ emit: (position?: [number, number, number], count?: number, overrides?: Record<string, unknown> | null) => boolean;
649
+ burst: (position?: [number, number, number], count?: number, overrides?: Record<string, unknown> | null) => boolean;
650
+ start: () => boolean;
651
+ stop: () => boolean;
652
+ clear: () => boolean;
653
+ isEmitting: () => boolean;
654
+ getUniforms: () => Record<string, unknown> | null;
655
+ getParticles: () => core_vfx.ParticleSystemRef | null;
656
+ };
657
+ type VFXEmitterProps = InstanceType<typeof VFXEmitter>['$props'];
658
+
659
+ declare function useVFXStore(): Ref<CoreState>;
660
+ declare function useVFXStore<T>(selector: (state: CoreState) => T): Ref<T>;
661
+ declare namespace useVFXStore {
662
+ var getState: () => CoreState;
663
+ var setState: {
664
+ (partial: CoreState | Partial<CoreState> | ((state: CoreState) => CoreState | Partial<CoreState>), replace?: false): void;
665
+ (state: CoreState | ((state: CoreState) => CoreState), replace: true): void;
666
+ };
667
+ var subscribe: (listener: (state: CoreState, prevState: CoreState) => void) => () => void;
668
+ }
669
+
670
+ export { VFXEmitter, type VFXEmitterProps, VFXParticles, type VFXParticlesProps, useVFXEmitter, useVFXStore };