2023-02-17 11:06:01 +01:00

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;
}
}
}