UNPKG

1.98 kBJavaScriptView Raw
1"use strict";
2
3function Particles(max, setupParticle, drawParticle) {
4 this.particles = [];
5 this.setupParticle = setupParticle;
6 this.drawParticle = drawParticle;
7 for (var i = 0; i < max; i++) {
8 var particle = {
9 x: 0,
10 y: 0,
11 vx: 0,
12 vy: 0,
13 enabled: false,
14 age: 0
15 };
16 this.setupParticle(particle);
17 this.particles.push(particle);
18 }
19 this.gravity = 0.1;
20 this.maxAge = 1000;
21}
22Particles.prototype.move = function(elapsedMillis) {
23 for (var i = 0; i < this.particles.length; i++) {
24 var particle = this.particles[i];
25 if (!particle.enabled) {
26 continue;
27 }
28 particle.age += elapsedMillis;
29 if (particle.age > this.maxAge) {
30 particle.enabled = false;
31 continue;
32 }
33 particle.x += particle.vx * elapsedMillis;
34 particle.y += particle.vy * elapsedMillis;
35 particle.vy += this.gravity;
36 }
37};
38Particles.prototype.draw = function(context) {
39 for (var i = 0; i < this.particles.length; i++) {
40 var particle = this.particles[i];
41 if (!particle.enabled) {
42 continue;
43 }
44 this.drawParticle(context, particle);
45 }
46};
47Particles.prototype.add = function(quantity, x, y, velocity, config) {
48 var self = this;
49 function setupParticle(particle) {
50 particle.enabled = true;
51 particle.age = 0;
52 particle.x = x;
53 particle.y = y;
54 particle.vx = (Math.random() - 0.5) * velocity;
55 particle.vy = (Math.random() - 0.5) * velocity;
56 self.setupParticle(particle, config);
57 }
58
59 var particle;
60 for (var i = 0; i < this.particles.length; i++) {
61 particle = this.particles[i];
62 if (particle.enabled) {
63 continue;
64 }
65 if (quantity < 1) {
66 return;
67 }
68 quantity--;
69 setupParticle(particle);
70 }
71
72 // sort oldest first
73 this.particles.sort(function(a, b) {
74 return b.age - a.age;
75 });
76
77 for (i = 0; i < quantity; i++) {
78 particle = this.particles[i];
79 setupParticle(particle);
80 }
81};
82Particles.prototype.reset = function() {
83 for (var i = 0; i < this.particles.length; i++) {
84 this.particles[i].enabled = false;
85 }
86};
87
88module.exports = Particles;