Particle system appears to be working

This commit is contained in:
Nathan Kunicki 2016-02-14 01:16:11 +00:00
parent 246453a25e
commit 13508b7fd9
2 changed files with 42 additions and 19 deletions

View File

@ -2,13 +2,18 @@
import MomentumEngine from "../../src/es6"; import MomentumEngine from "../../src/es6";
let white = new MomentumEngine.Classes.Color(255, 255, 255); let KeyConsts = MomentumEngine.Consts.Input.Keys;
class BlueParticle extends MomentumEngine.Classes.Rect { class BlueParticle extends MomentumEngine.Classes.Rect {
constructor (x, y) { constructor (x, y) {
super(x, y, 1, 1, white); super(x, y, 1, 1, new MomentumEngine.Classes.Color(255, 255, 255, 0));
this.timeToLive = 5000;
}
update (delta) {
this.color.a = this.color.a - (delta * 0.00025);
} }
} }
@ -25,7 +30,10 @@ window.onload = function () {
width: width, width: width,
height: height, height: height,
fixRatio: true, fixRatio: true,
desiredFps: 60 desiredFps: 60,
inputs: {
keyboard: true
}
}); });
let black = new MomentumEngine.Classes.Color(0, 0, 0), let black = new MomentumEngine.Classes.Color(0, 0, 0),
@ -34,14 +42,33 @@ window.onload = function () {
let mainScene = new MomentumEngine.Classes.Rect(0, 0, width, height, black); let mainScene = new MomentumEngine.Classes.Rect(0, 0, width, height, black);
particles.addChildEntity(mainScene); particles.addChildEntity(mainScene);
let rect = new MomentumEngine.Classes.Rect(width / 10 - baseSize, height - (baseSize * 10), baseSize * 2, baseSize * 2, red), let rect = new MomentumEngine.Classes.Rect(width / 2 - baseSize, height / 2 - baseSize, baseSize * 2, baseSize * 2, red),
emitter = new MomentumEngine.Classes.Emitter(baseSize, baseSize, 2, new MomentumEngine.Classes.Vector2D(1, 1), BlueParticle); emitter = new MomentumEngine.Classes.Emitter(baseSize, baseSize, 4, new MomentumEngine.Classes.Vector2D(0, 1), BlueParticle);
mainScene.addChildEntity(rect); mainScene.addChildEntity(rect);
rect.addChildEntity(emitter); rect.addChildEntity(emitter);
rect.setVelocity(0.01, 0);
rect.setAcceleration(0.01, 0);
rect.update = function (delta) {
if (particles.inputs.keyboard.isPressed(KeyConsts.UP)) {
rect.pos.y -= (0.2 * delta);
}
if (particles.inputs.keyboard.isPressed(KeyConsts.DOWN)) {
rect.pos.y += (0.2 * delta);
}
if (particles.inputs.keyboard.isPressed(KeyConsts.LEFT)) {
rect.pos.x -= (0.2 * delta);
}
if (particles.inputs.keyboard.isPressed(KeyConsts.RIGHT)) {
rect.pos.x += (0.2 * delta);
}
};
//emitter.spread = Math.PI / 32;
emitter.setParticleParent(mainScene); emitter.setParticleParent(mainScene);
emitter.emitting = true; emitter.emitting = true;

View File

@ -14,16 +14,13 @@ class Emitter extends Entity {
this.particleVelocity = velocity; this.particleVelocity = velocity;
this.particleClass = particle; this.particleClass = particle;
this.emitRate = rate; this.rate = rate;
this.emitting = false; this.emitting = false;
this.spread = Math.PI;
this._lastEmitTime = this._creationTime; this._lastEmitTime = this._creationTime;
this._wasEmitting = false; this._wasEmitting = false;
this.particles = []; this._particles = [];
this.spread = function () {
return Math.PI / 1;
}
} }
@ -38,14 +35,14 @@ class Emitter extends Entity {
let ParticleClass = this.particleClass, let ParticleClass = this.particleClass,
parent = this._particleParent || this._parent; parent = this._particleParent || this._parent;
let angle = this.particleVelocity.angle() + this.spread() - (Math.random() * this.spread() * 2), let angle = this.particleVelocity.angle() + this.spread - (Math.random() * this.spread * 2),
magnitude = this.particleVelocity.length(), magnitude = this.particleVelocity.length(),
velocity = Vector2D.fromAngle(angle, magnitude); velocity = Vector2D.fromAngle(angle, magnitude);
let particle = new ParticleClass(this._calculatedPos.x, this._calculatedPos.y); let particle = new ParticleClass(this._calculatedPos.x, this._calculatedPos.y);
particle.velocity = velocity; particle.velocity = velocity;
this.particles.push(particle); //this._particles.push(particle);
parent.addChildEntity(particle); parent.addChildEntity(particle);
} }
@ -66,13 +63,12 @@ class Emitter extends Entity {
this._lastEmitTime = currentTime; this._lastEmitTime = currentTime;
} }
// In honour the code of Alex Evans
let emitDelta = currentTime - this._lastEmitTime; let emitDelta = currentTime - this._lastEmitTime;
if (emitDelta > this.emitRate) { if (emitDelta > this.rate) {
let emissions = ~~(emitDelta / this.emitRate); let emissions = ~~(emitDelta / this.rate);
this._lastEmitTime = currentTime + (emitDelta - (this.emitRate * emissions)); this._lastEmitTime = currentTime + (emitDelta - (this.rate * emissions));
for (let i = 0; i < emissions; i++) { for (let i = 0; i < emissions; i++) {
this._emit(); this._emit();