diff --git a/build/spp.min.js b/build/spp.min.js index 19e76df..6470e65 100644 --- a/build/spp.min.js +++ b/build/spp.min.js @@ -12,11 +12,11 @@ this.y=a.y+b.y;return this},sub:function(a){this.x-=a.x;this.y-=a.x;return this} scaleY:function(a){this.y*=a;return this},scaleNew:function(a){return new SPP.Vector2D(this.x*a,this.y*a)},getLength:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},setLength:function(a){a/=this.getLength();this.scale(a);return this},getAngle:function(){return SPP.MathUtils.atan2D(this.y,this.x)},setAngle:function(a){var b=this.getLength();this.x=b*SPP.MathUtils.cosD(a);this.y=b*SPP.MathUtils.sinD(a);return this},rotate:function(a){var b=SPP.MathUtils.sinD(a);a=SPP.MathUtils.cosD(a);var c= this.x,d=this.y;this.x=c*a-d*b;this.y=c*b+d*a;return this},rotateNew:function(a){var b=this.clone();b.rotate(a);return b},dot:function(a){return this.x*a.x+this.y*a.y},projection:function(a){var b=this.angleBetween(a),b=this.getLength()*SPP.MathUtils.cosD(b)/a.getLength();return a.scaleNew(b)},normalizeNew:function(){return this.clone().normalize()},normalize:function(){0!=this.getLength()?this.scale(1/this.getLength()):this.scale(0);return this},getNormal:function(){return new SPP.Vector2D(-this.y, this.x)},isPerpTo:function(a){return 0==this.dot(a)},angleBetween:function(a){a=this.dot(a)/(this.getLength()*a.getLength());return SPP.MathUtils.acosD(a)},distanceTo:function(a){return Math.sqrt(Math.pow(this.x-a.x,2)+Math.pow(this.y-a.y,2))}};SPP.VectorPool={__vectors:[],get:function(){return 0a;a++)this.__vectors.push(new SPP.Vector2D);return new SPP.Vector2D}};SPP.Particle=function(){this.group=null;this.life=Infinity;this._forcesMap={};this.extra={};this.zone=this.onUpdate=null}; -SPP.Particle.prototype={constructor:SPP.Particle,init:function(a,b,c){0>=c&&(c=-Infinity);this.position=SPP.VectorPool.get();this.velocity=SPP.VectorPool.get();this.acceleration=SPP.VectorPool.get();this.damp=SPP.VectorPool.get();this.damp.reset(0.1,0.1);this.life=c||Infinity;this.position.reset(a,b)},getForce:function(a){return this._forcesMap[a]},addForce:function(a,b){this._forcesMap[a]=b},removeForce:function(a){this._forcesMap[a].target===this&&(this._forcesMap[a].life=0);delete this._forcesMap[a]}, -removeAllForces:function(){for(var a in this._forcesMap)this.removeForce(a)},render:function(){this.update();this.onUpdate&&this.onUpdate.apply(this);if(null!=this.group){var a=this.group.getForceMap(),b;for(b in a)a[b].render(this)||delete a[b]}for(b in this._forcesMap)this._forcesMap[b].render(this)||this.removeForce(b);this.velocity.add(this.acceleration);this.acceleration.reset(0,0);this.velocity.x*=1-this.damp.x;this.velocity.y*=1-this.damp.y;this.position.add(this.velocity);this.zone&&this.zone.render(this); -this.life-=SPP.frameTime;0<=this.life||(this.dispatchEvent(new SPP.Event("dead")),this.reset())},update:function(){},dealloc:function(){SPP.VectorPool.recycle(this.position);SPP.VectorPool.recycle(this.velocity);SPP.VectorPool.recycle(this.acceleration);SPP.VectorPool.recycle(this.damp);this.group=this.zone=this.onUpdate=this.extra=this._forcesMap=this.life=this.damp=this.acceleration=this.velocity=this.position=null},reset:function(){SPP.VectorPool.recycle(this.position);SPP.VectorPool.recycle(this.velocity); -SPP.VectorPool.recycle(this.acceleration);SPP.VectorPool.recycle(this.damp);this.damp=this.acceleration=this.velocity=this.position=null;this.life=0;this.removeAllForces();this.removeAllEventListeners();for(var a in this.extra)delete this.extra[a];this.group=this.zone=this.onUpdate=null}};SPP.extend(SPP.Particle.prototype,SPP.EventDispatcher.prototype);SPP.Pool=function(){var a=[];this.get=function(b){for(var c in a)if(a[c].constructor===b)return a.splice(c,1)[0];return new b};this.recycle=function(b){a.push(b)};this.getObjects=function(){return a};this.dealloc=function(){for(var b=0,c=a.length;b=a[c].life&&(SPP.particlePool.recycle(a[c]),a.splice(c,1));for(c=b.length;0=b[c].life&&(SPP.forcePool.recycle(b[c]),b.splice(c,1))}};this.start= +SPP.Particle.prototype={constructor:SPP.Particle,init:function(a,b,c){0>=c&&(c=-Infinity);this.position=SPP.VectorPool.get();this.velocity=SPP.VectorPool.get();this.acceleration=SPP.VectorPool.get();this.damp=SPP.VectorPool.get();this.damp.reset(0.1,0.1);this.life=c||Infinity;a instanceof Array&&(a=a[0]+Math.random()*a[1]);b instanceof Array&&(b=b[0]+Math.random()*b[1]);this.position.reset(a,b)},getForce:function(a){return this._forcesMap[a]},addForce:function(a,b){this._forcesMap[a]=b},removeForce:function(a){this._forcesMap[a].target=== +this&&(this._forcesMap[a].life=0);delete this._forcesMap[a]},removeAllForces:function(){for(var a in this._forcesMap)this.removeForce(a)},render:function(){this.update();this.onUpdate&&this.onUpdate.apply(this);if(null!=this.group){var a=this.group.getForceMap(),b;for(b in a)a[b].render(this)||delete a[b]}for(b in this._forcesMap)this._forcesMap[b].render(this)||this.removeForce(b);this.velocity.add(this.acceleration);this.acceleration.reset(0,0);this.velocity.x*=1-this.damp.x;this.velocity.y*=1- +this.damp.y;this.position.add(this.velocity);this.zone&&this.zone.render(this);this.life-=SPP.frameTime;0<=this.life||(this.dispatchEvent(new SPP.Event("dead")),this.reset())},update:function(){},dealloc:function(){SPP.VectorPool.recycle(this.position);SPP.VectorPool.recycle(this.velocity);SPP.VectorPool.recycle(this.acceleration);SPP.VectorPool.recycle(this.damp);this.group=this.zone=this.onUpdate=this.extra=this._forcesMap=this.life=this.damp=this.acceleration=this.velocity=this.position=null}, +reset:function(){SPP.VectorPool.recycle(this.position);SPP.VectorPool.recycle(this.velocity);SPP.VectorPool.recycle(this.acceleration);SPP.VectorPool.recycle(this.damp);this.damp=this.acceleration=this.velocity=this.position=null;this.life=0;this.removeAllForces();this.removeAllEventListeners();for(var a in this.extra)delete this.extra[a];this.group=this.zone=this.onUpdate=null}};SPP.extend(SPP.Particle.prototype,SPP.EventDispatcher.prototype);SPP.Pool=function(){var a=[];this.get=function(b){for(var c in a)if(a[c].constructor===b)return a.splice(c,1)[0];return new b};this.recycle=function(b){a.push(b)};this.getObjects=function(){return a};this.dealloc=function(){for(var b=0,c=a.length;b=a[c].life&&(SPP.particlePool.recycle(a[c]),a.splice(c,1));for(c=b.length;0=b[c].life&&(SPP.forcePool.recycle(b[c]),b.splice(c,1))}};this.start= function(){d=Date.now();g=!0};this.stop=function(){g=!1};this.destroy=function(){this.stop();g=d=null;for(var e=0,f=a.length;ethis.boundary.right())a.position.x=a.position.xthis.boundary.bottom())a.position.y=a.position.ythis.boundary.right()&&(a.position.x=this.boundary.left());a.position.ythis.boundary.bottom()&&(a.position.y=this.boundary.top())}};SPP.Force=function(){this.value=SPP.VectorPool.get();this.life=Infinity;this.target=null}; diff --git a/src/particles/Particle.js b/src/particles/Particle.js index ba02a6d..f217234 100644 --- a/src/particles/Particle.js +++ b/src/particles/Particle.js @@ -18,6 +18,12 @@ SPP.Particle.prototype = { this.damp = SPP.VectorPool.get(); this.damp.reset(0.1, 0.1); this.life = life || Infinity; + if (x instanceof Array) { + x = x[0] + ( Math.random() * x[1] ); + } + if (y instanceof Array) { + y = y[0] + ( Math.random() * y[1] ); + } this.position.reset(x, y); }, getForce: function (id)