@rzmps/rzmps 1.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/README.md +1048 -0
- package/build/EmissionShape.d.ts +33 -0
- package/build/EmissionShape.js +129 -0
- package/build/Emitter.d.ts +58 -0
- package/build/Emitter.js +166 -0
- package/build/GpuModule.d.ts +28 -0
- package/build/GpuModule.js +28 -0
- package/build/Module.d.ts +19 -0
- package/build/Module.js +31 -0
- package/build/Particle.d.ts +60 -0
- package/build/Particle.js +52 -0
- package/build/ParticleForceField.d.ts +39 -0
- package/build/ParticleForceField.js +101 -0
- package/build/ParticleForceFieldHelper.d.ts +18 -0
- package/build/ParticleForceFieldHelper.js +103 -0
- package/build/ParticleSystem.d.ts +122 -0
- package/build/ParticleSystem.js +609 -0
- package/build/Renderer.d.ts +15 -0
- package/build/Renderer.js +11 -0
- package/build/assets/images/default.png +0 -0
- package/build/collision/ThreeCollisionBackend.d.ts +47 -0
- package/build/collision/ThreeCollisionBackend.js +340 -0
- package/build/enums/Axis.d.ts +6 -0
- package/build/enums/Axis.js +7 -0
- package/build/enums/DynamicValueType.d.ts +6 -0
- package/build/enums/DynamicValueType.js +7 -0
- package/build/enums/EmissionSource copy.d.ts +7 -0
- package/build/enums/EmissionSource copy.js +7 -0
- package/build/enums/EmissionSource.d.ts +7 -0
- package/build/enums/EmissionSource.js +7 -0
- package/build/enums/EndBehavior.d.ts +6 -0
- package/build/enums/EndBehavior.js +7 -0
- package/build/enums/SimulationSpace.d.ts +5 -0
- package/build/enums/SimulationSpace.js +6 -0
- package/build/enums/SpriteMaterialType.d.ts +5 -0
- package/build/enums/SpriteMaterialType.js +6 -0
- package/build/enums/TagSelectionMethod.d.ts +6 -0
- package/build/enums/TagSelectionMethod.js +7 -0
- package/build/enums/TrailMode copy.d.ts +5 -0
- package/build/enums/TrailMode copy.js +7 -0
- package/build/enums/TrailMode.d.ts +5 -0
- package/build/enums/TrailMode.js +7 -0
- package/build/enums/TrailTextureMode.d.ts +7 -0
- package/build/enums/TrailTextureMode.js +9 -0
- package/build/gpu/GpuDynamicValue.d.ts +9 -0
- package/build/gpu/GpuDynamicValue.js +113 -0
- package/build/gpu/GpuMath.d.ts +3 -0
- package/build/gpu/GpuMath.js +12 -0
- package/build/gpu/GpuParticleContext.d.ts +63 -0
- package/build/gpu/GpuParticleContext.js +291 -0
- package/build/helpers/acceptMultiple.d.ts +2 -0
- package/build/helpers/acceptMultiple.js +6 -0
- package/build/helpers/evaluateDynamic.d.ts +2 -0
- package/build/helpers/evaluateDynamic.js +18 -0
- package/build/helpers/evaluateDynamicColor.d.ts +3 -0
- package/build/helpers/evaluateDynamicColor.js +5 -0
- package/build/helpers/evaluateDynamicNumber.d.ts +2 -0
- package/build/helpers/evaluateDynamicNumber.js +4 -0
- package/build/helpers/evaluateDynamicVector3.d.ts +3 -0
- package/build/helpers/evaluateDynamicVector3.js +5 -0
- package/build/helpers/isPointInMesh.d.ts +2 -0
- package/build/helpers/isPointInMesh.js +8 -0
- package/build/helpers/particleRatio.d.ts +2 -0
- package/build/helpers/particleRatio.js +13 -0
- package/build/helpers/tagsIntersect.d.ts +2 -0
- package/build/helpers/tagsIntersect.js +4 -0
- package/build/index.d.ts +37 -0
- package/build/index.js +34 -0
- package/build/interfaces/ICollisionBackend.d.ts +21 -0
- package/build/interfaces/ICollisionBackend.js +1 -0
- package/build/interfaces/IParticleForceField.d.ts +5 -0
- package/build/interfaces/IParticleForceField.js +1 -0
- package/build/interfaces/InitialParticleValues.d.ts +18 -0
- package/build/interfaces/InitialParticleValues.js +1 -0
- package/build/materials/BasicSprite.d.ts +21 -0
- package/build/materials/BasicSprite.js +46 -0
- package/build/materials/UnlitSprite.d.ts +13 -0
- package/build/materials/UnlitSprite.js +31 -0
- package/build/materials/WebGPUBasicSprite.d.ts +8 -0
- package/build/materials/WebGPUBasicSprite.js +65 -0
- package/build/materials/WebGPUUnlitSprite.d.ts +8 -0
- package/build/materials/WebGPUUnlitSprite.js +49 -0
- package/build/modules/Audio.d.ts +60 -0
- package/build/modules/Audio.js +181 -0
- package/build/modules/Collision.d.ts +40 -0
- package/build/modules/Collision.js +162 -0
- package/build/modules/ColorBySpeed.d.ts +18 -0
- package/build/modules/ColorBySpeed.js +26 -0
- package/build/modules/ColorOverLifetime.d.ts +12 -0
- package/build/modules/ColorOverLifetime.js +17 -0
- package/build/modules/ExternalForces.d.ts +21 -0
- package/build/modules/ExternalForces.js +61 -0
- package/build/modules/ForceOverLifetime.d.ts +11 -0
- package/build/modules/ForceOverLifetime.js +12 -0
- package/build/modules/LimitVelocityOverLifetime.d.ts +16 -0
- package/build/modules/LimitVelocityOverLifetime.js +34 -0
- package/build/modules/MassOverLifetime.d.ts +11 -0
- package/build/modules/MassOverLifetime.js +15 -0
- package/build/modules/NoiseModule.d.ts +23 -0
- package/build/modules/NoiseModule.js +45 -0
- package/build/modules/RotationBySpeed.d.ts +14 -0
- package/build/modules/RotationBySpeed.js +19 -0
- package/build/modules/RotationOverLifetime.d.ts +11 -0
- package/build/modules/RotationOverLifetime.js +12 -0
- package/build/modules/ScaleBySpeed.d.ts +14 -0
- package/build/modules/ScaleBySpeed.js +19 -0
- package/build/modules/ScaleOverLifetime.d.ts +11 -0
- package/build/modules/ScaleOverLifetime.js +11 -0
- package/build/modules/TransformByNoise.d.ts +17 -0
- package/build/modules/TransformByNoise.js +32 -0
- package/build/modules/VelocityOverLifetime.d.ts +15 -0
- package/build/modules/VelocityOverLifetime.js +32 -0
- package/build/renderers/LightRenderer.d.ts +54 -0
- package/build/renderers/LightRenderer.js +141 -0
- package/build/renderers/MeshRenderer.d.ts +27 -0
- package/build/renderers/MeshRenderer.js +70 -0
- package/build/renderers/SpriteRenderer.d.ts +95 -0
- package/build/renderers/SpriteRenderer.js +456 -0
- package/build/renderers/TrailRenderer.d.ts +71 -0
- package/build/renderers/TrailRenderer.js +400 -0
- package/build/shaders/BasicSprite.frag.js +1 -0
- package/build/shaders/BasicSprite.vert.js +1 -0
- package/build/shaders/UnlitSprite.frag.js +1 -0
- package/build/shaders/UnlitSprite.vert.js +1 -0
- package/build/types/DynamicValue.d.ts +2 -0
- package/build/types/DynamicValue.js +1 -0
- package/build/types/EnumStringLiteral.d.ts +1 -0
- package/build/types/EnumStringLiteral.js +1 -0
- package/build/types/Multiple.d.ts +2 -0
- package/build/types/Multiple.js +1 -0
- package/build/types/Tag.d.ts +1 -0
- package/build/types/Tag.js +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import evaluateDynamicNumber from './helpers/evaluateDynamicNumber';
|
|
3
|
+
import evaluateDynamicVector from './helpers/evaluateDynamicVector3';
|
|
4
|
+
import isPointInMesh from './helpers/isPointInMesh';
|
|
5
|
+
import acceptMultiple from './helpers/acceptMultiple';
|
|
6
|
+
import tagsIntersect from './helpers/tagsIntersect';
|
|
7
|
+
class ParticleForceField extends THREE.Object3D {
|
|
8
|
+
static Box(options, ...args) {
|
|
9
|
+
return new ParticleForceField(Object.assign(Object.assign({}, options), { geometry: new THREE.BoxGeometry(...args) }));
|
|
10
|
+
}
|
|
11
|
+
static Sphere(options, ...args) {
|
|
12
|
+
return new ParticleForceField(Object.assign(Object.assign({}, options), { geometry: new THREE.SphereGeometry(...args) }));
|
|
13
|
+
}
|
|
14
|
+
static Cone(options, ...args) {
|
|
15
|
+
return new ParticleForceField(Object.assign(Object.assign({}, options), { geometry: new THREE.ConeGeometry(...args) }));
|
|
16
|
+
}
|
|
17
|
+
static Torus(options, ...args) {
|
|
18
|
+
return new ParticleForceField(Object.assign(Object.assign({}, options), { geometry: new THREE.TorusGeometry(...args) }));
|
|
19
|
+
}
|
|
20
|
+
set geometry(value) {
|
|
21
|
+
this._geometry = value;
|
|
22
|
+
this._geometry.computeBoundingBox();
|
|
23
|
+
this._mesh.geometry = value;
|
|
24
|
+
}
|
|
25
|
+
get geometry() {
|
|
26
|
+
return this._geometry;
|
|
27
|
+
}
|
|
28
|
+
constructor(options) {
|
|
29
|
+
var _a;
|
|
30
|
+
super();
|
|
31
|
+
if (options.position) {
|
|
32
|
+
this.position.copy(options.position);
|
|
33
|
+
}
|
|
34
|
+
if (options.scale) {
|
|
35
|
+
this.scale.copy(options.scale);
|
|
36
|
+
}
|
|
37
|
+
this.direction = options.direction;
|
|
38
|
+
this.gravity = options.gravity;
|
|
39
|
+
this.rotationSpeed = options.rotationSpeed;
|
|
40
|
+
this.rotationAttraction = options.rotationAttraction;
|
|
41
|
+
this.drag = options.drag;
|
|
42
|
+
this.tags = acceptMultiple(options.tags);
|
|
43
|
+
this._geometry = (_a = options.geometry) !== null && _a !== void 0 ? _a : new THREE.SphereGeometry();
|
|
44
|
+
this._geometry.computeBoundingBox();
|
|
45
|
+
this._mesh = new THREE.Mesh(this._geometry, ParticleForceField._doubleSidedMaterial);
|
|
46
|
+
}
|
|
47
|
+
getForce(particle) {
|
|
48
|
+
var _a;
|
|
49
|
+
this.updateWorldMatrix(true, false);
|
|
50
|
+
if (!this.contains(particle.position)
|
|
51
|
+
|| (this.tags && !tagsIntersect(this.tags, (_a = particle.tags) !== null && _a !== void 0 ? _a : [])))
|
|
52
|
+
return new THREE.Vector3();
|
|
53
|
+
const { time } = particle;
|
|
54
|
+
const force = new THREE.Vector3();
|
|
55
|
+
const center = new THREE.Vector3();
|
|
56
|
+
this.getWorldPosition(center);
|
|
57
|
+
const toCenter = center.clone().sub(particle.position);
|
|
58
|
+
const distanceSq = toCenter.lengthSq();
|
|
59
|
+
if (this.direction !== undefined) {
|
|
60
|
+
const direction = evaluateDynamicVector(this.direction, time).clone();
|
|
61
|
+
const rotation = this.getWorldQuaternion(new THREE.Quaternion());
|
|
62
|
+
direction.applyQuaternion(rotation);
|
|
63
|
+
force.add(direction);
|
|
64
|
+
}
|
|
65
|
+
if (this.gravity !== undefined && distanceSq > 0) {
|
|
66
|
+
force.add(toCenter.clone().normalize().multiplyScalar(evaluateDynamicNumber(this.gravity, time)));
|
|
67
|
+
}
|
|
68
|
+
if (this.rotationSpeed !== undefined && distanceSq > 0) {
|
|
69
|
+
const rotationAxis = new THREE.Vector3(0, 1, 0)
|
|
70
|
+
.applyQuaternion(this.getWorldQuaternion(new THREE.Quaternion()));
|
|
71
|
+
const fromCenter = particle.position.clone().sub(center);
|
|
72
|
+
const tangent = rotationAxis.cross(fromCenter).normalize();
|
|
73
|
+
force.add(tangent.multiplyScalar(evaluateDynamicNumber(this.rotationSpeed, time)));
|
|
74
|
+
}
|
|
75
|
+
if (this.rotationAttraction !== undefined && distanceSq > 0) {
|
|
76
|
+
force.add(toCenter.clone().normalize().multiplyScalar(evaluateDynamicNumber(this.rotationAttraction, time)));
|
|
77
|
+
}
|
|
78
|
+
if (this.drag !== undefined) {
|
|
79
|
+
force.addScaledVector(particle.velocity, -evaluateDynamicNumber(this.drag, time));
|
|
80
|
+
}
|
|
81
|
+
return force.multiplyScalar(this.getFalloff(particle.position));
|
|
82
|
+
}
|
|
83
|
+
contains(position) {
|
|
84
|
+
const localPosition = this.worldToLocal(position.clone());
|
|
85
|
+
return isPointInMesh(localPosition, this._mesh);
|
|
86
|
+
}
|
|
87
|
+
getFalloff(position) {
|
|
88
|
+
const localPosition = this.worldToLocal(position.clone());
|
|
89
|
+
if (!this._geometry.boundingBox) {
|
|
90
|
+
this._geometry.computeBoundingBox();
|
|
91
|
+
}
|
|
92
|
+
const size = new THREE.Vector3();
|
|
93
|
+
this._geometry.boundingBox.getSize(size);
|
|
94
|
+
const radius = size.length() * 0.5;
|
|
95
|
+
if (radius <= 0)
|
|
96
|
+
return 0;
|
|
97
|
+
return 1 - Math.min(localPosition.length() / radius, 1);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
ParticleForceField._doubleSidedMaterial = new THREE.MeshBasicMaterial({ side: THREE.DoubleSide });
|
|
101
|
+
export default ParticleForceField;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import ParticleForceField from './ParticleForceField';
|
|
3
|
+
declare class ParticleForceFieldHelper extends THREE.Object3D {
|
|
4
|
+
forceField: ParticleForceField;
|
|
5
|
+
color: THREE.Color;
|
|
6
|
+
private shapeHelper?;
|
|
7
|
+
private directionHelper?;
|
|
8
|
+
private sourceGeometry?;
|
|
9
|
+
constructor(forceField: ParticleForceField, color?: THREE.ColorRepresentation);
|
|
10
|
+
update(): void;
|
|
11
|
+
setColor(color: THREE.ColorRepresentation): void;
|
|
12
|
+
dispose(): void;
|
|
13
|
+
private _updateTransform;
|
|
14
|
+
private _disposeShape;
|
|
15
|
+
private _disposeDirection;
|
|
16
|
+
onBeforeRender(): void;
|
|
17
|
+
}
|
|
18
|
+
export default ParticleForceFieldHelper;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
class ParticleForceFieldHelper extends THREE.Object3D {
|
|
3
|
+
constructor(forceField, color = 0xffff00) {
|
|
4
|
+
super();
|
|
5
|
+
this.forceField = forceField;
|
|
6
|
+
this.color = new THREE.Color(color);
|
|
7
|
+
this.name = `${forceField.name || 'ParticleForceField'}Helper`;
|
|
8
|
+
this.update();
|
|
9
|
+
}
|
|
10
|
+
update() {
|
|
11
|
+
/*
|
|
12
|
+
* Only rebuild the shape geometry if the force field geometry
|
|
13
|
+
* itself changed.
|
|
14
|
+
*/
|
|
15
|
+
if (!this.shapeHelper
|
|
16
|
+
|| this.sourceGeometry !== this.forceField.geometry) {
|
|
17
|
+
this._disposeShape();
|
|
18
|
+
const material = new THREE.LineBasicMaterial({
|
|
19
|
+
color: this.color,
|
|
20
|
+
transparent: true,
|
|
21
|
+
opacity: 0.5,
|
|
22
|
+
depthTest: false,
|
|
23
|
+
toneMapped: false,
|
|
24
|
+
});
|
|
25
|
+
const geometry = new THREE.WireframeGeometry(this.forceField.geometry);
|
|
26
|
+
this.shapeHelper = new THREE.LineSegments(geometry, material);
|
|
27
|
+
this.shapeHelper.renderOrder = 999;
|
|
28
|
+
this.add(this.shapeHelper);
|
|
29
|
+
this.sourceGeometry = this.forceField.geometry;
|
|
30
|
+
}
|
|
31
|
+
/*
|
|
32
|
+
* Rebuild the directional arrow.
|
|
33
|
+
*
|
|
34
|
+
* We can only show a meaningful static arrow when direction is
|
|
35
|
+
* actually a Vector3. Functional/curve-based DynamicValues don't
|
|
36
|
+
* have one universal direction to visualize.
|
|
37
|
+
*/
|
|
38
|
+
this._disposeDirection();
|
|
39
|
+
if (this.forceField.direction instanceof THREE.Vector3) {
|
|
40
|
+
const direction = this.forceField.direction.clone();
|
|
41
|
+
const length = direction.length();
|
|
42
|
+
if (length > 0) {
|
|
43
|
+
direction.normalize();
|
|
44
|
+
this.directionHelper = new THREE.ArrowHelper(direction, new THREE.Vector3(), Math.min(length, 2), this.color);
|
|
45
|
+
/*
|
|
46
|
+
* Keep the arrow readable even when the force itself is very
|
|
47
|
+
* weak or very strong.
|
|
48
|
+
*/
|
|
49
|
+
this.directionHelper.setLength(Math.min(Math.max(length, 0.5), 2), 0.35, 0.2);
|
|
50
|
+
this.add(this.directionHelper);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
this._updateTransform();
|
|
54
|
+
}
|
|
55
|
+
setColor(color) {
|
|
56
|
+
var _a, _b;
|
|
57
|
+
this.color.set(color);
|
|
58
|
+
if (((_a = this.shapeHelper) === null || _a === void 0 ? void 0 : _a.material)
|
|
59
|
+
instanceof THREE.LineBasicMaterial) {
|
|
60
|
+
this.shapeHelper.material.color.copy(this.color);
|
|
61
|
+
}
|
|
62
|
+
(_b = this.directionHelper) === null || _b === void 0 ? void 0 : _b.setColor(this.color);
|
|
63
|
+
}
|
|
64
|
+
dispose() {
|
|
65
|
+
this._disposeShape();
|
|
66
|
+
this._disposeDirection();
|
|
67
|
+
this.sourceGeometry = undefined;
|
|
68
|
+
}
|
|
69
|
+
_updateTransform() {
|
|
70
|
+
this.forceField.updateWorldMatrix(true, false);
|
|
71
|
+
this.forceField.getWorldPosition(this.position);
|
|
72
|
+
this.forceField.getWorldQuaternion(this.quaternion);
|
|
73
|
+
this.forceField.getWorldScale(this.scale);
|
|
74
|
+
}
|
|
75
|
+
_disposeShape() {
|
|
76
|
+
if (!this.shapeHelper)
|
|
77
|
+
return;
|
|
78
|
+
this.shapeHelper.removeFromParent();
|
|
79
|
+
/*
|
|
80
|
+
* This is a WireframeGeometry owned by the helper, so disposing it
|
|
81
|
+
* does NOT dispose the ParticleForceField's actual geometry.
|
|
82
|
+
*/
|
|
83
|
+
this.shapeHelper.geometry.dispose();
|
|
84
|
+
if (Array.isArray(this.shapeHelper.material)) {
|
|
85
|
+
this.shapeHelper.material.forEach(material => material.dispose());
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
this.shapeHelper.material.dispose();
|
|
89
|
+
}
|
|
90
|
+
this.shapeHelper = undefined;
|
|
91
|
+
}
|
|
92
|
+
_disposeDirection() {
|
|
93
|
+
if (!this.directionHelper)
|
|
94
|
+
return;
|
|
95
|
+
this.directionHelper.removeFromParent();
|
|
96
|
+
this.directionHelper.dispose();
|
|
97
|
+
this.directionHelper = undefined;
|
|
98
|
+
}
|
|
99
|
+
onBeforeRender() {
|
|
100
|
+
this._updateTransform();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export default ParticleForceFieldHelper;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import Particle from './Particle';
|
|
3
|
+
import Emitter from './Emitter';
|
|
4
|
+
import Module from './Module';
|
|
5
|
+
import Renderer from './Renderer';
|
|
6
|
+
import { Multiple } from './types/Multiple';
|
|
7
|
+
import { DynamicValue } from './types/DynamicValue';
|
|
8
|
+
import { CollisionListener } from './modules/Collision';
|
|
9
|
+
import { CollisionHit } from './interfaces/ICollisionBackend';
|
|
10
|
+
import { EndBehavior } from './enums/EndBehavior';
|
|
11
|
+
import { SimulationSpace } from './enums/SimulationSpace';
|
|
12
|
+
interface ParticleSystemOptions {
|
|
13
|
+
emitters: Multiple<Emitter>;
|
|
14
|
+
renderers: Multiple<Renderer>;
|
|
15
|
+
modules: Multiple<Module>;
|
|
16
|
+
simulationSpeed: number;
|
|
17
|
+
duration: number;
|
|
18
|
+
looping: boolean;
|
|
19
|
+
endBehavior: EndBehavior | `${EndBehavior}`;
|
|
20
|
+
gravity: THREE.Vector3;
|
|
21
|
+
gravityModifier: DynamicValue<number>;
|
|
22
|
+
simulationSpace: SimulationSpace | `${SimulationSpace}`;
|
|
23
|
+
}
|
|
24
|
+
export interface SubSystemOptions {
|
|
25
|
+
shouldEmit: boolean | ((particle: Particle) => boolean);
|
|
26
|
+
ratio: number;
|
|
27
|
+
emitContinuous: boolean;
|
|
28
|
+
emitOnCollision: boolean;
|
|
29
|
+
emitOnSpawn: boolean;
|
|
30
|
+
emitOnDeath: boolean;
|
|
31
|
+
inheritScale: boolean;
|
|
32
|
+
inheritLifetime: boolean;
|
|
33
|
+
inheritColor: boolean;
|
|
34
|
+
inheritAlpha: boolean;
|
|
35
|
+
inheritMass: boolean;
|
|
36
|
+
}
|
|
37
|
+
export type ParticleListener = (particle: Particle) => void;
|
|
38
|
+
declare class ParticleSystem extends THREE.Object3D {
|
|
39
|
+
particles: Particle[];
|
|
40
|
+
emitters: Emitter[];
|
|
41
|
+
modules: Module[];
|
|
42
|
+
renderers: Renderer[];
|
|
43
|
+
subSystems: Map<ParticleSystem, SubSystemOptions>;
|
|
44
|
+
gravity: THREE.Vector3;
|
|
45
|
+
gravityModifier: DynamicValue<number>;
|
|
46
|
+
simulationSpeed: number;
|
|
47
|
+
duration: number;
|
|
48
|
+
looping: boolean;
|
|
49
|
+
endBehavior: EndBehavior;
|
|
50
|
+
private _simulationSpace;
|
|
51
|
+
get simulationSpace(): SimulationSpace;
|
|
52
|
+
set simulationSpace(value: SimulationSpace);
|
|
53
|
+
private _scene?;
|
|
54
|
+
get scene(): THREE.Scene<THREE.Object3DEventMap> | undefined;
|
|
55
|
+
private _camera?;
|
|
56
|
+
get sceneCamera(): THREE.Camera | undefined;
|
|
57
|
+
private _renderer?;
|
|
58
|
+
get sceneRenderer(): THREE.WebGLRenderer | undefined;
|
|
59
|
+
private deltaTime;
|
|
60
|
+
private lastFrame;
|
|
61
|
+
private _subSystemParent?;
|
|
62
|
+
get isSubSystem(): boolean;
|
|
63
|
+
private _deathListeners;
|
|
64
|
+
private _spawnListeners;
|
|
65
|
+
private _collisionListeners;
|
|
66
|
+
private _emissionRuns;
|
|
67
|
+
private _nextEmissionRunId;
|
|
68
|
+
private _playing;
|
|
69
|
+
private _paused;
|
|
70
|
+
private _elapsedTime;
|
|
71
|
+
private _ended;
|
|
72
|
+
private _destroyed;
|
|
73
|
+
get destroyed(): boolean;
|
|
74
|
+
private readonly _rendererObjects;
|
|
75
|
+
private readonly _worldRendererRoot;
|
|
76
|
+
constructor(options?: Partial<ParticleSystemOptions>);
|
|
77
|
+
update(): void;
|
|
78
|
+
private _calculateDeltaTime;
|
|
79
|
+
private _scaleDeltaTime;
|
|
80
|
+
private _processParticles;
|
|
81
|
+
private _updateParticles;
|
|
82
|
+
private _updateSubSystems;
|
|
83
|
+
private _updateAsSubSystem;
|
|
84
|
+
private _updateEmissionRuns;
|
|
85
|
+
private _canEmitForParticle;
|
|
86
|
+
private _startEmissionRunAtParticle;
|
|
87
|
+
private _particleEmissionTransform;
|
|
88
|
+
start(): void;
|
|
89
|
+
pause(): void;
|
|
90
|
+
resume(): void;
|
|
91
|
+
stop(clearParticles: boolean): void;
|
|
92
|
+
destroy(): void;
|
|
93
|
+
clearParticles(): void;
|
|
94
|
+
addEmitter(emitter: Emitter): this;
|
|
95
|
+
removeEmitter(emitter: Emitter): this;
|
|
96
|
+
addModule(module: Module): this;
|
|
97
|
+
removeModule(module: Module): this;
|
|
98
|
+
addRenderer(renderer: Renderer): this;
|
|
99
|
+
removeRenderer(renderer: Renderer): this;
|
|
100
|
+
addRendererObject(object: THREE.Object3D): void;
|
|
101
|
+
addSubSystem(subSystem: ParticleSystem, options: Partial<SubSystemOptions>): this;
|
|
102
|
+
removeSubSystem(subSystem: ParticleSystem): this;
|
|
103
|
+
onDeath(listener: ParticleListener): this;
|
|
104
|
+
removeDeathListener(listener: ParticleListener): this;
|
|
105
|
+
onSpawn(listener: ParticleListener): this;
|
|
106
|
+
removeSpawnListener(listener: ParticleListener): this;
|
|
107
|
+
onCollision(listener: CollisionListener): this;
|
|
108
|
+
removeCollisionListener(listener: CollisionListener): this;
|
|
109
|
+
notifyCollision(particle: Particle, collision: CollisionHit): void;
|
|
110
|
+
private _notifyDeath;
|
|
111
|
+
private _notifySpawn;
|
|
112
|
+
private cleanup;
|
|
113
|
+
private getEmitterContext;
|
|
114
|
+
private _updateSystemTime;
|
|
115
|
+
private _handleEndBehavior;
|
|
116
|
+
private getRendererParent;
|
|
117
|
+
private syncRendererParents;
|
|
118
|
+
private getWorldRendererParent;
|
|
119
|
+
private convertParticlesToSimulationSpace;
|
|
120
|
+
private localDirectionToWorld;
|
|
121
|
+
}
|
|
122
|
+
export default ParticleSystem;
|