duckengine
Version:
A 2D Game Engine for the web.
92 lines (81 loc) • 2.19 kB
text/typescript
import { Duck } from '../../../index';
import Game from '../../game';
import Particle from '../../gameobjects/particles/particle';
import ParticleEmitter from '../../gameobjects/particles/particleEmitter';
import Scene from '../../scene';
import Effect from '../effect';
export default class SmokeEffect extends Effect {
protected maxAge: number;
protected speedRangeX: Duck.Types.ParticleEmitter.Range;
protected speedRangeY: Duck.Types.ParticleEmitter.Range;
protected interval: number;
constructor(
rangeX: Duck.Types.ParticleEmitter.Range,
rangeY: Duck.Types.ParticleEmitter.Range,
game: Game,
particleAmount = 50,
speedRangeX: Duck.Types.ParticleEmitter.Range = [-10, -40],
speedRangeY: Duck.Types.ParticleEmitter.Range = [-10, -40],
maxAge = 20,
color = '#2e2e2e',
interval = 50,
scene: Scene
) {
const particle = new Particle('circle', 0, 0, 5, color, game, scene);
particle.visible = false;
const particleEmitter = new ParticleEmitter(
particle,
rangeX,
rangeY,
particleAmount,
game,
scene,
false
);
super(rangeX, rangeY, particleEmitter, game);
this.maxAge = maxAge;
this.speedRangeX = speedRangeX;
this.speedRangeY = speedRangeY;
this.interval = interval;
}
/**
* @memberof Effect
* @description Makes the particleEmitter emit
* @since 1.2.0
*/
public emit() {
this.particleEmitter.create();
this.particleEmitter.float(
[this.speedRangeX[0], this.speedRangeX[0]],
[this.speedRangeY[1], this.speedRangeY[1]]
);
this.particleEmitter.keepEmitting(this.interval);
this.particleEmitter.emit();
}
/**
* @memberof Effect
* @description Stops the particleEmitter emitting
* @since 1.2.0
*/
public stopEmit() {
this.particleEmitter.stopEmit();
}
/**
* @memberof Effect
* @description Makes the particleEmitter emit for a duration
* @param {number} ms Duration in milliseconds
* @since 1.2.0
*/
public emitFor(ms: number) {
this.particleEmitter.emitFor(ms);
}
/**
* @description Draws the effect.
*
* DO NOT CALL MANUALLY, CALLED IN GAME LOOP USING SCENE.displayList
*
*/
public _draw() {
this.particleEmitter.offloadMaxAge(this.maxAge);
}
}