63 lines
2.0 KiB
JavaScript
63 lines
2.0 KiB
JavaScript
import { AnimatableColor, deepExtend, executeOnSingleOrMultiple, setRangeValue } from "tsparticles-engine";
|
|
import { EmitterLife } from "./EmitterLife";
|
|
import { EmitterRate } from "./EmitterRate";
|
|
import { EmitterSize } from "./EmitterSize";
|
|
export class Emitter {
|
|
constructor() {
|
|
this.autoPlay = true;
|
|
this.fill = true;
|
|
this.life = new EmitterLife();
|
|
this.rate = new EmitterRate();
|
|
this.shape = "square";
|
|
this.startCount = 0;
|
|
}
|
|
load(data) {
|
|
if (data === undefined) {
|
|
return;
|
|
}
|
|
if (data.autoPlay !== undefined) {
|
|
this.autoPlay = data.autoPlay;
|
|
}
|
|
if (data.size !== undefined) {
|
|
if (this.size === undefined) {
|
|
this.size = new EmitterSize();
|
|
}
|
|
this.size.load(data.size);
|
|
}
|
|
if (data.direction !== undefined) {
|
|
this.direction = data.direction;
|
|
}
|
|
this.domId = data.domId;
|
|
if (data.fill !== undefined) {
|
|
this.fill = data.fill;
|
|
}
|
|
this.life.load(data.life);
|
|
this.name = data.name;
|
|
this.particles = executeOnSingleOrMultiple(data.particles, (particles) => {
|
|
return deepExtend({}, particles);
|
|
});
|
|
this.rate.load(data.rate);
|
|
if (data.shape !== undefined) {
|
|
this.shape = data.shape;
|
|
}
|
|
if (data.position !== undefined) {
|
|
this.position = {};
|
|
if (data.position.x !== undefined) {
|
|
this.position.x = setRangeValue(data.position.x);
|
|
}
|
|
if (data.position.y !== undefined) {
|
|
this.position.y = setRangeValue(data.position.y);
|
|
}
|
|
}
|
|
if (data.spawnColor !== undefined) {
|
|
if (this.spawnColor === undefined) {
|
|
this.spawnColor = new AnimatableColor();
|
|
}
|
|
this.spawnColor.load(data.spawnColor);
|
|
}
|
|
if (data.startCount !== undefined) {
|
|
this.startCount = data.startCount;
|
|
}
|
|
}
|
|
}
|