mirror of
https://github.com/hiloteam/Hilo.git
synced 2026-01-18 16:04:19 +00:00
6 lines
3.0 KiB
JavaScript
6 lines
3.0 KiB
JavaScript
/**
|
|
* Hilo 1.1.9 for commonjs
|
|
* Copyright 2016 alibaba.com
|
|
* Licensed under the MIT License
|
|
*/
|
|
var Hilo=require("../core/Hilo"),Class=require("../core/Class"),View=require("../view/View"),Container=require("../view/Container"),Drawable=require("../view/Drawable"),util=require("../util/util"),ParticleSystem=function(){function t(t,i){return i?t+2*(Math.random()-.5)*i:t}for(var i=["x","y","vx","vy","ax","ay","rotation","rotationV","scale","scaleV","alpha","alphaV","life"],e=[],s=0,h=i.length;s<h;s++){var a=i[s];e.push(a),e.push(a+"Var")}var r={x:0,y:0,vx:0,vy:0,ax:0,ay:0,scale:1,scaleV:0,alpha:1,alphaV:0,rotation:0,rotationV:0,life:1},n=[],o=Class.create({Extends:Container,constructor:function(t){this.id=this.id||t.id||Hilo.getUid("ParticleSystem"),this.emitterX=0,this.emitterY=0,this.gx=0,this.gy=0,this.totalTime=1/0,this.emitNum=10,this.emitNumVar=0,this.emitTime=.2,this.emitTimeVar=0,this.particle={},o.superclass.constructor.call(this,t),this.reset(t)},Statics:{PROPS:e,PROPS_DEFAULT:r,diedParticles:n},reset:function(t){util.copy(this,t),this.particle.system=this,this.totalTime<=0&&(this.totalTime=1/0)},onUpdate:function(i){i*=.001,this._isRun&&(this._totalRunTime+=i,this._currentRunTime+=i,this._currentRunTime>=this._emitTime&&(this._currentRunTime=0,this._emitTime=t(this.emitTime,this.emitTimeVar),this._emit()),this._totalRunTime>=this.totalTime&&this.stop())},_emit:function(){for(var i=t(this.emitNum,this.emitNumVar)>>0,e=0;e<i;e++)this.addChild(l.create(this.particle))},start:function(){this.stop(!0),this._currentRunTime=0,this._totalRunTime=0,this._isRun=!0,this._emitTime=t(this.emitTime,this.emitTimeVar)},stop:function(t){if(this._isRun=!1,t)for(var i=this.children.length-1;i>=0;i--)this.children[i].destroy()}}),l=Class.create({Extends:View,constructor:function(t){this.id=this.id||t.id||Hilo.getUid("Particle"),l.superclass.constructor.call(this,t),this.init(t)},onUpdate:function(t){if(t*=.001,this._died)return!1;var i=this.ax+this.system.gx,e=this.ay+this.system.gy;return this.vx+=i*t,this.vy+=e*t,this.x+=this.vx*t,this.y+=this.vy*t,this.rotation+=this.rotationV,this._time>.1&&(this.alpha+=this.alphaV),this.scale+=this.scaleV,this.scaleX=this.scaleY=this.scale,this._time+=t,this._time>=this.life||this.alpha<=0?(this.destroy(),!1):void 0},setImage:function(t,i){this.drawable=this.drawable||new Drawable,i=i||[0,0,t.width,t.height],this.width=i[2],this.height=i[3],this.drawable.rect=i,this.drawable.image=t},destroy:function(){this._died=!0,this.alpha=0,this.removeFromParent(),n.push(this)},init:function(i){this.system=i.system,this._died=!1,this._time=0,this.alpha=1;for(var s=0,h=e.length;s<h;s++){var a=e[s],n=void 0===i[a]?r[a]:i[a];this[a]=t(n,i[a+"Var"])}if(this.x+=this.system.emitterX,this.y+=this.system.emitterY,i.image){var o=i.frame;o&&o[0].length&&(o=o[Math.random()*o.length>>0]),this.setImage(i.image,o),void 0!==i.pivotX&&(this.pivotX=i.pivotX*o[2]),void 0!==i.pivotY&&(this.pivotY=i.pivotY*o[3])}},Statics:{create:function(t){if(n.length>0){var i=n.pop();return i.init(t),i}return new l(t)}}});return o}();module.exports=ParticleSystem; |