1 | "use strict";
|
2 |
|
3 | function 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 | }
|
22 | Particles.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 | };
|
38 | Particles.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 | };
|
47 | Particles.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 |
|
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 | };
|
82 | Particles.prototype.reset = function() {
|
83 | for (var i = 0; i < this.particles.length; i++) {
|
84 | this.particles[i].enabled = false;
|
85 | }
|
86 | };
|
87 |
|
88 | module.exports = Particles;
|