mirror of
https://github.com/photonstorm/phaser
synced 2024-11-25 14:10:42 +00:00
1 line
No EOL
149 KiB
JavaScript
1 line
No EOL
149 KiB
JavaScript
var GameMath=(function(){function GameMath(game){this.cosTable=[];this.sinTable=[];this.globalSeed=Math.random();this._game=game}GameMath.PI=3.141592653589793;GameMath.PI_2=1.5707963267948966;GameMath.PI_4=0.7853981633974483;GameMath.PI_8=0.39269908169872414;GameMath.PI_16=0.19634954084936207;GameMath.TWO_PI=6.283185307179586;GameMath.THREE_PI_2=4.71238898038469;GameMath.E=2.71828182845905;GameMath.LN10=2.302585092994046;GameMath.LN2=0.6931471805599453;GameMath.LOG10E=0.4342944819032518;GameMath.LOG2E=1.4426950408889634;GameMath.SQRT1_2=0.7071067811865476;GameMath.SQRT2=1.4142135623730951;GameMath.DEG_TO_RAD=0.017453292519943295;GameMath.RAD_TO_DEG=57.29577951308232;GameMath.B_16=65536;GameMath.B_31=2147483648;GameMath.B_32=4294967296;GameMath.B_48=281474976710656;GameMath.B_53=9007199254740992;GameMath.B_64=18446744073709552000;GameMath.ONE_THIRD=0.3333333333333333;GameMath.TWO_THIRDS=0.6666666666666666;GameMath.ONE_SIXTH=0.16666666666666666;GameMath.COS_PI_3=0.8660254037844386;GameMath.SIN_2PI_3=0.03654595;GameMath.CIRCLE_ALPHA=0.5522847498307935;GameMath.ON=true;GameMath.OFF=false;GameMath.SHORT_EPSILON=0.1;GameMath.PERC_EPSILON=0.001;GameMath.EPSILON=0.0001;GameMath.LONG_EPSILON=1e-8;GameMath.prototype.computeMachineEpsilon=function(){var fourThirds=4/3;var third=fourThirds-1;var one=third+third+third;return Math.abs(1-one)};GameMath.prototype.fuzzyEqual=function(a,b,epsilon){if(typeof epsilon==="undefined"){epsilon=0.0001}return Math.abs(a-b)<epsilon};GameMath.prototype.fuzzyLessThan=function(a,b,epsilon){if(typeof epsilon==="undefined"){epsilon=0.0001}return a<b+epsilon};GameMath.prototype.fuzzyGreaterThan=function(a,b,epsilon){if(typeof epsilon==="undefined"){epsilon=0.0001}return a>b-epsilon};GameMath.prototype.fuzzyCeil=function(val,epsilon){if(typeof epsilon==="undefined"){epsilon=0.0001}return Math.ceil(val-epsilon)};GameMath.prototype.fuzzyFloor=function(val,epsilon){if(typeof epsilon==="undefined"){epsilon=0.0001}return Math.floor(val+epsilon)};GameMath.prototype.average=function(){var args=[];for(var _i=0;_i<(arguments.length-0);_i++){args[_i]=arguments[_i+0]}var avg=0;for(var i=0;i<args.length;i++){avg+=args[i]}return avg/args.length};GameMath.prototype.slam=function(value,target,epsilon){if(typeof epsilon==="undefined"){epsilon=0.0001}return(Math.abs(value-target)<epsilon)?target:value};GameMath.prototype.percentageMinMax=function(val,max,min){if(typeof min==="undefined"){min=0}val-=min;max-=min;if(!max){return 0}else{return val/max}};GameMath.prototype.sign=function(n){if(n){return n/Math.abs(n)}else{return 0}};GameMath.prototype.truncate=function(n){return(n>0)?Math.floor(n):Math.ceil(n)};GameMath.prototype.shear=function(n){return n%1};GameMath.prototype.wrap=function(val,max,min){if(typeof min==="undefined"){min=0}val-=min;max-=min;if(max==0){return min}val%=max;val+=min;while(val<min){val+=max}return val};GameMath.prototype.arithWrap=function(value,max,min){if(typeof min==="undefined"){min=0}max-=min;if(max==0){return min}return value-max*Math.floor((value-min)/max)};GameMath.prototype.clamp=function(input,max,min){if(typeof min==="undefined"){min=0}return Math.max(min,Math.min(max,input))};GameMath.prototype.snapTo=function(input,gap,start){if(typeof start==="undefined"){start=0}if(gap==0){return input}input-=start;input=gap*Math.round(input/gap);return start+input};GameMath.prototype.snapToFloor=function(input,gap,start){if(typeof start==="undefined"){start=0}if(gap==0){return input}input-=start;input=gap*Math.floor(input/gap);return start+input};GameMath.prototype.snapToCeil=function(input,gap,start){if(typeof start==="undefined"){start=0}if(gap==0){return input}input-=start;input=gap*Math.ceil(input/gap);return start+input};GameMath.prototype.snapToInArray=function(input,arr,sort){if(typeof sort==="undefined"){sort=true}if(sort){arr.sort()}if(input<arr[0]){return arr[0]}var i=1;while(arr[i]<input){i++}var low=arr[i-1];var high=(i<arr.length)?arr[i]:Number.POSITIVE_INFINITY;return((high-input)<=(input-low))?high:low};GameMath.prototype.roundTo=function(value,place,base){if(typeof place==="undefined"){place=0}if(typeof base==="undefined"){base=10}var p=Math.pow(base,-place);return Math.round(value*p)/p};GameMath.prototype.floorTo=function(value,place,base){if(typeof place==="undefined"){place=0}if(typeof base==="undefined"){base=10}var p=Math.pow(base,-place);return Math.floor(value*p)/p};GameMath.prototype.ceilTo=function(value,place,base){if(typeof place==="undefined"){place=0}if(typeof base==="undefined"){base=10}var p=Math.pow(base,-place);return Math.ceil(value*p)/p};GameMath.prototype.interpolateFloat=function(a,b,weight){return(b-a)*weight+a};GameMath.prototype.radiansToDegrees=function(angle){return angle*GameMath.RAD_TO_DEG};GameMath.prototype.degreesToRadians=function(angle){return angle*GameMath.DEG_TO_RAD};GameMath.prototype.angleBetween=function(x1,y1,x2,y2){return Math.atan2(y2-y1,x2-x1)};GameMath.prototype.normalizeAngle=function(angle,radians){if(typeof radians==="undefined"){radians=true}var rd=(radians)?GameMath.PI:180;return this.wrap(angle,rd,-rd)};GameMath.prototype.nearestAngleBetween=function(a1,a2,radians){if(typeof radians==="undefined"){radians=true}var rd=(radians)?GameMath.PI:180;a1=this.normalizeAngle(a1,radians);a2=this.normalizeAngle(a2,radians);if(a1<-rd/2&&a2>rd/2){a1+=rd*2}if(a2<-rd/2&&a1>rd/2){a2+=rd*2}return a2-a1};GameMath.prototype.normalizeAngleToAnother=function(dep,ind,radians){if(typeof radians==="undefined"){radians=true}return ind+this.nearestAngleBetween(ind,dep,radians)};GameMath.prototype.normalizeAngleAfterAnother=function(dep,ind,radians){if(typeof radians==="undefined"){radians=true}dep=this.normalizeAngle(dep-ind,radians);return ind+dep};GameMath.prototype.normalizeAngleBeforeAnother=function(dep,ind,radians){if(typeof radians==="undefined"){radians=true}dep=this.normalizeAngle(ind-dep,radians);return ind-dep};GameMath.prototype.interpolateAngles=function(a1,a2,weight,radians,ease){if(typeof radians==="undefined"){radians=true}if(typeof ease==="undefined"){ease=null}a1=this.normalizeAngle(a1,radians);a2=this.normalizeAngleToAnother(a2,a1,radians);return(typeof ease==="function")?ease(weight,a1,a2-a1,1):this.interpolateFloat(a1,a2,weight)};GameMath.prototype.logBaseOf=function(value,base){return Math.log(value)/Math.log(base)};GameMath.prototype.GCD=function(m,n){var r;m=Math.abs(m);n=Math.abs(n);if(m<n){r=m;m=n;n=r}while(true){r=m%n;if(!r){return n}m=n;n=r}return 1};GameMath.prototype.LCM=function(m,n){return(m*n)/this.GCD(m,n)};GameMath.prototype.factorial=function(value){if(value==0){return 1}var res=value;while(--value){res*=value}return res};GameMath.prototype.gammaFunction=function(value){return this.factorial(value-1)};GameMath.prototype.fallingFactorial=function(base,exp){return this.factorial(base)/this.factorial(base-exp)};GameMath.prototype.risingFactorial=function(base,exp){return this.factorial(base+exp-1)/this.factorial(base-1)};GameMath.prototype.binCoef=function(n,k){return this.fallingFactorial(n,k)/this.factorial(k)};GameMath.prototype.risingBinCoef=function(n,k){return this.risingFactorial(n,k)/this.factorial(k)};GameMath.prototype.chanceRoll=function(chance){if(typeof chance==="undefined"){chance=50}if(chance<=0){return false}else{if(chance>=100){return true}else{if(Math.random()*100>=chance){return false}else{return true}}}};GameMath.prototype.maxAdd=function(value,amount,max){value+=amount;if(value>max){value=max}return value};GameMath.prototype.minSub=function(value,amount,min){value-=amount;if(value<min){value=min}return value};GameMath.prototype.wrapValue=function(value,amount,max){var diff;value=Math.abs(value);amount=Math.abs(amount);max=Math.abs(max);diff=(value+amount)%max;return diff};GameMath.prototype.randomSign=function(){return(Math.random()>0.5)?1:-1};GameMath.prototype.isOdd=function(n){if(n&1){return true}else{return false}};GameMath.prototype.isEven=function(n){if(n&1){return false}else{return true}};GameMath.prototype.wrapAngle=function(angle){var result=angle;if(angle>=-180&&angle<=180){return angle}result=(angle+180)%360;if(result<0){result+=360}return result-180};GameMath.prototype.angleLimit=function(angle,min,max){var result=angle;if(angle>max){result=max}else{if(angle<min){result=min}}return result};GameMath.prototype.linearInterpolation=function(v,k){var m=v.length-1;var f=m*k;var i=Math.floor(f);if(k<0){return this.linear(v[0],v[1],f)}if(k>1){return this.linear(v[m],v[m-1],m-f)}return this.linear(v[i],v[i+1>m?m:i+1],f-i)};GameMath.prototype.bezierInterpolation=function(v,k){var b=0;var n=v.length-1;for(var i=0;i<=n;i++){b+=Math.pow(1-k,n-i)*Math.pow(k,i)*v[i]*this.bernstein(n,i)}return b};GameMath.prototype.catmullRomInterpolation=function(v,k){var m=v.length-1;var f=m*k;var i=Math.floor(f);if(v[0]===v[m]){if(k<0){i=Math.floor(f=m*(1+k))}return this.catmullRom(v[(i-1+m)%m],v[i],v[(i+1)%m],v[(i+2)%m],f-i)}else{if(k<0){return v[0]-(this.catmullRom(v[0],v[0],v[1],v[1],-f)-v[0])}if(k>1){return v[m]-(this.catmullRom(v[m],v[m],v[m-1],v[m-1],f-m)-v[m])}return this.catmullRom(v[i?i-1:0],v[i],v[m<i+1?m:i+1],v[m<i+2?m:i+2],f-i)}};GameMath.prototype.linear=function(p0,p1,t){return(p1-p0)*t+p0};GameMath.prototype.bernstein=function(n,i){return this.factorial(n)/this.factorial(i)/this.factorial(n-i)};GameMath.prototype.catmullRom=function(p0,p1,p2,p3,t){var v0=(p2-p0)*0.5,v1=(p3-p1)*0.5,t2=t*t,t3=t*t2;return(2*p1-2*p2+v0+v1)*t3+(-3*p1+3*p2-2*v0-v1)*t2+v0*t+p1};GameMath.prototype.difference=function(a,b){return Math.abs(a-b)};GameMath.prototype.computeVelocity=function(Velocity,Acceleration,Drag,Max){if(typeof Acceleration==="undefined"){Acceleration=0}if(typeof Drag==="undefined"){Drag=0}if(typeof Max==="undefined"){Max=10000}if(Acceleration!==0){Velocity+=Acceleration*this._game.time.elapsed}else{if(Drag!==0){var drag=Drag*this._game.time.elapsed;if(Velocity-drag>0){Velocity=Velocity-drag}else{if(Velocity+drag<0){Velocity+=drag}else{Velocity=0}}}}if((Velocity!=0)&&(Max!=10000)){if(Velocity>Max){Velocity=Max}else{if(Velocity<-Max){Velocity=-Max}}}return Velocity};GameMath.prototype.velocityFromAngle=function(angle,speed){var a=this.degreesToRadians(angle);return new Point((Math.cos(a)*speed),(Math.sin(a)*speed))};GameMath.prototype.random=function(){return this.globalSeed=this.srand(this.globalSeed)};GameMath.prototype.srand=function(Seed){return((69621*(Seed*2147483647))%2147483647)/2147483647};GameMath.prototype.getRandom=function(Objects,StartIndex,Length){if(typeof StartIndex==="undefined"){StartIndex=0}if(typeof Length==="undefined"){Length=0}if(Objects!=null){var l=Length;if((l==0)||(l>Objects.length-StartIndex)){l=Objects.length-StartIndex}if(l>0){return Objects[StartIndex+Math.floor(Math.random()*l)]}}return null};GameMath.prototype.floor=function(Value){var n=Value|0;return(Value>0)?(n):((n!=Value)?(n-1):(n))};GameMath.prototype.ceil=function(Value){var n=Value|0;return(Value>0)?((n!=Value)?(n+1):(n)):(n)};GameMath.prototype.sinCosGenerator=function(length,sinAmplitude,cosAmplitude,frequency){if(typeof sinAmplitude==="undefined"){sinAmplitude=1}if(typeof cosAmplitude==="undefined"){cosAmplitude=1}if(typeof frequency==="undefined"){frequency=1}var sin=sinAmplitude;var cos=cosAmplitude;var frq=frequency*Math.PI/length;this.cosTable=[];this.sinTable=[];for(var c=0;c<length;c++){cos-=sin*frq;sin+=cos*frq;this.cosTable[c]=cos;this.sinTable[c]=sin}return this.sinTable};return GameMath})();var Point=(function(){function Point(x,y){if(typeof x==="undefined"){x=0}if(typeof y==="undefined"){y=0}this.setTo(x,y)}Point.prototype.add=function(toAdd,output){if(typeof output==="undefined"){output=new Point()}return output.setTo(this.x+toAdd.x,this.y+toAdd.y)};Point.prototype.addTo=function(x,y){if(typeof x==="undefined"){x=0}if(typeof y==="undefined"){y=0}return this.setTo(this.x+x,this.y+y)};Point.prototype.subtractFrom=function(x,y){if(typeof x==="undefined"){x=0}if(typeof y==="undefined"){y=0}return this.setTo(this.x-x,this.y-y)};Point.prototype.invert=function(){return this.setTo(this.y,this.x)};Point.prototype.clamp=function(min,max){this.clampX(min,max);this.clampY(min,max);return this};Point.prototype.clampX=function(min,max){this.x=Math.max(Math.min(this.x,max),min);return this};Point.prototype.clampY=function(min,max){this.x=Math.max(Math.min(this.x,max),min);this.y=Math.max(Math.min(this.y,max),min);return this};Point.prototype.clone=function(output){if(typeof output==="undefined"){output=new Point()}return output.setTo(this.x,this.y)};Point.prototype.copyFrom=function(source){return this.setTo(source.x,source.y)};Point.prototype.copyTo=function(target){return target.setTo(this.x,this.y)};Point.prototype.distanceTo=function(target,round){if(typeof round==="undefined"){round=false}var dx=this.x-target.x;var dy=this.y-target.y;if(round===true){return Math.round(Math.sqrt(dx*dx+dy*dy))}else{return Math.sqrt(dx*dx+dy*dy)}};Point.distanceBetween=function distanceBetween(pointA,pointB,round){if(typeof round==="undefined"){round=false}var dx=pointA.x-pointB.x;var dy=pointA.y-pointB.y;if(round===true){return Math.round(Math.sqrt(dx*dx+dy*dy))}else{return Math.sqrt(dx*dx+dy*dy)}};Point.prototype.distanceCompare=function(target,distance){if(this.distanceTo(target)>=distance){return true}else{return false}};Point.prototype.equals=function(toCompare){if(this.x===toCompare.x&&this.y===toCompare.y){return true}else{return false}};Point.prototype.interpolate=function(pointA,pointB,f){};Point.prototype.offset=function(dx,dy){this.x+=dx;this.y+=dy;return this};Point.prototype.polar=function(length,angle){};Point.prototype.setTo=function(x,y){this.x=x;this.y=y;return this};Point.prototype.subtract=function(point,output){if(typeof output==="undefined"){output=new Point()}return output.setTo(this.x-point.x,this.y-point.y)};Point.prototype.toString=function(){return"[{Point (x="+this.x+" y="+this.y+")}]"};return Point})();var Rectangle=(function(){function Rectangle(x,y,width,height){if(typeof x==="undefined"){x=0}if(typeof y==="undefined"){y=0}if(typeof width==="undefined"){width=0}if(typeof height==="undefined"){height=0}this.x=0;this.y=0;this.width=0;this.height=0;this.setTo(x,y,width,height)}Object.defineProperty(Rectangle.prototype,"halfWidth",{get:function(){return Math.round(this.width/2)},enumerable:true,configurable:true});Object.defineProperty(Rectangle.prototype,"halfHeight",{get:function(){return Math.round(this.height/2)},enumerable:true,configurable:true});Object.defineProperty(Rectangle.prototype,"bottom",{get:function(){return this.y+this.height},set:function(value){if(value<this.y){this.height=0}else{this.height=this.y+value}},enumerable:true,configurable:true});Object.defineProperty(Rectangle.prototype,"bottomRight",{get:function(){return new Point(this.right,this.bottom)},set:function(value){this.right=value.x;this.bottom=value.y},enumerable:true,configurable:true});Object.defineProperty(Rectangle.prototype,"left",{get:function(){return this.x},set:function(value){var diff=this.x-value;if(this.width+diff<0){this.width=0;this.x=value}else{this.width+=diff;this.x=value}},enumerable:true,configurable:true});Object.defineProperty(Rectangle.prototype,"right",{get:function(){return this.x+this.width},set:function(value){if(value<this.x){this.width=0;return this.x}else{this.width=(value-this.x)}},enumerable:true,configurable:true});Rectangle.prototype.size=function(output){if(typeof output==="undefined"){output=new Point()}return output.setTo(this.width,this.height)};Object.defineProperty(Rectangle.prototype,"volume",{get:function(){return this.width*this.height},enumerable:true,configurable:true});Object.defineProperty(Rectangle.prototype,"perimeter",{get:function(){return(this.width*2)+(this.height*2)},enumerable:true,configurable:true});Object.defineProperty(Rectangle.prototype,"top",{get:function(){return this.y},set:function(value){var diff=this.y-value;if(this.height+diff<0){this.height=0;this.y=value}else{this.height+=diff;this.y=value}},enumerable:true,configurable:true});Object.defineProperty(Rectangle.prototype,"topLeft",{get:function(){return new Point(this.x,this.y)},set:function(value){this.x=value.x;this.y=value.y},enumerable:true,configurable:true});Rectangle.prototype.clone=function(output){if(typeof output==="undefined"){output=new Rectangle()}return output.setTo(this.x,this.y,this.width,this.height)};Rectangle.prototype.contains=function(x,y){if(x>=this.x&&x<=this.right&&y>=this.y&&y<=this.bottom){return true}return false};Rectangle.prototype.containsPoint=function(point){return this.contains(point.x,point.y)};Rectangle.prototype.containsRect=function(rect){if(rect.volume>this.volume){return false}if(rect.x>=this.x&&rect.y>=this.y&&rect.right<=this.right&&rect.bottom<=this.bottom){return true}return false};Rectangle.prototype.copyFrom=function(source){return this.setTo(source.x,source.y,source.width,source.height)};Rectangle.prototype.copyTo=function(target){return target.copyFrom(this)};Rectangle.prototype.equals=function(toCompare){if(this.x===toCompare.x&&this.y===toCompare.y&&this.width===toCompare.width&&this.height===toCompare.height){return true}return false};Rectangle.prototype.inflate=function(dx,dy){if(!isNaN(dx)&&!isNaN(dy)){this.x-=dx;this.width+=2*dx;this.y-=dy;this.height+=2*dy}return this};Rectangle.prototype.inflatePoint=function(point){return this.inflate(point.x,point.y)};Rectangle.prototype.intersection=function(toIntersect,output){if(typeof output==="undefined"){output=new Rectangle()}if(this.intersects(toIntersect)===true){output.x=Math.max(toIntersect.x,this.x);output.y=Math.max(toIntersect.y,this.y);output.width=Math.min(toIntersect.right,this.right)-output.x;output.height=Math.min(toIntersect.bottom,this.bottom)-output.y}return output};Rectangle.prototype.intersects=function(toIntersect){if(toIntersect.x>=this.right){return false}if(toIntersect.right<=this.x){return false}if(toIntersect.bottom<=this.y){return false}if(toIntersect.y>=this.bottom){return false}return true};Rectangle.prototype.overlap=function(rect){return(rect.x+rect.width>this.x)&&(rect.x<this.x+this.width)&&(rect.y+rect.height>this.y)&&(rect.y<this.y+this.height)};Object.defineProperty(Rectangle.prototype,"isEmpty",{get:function(){if(this.width<1||this.height<1){return true}return false},enumerable:true,configurable:true});Rectangle.prototype.offset=function(dx,dy){if(!isNaN(dx)&&!isNaN(dy)){this.x+=dx;this.y+=dy}return this};Rectangle.prototype.offsetPoint=function(point){return this.offset(point.x,point.y)};Rectangle.prototype.setEmpty=function(){return this.setTo(0,0,0,0)};Rectangle.prototype.setTo=function(x,y,width,height){if(!isNaN(x)&&!isNaN(y)&&!isNaN(width)&&!isNaN(height)){this.x=x;this.y=y;if(width>0){this.width=width}if(height>0){this.height=height}}return this};Rectangle.prototype.union=function(toUnion,output){if(typeof output==="undefined"){output=new Rectangle()}return output.setTo(Math.min(toUnion.x,this.x),Math.min(toUnion.y,this.y),Math.max(toUnion.right,this.right),Math.max(toUnion.bottom,this.bottom))};Rectangle.prototype.toString=function(){return"[{Rectangle (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+" empty="+this.isEmpty+")}]"};return Rectangle})();var Camera=(function(){function Camera(game,id,x,y,width,height){this._clip=false;this._rotation=0;this._target=null;this._sx=0;this._sy=0;this._fxFlashComplete=null;this._fxFlashDuration=0;this._fxFlashAlpha=0;this._fxFadeComplete=null;this._fxFadeDuration=0;this._fxFadeAlpha=0;this._fxShakeIntensity=0;this._fxShakeDuration=0;this._fxShakeComplete=null;this._fxShakeOffset=new Point(0,0);this._fxShakeDirection=0;this._fxShakePrevX=0;this._fxShakePrevY=0;this.scale=new Point(1,1);this.scroll=new Point(0,0);this.bounds=null;this.deadzone=null;this.showBorder=false;this.borderColor="rgb(255,255,255)";this.opaque=true;this._bgColor="rgb(0,0,0)";this._bgTextureRepeat="repeat";this.showShadow=false;this.shadowColor="rgb(0,0,0)";this.shadowBlur=10;this.shadowOffset=new Point(4,4);this.visible=true;this.alpha=1;this.inputX=0;this.inputY=0;this._game=game;this.ID=id;this._stageX=x;this._stageY=y;this.worldView=new Rectangle(0,0,width,height);this.checkClip()}Camera.STYLE_LOCKON=0;Camera.STYLE_PLATFORMER=1;Camera.STYLE_TOPDOWN=2;Camera.STYLE_TOPDOWN_TIGHT=3;Camera.SHAKE_BOTH_AXES=0;Camera.SHAKE_HORIZONTAL_ONLY=1;Camera.SHAKE_VERTICAL_ONLY=2;Camera.prototype.flash=function(color,duration,onComplete,force){if(typeof color==="undefined"){color=16777215}if(typeof duration==="undefined"){duration=1}if(typeof onComplete==="undefined"){onComplete=null}if(typeof force==="undefined"){force=false}if(force===false&&this._fxFlashAlpha>0){return}if(duration<=0){duration=1}var red=color>>16&255;var green=color>>8&255;var blue=color&255;this._fxFlashColor="rgba("+red+","+green+","+blue+",";this._fxFlashDuration=duration;this._fxFlashAlpha=1;this._fxFlashComplete=onComplete};Camera.prototype.fade=function(color,duration,onComplete,force){if(typeof color==="undefined"){color=0}if(typeof duration==="undefined"){duration=1}if(typeof onComplete==="undefined"){onComplete=null}if(typeof force==="undefined"){force=false}if(force===false&&this._fxFadeAlpha>0){return}if(duration<=0){duration=1}var red=color>>16&255;var green=color>>8&255;var blue=color&255;this._fxFadeColor="rgba("+red+","+green+","+blue+",";this._fxFadeDuration=duration;this._fxFadeAlpha=0.01;this._fxFadeComplete=onComplete};Camera.prototype.shake=function(intensity,duration,onComplete,force,direction){if(typeof intensity==="undefined"){intensity=0.05}if(typeof duration==="undefined"){duration=0.5}if(typeof onComplete==="undefined"){onComplete=null}if(typeof force==="undefined"){force=true}if(typeof direction==="undefined"){direction=Camera.SHAKE_BOTH_AXES}if(!force&&((this._fxShakeOffset.x!=0)||(this._fxShakeOffset.y!=0))){return}if(this._fxShakeOffset.x==0&&this._fxShakeOffset.y==0){this._fxShakePrevX=this._stageX;this._fxShakePrevY=this._stageY}this._fxShakeIntensity=intensity;this._fxShakeDuration=duration;this._fxShakeComplete=onComplete;this._fxShakeDirection=direction;this._fxShakeOffset.setTo(0,0)};Camera.prototype.stopFX=function(){this._fxFlashAlpha=0;this._fxFadeAlpha=0;if(this._fxShakeDuration!==0){this._fxShakeDuration=0;this._fxShakeOffset.setTo(0,0);this._stageX=this._fxShakePrevX;this._stageY=this._fxShakePrevY}};Camera.prototype.follow=function(target,style){if(typeof style==="undefined"){style=Camera.STYLE_LOCKON}this._target=target;var helper;switch(style){case Camera.STYLE_PLATFORMER:var w=this.width/8;var h=this.height/3;this.deadzone=new Rectangle((this.width-w)/2,(this.height-h)/2-h*0.25,w,h);break;case Camera.STYLE_TOPDOWN:helper=Math.max(this.width,this.height)/4;this.deadzone=new Rectangle((this.width-helper)/2,(this.height-helper)/2,helper,helper);break;case Camera.STYLE_TOPDOWN_TIGHT:helper=Math.max(this.width,this.height)/8;this.deadzone=new Rectangle((this.width-helper)/2,(this.height-helper)/2,helper,helper);break;case Camera.STYLE_LOCKON:default:this.deadzone=null;break}};Camera.prototype.focusOnXY=function(x,y){x+=(x>0)?1e-7:-1e-7;y+=(y>0)?1e-7:-1e-7;this.scroll.x=Math.round(x-this.worldView.halfWidth);this.scroll.y=Math.round(y-this.worldView.halfHeight)};Camera.prototype.focusOn=function(point){point.x+=(point.x>0)?1e-7:-1e-7;point.y+=(point.y>0)?1e-7:-1e-7;this.scroll.x=Math.round(point.x-this.worldView.halfWidth);this.scroll.y=Math.round(point.y-this.worldView.halfHeight)};Camera.prototype.setBounds=function(X,Y,Width,Height,UpdateWorld){if(typeof X==="undefined"){X=0}if(typeof Y==="undefined"){Y=0}if(typeof Width==="undefined"){Width=0}if(typeof Height==="undefined"){Height=0}if(typeof UpdateWorld==="undefined"){UpdateWorld=false}if(this.bounds==null){this.bounds=new Rectangle()}this.bounds.setTo(X,Y,Width,Height);this.update()};Camera.prototype.update=function(){if(this._target!==null){if(this.deadzone==null){this.focusOnXY(this._target.x+this._target.origin.x,this._target.y+this._target.origin.y)}else{var edge;var targetX=this._target.x+((this._target.x>0)?1e-7:-1e-7);var targetY=this._target.y+((this._target.y>0)?1e-7:-1e-7);edge=targetX-this.deadzone.x;if(this.scroll.x>edge){this.scroll.x=edge}edge=targetX+this._target.width-this.deadzone.x-this.deadzone.width;if(this.scroll.x<edge){this.scroll.x=edge}edge=targetY-this.deadzone.y;if(this.scroll.y>edge){this.scroll.y=edge}edge=targetY+this._target.height-this.deadzone.y-this.deadzone.height;if(this.scroll.y<edge){this.scroll.y=edge}}}if(this.bounds!==null){if(this.scroll.x<this.bounds.left){this.scroll.x=this.bounds.left}if(this.scroll.x>this.bounds.right-this.width){this.scroll.x=this.bounds.right-this.width}if(this.scroll.y<this.bounds.top){this.scroll.y=this.bounds.top}if(this.scroll.y>this.bounds.bottom-this.height){this.scroll.y=this.bounds.bottom-this.height}}this.worldView.x=this.scroll.x;this.worldView.y=this.scroll.y;this.inputX=this.worldView.x+this._game.input.x;this.inputY=this.worldView.y+this._game.input.y;if(this._fxFlashAlpha>0){this._fxFlashAlpha-=this._game.time.elapsed/this._fxFlashDuration;this._fxFlashAlpha=this._game.math.roundTo(this._fxFlashAlpha,-2);if(this._fxFlashAlpha<=0){this._fxFlashAlpha=0;if(this._fxFlashComplete!==null){this._fxFlashComplete()}}}if(this._fxFadeAlpha>0){this._fxFadeAlpha+=this._game.time.elapsed/this._fxFadeDuration;this._fxFadeAlpha=this._game.math.roundTo(this._fxFadeAlpha,-2);if(this._fxFadeAlpha>=1){this._fxFadeAlpha=1;if(this._fxFadeComplete!==null){this._fxFadeComplete()}}}if(this._fxShakeDuration>0){this._fxShakeDuration-=this._game.time.elapsed;this._fxShakeDuration=this._game.math.roundTo(this._fxShakeDuration,-2);if(this._fxShakeDuration<=0){this._fxShakeDuration=0;this._fxShakeOffset.setTo(0,0);this._stageX=this._fxShakePrevX;this._stageY=this._fxShakePrevY;if(this._fxShakeComplete!=null){this._fxShakeComplete()}}else{if((this._fxShakeDirection==Camera.SHAKE_BOTH_AXES)||(this._fxShakeDirection==Camera.SHAKE_HORIZONTAL_ONLY)){this._fxShakeOffset.x=(this._game.math.random()*this._fxShakeIntensity*this.worldView.width*2-this._fxShakeIntensity*this.worldView.width)}if((this._fxShakeDirection==Camera.SHAKE_BOTH_AXES)||(this._fxShakeDirection==Camera.SHAKE_VERTICAL_ONLY)){this._fxShakeOffset.y=(this._game.math.random()*this._fxShakeIntensity*this.worldView.height*2-this._fxShakeIntensity*this.worldView.height)}}}};Camera.prototype.render=function(){if(this.visible===false&&this.alpha<0.1){return}if((this._fxShakeOffset.x!=0)||(this._fxShakeOffset.y!=0)){this._stageX=this._fxShakePrevX+(this.worldView.halfWidth)+this._fxShakeOffset.x;this._stageY=this._fxShakePrevY+(this.worldView.halfHeight)+this._fxShakeOffset.y}this._game.stage.context.save();if(this.alpha!==1){this._game.stage.context.globalAlpha=this.alpha}this._sx=this._stageX;this._sy=this._stageY;if(this.showShadow){this._game.stage.context.shadowColor=this.shadowColor;this._game.stage.context.shadowBlur=this.shadowBlur;this._game.stage.context.shadowOffsetX=this.shadowOffset.x;this._game.stage.context.shadowOffsetY=this.shadowOffset.y}if(this.scale.x!==1||this.scale.y!==1){this._game.stage.context.scale(this.scale.x,this.scale.y);this._sx=this._sx/this.scale.x;this._sy=this._sy/this.scale.y}if(this._rotation!==0){this._game.stage.context.translate(this._sx+this.worldView.halfWidth,this._sy+this.worldView.halfHeight);this._game.stage.context.rotate(this._rotation*(Math.PI/180));this._game.stage.context.translate(-(this._sx+this.worldView.halfWidth),-(this._sy+this.worldView.halfHeight))}if(this.opaque==true){if(this._bgTexture){this._game.stage.context.fillStyle=this._bgTexture;this._game.stage.context.fillRect(this._sx,this._sy,this.worldView.width,this.worldView.height)}else{this._game.stage.context.fillStyle=this._bgColor;this._game.stage.context.fillRect(this._sx,this._sy,this.worldView.width,this.worldView.height)}}if(this.showShadow){this._game.stage.context.shadowBlur=0;this._game.stage.context.shadowOffsetX=0;this._game.stage.context.shadowOffsetY=0}if(this._clip){this._game.stage.context.beginPath();this._game.stage.context.rect(this._sx,this._sy,this.worldView.width,this.worldView.height);this._game.stage.context.closePath();this._game.stage.context.clip()}this._game.world.group.render(this,this._sx,this._sy);if(this.showBorder){this._game.stage.context.strokeStyle=this.borderColor;this._game.stage.context.lineWidth=1;this._game.stage.context.rect(this._sx,this._sy,this.worldView.width,this.worldView.height);this._game.stage.context.stroke()}if(this._fxFlashAlpha>0){this._game.stage.context.fillStyle=this._fxFlashColor+this._fxFlashAlpha+")";this._game.stage.context.fillRect(this._sx,this._sy,this.worldView.width,this.worldView.height)}if(this._fxFadeAlpha>0){this._game.stage.context.fillStyle=this._fxFadeColor+this._fxFadeAlpha+")";this._game.stage.context.fillRect(this._sx,this._sy,this.worldView.width,this.worldView.height)}if(this.scale.x!==1||this.scale.y!==1){this._game.stage.context.scale(1,1)}if(this._rotation!==0||this._clip){this._game.stage.context.translate(0,0)}this._game.stage.context.restore();if(this.alpha!==1){this._game.stage.context.globalAlpha=1}};Object.defineProperty(Camera.prototype,"backgroundColor",{get:function(){return this._bgColor},set:function(color){this._bgColor=color},enumerable:true,configurable:true});Camera.prototype.setTexture=function(key,repeat){if(typeof repeat==="undefined"){repeat="repeat"}this._bgTexture=this._game.stage.context.createPattern(this._game.cache.getImage(key),repeat);this._bgTextureRepeat=repeat};Camera.prototype.setPosition=function(x,y){this._stageX=x;this._stageY=y;this.checkClip()};Camera.prototype.setSize=function(width,height){this.worldView.width=width;this.worldView.height=height;this.checkClip()};Camera.prototype.renderDebugInfo=function(x,y,color){if(typeof color==="undefined"){color="rgb(255,255,255)"}this._game.stage.context.fillStyle=color;this._game.stage.context.fillText("Camera ID: "+this.ID+" ("+this.worldView.width+" x "+this.worldView.height+")",x,y);this._game.stage.context.fillText("X: "+this._stageX+" Y: "+this._stageY+" Rotation: "+this._rotation,x,y+14);this._game.stage.context.fillText("World X: "+this.scroll.x.toFixed(1)+" World Y: "+this.scroll.y.toFixed(1),x,y+28);if(this.bounds){this._game.stage.context.fillText("Bounds: "+this.bounds.width+" x "+this.bounds.height,x,y+56)}};Object.defineProperty(Camera.prototype,"x",{get:function(){return this._stageX},set:function(value){this._stageX=value;this.checkClip()},enumerable:true,configurable:true});Object.defineProperty(Camera.prototype,"y",{get:function(){return this._stageY},set:function(value){this._stageY=value;this.checkClip()},enumerable:true,configurable:true});Object.defineProperty(Camera.prototype,"width",{get:function(){return this.worldView.width},set:function(value){this.worldView.width=value;this.checkClip()},enumerable:true,configurable:true});Object.defineProperty(Camera.prototype,"height",{get:function(){return this.worldView.height},set:function(value){this.worldView.height=value;this.checkClip()},enumerable:true,configurable:true});Object.defineProperty(Camera.prototype,"rotation",{get:function(){return this._rotation},set:function(value){this._rotation=this._game.math.wrap(value,360,0)},enumerable:true,configurable:true});Camera.prototype.checkClip=function(){if(this._stageX!==0||this._stageY!==0||this.worldView.width<this._game.stage.width||this.worldView.height<this._game.stage.height){this._clip=true}else{this._clip=false}};return Camera})();var Cameras=(function(){function Cameras(game,x,y,width,height){this._game=game;this._cameras=[];this.current=this.addCamera(x,y,width,height)}Cameras.prototype.getAll=function(){return this._cameras};Cameras.prototype.update=function(){this._cameras.forEach(function(camera){return camera.update()})};Cameras.prototype.render=function(){this._cameras.forEach(function(camera){return camera.render()})};Cameras.prototype.addCamera=function(x,y,width,height){var newCam=new Camera(this._game,this._cameras.length,x,y,width,height);this._cameras.push(newCam);return newCam};Cameras.prototype.removeCamera=function(id){if(this._cameras[id]){if(this.current===this._cameras[id]){this.current=null}this._cameras.splice(id,1);return true}else{return false}};Cameras.prototype.destroy=function(){this._cameras.length=0;this.current=this.addCamera(0,0,this._game.stage.width,this._game.stage.height)};return Cameras})();var Basic=(function(){function Basic(game){this.name="";this._game=game;this.ID=-1;this.exists=true;this.active=true;this.visible=true;this.alive=true;this.isGroup=false;this.ignoreDrawDebug=false}Basic.prototype.destroy=function(){};Basic.prototype.preUpdate=function(){};Basic.prototype.update=function(){};Basic.prototype.postUpdate=function(){};Basic.prototype.render=function(camera,cameraOffsetX,cameraOffsetY){};Basic.prototype.kill=function(){this.alive=false;this.exists=false};Basic.prototype.revive=function(){this.alive=true;this.exists=true};Basic.prototype.toString=function(){return""};return Basic})();var DynamicTexture=(function(){function DynamicTexture(game,key,width,height){this._sx=0;this._sy=0;this._sw=0;this._sh=0;this._dx=0;this._dy=0;this._dw=0;this._dh=0;this._game=game;this.canvas=document.createElement("canvas");this.canvas.width=width;this.canvas.height=height;this.context=this.canvas.getContext("2d");this.bounds=new Rectangle(0,0,width,height)}DynamicTexture.prototype.getPixel=function(x,y){var imageData=this.context.getImageData(x,y,1,1);return this.getColor(imageData.data[0],imageData.data[1],imageData.data[2])};DynamicTexture.prototype.getPixel32=function(x,y){var imageData=this.context.getImageData(x,y,1,1);return this.getColor32(imageData.data[3],imageData.data[0],imageData.data[1],imageData.data[2])};DynamicTexture.prototype.getPixels=function(rect){return this.context.getImageData(rect.x,rect.y,rect.width,rect.height)};DynamicTexture.prototype.setPixel=function(x,y,color){this.context.fillStyle=color;this.context.fillRect(x,y,1,1)};DynamicTexture.prototype.setPixel32=function(x,y,color){this.context.fillStyle=color;this.context.fillRect(x,y,1,1)};DynamicTexture.prototype.setPixels=function(rect,input){this.context.putImageData(input,rect.x,rect.y)};DynamicTexture.prototype.fillRect=function(rect,color){this.context.fillStyle=color;this.context.fillRect(rect.x,rect.y,rect.width,rect.height)};DynamicTexture.prototype.pasteImage=function(key,frame,destX,destY,destWidth,destHeight){if(typeof frame==="undefined"){frame=-1}if(typeof destX==="undefined"){destX=0}if(typeof destY==="undefined"){destY=0}if(typeof destWidth==="undefined"){destWidth=null}if(typeof destHeight==="undefined"){destHeight=null}var texture=null;var frameData;this._sx=0;this._sy=0;this._dx=destX;this._dy=destY;if(frame>-1){}else{texture=this._game.cache.getImage(key);this._sw=texture.width;this._sh=texture.height;this._dw=texture.width;this._dh=texture.height}if(destWidth!==null){this._dw=destWidth}if(destHeight!==null){this._dh=destHeight}if(texture!=null){this.context.drawImage(texture,this._sx,this._sy,this._sw,this._sh,this._dx,this._dy,this._dw,this._dh)}};DynamicTexture.prototype.copyPixels=function(sourceTexture,sourceRect,destPoint){if(sourceRect.equals(this.bounds)==true){this.context.drawImage(sourceTexture.canvas,destPoint.x,destPoint.y)}else{this.context.putImageData(sourceTexture.getPixels(sourceRect),destPoint.x,destPoint.y)}};DynamicTexture.prototype.clear=function(){this.context.clearRect(0,0,this.bounds.width,this.bounds.height)};Object.defineProperty(DynamicTexture.prototype,"width",{get:function(){return this.bounds.width},enumerable:true,configurable:true});Object.defineProperty(DynamicTexture.prototype,"height",{get:function(){return this.bounds.height},enumerable:true,configurable:true});DynamicTexture.prototype.getColor32=function(alpha,red,green,blue){return alpha<<24|red<<16|green<<8|blue};DynamicTexture.prototype.getColor=function(red,green,blue){return red<<16|green<<8|blue};return DynamicTexture})();var __extends=this.__extends||function(d,b){function __(){this.constructor=d}__.prototype=b.prototype;d.prototype=new __()};var GameObject=(function(_super){__extends(GameObject,_super);function GameObject(game,x,y,width,height){if(typeof x==="undefined"){x=0}if(typeof y==="undefined"){y=0}if(typeof width==="undefined"){width=16}if(typeof height==="undefined"){height=16}_super.call(this,game);this._angle=0;this.moves=true;this.bounds=new Rectangle(x,y,width,height);this.exists=true;this.active=true;this.visible=true;this.alive=true;this.isGroup=false;this.alpha=1;this.scale=new Point(1,1);this.last=new Point(x,y);this.origin=new Point(this.bounds.halfWidth,this.bounds.halfHeight);this.mass=1;this.elasticity=0;this.health=1;this.immovable=false;this.moves=true;this.touching=GameObject.NONE;this.wasTouching=GameObject.NONE;this.allowCollisions=GameObject.ANY;this.velocity=new Point();this.acceleration=new Point();this.drag=new Point();this.maxVelocity=new Point(10000,10000);this.angle=0;this.angularVelocity=0;this.angularAcceleration=0;this.angularDrag=0;this.maxAngular=10000;this.scrollFactor=new Point(1,1)}GameObject.LEFT=1;GameObject.RIGHT=16;GameObject.UP=256;GameObject.DOWN=4096;GameObject.NONE=0;GameObject.CEILING=GameObject.UP;GameObject.FLOOR=GameObject.DOWN;GameObject.WALL=GameObject.LEFT|GameObject.RIGHT;GameObject.ANY=GameObject.LEFT|GameObject.RIGHT|GameObject.UP|GameObject.DOWN;GameObject.OVERLAP_BIAS=4;GameObject.prototype.preUpdate=function(){this.last.x=this.bounds.x;this.last.y=this.bounds.y};GameObject.prototype.update=function(){};GameObject.prototype.postUpdate=function(){if(this.moves){this.updateMotion()}this.wasTouching=this.touching;this.touching=GameObject.NONE};GameObject.prototype.updateMotion=function(){var delta;var velocityDelta;velocityDelta=(this._game.math.computeVelocity(this.angularVelocity,this.angularAcceleration,this.angularDrag,this.maxAngular)-this.angularVelocity)/2;this.angularVelocity+=velocityDelta;this._angle+=this.angularVelocity*this._game.time.elapsed;this.angularVelocity+=velocityDelta;velocityDelta=(this._game.math.computeVelocity(this.velocity.x,this.acceleration.x,this.drag.x,this.maxVelocity.x)-this.velocity.x)/2;this.velocity.x+=velocityDelta;delta=this.velocity.x*this._game.time.elapsed;this.velocity.x+=velocityDelta;this.bounds.x+=delta;velocityDelta=(this._game.math.computeVelocity(this.velocity.y,this.acceleration.y,this.drag.y,this.maxVelocity.y)-this.velocity.y)/2;this.velocity.y+=velocityDelta;delta=this.velocity.y*this._game.time.elapsed;this.velocity.y+=velocityDelta;this.bounds.y+=delta};GameObject.prototype.overlaps=function(ObjectOrGroup,InScreenSpace,Camera){if(typeof InScreenSpace==="undefined"){InScreenSpace=false}if(typeof Camera==="undefined"){Camera=null}if(ObjectOrGroup.isGroup){var results=false;var i=0;var members=ObjectOrGroup.members;while(i<length){if(this.overlaps(members[i++],InScreenSpace,Camera)){results=true}}return results}if(!InScreenSpace){return(ObjectOrGroup.x+ObjectOrGroup.width>this.x)&&(ObjectOrGroup.x<this.x+this.width)&&(ObjectOrGroup.y+ObjectOrGroup.height>this.y)&&(ObjectOrGroup.y<this.y+this.height)}if(Camera==null){Camera=this._game.camera}var objectScreenPos=ObjectOrGroup.getScreenXY(null,Camera);this.getScreenXY(this._point,Camera);return(objectScreenPos.x+ObjectOrGroup.width>this._point.x)&&(objectScreenPos.x<this._point.x+this.width)&&(objectScreenPos.y+ObjectOrGroup.height>this._point.y)&&(objectScreenPos.y<this._point.y+this.height)};GameObject.prototype.overlapsAt=function(X,Y,ObjectOrGroup,InScreenSpace,Camera){if(typeof InScreenSpace==="undefined"){InScreenSpace=false}if(typeof Camera==="undefined"){Camera=null}if(ObjectOrGroup.isGroup){var results=false;var basic;var i=0;var members=ObjectOrGroup.members;while(i<length){if(this.overlapsAt(X,Y,members[i++],InScreenSpace,Camera)){results=true}}return results}if(!InScreenSpace){return(ObjectOrGroup.x+ObjectOrGroup.width>X)&&(ObjectOrGroup.x<X+this.width)&&(ObjectOrGroup.y+ObjectOrGroup.height>Y)&&(ObjectOrGroup.y<Y+this.height)}if(Camera==null){Camera=this._game.camera}var objectScreenPos=ObjectOrGroup.getScreenXY(null,Camera);this._point.x=X-Camera.scroll.x*this.scrollFactor.x;this._point.y=Y-Camera.scroll.y*this.scrollFactor.y;this._point.x+=(this._point.x>0)?1e-7:-1e-7;this._point.y+=(this._point.y>0)?1e-7:-1e-7;return(objectScreenPos.x+ObjectOrGroup.width>this._point.x)&&(objectScreenPos.x<this._point.x+this.width)&&(objectScreenPos.y+ObjectOrGroup.height>this._point.y)&&(objectScreenPos.y<this._point.y+this.height)};GameObject.prototype.overlapsPoint=function(point,InScreenSpace,Camera){if(typeof InScreenSpace==="undefined"){InScreenSpace=false}if(typeof Camera==="undefined"){Camera=null}if(!InScreenSpace){return(point.x>this.x)&&(point.x<this.x+this.width)&&(point.y>this.y)&&(point.y<this.y+this.height)}if(Camera==null){Camera=this._game.camera}var X=point.x-Camera.scroll.x;var Y=point.y-Camera.scroll.y;this.getScreenXY(this._point,Camera);return(X>this._point.x)&&(X<this._point.x+this.width)&&(Y>this._point.y)&&(Y<this._point.y+this.height)};GameObject.prototype.onScreen=function(Camera){if(typeof Camera==="undefined"){Camera=null}if(Camera==null){Camera=this._game.camera}this.getScreenXY(this._point,Camera);return(this._point.x+this.width>0)&&(this._point.x<Camera.width)&&(this._point.y+this.height>0)&&(this._point.y<Camera.height)};GameObject.prototype.getScreenXY=function(point,Camera){if(typeof point==="undefined"){point=null}if(typeof Camera==="undefined"){Camera=null}if(point==null){point=new Point()}if(Camera==null){Camera=this._game.camera}point.x=this.x-Camera.scroll.x*this.scrollFactor.x;point.y=this.y-Camera.scroll.y*this.scrollFactor.y;point.x+=(point.x>0)?1e-7:-1e-7;point.y+=(point.y>0)?1e-7:-1e-7;return point};Object.defineProperty(GameObject.prototype,"solid",{get:function(){return(this.allowCollisions&GameObject.ANY)>GameObject.NONE},set:function(Solid){if(Solid){this.allowCollisions=GameObject.ANY}else{this.allowCollisions=GameObject.NONE}},enumerable:true,configurable:true});GameObject.prototype.getMidpoint=function(point){if(typeof point==="undefined"){point=null}if(point==null){point=new Point()}point.x=this.x+this.width*0.5;point.y=this.y+this.height*0.5;return point};GameObject.prototype.reset=function(X,Y){this.revive();this.touching=GameObject.NONE;this.wasTouching=GameObject.NONE;this.x=X;this.y=Y;this.last.x=X;this.last.y=Y;this.velocity.x=0;this.velocity.y=0};GameObject.prototype.isTouching=function(Direction){return(this.touching&Direction)>GameObject.NONE};GameObject.prototype.justTouched=function(Direction){return((this.touching&Direction)>GameObject.NONE)&&((this.wasTouching&Direction)<=GameObject.NONE)};GameObject.prototype.hurt=function(Damage){this.health=this.health-Damage;if(this.health<=0){this.kill()}};GameObject.prototype.destroy=function(){};Object.defineProperty(GameObject.prototype,"x",{get:function(){return this.bounds.x},set:function(value){this.bounds.x=value},enumerable:true,configurable:true});Object.defineProperty(GameObject.prototype,"y",{get:function(){return this.bounds.y},set:function(value){this.bounds.y=value},enumerable:true,configurable:true});Object.defineProperty(GameObject.prototype,"rotation",{get:function(){return this._angle},set:function(value){this._angle=this._game.math.wrap(value,360,0)},enumerable:true,configurable:true});Object.defineProperty(GameObject.prototype,"angle",{get:function(){return this._angle},set:function(value){this._angle=this._game.math.wrap(value,360,0)},enumerable:true,configurable:true});Object.defineProperty(GameObject.prototype,"width",{get:function(){return this.bounds.width},enumerable:true,configurable:true});Object.defineProperty(GameObject.prototype,"height",{get:function(){return this.bounds.height},enumerable:true,configurable:true});return GameObject})(Basic);var Sprite=(function(_super){__extends(Sprite,_super);function Sprite(game,x,y,key){if(typeof x==="undefined"){x=0}if(typeof y==="undefined"){y=0}if(typeof key==="undefined"){key=null}_super.call(this,game,x,y);this._dynamicTexture=false;this._sx=0;this._sy=0;this._sw=0;this._sh=0;this._dx=0;this._dy=0;this._dw=0;this._dh=0;this._texture=null;this.animations=new Animations(this._game,this);if(key!==null){this.loadGraphic(key)}else{this.bounds.width=16;this.bounds.height=16}}Sprite.prototype.loadGraphic=function(key){if(this._game.cache.getImage(key)!==null){if(this._game.cache.isSpriteSheet(key)==false){this._texture=this._game.cache.getImage(key);this.bounds.width=this._texture.width;this.bounds.height=this._texture.height}else{this._texture=this._game.cache.getImage(key);this.animations.loadFrameData(this._game.cache.getFrameData(key))}this._dynamicTexture=false}return this};Sprite.prototype.loadDynamicTexture=function(texture){this._texture=texture;this.bounds.width=this._texture.width;this.bounds.height=this._texture.height;this._dynamicTexture=true;return this};Sprite.prototype.makeGraphic=function(width,height,color){if(typeof color==="undefined"){color=4294967295}this._texture=null;this.width=width;this.height=height;this._dynamicTexture=false;return this};Sprite.prototype.inCamera=function(camera){if(this.scrollFactor.x!==1||this.scrollFactor.y!==1){this._dx=this.bounds.x-(camera.x*this.scrollFactor.x);this._dy=this.bounds.y-(camera.y*this.scrollFactor.x);this._dw=this.bounds.width*this.scale.x;this._dh=this.bounds.height*this.scale.y;return(camera.right>this._dx)&&(camera.x<this._dx+this._dw)&&(camera.bottom>this._dy)&&(camera.y<this._dy+this._dh)}else{return camera.overlap(this.bounds)}};Sprite.prototype.postUpdate=function(){this.animations.update();_super.prototype.postUpdate.call(this)};Object.defineProperty(Sprite.prototype,"frame",{get:function(){return this.animations.frame},set:function(value){this.animations.frame=value},enumerable:true,configurable:true});Object.defineProperty(Sprite.prototype,"frameName",{get:function(){return this.animations.frameName},set:function(value){this.animations.frameName=value},enumerable:true,configurable:true});Sprite.prototype.render=function(camera,cameraOffsetX,cameraOffsetY){if(this.visible===false||this.scale.x==0||this.scale.y==0||this.alpha<0.1||this.inCamera(camera.worldView)==false){return false}if(this.alpha!==1){var globalAlpha=this._game.stage.context.globalAlpha;this._game.stage.context.globalAlpha=this.alpha}this._sx=0;this._sy=0;this._sw=this.bounds.width;this._sh=this.bounds.height;this._dx=cameraOffsetX+(this.bounds.x-camera.worldView.x);this._dy=cameraOffsetY+(this.bounds.y-camera.worldView.y);this._dw=this.bounds.width*this.scale.x;this._dh=this.bounds.height*this.scale.y;if(this._dynamicTexture==false&&this.animations.currentFrame!==null){this._sx=this.animations.currentFrame.x;this._sy=this.animations.currentFrame.y;if(this.animations.currentFrame.trimmed){this._dx+=this.animations.currentFrame.spriteSourceSizeX;this._dy+=this.animations.currentFrame.spriteSourceSizeY}}if(this.scrollFactor.x!==1||this.scrollFactor.y!==1){this._dx-=(camera.worldView.x*this.scrollFactor.x);this._dy-=(camera.worldView.y*this.scrollFactor.y)}if(this.angle!==0){this._game.stage.context.save();this._game.stage.context.translate(this._dx+(this._dw/2),this._dy+(this._dh/2));this._game.stage.context.rotate(this.angle*(Math.PI/180));this._dx=-(this._dw/2);this._dy=-(this._dh/2)}this._sx=Math.round(this._sx);this._sy=Math.round(this._sy);this._sw=Math.round(this._sw);this._sh=Math.round(this._sh);this._dx=Math.round(this._dx);this._dy=Math.round(this._dy);this._dw=Math.round(this._dw);this._dh=Math.round(this._dh);if(this._texture!=null){if(this._dynamicTexture){this._game.stage.context.drawImage(this._texture.canvas,this._sx,this._sy,this._sw,this._sh,this._dx,this._dy,this._dw,this._dh)}else{this._game.stage.context.drawImage(this._texture,this._sx,this._sy,this._sw,this._sh,this._dx,this._dy,this._dw,this._dh)}}else{this._game.stage.context.fillStyle="rgb(255,255,255)";this._game.stage.context.fillRect(this._dx,this._dy,this._dw,this._dh)}if(this.rotation!==0){this._game.stage.context.translate(0,0);this._game.stage.context.restore()}if(globalAlpha>-1){this._game.stage.context.globalAlpha=globalAlpha}return true};Sprite.prototype.renderDebugInfo=function(x,y,color){if(typeof color==="undefined"){color="rgb(255,255,255)"}this._game.stage.context.fillStyle=color;this._game.stage.context.fillText("Sprite: "+this.name+" ("+this.bounds.width+" x "+this.bounds.height+")",x,y);this._game.stage.context.fillText("x: "+this.bounds.x.toFixed(1)+" y: "+this.bounds.y.toFixed(1)+" rotation: "+this.angle.toFixed(1),x,y+14);this._game.stage.context.fillText("dx: "+this._dx.toFixed(1)+" dy: "+this._dy.toFixed(1)+" dw: "+this._dw.toFixed(1)+" dh: "+this._dh.toFixed(1),x,y+28);this._game.stage.context.fillText("sx: "+this._sx.toFixed(1)+" sy: "+this._sy.toFixed(1)+" sw: "+this._sw.toFixed(1)+" sh: "+this._sh.toFixed(1),x,y+42)};return Sprite})(GameObject);var Group=(function(_super){__extends(Group,_super);function Group(game,MaxSize){if(typeof MaxSize==="undefined"){MaxSize=0}_super.call(this,game);this.isGroup=true;this.members=[];this.length=0;this._maxSize=MaxSize;this._marker=0;this._sortIndex=null}Group.ASCENDING=-1;Group.DESCENDING=1;Group.prototype.destroy=function(){if(this.members!=null){var basic;var i=0;while(i<this.length){basic=this.members[i++];if(basic!=null){basic.destroy()}}this.members.length=0}this._sortIndex=null};Group.prototype.update=function(){var basic;var i=0;while(i<this.length){basic=this.members[i++];if((basic!=null)&&basic.exists&&basic.active){basic.preUpdate();basic.update();basic.postUpdate()}}};Group.prototype.render=function(camera,cameraOffsetX,cameraOffsetY){var basic;var i=0;while(i<this.length){basic=this.members[i++];if((basic!=null)&&basic.exists&&basic.visible){basic.render(camera,cameraOffsetX,cameraOffsetY)}}};Object.defineProperty(Group.prototype,"maxSize",{get:function(){return this._maxSize},set:function(Size){this._maxSize=Size;if(this._marker>=this._maxSize){this._marker=0}if((this._maxSize==0)||(this.members==null)||(this._maxSize>=this.members.length)){return}var basic;var i=this._maxSize;var l=this.members.length;while(i<l){basic=this.members[i++];if(basic!=null){basic.destroy()}}this.length=this.members.length=this._maxSize},enumerable:true,configurable:true});Group.prototype.add=function(Object){if(this.members.indexOf(Object)>=0){return Object}var i=0;var l=this.members.length;while(i<l){if(this.members[i]==null){this.members[i]=Object;if(i>=this.length){this.length=i+1}return Object}i++}if(this._maxSize>0){if(this.members.length>=this._maxSize){return Object}else{if(this.members.length*2<=this._maxSize){this.members.length*=2}else{this.members.length=this._maxSize}}}else{this.members.length*=2}this.members[i]=Object;this.length=i+1;return Object};Group.prototype.recycle=function(ObjectClass){if(typeof ObjectClass==="undefined"){ObjectClass=null}var basic;if(this._maxSize>0){if(this.length<this._maxSize){if(ObjectClass==null){return null}return this.add(new ObjectClass())}else{basic=this.members[this._marker++];if(this._marker>=this._maxSize){this._marker=0}return basic}}else{basic=this.getFirstAvailable(ObjectClass);if(basic!=null){return basic}if(ObjectClass==null){return null}return this.add(new ObjectClass())}};Group.prototype.remove=function(Object,Splice){if(typeof Splice==="undefined"){Splice=false}var index=this.members.indexOf(Object);if((index<0)||(index>=this.members.length)){return null}if(Splice){this.members.splice(index,1);this.length--}else{this.members[index]=null}return Object};Group.prototype.replace=function(OldObject,NewObject){var index=this.members.indexOf(OldObject);if((index<0)||(index>=this.members.length)){return null}this.members[index]=NewObject;return NewObject};Group.prototype.sort=function(Index,Order){if(typeof Index==="undefined"){Index="y"}if(typeof Order==="undefined"){Order=Group.ASCENDING}this._sortIndex=Index;this._sortOrder=Order;this.members.sort(this.sortHandler)};Group.prototype.setAll=function(VariableName,Value,Recurse){if(typeof Recurse==="undefined"){Recurse=true}var basic;var i=0;while(i<length){basic=this.members[i++];if(basic!=null){if(Recurse&&(basic.isGroup==true)){basic.setAll(VariableName,Value,Recurse)}else{basic[VariableName]=Value}}}};Group.prototype.callAll=function(FunctionName,Recurse){if(typeof Recurse==="undefined"){Recurse=true}var basic;var i=0;while(i<this.length){basic=this.members[i++];if(basic!=null){if(Recurse&&(basic.isGroup==true)){basic.callAll(FunctionName,Recurse)}else{basic[FunctionName]()}}}};Group.prototype.forEach=function(callback,Recurse){if(typeof Recurse==="undefined"){Recurse=false}var basic;var i=0;while(i<this.length){basic=this.members[i++];if(basic!=null){if(Recurse&&(basic.isGroup==true)){basic.forEach(callback,true)}else{callback.call(this,basic)}}}};Group.prototype.getFirstAvailable=function(ObjectClass){if(typeof ObjectClass==="undefined"){ObjectClass=null}var basic;var i=0;while(i<this.length){basic=this.members[i++];if((basic!=null)&&!basic.exists&&((ObjectClass==null)||(typeof basic===ObjectClass))){return basic}}return null};Group.prototype.getFirstNull=function(){var basic;var i=0;var l=this.members.length;while(i<l){if(this.members[i]==null){return i}else{i++}}return -1};Group.prototype.getFirstExtant=function(){var basic;var i=0;while(i<length){basic=this.members[i++];if((basic!=null)&&basic.exists){return basic}}return null};Group.prototype.getFirstAlive=function(){var basic;var i=0;while(i<this.length){basic=this.members[i++];if((basic!=null)&&basic.exists&&basic.alive){return basic}}return null};Group.prototype.getFirstDead=function(){var basic;var i=0;while(i<this.length){basic=this.members[i++];if((basic!=null)&&!basic.alive){return basic}}return null};Group.prototype.countLiving=function(){var count=-1;var basic;var i=0;while(i<this.length){basic=this.members[i++];if(basic!=null){if(count<0){count=0}if(basic.exists&&basic.alive){count++}}}return count};Group.prototype.countDead=function(){var count=-1;var basic;var i=0;while(i<this.length){basic=this.members[i++];if(basic!=null){if(count<0){count=0}if(!basic.alive){count++}}}return count};Group.prototype.getRandom=function(StartIndex,Length){if(typeof StartIndex==="undefined"){StartIndex=0}if(typeof Length==="undefined"){Length=0}if(Length==0){Length=this.length}return this._game.math.getRandom(this.members,StartIndex,Length)};Group.prototype.clear=function(){this.length=this.members.length=0};Group.prototype.kill=function(){var basic;var i=0;while(i<this.length){basic=this.members[i++];if((basic!=null)&&basic.exists){basic.kill()}}};Group.prototype.sortHandler=function(Obj1,Obj2){if(Obj1[this._sortIndex]<Obj2[this._sortIndex]){return this._sortOrder}else{if(Obj1[this._sortIndex]>Obj2[this._sortIndex]){return -this._sortOrder}}return 0};return Group})(Basic);var Particle=(function(_super){__extends(Particle,_super);function Particle(game){_super.call(this,game);this.lifespan=0;this.friction=500}Particle.prototype.update=function(){if(this.lifespan<=0){return}this.lifespan-=this._game.time.elapsed;if(this.lifespan<=0){this.kill()}if(this.touching){if(this.angularVelocity!=0){this.angularVelocity=-this.angularVelocity}}if(this.acceleration.y>0){if(this.touching&GameObject.FLOOR){this.drag.x=this.friction;if(!(this.wasTouching&GameObject.FLOOR)){if(this.velocity.y<-this.elasticity*10){if(this.angularVelocity!=0){this.angularVelocity*=-this.elasticity}}else{this.velocity.y=0;this.angularVelocity=0}}}else{this.drag.x=0}}};Particle.prototype.onEmit=function(){};return Particle})(Sprite);var Emitter=(function(_super){__extends(Emitter,_super);function Emitter(game,X,Y,Size){if(typeof X==="undefined"){X=0}if(typeof Y==="undefined"){Y=0}if(typeof Size==="undefined"){Size=0}_super.call(this,game,Size);this.x=X;this.y=Y;this.width=0;this.height=0;this.minParticleSpeed=new Point(-100,-100);this.maxParticleSpeed=new Point(100,100);this.minRotation=-360;this.maxRotation=360;this.gravity=0;this.particleClass=null;this.particleDrag=new Point();this.frequency=0.1;this.lifespan=3;this.bounce=0;this._quantity=0;this._counter=0;this._explode=true;this.on=false;this._point=new Point()}Emitter.prototype.destroy=function(){this.minParticleSpeed=null;this.maxParticleSpeed=null;this.particleDrag=null;this.particleClass=null;this._point=null;_super.prototype.destroy.call(this)};Emitter.prototype.makeParticles=function(Graphics,Quantity,BakedRotations,Multiple,Collide){if(typeof Quantity==="undefined"){Quantity=50}if(typeof BakedRotations==="undefined"){BakedRotations=16}if(typeof Multiple==="undefined"){Multiple=false}if(typeof Collide==="undefined"){Collide=0.8}this.maxSize=Quantity;var totalFrames=1;var randomFrame;var particle;var i=0;while(i<Quantity){if(this.particleClass==null){particle=new Particle(this._game)}else{particle=new this.particleClass(this._game)}if(Multiple){}else{if(Graphics){particle.loadGraphic(Graphics)}}if(Collide>0){particle.width*=Collide;particle.height*=Collide}else{particle.allowCollisions=GameObject.NONE}particle.exists=false;this.add(particle);i++}return this};Emitter.prototype.update=function(){if(this.on){if(this._explode){this.on=false;var i=0;var l=this._quantity;if((l<=0)||(l>this.length)){l=this.length}while(i<l){this.emitParticle();i++}this._quantity=0}else{this._timer+=this._game.time.elapsed;while((this.frequency>0)&&(this._timer>this.frequency)&&this.on){this._timer-=this.frequency;this.emitParticle();if((this._quantity>0)&&(++this._counter>=this._quantity)){this.on=false;this._quantity=0}}}}_super.prototype.update.call(this)};Emitter.prototype.kill=function(){this.on=false;_super.prototype.kill.call(this)};Emitter.prototype.start=function(Explode,Lifespan,Frequency,Quantity){if(typeof Explode==="undefined"){Explode=true}if(typeof Lifespan==="undefined"){Lifespan=0}if(typeof Frequency==="undefined"){Frequency=0.1}if(typeof Quantity==="undefined"){Quantity=0}this.revive();this.visible=true;this.on=true;this._explode=Explode;this.lifespan=Lifespan;this.frequency=Frequency;this._quantity+=Quantity;this._counter=0;this._timer=0};Emitter.prototype.emitParticle=function(){var particle=this.recycle(Particle);particle.lifespan=this.lifespan;particle.elasticity=this.bounce;particle.reset(this.x-(particle.width>>1)+this._game.math.random()*this.width,this.y-(particle.height>>1)+this._game.math.random()*this.height);particle.visible=true;if(this.minParticleSpeed.x!=this.maxParticleSpeed.x){particle.velocity.x=this.minParticleSpeed.x+this._game.math.random()*(this.maxParticleSpeed.x-this.minParticleSpeed.x)}else{particle.velocity.x=this.minParticleSpeed.x}if(this.minParticleSpeed.y!=this.maxParticleSpeed.y){particle.velocity.y=this.minParticleSpeed.y+this._game.math.random()*(this.maxParticleSpeed.y-this.minParticleSpeed.y)}else{particle.velocity.y=this.minParticleSpeed.y}particle.acceleration.y=this.gravity;if(this.minRotation!=this.maxRotation){particle.angularVelocity=this.minRotation+this._game.math.random()*(this.maxRotation-this.minRotation)}else{particle.angularVelocity=this.minRotation}if(particle.angularVelocity!=0){particle.angle=this._game.math.random()*360-180}particle.drag.x=this.particleDrag.x;particle.drag.y=this.particleDrag.y;particle.onEmit()};Emitter.prototype.setSize=function(Width,Height){this.width=Width;this.height=Height};Emitter.prototype.setXSpeed=function(Min,Max){if(typeof Min==="undefined"){Min=0}if(typeof Max==="undefined"){Max=0}this.minParticleSpeed.x=Min;this.maxParticleSpeed.x=Max};Emitter.prototype.setYSpeed=function(Min,Max){if(typeof Min==="undefined"){Min=0}if(typeof Max==="undefined"){Max=0}this.minParticleSpeed.y=Min;this.maxParticleSpeed.y=Max};Emitter.prototype.setRotation=function(Min,Max){if(typeof Min==="undefined"){Min=0}if(typeof Max==="undefined"){Max=0}this.minRotation=Min;this.maxRotation=Max};Emitter.prototype.at=function(Object){Object.getMidpoint(this._point);this.x=this._point.x-(this.width>>1);this.y=this._point.y-(this.height>>1)};return Emitter})(Group);var Loader=(function(){function Loader(game,callback){this._game=game;this._gameCreateComplete=callback;this._keys=[];this._fileList={};this._xhr=new XMLHttpRequest()}Loader.prototype.checkKeyExists=function(key){if(this._fileList[key]){return true}else{return false}};Loader.prototype.addImageFile=function(key,url){if(this.checkKeyExists(key)===false){this._fileList[key]={type:"image",key:key,url:url,data:null,error:false,loaded:false};this._keys.push(key)}};Loader.prototype.addSpriteSheet=function(key,url,frameWidth,frameHeight,frameMax){if(typeof frameMax==="undefined"){frameMax=-1}if(this.checkKeyExists(key)===false){this._fileList[key]={type:"spritesheet",key:key,url:url,data:null,frameWidth:frameWidth,frameHeight:frameHeight,frameMax:frameMax,error:false,loaded:false};this._keys.push(key)}};Loader.prototype.addTextureAtlas=function(key,url,jsonURL,jsonData){if(typeof jsonURL==="undefined"){jsonURL=null}if(typeof jsonData==="undefined"){jsonData=null}if(this.checkKeyExists(key)===false){if(jsonURL!==null){this._fileList[key]={type:"textureatlas",key:key,url:url,data:null,jsonURL:jsonURL,jsonData:null,error:false,loaded:false};this._keys.push(key)}else{if(typeof jsonData==="string"){var data=JSON.parse(jsonData);if(data.frames){this._fileList[key]={type:"textureatlas",key:key,url:url,data:null,jsonURL:null,jsonData:data.frames,error:false,loaded:false};this._keys.push(key)}}else{if(jsonData.frames){this._fileList[key]={type:"textureatlas",key:key,url:url,data:null,jsonURL:null,jsonData:jsonData.frames,error:false,loaded:false};this._keys.push(key)}}}}};Loader.prototype.addAudioFile=function(key,url){if(this.checkKeyExists(key)===false){this._fileList[key]={type:"audio",key:key,url:url,data:null,buffer:null,error:false,loaded:false};this._keys.push(key)}};Loader.prototype.addTextFile=function(key,url){if(this.checkKeyExists(key)===false){this._fileList[key]={type:"text",key:key,url:url,data:null,error:false,loaded:false};this._keys.push(key)}};Loader.prototype.removeFile=function(key){delete this._fileList[key]};Loader.prototype.removeAll=function(){this._fileList={}};Loader.prototype.load=function(onFileLoadCallback,onCompleteCallback){if(typeof onFileLoadCallback==="undefined"){onFileLoadCallback=null}if(typeof onCompleteCallback==="undefined"){onCompleteCallback=null}this.progress=0;this.hasLoaded=false;this._onComplete=onCompleteCallback;if(onCompleteCallback==null){this._onComplete=this._game.onCreateCallback}this._onFileLoad=onFileLoadCallback;if(this._keys.length>0){this._progressChunk=100/this._keys.length;this.loadFile()}else{this.progress=1;this.hasLoaded=true;this._gameCreateComplete.call(this._game);if(this._onComplete!==null){this._onComplete.call(this._game.callbackContext)}}};Loader.prototype.loadFile=function(){var _this=this;var file=this._fileList[this._keys.pop()];switch(file.type){case"image":case"spritesheet":case"textureatlas":file.data=new Image();file.data.name=file.key;file.data.onload=function(){return _this.fileComplete(file.key)};file.data.onerror=function(){return _this.fileError(file.key)};file.data.src=file.url;break;case"audio":this._xhr.open("GET",file.url,true);this._xhr.responseType="arraybuffer";this._xhr.onload=function(){return _this.fileComplete(file.key)};this._xhr.onerror=function(){return _this.fileError(file.key)};this._xhr.send();break;case"text":this._xhr.open("GET",file.url,true);this._xhr.responseType="text";this._xhr.onload=function(){return _this.fileComplete(file.key)};this._xhr.onerror=function(){return _this.fileError(file.key)};this._xhr.send();break}};Loader.prototype.fileError=function(key){this._fileList[key].loaded=true;this._fileList[key].error=true;this.nextFile(key,false)};Loader.prototype.fileComplete=function(key){var _this=this;this._fileList[key].loaded=true;var file=this._fileList[key];var loadNext=true;switch(file.type){case"image":this._game.cache.addImage(file.key,file.url,file.data);break;case"spritesheet":this._game.cache.addSpriteSheet(file.key,file.url,file.data,file.frameWidth,file.frameHeight,file.frameMax);break;case"textureatlas":if(file.jsonURL==null){this._game.cache.addTextureAtlas(file.key,file.url,file.data,file.jsonData)}else{loadNext=false;this._xhr.open("GET",file.jsonURL,true);this._xhr.responseType="text";this._xhr.onload=function(){return _this.jsonLoadComplete(file.key)};this._xhr.onerror=function(){return _this.jsonLoadError(file.key)};this._xhr.send()}break;case"audio":file.data=this._xhr.response;this._game.cache.addSound(file.key,file.url,file.data);break;case"text":file.data=this._xhr.response;this._game.cache.addText(file.key,file.url,file.data);break}if(loadNext){this.nextFile(key,true)}};Loader.prototype.jsonLoadComplete=function(key){var data=JSON.parse(this._xhr.response);if(data.frames){var file=this._fileList[key];this._game.cache.addTextureAtlas(file.key,file.url,file.data,data.frames)}this.nextFile(key,true)};Loader.prototype.jsonLoadError=function(key){var file=this._fileList[key];file.error=true;this.nextFile(key,true)};Loader.prototype.nextFile=function(previousKey,success){this.progress=Math.round(this.progress+this._progressChunk);if(this._onFileLoad){this._onFileLoad.call(this._game.callbackContext,this.progress,previousKey,success)}if(this._keys.length>0){this.loadFile()}else{this.hasLoaded=true;this.removeAll();this._gameCreateComplete.call(this._game);if(this._onComplete!==null){this._onComplete.call(this._game.callbackContext)}}};return Loader})();var SoundManager=(function(){function SoundManager(game){this._context=null;this._game=game;if(game.device.webaudio==true){if(!!window.AudioContext){this._context=new window.AudioContext()}else{if(!!window.webkitAudioContext){this._context=new window.webkitAudioContext()}}if(this._context!==null){this._gainNode=this._context.createGainNode();this._gainNode.connect(this._context.destination);this._volume=1}}}SoundManager.prototype.mute=function(){this._gainNode.gain.value=0};SoundManager.prototype.unmute=function(){this._gainNode.gain.value=this._volume};Object.defineProperty(SoundManager.prototype,"volume",{get:function(){return this._volume},set:function(value){this._volume=value;this._gainNode.gain.value=this._volume},enumerable:true,configurable:true});SoundManager.prototype.decode=function(key,callback,sound){if(typeof callback==="undefined"){callback=null}if(typeof sound==="undefined"){sound=null}var soundData=this._game.cache.getSound(key);if(soundData){if(this._game.cache.isSoundDecoded(key)===false){var that=this;this._context.decodeAudioData(soundData,function(buffer){that._game.cache.decodedSound(key,buffer);if(sound){sound.setDecodedBuffer(buffer)}callback()})}}};SoundManager.prototype.play=function(key,volume,loop){if(typeof volume==="undefined"){volume=1}if(typeof loop==="undefined"){loop=false}var _this=this;if(this._context===null){return}var soundData=this._game.cache.getSound(key);if(soundData){if(this._game.cache.isSoundDecoded(key)===true){return new Sound(this._context,this._gainNode,soundData,volume,loop)}else{var tempSound=new Sound(this._context,this._gainNode,null,volume,loop);this.decode(key,function(){return _this.play(key)},tempSound);return tempSound}}};return SoundManager})();var Sound=(function(){function Sound(context,gainNode,data,volume,loop){if(typeof volume==="undefined"){volume=1}if(typeof loop==="undefined"){loop=false}this.loop=false;this.isPlaying=false;this.isDecoding=false;this._context=context;this._gainNode=gainNode;this._buffer=data;this._volume=volume;this.loop=loop;if(this._context!==null){this._localGainNode=this._context.createGainNode();this._localGainNode.connect(this._gainNode);this._localGainNode.gain.value=this._volume}if(this._buffer===null){this.isDecoding=true}else{this.play()}}Sound.prototype.setDecodedBuffer=function(data){this._buffer=data;this.isDecoding=false;this.play()};Sound.prototype.play=function(){if(this._buffer===null||this.isDecoding===true){return}this._sound=this._context.createBufferSource();this._sound.buffer=this._buffer;this._sound.connect(this._localGainNode);if(this.loop){this._sound.loop=true}this._sound.noteOn(0);this.duration=this._sound.buffer.duration;this.isPlaying=true};Sound.prototype.stop=function(){if(this.isPlaying===true){this.isPlaying=false;this._sound.noteOff(0)}};Sound.prototype.mute=function(){this._localGainNode.gain.value=0};Sound.prototype.unmute=function(){this._localGainNode.gain.value=this._volume};Object.defineProperty(Sound.prototype,"volume",{get:function(){return this._volume},set:function(value){this._volume=value;this._localGainNode.gain.value=this._volume},enumerable:true,configurable:true});return Sound})();var StageScaleMode=(function(){function StageScaleMode(game){var _this=this;this._startHeight=0;this.width=0;this.height=0;this._game=game;this.orientation=window.orientation;window.addEventListener("orientationchange",function(event){return _this.checkOrientation(event)},false)}StageScaleMode.EXACT_FIT=0;StageScaleMode.NO_SCALE=1;StageScaleMode.SHOW_ALL=2;StageScaleMode.prototype.update=function(){if(this._game.stage.scaleMode!==StageScaleMode.NO_SCALE&&(window.innerWidth!==this.width||window.innerHeight!==this.height)){this.refresh()}};Object.defineProperty(StageScaleMode.prototype,"isLandscape",{get:function(){return window.orientation===90||window.orientation===-90},enumerable:true,configurable:true});StageScaleMode.prototype.checkOrientation=function(event){if(window.orientation!==this.orientation){this.refresh();this.orientation=window.orientation}};StageScaleMode.prototype.refresh=function(){var _this=this;if(this._game.device.iPad==false&&this._game.device.webApp==false&&this._game.device.desktop==false){document.documentElement.style.minHeight="5000px";this._startHeight=window.innerHeight;if(this._game.device.android&&this._game.device.chrome==false){window.scrollTo(0,1)}else{window.scrollTo(0,0)}}if(this._check==null){this._iterations=40;this._check=window.setInterval(function(){return _this.setScreenSize()},10)}};StageScaleMode.prototype.setScreenSize=function(){if(this._game.device.iPad==false&&this._game.device.webApp==false&&this._game.device.desktop==false){if(this._game.device.android&&this._game.device.chrome==false){window.scrollTo(0,1)}else{window.scrollTo(0,0)}}this._iterations--;if(window.innerHeight>this._startHeight||this._iterations<0){document.documentElement.style.minHeight=window.innerHeight+"px";if(this._game.stage.scaleMode==StageScaleMode.EXACT_FIT){if(this._game.stage.maxScaleX&&window.innerWidth>this._game.stage.maxScaleX){this.width=this._game.stage.maxScaleX}else{this.width=window.innerWidth}if(this._game.stage.maxScaleY&&window.innerHeight>this._game.stage.maxScaleY){this.height=this._game.stage.maxScaleY}else{this.height=window.innerHeight}}else{if(this._game.stage.scaleMode==StageScaleMode.SHOW_ALL){var multiplier=Math.min((window.innerHeight/this._game.stage.height),(window.innerWidth/this._game.stage.width));this.width=Math.round(this._game.stage.width*multiplier);this.height=Math.round(this._game.stage.height*multiplier);if(this._game.stage.maxScaleX&&this.width>this._game.stage.maxScaleX){this.width=this._game.stage.maxScaleX}if(this._game.stage.maxScaleY&&this.height>this._game.stage.maxScaleY){this.height=this._game.stage.maxScaleY}}}this._game.stage.canvas.style.width=this.width+"px";this._game.stage.canvas.style.height=this.height+"px";this._game.input.scaleX=this._game.stage.width/this.width;this._game.input.scaleY=this._game.stage.height/this.height;clearInterval(this._check);this._check=null}};return StageScaleMode})();var Stage=(function(){function Stage(game,parent,width,height){var _this=this;this.clear=true;this.minScaleX=null;this.maxScaleX=null;this.minScaleY=null;this.maxScaleY=null;this._logo="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAO1JREFUeNpi/P//PwM6YGRkxBQEAqBaRnQxFmwa10d6MAjrMqMofHv5L1we2SBGmAtAktg0ogOQQYHLd8ANYYFpPtTmzUAMAFmwnsEDrAdkCAvMZlIAsiFMMAEYsKvaSrQhIMCELkGsV2AAbIC8gCQYgwKIUABiNYBf9yoYH7n7n6CzN274g2IYEyFbsNmKLIaSkHpP7WSwUfbA0ASzFQRslBlxp0RcAF0TRhggA3zhAJIDpUKU5A9KyshpHDkjFZu5g2nJMFcwXVJSgqIGnBKx5bKenh4w/XzVbgbPtlIUcVgSxuoCUgHIIIAAAwArtXwJBABO6QAAAABJRU5ErkJggg==";this._game=game;this.canvas=document.createElement("canvas");this.canvas.width=width;this.canvas.height=height;if(document.getElementById(parent)){document.getElementById(parent).appendChild(this.canvas);document.getElementById(parent).style.overflow="hidden"}else{document.body.appendChild(this.canvas)}this.context=this.canvas.getContext("2d");this.offset=this.getOffset(this.canvas);this.bounds=new Rectangle(this.offset.x,this.offset.y,width,height);this.aspectRatio=width/height;this.scaleMode=StageScaleMode.NO_SCALE;this.scale=new StageScaleMode(this._game);window.onblur=function(event){return _this.visibilityChange(event)};window.onfocus=function(event){return _this.visibilityChange(event)}}Stage.ORIENTATION_LANDSCAPE=0;Stage.ORIENTATION_PORTRAIT=1;Stage.prototype.update=function(){this.scale.update();if(this.clear){this.context.clearRect(0,0,this.width,this.height)}};Stage.prototype.renderDebugInfo=function(){this.context.fillStyle="rgb(255,255,255)";this.context.fillText(Game.VERSION,10,20);this.context.fillText("Game Size: "+this.width+" x "+this.height,10,40);this.context.fillText("x: "+this.x+" y: "+this.y,10,60)};Stage.prototype.visibilityChange=function(event){if(event.type=="blur"&&this._game.pause==false&&this._game.isBooted==true){this._game.pause=true;this.drawPauseScreen()}else{if(event.type=="focus"){this._game.pause=false}}};Stage.prototype.drawInitScreen=function(){this.context.fillStyle="rgb(40, 40, 40)";this.context.fillRect(0,0,this.width,this.height);this.context.fillStyle="rgb(255,255,255)";this.context.font="bold 18px Arial";this.context.textBaseline="top";this.context.fillText(Game.VERSION,54,32);this.context.fillText("Game Size: "+this.width+" x "+this.height,32,64);this.context.fillText("www.photonstorm.com",32,96);this.context.font="16px Arial";this.context.fillText("You are seeing this screen because you didn't specify any default",32,160);this.context.fillText("functions in the Game constructor, or use Game.loadState()",32,184);var image=new Image();var that=this;image.onload=function(){that.context.drawImage(image,32,32)};image.src=this._logo};Stage.prototype.drawPauseScreen=function(){this.context.fillStyle="rgba(0, 0, 0, 0.4)";this.context.fillRect(0,0,this.width,this.height);var arrowWidth=Math.round(this.width/2);var arrowHeight=Math.round(this.height/2);var sx=this.centerX-arrowWidth/2;var sy=this.centerY-arrowHeight/2;this.context.beginPath();this.context.moveTo(sx,sy);this.context.lineTo(sx,sy+arrowHeight);this.context.lineTo(sx+arrowWidth,this.centerY);this.context.closePath();this.context.fillStyle="rgba(255, 255, 255, 0.8)";this.context.fill()};Stage.prototype.getOffset=function(element){var box=element.getBoundingClientRect();var clientTop=element.clientTop||document.body.clientTop||0;var clientLeft=element.clientLeft||document.body.clientLeft||0;var scrollTop=window.pageYOffset||element.scrollTop||document.body.scrollTop;var scrollLeft=window.pageXOffset||element.scrollLeft||document.body.scrollLeft;return new Point(box.left+scrollLeft-clientLeft,box.top+scrollTop-clientTop)};Object.defineProperty(Stage.prototype,"backgroundColor",{get:function(){return this._bgColor},set:function(color){this.canvas.style.backgroundColor=color},enumerable:true,configurable:true});Object.defineProperty(Stage.prototype,"x",{get:function(){return this.bounds.x},enumerable:true,configurable:true});Object.defineProperty(Stage.prototype,"y",{get:function(){return this.bounds.y},enumerable:true,configurable:true});Object.defineProperty(Stage.prototype,"width",{get:function(){return this.bounds.width},enumerable:true,configurable:true});Object.defineProperty(Stage.prototype,"height",{get:function(){return this.bounds.height},enumerable:true,configurable:true});Object.defineProperty(Stage.prototype,"centerX",{get:function(){return this.bounds.halfWidth},enumerable:true,configurable:true});Object.defineProperty(Stage.prototype,"centerY",{get:function(){return this.bounds.halfHeight},enumerable:true,configurable:true});Object.defineProperty(Stage.prototype,"randomX",{get:function(){return Math.round(Math.random()*this.bounds.width)},enumerable:true,configurable:true});Object.defineProperty(Stage.prototype,"randomY",{get:function(){return Math.round(Math.random()*this.bounds.height)},enumerable:true,configurable:true});return Stage})();var Time=(function(){function Time(game){this.timeScale=1;this.elapsed=0;this.time=0;this.now=0;this.delta=0;this.fps=0;this.fpsMin=1000;this.fpsMax=0;this.msMin=1000;this.msMax=0;this.frames=0;this._timeLastSecond=0;this._started=Date.now();this._timeLastSecond=this._started;this.time=this._started}Object.defineProperty(Time.prototype,"totalElapsedSeconds",{get:function(){return(this.now-this._started)*0.001},enumerable:true,configurable:true});Time.prototype.update=function(){this.now=Date.now();this.delta=this.now-this.time;this.msMin=Math.min(this.msMin,this.delta);this.msMax=Math.max(this.msMax,this.delta);this.frames++;if(this.now>this._timeLastSecond+1000){this.fps=Math.round((this.frames*1000)/(this.now-this._timeLastSecond));this.fpsMin=Math.min(this.fpsMin,this.fps);this.fpsMax=Math.max(this.fpsMax,this.fps);this._timeLastSecond=this.now;this.frames=0}this.time=this.now};Time.prototype.elapsedSince=function(since){return this.now-since};Time.prototype.elapsedSecondsSince=function(since){return(this.now-since)*0.001};Time.prototype.reset=function(){this._started=this.now};return Time})();var TilemapBuffer=(function(){function TilemapBuffer(game,camera,tilemap,texture,tileOffsets){this._startX=0;this._maxX=0;this._startY=0;this._maxY=0;this._tx=0;this._ty=0;this._dx=0;this._dy=0;this._oldCameraX=0;this._oldCameraY=0;this._dirty=true;this._game=game;this.camera=camera;this._tilemap=tilemap;this._texture=texture;this._tileOffsets=tileOffsets}TilemapBuffer.prototype.createCanvas=function(){this.canvas=document.createElement("canvas");this.canvas.width=this._game.stage.width;this.canvas.height=this._game.stage.height;this.context=this.canvas.getContext("2d")};TilemapBuffer.prototype.update=function(){};TilemapBuffer.prototype.renderDebugInfo=function(x,y,color){if(typeof color==="undefined"){color="rgb(255,255,255)"}this._game.stage.context.fillStyle=color;this._game.stage.context.fillText("TilemapBuffer",x,y);this._game.stage.context.fillText("startX: "+this._startX+" endX: "+this._maxX,x,y+14);this._game.stage.context.fillText("startY: "+this._startY+" endY: "+this._maxY,x,y+28);this._game.stage.context.fillText("dx: "+this._dx+" dy: "+this._dy,x,y+42);this._game.stage.context.fillText("Dirty: "+this._dirty,x,y+56)};TilemapBuffer.prototype.render=function(dx,dy){this._maxX=this._game.math.ceil(this.camera.width/this._tilemap.tileWidth)+1;this._maxY=this._game.math.ceil(this.camera.height/this._tilemap.tileHeight)+1;this._startX=this._game.math.floor(this.camera.worldView.x/this._tilemap.tileWidth);this._startY=this._game.math.floor(this.camera.worldView.y/this._tilemap.tileHeight);if(this._startX<0){this._startX=0}if(this._startY<0){this._startY=0}if(this._startX+this._maxX>this._tilemap.widthInTiles){this._startX=this._tilemap.widthInTiles-this._maxX}if(this._startY+this._maxY>this._tilemap.heightInTiles){this._startY=this._tilemap.heightInTiles-this._maxY}this._dx=dx;this._dy=dy;this._dx+=-(this.camera.worldView.x-(this._startX*this._tilemap.tileWidth));this._dy+=-(this.camera.worldView.y-(this._startY*this._tilemap.tileHeight));this._tx=this._dx;this._ty=this._dy;for(var row=this._startY;row<this._startY+this._maxY;row++){this._columnData=this._tilemap.mapData[row];for(var tile=this._startX;tile<this._startX+this._maxX;tile++){if(this._tileOffsets[this._columnData[tile]]){this._game.stage.context.drawImage(this._texture,this._tileOffsets[this._columnData[tile]].x,this._tileOffsets[this._columnData[tile]].y,this._tilemap.tileWidth,this._tilemap.tileHeight,this._tx,this._ty,this._tilemap.tileWidth,this._tilemap.tileHeight);this._tx+=this._tilemap.tileWidth}}this._tx=this._dx;this._ty+=this._tilemap.tileHeight}return true};return TilemapBuffer})();var Tilemap=(function(_super){__extends(Tilemap,_super);function Tilemap(game,key,mapData,format,tileWidth,tileHeight){if(typeof tileWidth==="undefined"){tileWidth=0}if(typeof tileHeight==="undefined"){tileHeight=0}_super.call(this,game);this._dx=0;this._dy=0;this.widthInTiles=0;this.heightInTiles=0;this.widthInPixels=0;this.heightInPixels=0;this.tileBoundary=10;this._texture=this._game.cache.getImage(key);this._tilemapBuffers=[];this.isGroup=false;this.tileWidth=tileWidth;this.tileHeight=tileHeight;this.boundsInTiles=new Rectangle();this.mapFormat=format;switch(format){case Tilemap.FORMAT_CSV:this.parseCSV(game.cache.getText(mapData));break;case Tilemap.FORMAT_TILED_JSON:this.parseTiledJSON(game.cache.getText(mapData));break}this.parseTileOffsets();this.createTilemapBuffers()}Tilemap.FORMAT_CSV=0;Tilemap.FORMAT_TILED_JSON=1;Tilemap.prototype.parseCSV=function(data){this.mapData=[];data=data.trim();var rows=data.split("\n");for(var i=0;i<rows.length;i++){var column=rows[i].split(",");var output=[];if(column.length>0){if(this.widthInTiles==0){this.widthInTiles=column.length}this.heightInTiles++;for(var c=0;c<column.length;c++){output[c]=parseInt(column[c])}this.mapData.push(output)}}if(this.widthInTiles>0){this.widthInPixels=this.tileWidth*this.widthInTiles}if(this.heightInTiles>0){this.heightInPixels=this.tileHeight*this.heightInTiles}this.boundsInTiles.setTo(0,0,this.widthInTiles,this.heightInTiles)};Tilemap.prototype.parseTiledJSON=function(data){console.log("parseTiledJSON");this.mapData=[];data=data.trim();var json=JSON.parse(data);this.tileWidth=json.tilewidth;this.tileHeight=json.tileheight;this.widthInTiles=json.layers[0].width;this.heightInTiles=json.layers[0].height;this.widthInPixels=this.widthInTiles*this.tileWidth;this.heightInPixels=this.heightInTiles*this.tileHeight;this.boundsInTiles.setTo(0,0,this.widthInTiles,this.heightInTiles);console.log("width in tiles",this.widthInTiles);console.log("height in tiles",this.heightInTiles);console.log("width in px",this.widthInPixels);console.log("height in px",this.heightInPixels);var c=0;var row;for(var i=0;i<json.layers[0].data.length;i++){if(c==0){row=[]}row.push(json.layers[0].data[i]);c++;if(c==this.widthInTiles){this.mapData.push(row);c=0}}};Tilemap.prototype.getMapSegment=function(area){};Tilemap.prototype.createTilemapBuffers=function(){var cams=this._game.world.getAllCameras();for(var i=0;i<cams.length;i++){this._tilemapBuffers[cams[i].ID]=new TilemapBuffer(this._game,cams[i],this,this._texture,this._tileOffsets)}};Tilemap.prototype.parseTileOffsets=function(){this._tileOffsets=[];var i=0;if(this.mapFormat==Tilemap.FORMAT_TILED_JSON){this._tileOffsets[0]=null;i=1}for(var ty=0;ty<this._texture.height;ty+=this.tileHeight){for(var tx=0;tx<this._texture.width;tx+=this.tileWidth){this._tileOffsets[i]={x:tx,y:ty};i++}}};Tilemap.prototype.update=function(){this._tilemapBuffers[0].update()};Tilemap.prototype.renderDebugInfo=function(x,y,color){if(typeof color==="undefined"){color="rgb(255,255,255)"}this._tilemapBuffers[0].renderDebugInfo(x,y,color)};Tilemap.prototype.render=function(camera,cameraOffsetX,cameraOffsetY){if(this.visible===false||this.scale.x==0||this.scale.y==0||this.alpha<0.1){return false}this._dx=cameraOffsetX+(this.bounds.x-camera.worldView.x);this._dy=cameraOffsetY+(this.bounds.y-camera.worldView.y);this._dx=Math.round(this._dx);this._dy=Math.round(this._dy);if(this._tilemapBuffers[camera.ID]){this._tilemapBuffers[camera.ID].render(cameraOffsetX,cameraOffsetY)}return true};return Tilemap})(GameObject);var LinkedList=(function(){function LinkedList(){this.object=null;this.next=null}LinkedList.prototype.destroy=function(){this.object=null;if(this.next!=null){this.next.destroy()}this.next=null};return LinkedList})();var QuadTree=(function(_super){__extends(QuadTree,_super);function QuadTree(X,Y,Width,Height,Parent){if(typeof Parent==="undefined"){Parent=null}_super.call(this,X,Y,Width,Height);this._headA=this._tailA=new LinkedList();this._headB=this._tailB=new LinkedList();if(Parent!=null){var iterator;var ot;if(Parent._headA.object!=null){iterator=Parent._headA;while(iterator!=null){if(this._tailA.object!=null){ot=this._tailA;this._tailA=new LinkedList();ot.next=this._tailA}this._tailA.object=iterator.object;iterator=iterator.next}}if(Parent._headB.object!=null){iterator=Parent._headB;while(iterator!=null){if(this._tailB.object!=null){ot=this._tailB;this._tailB=new LinkedList();ot.next=this._tailB}this._tailB.object=iterator.object;iterator=iterator.next}}}else{QuadTree._min=(this.width+this.height)/(2*QuadTree.divisions)}this._canSubdivide=(this.width>QuadTree._min)||(this.height>QuadTree._min);this._northWestTree=null;this._northEastTree=null;this._southEastTree=null;this._southWestTree=null;this._leftEdge=this.x;this._rightEdge=this.x+this.width;this._halfWidth=this.width/2;this._midpointX=this._leftEdge+this._halfWidth;this._topEdge=this.y;this._bottomEdge=this.y+this.height;this._halfHeight=this.height/2;this._midpointY=this._topEdge+this._halfHeight}QuadTree.A_LIST=0;QuadTree.B_LIST=1;QuadTree.prototype.destroy=function(){this._tailA.destroy();this._tailB.destroy();this._headA.destroy();this._headB.destroy();this._tailA=null;this._tailB=null;this._headA=null;this._headB=null;if(this._northWestTree!=null){this._northWestTree.destroy()}if(this._northEastTree!=null){this._northEastTree.destroy()}if(this._southEastTree!=null){this._southEastTree.destroy()}if(this._southWestTree!=null){this._southWestTree.destroy()}this._northWestTree=null;this._northEastTree=null;this._southEastTree=null;this._southWestTree=null;QuadTree._object=null;QuadTree._processingCallback=null;QuadTree._notifyCallback=null};QuadTree.prototype.load=function(ObjectOrGroup1,ObjectOrGroup2,NotifyCallback,ProcessCallback){if(typeof ObjectOrGroup2==="undefined"){ObjectOrGroup2=null}if(typeof NotifyCallback==="undefined"){NotifyCallback=null}if(typeof ProcessCallback==="undefined"){ProcessCallback=null}this.add(ObjectOrGroup1,QuadTree.A_LIST);if(ObjectOrGroup2!=null){this.add(ObjectOrGroup2,QuadTree.B_LIST);QuadTree._useBothLists=true}else{QuadTree._useBothLists=false}QuadTree._notifyCallback=NotifyCallback;QuadTree._processingCallback=ProcessCallback};QuadTree.prototype.add=function(ObjectOrGroup,List){QuadTree._list=List;if(ObjectOrGroup.isGroup==true){var i=0;var basic;var members=ObjectOrGroup.members;var l=ObjectOrGroup.length;while(i<l){basic=members[i++];if((basic!=null)&&basic.exists){if(basic.isGroup){this.add(basic,List)}else{QuadTree._object=basic;if(QuadTree._object.exists&&QuadTree._object.allowCollisions){QuadTree._objectLeftEdge=QuadTree._object.x;QuadTree._objectTopEdge=QuadTree._object.y;QuadTree._objectRightEdge=QuadTree._object.x+QuadTree._object.width;QuadTree._objectBottomEdge=QuadTree._object.y+QuadTree._object.height;this.addObject()}}}}}else{QuadTree._object=ObjectOrGroup;if(QuadTree._object.exists&&QuadTree._object.allowCollisions){QuadTree._objectLeftEdge=QuadTree._object.x;QuadTree._objectTopEdge=QuadTree._object.y;QuadTree._objectRightEdge=QuadTree._object.x+QuadTree._object.width;QuadTree._objectBottomEdge=QuadTree._object.y+QuadTree._object.height;this.addObject()}}};QuadTree.prototype.addObject=function(){if(!this._canSubdivide||((this._leftEdge>=QuadTree._objectLeftEdge)&&(this._rightEdge<=QuadTree._objectRightEdge)&&(this._topEdge>=QuadTree._objectTopEdge)&&(this._bottomEdge<=QuadTree._objectBottomEdge))){this.addToList();return}if((QuadTree._objectLeftEdge>this._leftEdge)&&(QuadTree._objectRightEdge<this._midpointX)){if((QuadTree._objectTopEdge>this._topEdge)&&(QuadTree._objectBottomEdge<this._midpointY)){if(this._northWestTree==null){this._northWestTree=new QuadTree(this._leftEdge,this._topEdge,this._halfWidth,this._halfHeight,this)}this._northWestTree.addObject();return}if((QuadTree._objectTopEdge>this._midpointY)&&(QuadTree._objectBottomEdge<this._bottomEdge)){if(this._southWestTree==null){this._southWestTree=new QuadTree(this._leftEdge,this._midpointY,this._halfWidth,this._halfHeight,this)}this._southWestTree.addObject();return}}if((QuadTree._objectLeftEdge>this._midpointX)&&(QuadTree._objectRightEdge<this._rightEdge)){if((QuadTree._objectTopEdge>this._topEdge)&&(QuadTree._objectBottomEdge<this._midpointY)){if(this._northEastTree==null){this._northEastTree=new QuadTree(this._midpointX,this._topEdge,this._halfWidth,this._halfHeight,this)}this._northEastTree.addObject();return}if((QuadTree._objectTopEdge>this._midpointY)&&(QuadTree._objectBottomEdge<this._bottomEdge)){if(this._southEastTree==null){this._southEastTree=new QuadTree(this._midpointX,this._midpointY,this._halfWidth,this._halfHeight,this)}this._southEastTree.addObject();return}}if((QuadTree._objectRightEdge>this._leftEdge)&&(QuadTree._objectLeftEdge<this._midpointX)&&(QuadTree._objectBottomEdge>this._topEdge)&&(QuadTree._objectTopEdge<this._midpointY)){if(this._northWestTree==null){this._northWestTree=new QuadTree(this._leftEdge,this._topEdge,this._halfWidth,this._halfHeight,this)}this._northWestTree.addObject()}if((QuadTree._objectRightEdge>this._midpointX)&&(QuadTree._objectLeftEdge<this._rightEdge)&&(QuadTree._objectBottomEdge>this._topEdge)&&(QuadTree._objectTopEdge<this._midpointY)){if(this._northEastTree==null){this._northEastTree=new QuadTree(this._midpointX,this._topEdge,this._halfWidth,this._halfHeight,this)}this._northEastTree.addObject()}if((QuadTree._objectRightEdge>this._midpointX)&&(QuadTree._objectLeftEdge<this._rightEdge)&&(QuadTree._objectBottomEdge>this._midpointY)&&(QuadTree._objectTopEdge<this._bottomEdge)){if(this._southEastTree==null){this._southEastTree=new QuadTree(this._midpointX,this._midpointY,this._halfWidth,this._halfHeight,this)}this._southEastTree.addObject()}if((QuadTree._objectRightEdge>this._leftEdge)&&(QuadTree._objectLeftEdge<this._midpointX)&&(QuadTree._objectBottomEdge>this._midpointY)&&(QuadTree._objectTopEdge<this._bottomEdge)){if(this._southWestTree==null){this._southWestTree=new QuadTree(this._leftEdge,this._midpointY,this._halfWidth,this._halfHeight,this)}this._southWestTree.addObject()}};QuadTree.prototype.addToList=function(){var ot;if(QuadTree._list==QuadTree.A_LIST){if(this._tailA.object!=null){ot=this._tailA;this._tailA=new LinkedList();ot.next=this._tailA}this._tailA.object=QuadTree._object}else{if(this._tailB.object!=null){ot=this._tailB;this._tailB=new LinkedList();ot.next=this._tailB}this._tailB.object=QuadTree._object}if(!this._canSubdivide){return}if(this._northWestTree!=null){this._northWestTree.addToList()}if(this._northEastTree!=null){this._northEastTree.addToList()}if(this._southEastTree!=null){this._southEastTree.addToList()}if(this._southWestTree!=null){this._southWestTree.addToList()}};QuadTree.prototype.execute=function(){var overlapProcessed=false;var iterator;if(this._headA.object!=null){iterator=this._headA;while(iterator!=null){QuadTree._object=iterator.object;if(QuadTree._useBothLists){QuadTree._iterator=this._headB}else{QuadTree._iterator=iterator.next}if(QuadTree._object.exists&&(QuadTree._object.allowCollisions>0)&&(QuadTree._iterator!=null)&&(QuadTree._iterator.object!=null)&&QuadTree._iterator.object.exists&&this.overlapNode()){overlapProcessed=true}iterator=iterator.next}}if((this._northWestTree!=null)&&this._northWestTree.execute()){overlapProcessed=true}if((this._northEastTree!=null)&&this._northEastTree.execute()){overlapProcessed=true}if((this._southEastTree!=null)&&this._southEastTree.execute()){overlapProcessed=true}if((this._southWestTree!=null)&&this._southWestTree.execute()){overlapProcessed=true}return overlapProcessed};QuadTree.prototype.overlapNode=function(){var overlapProcessed=false;var checkObject;while(QuadTree._iterator!=null){if(!QuadTree._object.exists||(QuadTree._object.allowCollisions<=0)){break}checkObject=QuadTree._iterator.object;if((QuadTree._object===checkObject)||!checkObject.exists||(checkObject.allowCollisions<=0)){QuadTree._iterator=QuadTree._iterator.next;continue}QuadTree._objectHullX=(QuadTree._object.x<QuadTree._object.last.x)?QuadTree._object.x:QuadTree._object.last.x;QuadTree._objectHullY=(QuadTree._object.y<QuadTree._object.last.y)?QuadTree._object.y:QuadTree._object.last.y;QuadTree._objectHullWidth=QuadTree._object.x-QuadTree._object.last.x;QuadTree._objectHullWidth=QuadTree._object.width+((QuadTree._objectHullWidth>0)?QuadTree._objectHullWidth:-QuadTree._objectHullWidth);QuadTree._objectHullHeight=QuadTree._object.y-QuadTree._object.last.y;QuadTree._objectHullHeight=QuadTree._object.height+((QuadTree._objectHullHeight>0)?QuadTree._objectHullHeight:-QuadTree._objectHullHeight);QuadTree._checkObjectHullX=(checkObject.x<checkObject.last.x)?checkObject.x:checkObject.last.x;QuadTree._checkObjectHullY=(checkObject.y<checkObject.last.y)?checkObject.y:checkObject.last.y;QuadTree._checkObjectHullWidth=checkObject.x-checkObject.last.x;QuadTree._checkObjectHullWidth=checkObject.width+((QuadTree._checkObjectHullWidth>0)?QuadTree._checkObjectHullWidth:-QuadTree._checkObjectHullWidth);QuadTree._checkObjectHullHeight=checkObject.y-checkObject.last.y;QuadTree._checkObjectHullHeight=checkObject.height+((QuadTree._checkObjectHullHeight>0)?QuadTree._checkObjectHullHeight:-QuadTree._checkObjectHullHeight);if((QuadTree._objectHullX+QuadTree._objectHullWidth>QuadTree._checkObjectHullX)&&(QuadTree._objectHullX<QuadTree._checkObjectHullX+QuadTree._checkObjectHullWidth)&&(QuadTree._objectHullY+QuadTree._objectHullHeight>QuadTree._checkObjectHullY)&&(QuadTree._objectHullY<QuadTree._checkObjectHullY+QuadTree._checkObjectHullHeight)){if((QuadTree._processingCallback==null)||QuadTree._processingCallback(QuadTree._object,checkObject)){overlapProcessed=true}if(overlapProcessed&&(QuadTree._notifyCallback!=null)){QuadTree._notifyCallback(QuadTree._object,checkObject)}}QuadTree._iterator=QuadTree._iterator.next}return overlapProcessed};return QuadTree})(Rectangle);var World=(function(){function World(game,width,height){this._game=game;this._cameras=new Cameras(this._game,0,0,width,height);this._game.camera=this._cameras.current;this.group=new Group(this._game,0);this.bounds=new Rectangle(0,0,width,height);this.worldDivisions=6}World.prototype.update=function(){this.group.preUpdate();this.group.update();this.group.postUpdate();this._cameras.update()};World.prototype.render=function(){this._cameras.render()};World.prototype.destroy=function(){this.group.destroy();this._cameras.destroy()};World.prototype.setSize=function(width,height,updateCameraBounds){if(typeof updateCameraBounds==="undefined"){updateCameraBounds=true}this.bounds.width=width;this.bounds.height=height;if(updateCameraBounds==true){this._game.camera.setBounds(0,0,width,height)}};Object.defineProperty(World.prototype,"width",{get:function(){return this.bounds.width},set:function(value){this.bounds.width=value},enumerable:true,configurable:true});Object.defineProperty(World.prototype,"height",{get:function(){return this.bounds.height},set:function(value){this.bounds.height=value},enumerable:true,configurable:true});Object.defineProperty(World.prototype,"centerX",{get:function(){return this.bounds.halfWidth},enumerable:true,configurable:true});Object.defineProperty(World.prototype,"centerY",{get:function(){return this.bounds.halfHeight},enumerable:true,configurable:true});Object.defineProperty(World.prototype,"randomX",{get:function(){return Math.round(Math.random()*this.bounds.width)},enumerable:true,configurable:true});Object.defineProperty(World.prototype,"randomY",{get:function(){return Math.round(Math.random()*this.bounds.height)},enumerable:true,configurable:true});World.prototype.addExistingCamera=function(cam){return cam};World.prototype.createCamera=function(x,y,width,height){return this._cameras.addCamera(x,y,width,height)};World.prototype.removeCamera=function(id){return this._cameras.removeCamera(id)};World.prototype.getAllCameras=function(){return this._cameras.getAll()};World.prototype.addExistingSprite=function(sprite){return this.group.add(sprite)};World.prototype.createSprite=function(x,y,key){if(typeof key==="undefined"){key=""}return this.group.add(new Sprite(this._game,x,y,key))};World.prototype.createDynamicTexture=function(key,width,height){return new DynamicTexture(this._game,key,width,height)};World.prototype.createGroup=function(MaxSize){if(typeof MaxSize==="undefined"){MaxSize=0}return this.group.add(new Group(this._game,MaxSize))};World.prototype.createTilemap=function(key,mapData,format,tileWidth,tileHeight){return this.group.add(new Tilemap(this._game,key,mapData,format,tileWidth,tileHeight))};World.prototype.createParticle=function(){return new Particle(this._game)};World.prototype.createEmitter=function(x,y,size){if(typeof x==="undefined"){x=0}if(typeof y==="undefined"){y=0}if(typeof size==="undefined"){size=0}return this.group.add(new Emitter(this._game,x,y,size))};World.prototype.overlap=function(ObjectOrGroup1,ObjectOrGroup2,NotifyCallback,ProcessCallback){if(typeof ObjectOrGroup1==="undefined"){ObjectOrGroup1=null}if(typeof ObjectOrGroup2==="undefined"){ObjectOrGroup2=null}if(typeof NotifyCallback==="undefined"){NotifyCallback=null}if(typeof ProcessCallback==="undefined"){ProcessCallback=null}if(ObjectOrGroup1==null){ObjectOrGroup1=this.group}if(ObjectOrGroup2==ObjectOrGroup1){ObjectOrGroup2=null}QuadTree.divisions=this.worldDivisions;var quadTree=new QuadTree(this.bounds.x,this.bounds.y,this.bounds.width,this.bounds.height);quadTree.load(ObjectOrGroup1,ObjectOrGroup2,NotifyCallback,ProcessCallback);var result=quadTree.execute();quadTree.destroy();quadTree=null;return result};World.separate=function separate(Object1,Object2){var separatedX=World.separateX(Object1,Object2);var separatedY=World.separateY(Object1,Object2);return separatedX||separatedY};World.separateX=function separateX(Object1,Object2){var obj1immovable=Object1.immovable;var obj2immovable=Object2.immovable;if(obj1immovable&&obj2immovable){return false}var overlap=0;var obj1delta=Object1.x-Object1.last.x;var obj2delta=Object2.x-Object2.last.x;if(obj1delta!=obj2delta){var obj1deltaAbs=(obj1delta>0)?obj1delta:-obj1delta;var obj2deltaAbs=(obj2delta>0)?obj2delta:-obj2delta;var obj1rect=new Rectangle(Object1.x-((obj1delta>0)?obj1delta:0),Object1.last.y,Object1.width+((obj1delta>0)?obj1delta:-obj1delta),Object1.height);var obj2rect=new Rectangle(Object2.x-((obj2delta>0)?obj2delta:0),Object2.last.y,Object2.width+((obj2delta>0)?obj2delta:-obj2delta),Object2.height);if((obj1rect.x+obj1rect.width>obj2rect.x)&&(obj1rect.x<obj2rect.x+obj2rect.width)&&(obj1rect.y+obj1rect.height>obj2rect.y)&&(obj1rect.y<obj2rect.y+obj2rect.height)){var maxOverlap=obj1deltaAbs+obj2deltaAbs+GameObject.OVERLAP_BIAS;if(obj1delta>obj2delta){overlap=Object1.x+Object1.width-Object2.x;if((overlap>maxOverlap)||!(Object1.allowCollisions&GameObject.RIGHT)||!(Object2.allowCollisions&GameObject.LEFT)){overlap=0}else{Object1.touching|=GameObject.RIGHT;Object2.touching|=GameObject.LEFT}}else{if(obj1delta<obj2delta){overlap=Object1.x-Object2.width-Object2.x;if((-overlap>maxOverlap)||!(Object1.allowCollisions&GameObject.LEFT)||!(Object2.allowCollisions&GameObject.RIGHT)){overlap=0}else{Object1.touching|=GameObject.LEFT;Object2.touching|=GameObject.RIGHT}}}}}if(overlap!=0){var obj1v=Object1.velocity.x;var obj2v=Object2.velocity.x;if(!obj1immovable&&!obj2immovable){overlap*=0.5;Object1.x=Object1.x-overlap;Object2.x+=overlap;var obj1velocity=Math.sqrt((obj2v*obj2v*Object2.mass)/Object1.mass)*((obj2v>0)?1:-1);var obj2velocity=Math.sqrt((obj1v*obj1v*Object1.mass)/Object2.mass)*((obj1v>0)?1:-1);var average=(obj1velocity+obj2velocity)*0.5;obj1velocity-=average;obj2velocity-=average;Object1.velocity.x=average+obj1velocity*Object1.elasticity;Object2.velocity.x=average+obj2velocity*Object2.elasticity}else{if(!obj1immovable){Object1.x=Object1.x-overlap;Object1.velocity.x=obj2v-obj1v*Object1.elasticity}else{if(!obj2immovable){Object2.x+=overlap;Object2.velocity.x=obj1v-obj2v*Object2.elasticity}}}return true}else{return false}};World.separateY=function separateY(Object1,Object2){var obj1immovable=Object1.immovable;var obj2immovable=Object2.immovable;if(obj1immovable&&obj2immovable){return false}var overlap=0;var obj1delta=Object1.y-Object1.last.y;var obj2delta=Object2.y-Object2.last.y;if(obj1delta!=obj2delta){var obj1deltaAbs=(obj1delta>0)?obj1delta:-obj1delta;var obj2deltaAbs=(obj2delta>0)?obj2delta:-obj2delta;var obj1rect=new Rectangle(Object1.x,Object1.y-((obj1delta>0)?obj1delta:0),Object1.width,Object1.height+obj1deltaAbs);var obj2rect=new Rectangle(Object2.x,Object2.y-((obj2delta>0)?obj2delta:0),Object2.width,Object2.height+obj2deltaAbs);if((obj1rect.x+obj1rect.width>obj2rect.x)&&(obj1rect.x<obj2rect.x+obj2rect.width)&&(obj1rect.y+obj1rect.height>obj2rect.y)&&(obj1rect.y<obj2rect.y+obj2rect.height)){var maxOverlap=obj1deltaAbs+obj2deltaAbs+GameObject.OVERLAP_BIAS;if(obj1delta>obj2delta){overlap=Object1.y+Object1.height-Object2.y;if((overlap>maxOverlap)||!(Object1.allowCollisions&GameObject.DOWN)||!(Object2.allowCollisions&GameObject.UP)){overlap=0}else{Object1.touching|=GameObject.DOWN;Object2.touching|=GameObject.UP}}else{if(obj1delta<obj2delta){overlap=Object1.y-Object2.height-Object2.y;if((-overlap>maxOverlap)||!(Object1.allowCollisions&GameObject.UP)||!(Object2.allowCollisions&GameObject.DOWN)){overlap=0}else{Object1.touching|=GameObject.UP;Object2.touching|=GameObject.DOWN}}}}}if(overlap!=0){var obj1v=Object1.velocity.y;var obj2v=Object2.velocity.y;if(!obj1immovable&&!obj2immovable){overlap*=0.5;Object1.y=Object1.y-overlap;Object2.y+=overlap;var obj1velocity=Math.sqrt((obj2v*obj2v*Object2.mass)/Object1.mass)*((obj2v>0)?1:-1);var obj2velocity=Math.sqrt((obj1v*obj1v*Object1.mass)/Object2.mass)*((obj1v>0)?1:-1);var average=(obj1velocity+obj2velocity)*0.5;obj1velocity-=average;obj2velocity-=average;Object1.velocity.y=average+obj1velocity*Object1.elasticity;Object2.velocity.y=average+obj2velocity*Object2.elasticity}else{if(!obj1immovable){Object1.y=Object1.y-overlap;Object1.velocity.y=obj2v-obj1v*Object1.elasticity;if(Object2.active&&Object2.moves&&(obj1delta>obj2delta)){Object1.x+=Object2.x-Object2.last.x}}else{if(!obj2immovable){Object2.y+=overlap;Object2.velocity.y=obj1v-obj2v*Object2.elasticity;if(Object1.active&&Object1.moves&&(obj1delta<obj2delta)){Object2.x+=Object1.x-Object1.last.x}}}}return true}else{return false}};return World})();var Mouse=(function(){function Mouse(game){this._x=0;this._y=0;this.isDown=false;this.isUp=true;this.timeDown=0;this.duration=0;this.timeUp=0;this._game=game;this.start()}Mouse.LEFT_BUTTON=0;Mouse.MIDDLE_BUTTON=1;Mouse.RIGHT_BUTTON=2;Mouse.prototype.start=function(){var _this=this;this._game.stage.canvas.addEventListener("mousedown",function(event){return _this.onMouseDown(event)},true);this._game.stage.canvas.addEventListener("mousemove",function(event){return _this.onMouseMove(event)},true);this._game.stage.canvas.addEventListener("mouseup",function(event){return _this.onMouseUp(event)},true)};Mouse.prototype.reset=function(){this.isDown=false;this.isUp=true};Mouse.prototype.onMouseDown=function(event){this.button=event.button;this._x=event.clientX-this._game.stage.x;this._y=event.clientY-this._game.stage.y;this._game.input.x=this._x*this._game.input.scaleX;this._game.input.y=this._y*this._game.input.scaleY;this.isDown=true;this.isUp=false;this.timeDown=this._game.time.now};Mouse.prototype.update=function(){if(this.isDown){this.duration=this._game.time.now-this.timeDown}};Mouse.prototype.onMouseMove=function(event){this.button=event.button;this._x=event.clientX-this._game.stage.x;this._y=event.clientY-this._game.stage.y;this._game.input.x=this._x*this._game.input.scaleX;this._game.input.y=this._y*this._game.input.scaleY};Mouse.prototype.onMouseUp=function(event){this.button=event.button;this.isDown=false;this.isUp=true;this.timeUp=this._game.time.now;this.duration=this.timeUp-this.timeDown;this._x=event.clientX-this._game.stage.x;this._y=event.clientY-this._game.stage.y;this._game.input.x=this._x*this._game.input.scaleX;this._game.input.y=this._y*this._game.input.scaleY};return Mouse})();var Keyboard=(function(){function Keyboard(game){this._keys={};this._game=game;this.start()}Keyboard.prototype.start=function(){var _this=this;document.body.addEventListener("keydown",function(event){return _this.onKeyDown(event)},false);document.body.addEventListener("keyup",function(event){return _this.onKeyUp(event)},false)};Keyboard.prototype.onKeyDown=function(event){if(!this._keys[event.keyCode]){this._keys[event.keyCode]={isDown:true,timeDown:this._game.time.now,timeUp:0}}else{this._keys[event.keyCode].isDown=true;this._keys[event.keyCode].timeDown=this._game.time.now}};Keyboard.prototype.onKeyUp=function(event){if(!this._keys[event.keyCode]){this._keys[event.keyCode]={isDown:false,timeDown:0,timeUp:this._game.time.now}}else{this._keys[event.keyCode].isDown=false;this._keys[event.keyCode].timeUp=this._game.time.now}};Keyboard.prototype.reset=function(){for(var key in this._keys){this._keys[key].isDown=false}};Keyboard.prototype.justPressed=function(keycode,duration){if(typeof duration==="undefined"){duration=250}if(this._keys[keycode]&&this._keys[keycode].isDown===true&&(this._game.time.now-this._keys[keycode].timeDown<duration)){return true}else{return false}};Keyboard.prototype.justReleased=function(keycode,duration){if(typeof duration==="undefined"){duration=250}if(this._keys[keycode]&&this._keys[keycode].isDown===false&&(this._game.time.now-this._keys[keycode].timeUp<duration)){return true}else{return false}};Keyboard.prototype.isDown=function(keycode){if(this._keys[keycode]){return this._keys[keycode].isDown}else{return false}};Keyboard.A="A".charCodeAt(0);Keyboard.B="B".charCodeAt(0);Keyboard.C="C".charCodeAt(0);Keyboard.D="D".charCodeAt(0);Keyboard.E="E".charCodeAt(0);Keyboard.F="F".charCodeAt(0);Keyboard.G="G".charCodeAt(0);Keyboard.H="H".charCodeAt(0);Keyboard.I="I".charCodeAt(0);Keyboard.J="J".charCodeAt(0);Keyboard.K="K".charCodeAt(0);Keyboard.L="L".charCodeAt(0);Keyboard.M="M".charCodeAt(0);Keyboard.N="N".charCodeAt(0);Keyboard.O="O".charCodeAt(0);Keyboard.P="P".charCodeAt(0);Keyboard.Q="Q".charCodeAt(0);Keyboard.R="R".charCodeAt(0);Keyboard.S="S".charCodeAt(0);Keyboard.T="T".charCodeAt(0);Keyboard.U="U".charCodeAt(0);Keyboard.V="V".charCodeAt(0);Keyboard.W="W".charCodeAt(0);Keyboard.X="X".charCodeAt(0);Keyboard.Y="Y".charCodeAt(0);Keyboard.Z="Z".charCodeAt(0);Keyboard.ZERO="0".charCodeAt(0);Keyboard.ONE="1".charCodeAt(0);Keyboard.TWO="2".charCodeAt(0);Keyboard.THREE="3".charCodeAt(0);Keyboard.FOUR="4".charCodeAt(0);Keyboard.FIVE="5".charCodeAt(0);Keyboard.SIX="6".charCodeAt(0);Keyboard.SEVEN="7".charCodeAt(0);Keyboard.EIGHT="8".charCodeAt(0);Keyboard.NINE="9".charCodeAt(0);Keyboard.NUMPAD_0=96;Keyboard.NUMPAD_1=97;Keyboard.NUMPAD_2=98;Keyboard.NUMPAD_3=99;Keyboard.NUMPAD_4=100;Keyboard.NUMPAD_5=101;Keyboard.NUMPAD_6=102;Keyboard.NUMPAD_7=103;Keyboard.NUMPAD_8=104;Keyboard.NUMPAD_9=105;Keyboard.NUMPAD_MULTIPLY=106;Keyboard.NUMPAD_ADD=107;Keyboard.NUMPAD_ENTER=108;Keyboard.NUMPAD_SUBTRACT=109;Keyboard.NUMPAD_DECIMAL=110;Keyboard.NUMPAD_DIVIDE=111;Keyboard.F1=112;Keyboard.F2=113;Keyboard.F3=114;Keyboard.F4=115;Keyboard.F5=116;Keyboard.F6=117;Keyboard.F7=118;Keyboard.F8=119;Keyboard.F9=120;Keyboard.F10=121;Keyboard.F11=122;Keyboard.F12=123;Keyboard.F13=124;Keyboard.F14=125;Keyboard.F15=126;Keyboard.COLON=186;Keyboard.EQUALS=187;Keyboard.UNDERSCORE=189;Keyboard.QUESTION_MARK=191;Keyboard.TILDE=192;Keyboard.OPEN_BRACKET=219;Keyboard.BACKWARD_SLASH=220;Keyboard.CLOSED_BRACKET=221;Keyboard.QUOTES=222;Keyboard.BACKSPACE=8;Keyboard.TAB=9;Keyboard.CLEAR=12;Keyboard.ENTER=13;Keyboard.SHIFT=16;Keyboard.CONTROL=17;Keyboard.ALT=18;Keyboard.CAPS_LOCK=20;Keyboard.ESC=27;Keyboard.SPACEBAR=32;Keyboard.PAGE_UP=33;Keyboard.PAGE_DOWN=34;Keyboard.END=35;Keyboard.HOME=36;Keyboard.LEFT=37;Keyboard.UP=38;Keyboard.RIGHT=39;Keyboard.DOWN=40;Keyboard.INSERT=45;Keyboard.DELETE=46;Keyboard.HELP=47;Keyboard.NUM_LOCK=144;return Keyboard})();var SignalBinding=(function(){function SignalBinding(signal,listener,isOnce,listenerContext,priority){if(typeof priority==="undefined"){priority=0}this.active=true;this.params=null;this._listener=listener;this._isOnce=isOnce;this.context=listenerContext;this._signal=signal;this.priority=priority||0}SignalBinding.prototype.execute=function(paramsArr){var handlerReturn;var params;if(this.active&&!!this._listener){params=this.params?this.params.concat(paramsArr):paramsArr;handlerReturn=this._listener.apply(this.context,params);if(this._isOnce){this.detach()}}return handlerReturn};SignalBinding.prototype.detach=function(){return this.isBound()?this._signal.remove(this._listener,this.context):null};SignalBinding.prototype.isBound=function(){return(!!this._signal&&!!this._listener)};SignalBinding.prototype.isOnce=function(){return this._isOnce};SignalBinding.prototype.getListener=function(){return this._listener};SignalBinding.prototype.getSignal=function(){return this._signal};SignalBinding.prototype._destroy=function(){delete this._signal;delete this._listener;delete this.context};SignalBinding.prototype.toString=function(){return"[SignalBinding isOnce:"+this._isOnce+", isBound:"+this.isBound()+", active:"+this.active+"]"};return SignalBinding})();var Signal=(function(){function Signal(){this._bindings=[];this._prevParams=null;this.memorize=false;this._shouldPropagate=true;this.active=true}Signal.VERSION="1.0.0";Signal.prototype.validateListener=function(listener,fnName){if(typeof listener!=="function"){throw new Error("listener is a required param of {fn}() and should be a Function.".replace("{fn}",fnName))}};Signal.prototype._registerListener=function(listener,isOnce,listenerContext,priority){var prevIndex=this._indexOfListener(listener,listenerContext);var binding;if(prevIndex!==-1){binding=this._bindings[prevIndex];if(binding.isOnce()!==isOnce){throw new Error("You cannot add"+(isOnce?"":"Once")+"() then add"+(!isOnce?"":"Once")+"() the same listener without removing the relationship first.")}}else{binding=new SignalBinding(this,listener,isOnce,listenerContext,priority);this._addBinding(binding)}if(this.memorize&&this._prevParams){binding.execute(this._prevParams)}return binding};Signal.prototype._addBinding=function(binding){var n=this._bindings.length;do{--n}while(this._bindings[n]&&binding.priority<=this._bindings[n].priority);this._bindings.splice(n+1,0,binding)};Signal.prototype._indexOfListener=function(listener,context){var n=this._bindings.length;var cur;while(n--){cur=this._bindings[n];if(cur.getListener()===listener&&cur.context===context){return n}}return -1};Signal.prototype.has=function(listener,context){if(typeof context==="undefined"){context=null}return this._indexOfListener(listener,context)!==-1};Signal.prototype.add=function(listener,listenerContext,priority){if(typeof listenerContext==="undefined"){listenerContext=null}if(typeof priority==="undefined"){priority=0}this.validateListener(listener,"add");return this._registerListener(listener,false,listenerContext,priority)};Signal.prototype.addOnce=function(listener,listenerContext,priority){if(typeof listenerContext==="undefined"){listenerContext=null}if(typeof priority==="undefined"){priority=0}this.validateListener(listener,"addOnce");return this._registerListener(listener,true,listenerContext,priority)};Signal.prototype.remove=function(listener,context){if(typeof context==="undefined"){context=null}this.validateListener(listener,"remove");var i=this._indexOfListener(listener,context);if(i!==-1){this._bindings[i]._destroy();this._bindings.splice(i,1)}return listener};Signal.prototype.removeAll=function(){var n=this._bindings.length;while(n--){this._bindings[n]._destroy()}this._bindings.length=0};Signal.prototype.getNumListeners=function(){return this._bindings.length};Signal.prototype.halt=function(){this._shouldPropagate=false};Signal.prototype.dispatch=function(){var paramsArr=[];for(var _i=0;_i<(arguments.length-0);_i++){paramsArr[_i]=arguments[_i+0]}if(!this.active){return}var n=this._bindings.length;var bindings;if(this.memorize){this._prevParams=paramsArr}if(!n){return}bindings=this._bindings.slice(0);this._shouldPropagate=true;do{n--}while(bindings[n]&&this._shouldPropagate&&bindings[n].execute(paramsArr)!==false)};Signal.prototype.forget=function(){this._prevParams=null};Signal.prototype.dispose=function(){this.removeAll();delete this._bindings;delete this._prevParams};Signal.prototype.toString=function(){return"[Signal active:"+this.active+" numListeners:"+this.getNumListeners()+"]"};return Signal})();var Circle=(function(){function Circle(x,y,diameter){if(typeof x==="undefined"){x=0}if(typeof y==="undefined"){y=0}if(typeof diameter==="undefined"){diameter=0}this._diameter=0;this._radius=0;this.x=0;this.y=0;this.setTo(x,y,diameter)}Circle.prototype.diameter=function(value){if(value&&value>0){this._diameter=value;this._radius=value*0.5}return this._diameter};Circle.prototype.radius=function(value){if(value&&value>0){this._radius=value;this._diameter=value*2}return this._radius};Circle.prototype.circumference=function(){return 2*(Math.PI*this._radius)};Circle.prototype.bottom=function(value){if(value&&!isNaN(value)){if(value<this.y){this._radius=0;this._diameter=0}else{this.radius(value-this.y)}}return this.y+this._radius};Circle.prototype.left=function(value){if(value&&!isNaN(value)){if(value<this.x){this.radius(this.x-value)}else{this._radius=0;this._diameter=0}}return this.x-this._radius};Circle.prototype.right=function(value){if(value&&!isNaN(value)){if(value>this.x){this.radius(value-this.x)}else{this._radius=0;this._diameter=0}}return this.x+this._radius};Circle.prototype.top=function(value){if(value&&!isNaN(value)){if(value>this.y){this._radius=0;this._diameter=0}else{this.radius(this.y-value)}}return this.y-this._radius};Circle.prototype.area=function(){if(this._radius>0){return Math.PI*this._radius*this._radius}else{return 0}};Circle.prototype.isEmpty=function(){if(this._diameter<1){return true}return false};Circle.prototype.clone=function(output){if(typeof output==="undefined"){output=new Circle()}return output.setTo(this.x,this.y,this._diameter)};Circle.prototype.copyFrom=function(source){return this.setTo(source.x,source.y,source.diameter())};Circle.prototype.copyTo=function(target){return target.copyFrom(this)};Circle.prototype.distanceTo=function(target,round){if(typeof round==="undefined"){round=false}var dx=this.x-target.x;var dy=this.y-target.y;if(round===true){return Math.round(Math.sqrt(dx*dx+dy*dy))}else{return Math.sqrt(dx*dx+dy*dy)}};Circle.prototype.equals=function(toCompare){if(this.x===toCompare.x&&this.y===toCompare.y&&this.diameter()===toCompare.diameter()){return true}return false};Circle.prototype.intersects=function(toIntersect){if(this.distanceTo(toIntersect,false)<(this._radius+toIntersect._radius)){return true}return false};Circle.prototype.circumferencePoint=function(angle,asDegrees,output){if(typeof asDegrees==="undefined"){asDegrees=false}if(typeof output==="undefined"){output=new Point()}if(asDegrees===true){angle=angle*(180/Math.PI)}output.x=this.x+this._radius*Math.cos(angle);output.y=this.y+this._radius*Math.sin(angle);return output};Circle.prototype.offset=function(dx,dy){if(!isNaN(dx)&&!isNaN(dy)){this.x+=dx;this.y+=dy}return this};Circle.prototype.offsetPoint=function(point){return this.offset(point.x,point.y)};Circle.prototype.setTo=function(x,y,diameter){this.x=x;this.y=y;this._diameter=diameter;this._radius=diameter*0.5;return this};Circle.prototype.toString=function(){return"[{Circle (x="+this.x+" y="+this.y+" diameter="+this.diameter()+" radius="+this.radius()+")}]"};return Circle})();var Finger=(function(){function Finger(game){this.point=null;this.circle=null;this.withinGame=false;this.clientX=-1;this.clientY=-1;this.pageX=-1;this.pageY=-1;this.screenX=-1;this.screenY=-1;this.x=-1;this.y=-1;this.isDown=false;this.isUp=false;this.timeDown=0;this.duration=0;this.timeUp=0;this.justPressedRate=200;this.justReleasedRate=200;this._game=game;this.active=false}Finger.prototype.start=function(event){this.identifier=event.identifier;this.target=event.target;if(this.point===null){this.point=new Point()}if(this.circle===null){this.circle=new Circle(0,0,44)}this.move(event);this.active=true;this.withinGame=true;this.isDown=true;this.isUp=false;this.timeDown=this._game.time.now};Finger.prototype.move=function(event){this.clientX=event.clientX;this.clientY=event.clientY;this.pageX=event.pageX;this.pageY=event.pageY;this.screenX=event.screenX;this.screenY=event.screenY;this.x=this.pageX-this._game.stage.offset.x;this.y=this.pageY-this._game.stage.offset.y;this.point.setTo(this.x,this.y);this.circle.setTo(this.x,this.y,44);this.duration=this._game.time.now-this.timeDown};Finger.prototype.leave=function(event){this.withinGame=false;this.move(event)};Finger.prototype.stop=function(event){this.active=false;this.withinGame=false;this.isDown=false;this.isUp=true;this.timeUp=this._game.time.now;this.duration=this.timeUp-this.timeDown};Finger.prototype.justPressed=function(duration){if(typeof duration==="undefined"){duration=this.justPressedRate}if(this.isDown===true&&(this.timeDown+duration)>this._game.time.now){return true}else{return false}};Finger.prototype.justReleased=function(duration){if(typeof duration==="undefined"){duration=this.justReleasedRate}if(this.isUp===true&&(this.timeUp+duration)>this._game.time.now){return true}else{return false}};Finger.prototype.toString=function(){return"[{Finger (identifer="+this.identifier+" active="+this.active+" duration="+this.duration+" withinGame="+this.withinGame+" x="+this.x+" y="+this.y+" clientX="+this.clientX+" clientY="+this.clientY+" screenX="+this.screenX+" screenY="+this.screenY+" pageX="+this.pageX+" pageY="+this.pageY+")}]"};return Finger})();var Touch=(function(){function Touch(game){this.x=0;this.y=0;this.isDown=false;this.isUp=true;this._game=game;this.finger1=new Finger(this._game);this.finger2=new Finger(this._game);this.finger3=new Finger(this._game);this.finger4=new Finger(this._game);this.finger5=new Finger(this._game);this.finger6=new Finger(this._game);this.finger7=new Finger(this._game);this.finger8=new Finger(this._game);this.finger9=new Finger(this._game);this.finger10=new Finger(this._game);this._fingers=[this.finger1,this.finger2,this.finger3,this.finger4,this.finger5,this.finger6,this.finger7,this.finger8,this.finger9,this.finger10];this.touchDown=new Signal();this.touchUp=new Signal();this.start()}Touch.prototype.start=function(){var _this=this;this._game.stage.canvas.addEventListener("touchstart",function(event){return _this.onTouchStart(event)},false);this._game.stage.canvas.addEventListener("touchmove",function(event){return _this.onTouchMove(event)},false);this._game.stage.canvas.addEventListener("touchend",function(event){return _this.onTouchEnd(event)},false);this._game.stage.canvas.addEventListener("touchenter",function(event){return _this.onTouchEnter(event)},false);this._game.stage.canvas.addEventListener("touchleave",function(event){return _this.onTouchLeave(event)},false);this._game.stage.canvas.addEventListener("touchcancel",function(event){return _this.onTouchCancel(event)},false);document.addEventListener("touchmove",function(event){return _this.consumeTouchMove(event)},false)};Touch.prototype.consumeTouchMove=function(event){event.preventDefault()};Touch.prototype.onTouchStart=function(event){event.preventDefault();for(var i=0;i<event.changedTouches.length;i++){for(var f=0;f<this._fingers.length;f++){if(this._fingers[f].active===false){this._fingers[f].start(event.changedTouches[i]);this.x=this._fingers[f].x;this.y=this._fingers[f].y;this._game.input.x=this.x*this._game.input.scaleX;this._game.input.y=this.y*this._game.input.scaleY;this.touchDown.dispatch(this._fingers[f].x,this._fingers[f].y,this._fingers[f].timeDown,this._fingers[f].timeUp,this._fingers[f].duration);this.isDown=true;this.isUp=false;break}}}};Touch.prototype.onTouchCancel=function(event){event.preventDefault();for(var i=0;i<event.changedTouches.length;i++){for(var f=0;f<this._fingers.length;f++){if(this._fingers[f].identifier===event.changedTouches[i].identifier){this._fingers[f].stop(event.changedTouches[i]);break}}}};Touch.prototype.onTouchEnter=function(event){event.preventDefault();for(var i=0;i<event.changedTouches.length;i++){for(var f=0;f<this._fingers.length;f++){if(this._fingers[f].active===false){this._fingers[f].start(event.changedTouches[i]);break}}}};Touch.prototype.onTouchLeave=function(event){event.preventDefault();for(var i=0;i<event.changedTouches.length;i++){for(var f=0;f<this._fingers.length;f++){if(this._fingers[f].identifier===event.changedTouches[i].identifier){this._fingers[f].leave(event.changedTouches[i]);break}}}};Touch.prototype.onTouchMove=function(event){event.preventDefault();for(var i=0;i<event.changedTouches.length;i++){for(var f=0;f<this._fingers.length;f++){if(this._fingers[f].identifier===event.changedTouches[i].identifier){this._fingers[f].move(event.changedTouches[i]);this.x=this._fingers[f].x;this.y=this._fingers[f].y;this._game.input.x=this.x*this._game.input.scaleX;this._game.input.y=this.y*this._game.input.scaleY;break}}}};Touch.prototype.onTouchEnd=function(event){event.preventDefault();for(var i=0;i<event.changedTouches.length;i++){for(var f=0;f<this._fingers.length;f++){if(this._fingers[f].identifier===event.changedTouches[i].identifier){this._fingers[f].stop(event.changedTouches[i]);this.x=this._fingers[f].x;this.y=this._fingers[f].y;this._game.input.x=this.x*this._game.input.scaleX;this._game.input.y=this.y*this._game.input.scaleY;this.touchUp.dispatch(this._fingers[f].x,this._fingers[f].y,this._fingers[f].timeDown,this._fingers[f].timeUp,this._fingers[f].duration);this.isDown=false;this.isUp=true;break}}}};Touch.prototype.calculateDistance=function(finger1,finger2){};Touch.prototype.calculateAngle=function(finger1,finger2){};Touch.prototype.checkOverlap=function(finger1,finger2){};Touch.prototype.update=function(){};Touch.prototype.stop=function(){};Touch.prototype.reset=function(){this.isDown=false;this.isUp=false};return Touch})();var Input=(function(){function Input(game){this.x=0;this.y=0;this.scaleX=1;this.scaleY=1;this.worldX=0;this.worldY=0;this._game=game;this.mouse=new Mouse(this._game);this.keyboard=new Keyboard(this._game);this.touch=new Touch(this._game)}Input.prototype.update=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.worldX=this._game.camera.worldView.x+this.x;this.worldY=this._game.camera.worldView.y+this.y;this.mouse.update();this.touch.update()};Input.prototype.reset=function(){this.mouse.reset();this.keyboard.reset();this.touch.reset()};Input.prototype.getWorldX=function(camera){if(typeof camera==="undefined"){camera=this._game.camera}return camera.worldView.x+this.x};Input.prototype.getWorldY=function(camera){if(typeof camera==="undefined"){camera=this._game.camera}return camera.worldView.y+this.y};Input.prototype.renderDebugInfo=function(x,y,color){if(typeof color==="undefined"){color="rgb(255,255,255)"}this._game.stage.context.fillStyle=color;this._game.stage.context.fillText("Input",x,y);this._game.stage.context.fillText("Screen X: "+this.x+" Screen Y: "+this.y,x,y+14);this._game.stage.context.fillText("World X: "+this.worldX+" World Y: "+this.worldY,x,y+28);this._game.stage.context.fillText("Scale X: "+this.scaleX.toFixed(1)+" Scale Y: "+this.scaleY.toFixed(1),x,y+42)};return Input})();var RequestAnimationFrame=(function(){function RequestAnimationFrame(callback,callbackContext){this._isSetTimeOut=false;this.lastTime=0;this.currentTime=0;this.isRunning=false;this._callback=callback;this._callbackContext=callbackContext;var vendors=["ms","moz","webkit","o"];for(var x=0;x<vendors.length&&!window.requestAnimationFrame;x++){window.requestAnimationFrame=window[vendors[x]+"RequestAnimationFrame"];window.cancelAnimationFrame=window[vendors[x]+"CancelAnimationFrame"]}this.start()}RequestAnimationFrame.prototype.setCallback=function(callback){this._callback=callback};RequestAnimationFrame.prototype.isUsingSetTimeOut=function(){return this._isSetTimeOut};RequestAnimationFrame.prototype.isUsingRAF=function(){if(this._isSetTimeOut===true){return false}else{return true}};RequestAnimationFrame.prototype.start=function(callback){if(typeof callback==="undefined"){callback=null}var _this=this;if(callback){this._callback=callback}if(!window.requestAnimationFrame){this._isSetTimeOut=true;this._timeOutID=window.setTimeout(function(){return _this.SetTimeoutUpdate()},0)}else{this._isSetTimeOut=false;window.requestAnimationFrame(function(){return _this.RAFUpdate()})}this.isRunning=true};RequestAnimationFrame.prototype.stop=function(){if(this._isSetTimeOut){clearTimeout(this._timeOutID)}else{window.cancelAnimationFrame}this.isRunning=false};RequestAnimationFrame.prototype.RAFUpdate=function(){var _this=this;this.currentTime=Date.now();if(this._callback){this._callback.call(this._callbackContext)}var timeToCall=Math.max(0,16-(this.currentTime-this.lastTime));window.requestAnimationFrame(function(){return _this.RAFUpdate()});this.lastTime=this.currentTime+timeToCall};RequestAnimationFrame.prototype.SetTimeoutUpdate=function(){var _this=this;this.currentTime=Date.now();if(this._callback){this._callback.call(this._callbackContext)}var timeToCall=Math.max(0,16-(this.currentTime-this.lastTime));this._timeOutID=window.setTimeout(function(){return _this.SetTimeoutUpdate()},timeToCall);this.lastTime=this.currentTime+timeToCall};return RequestAnimationFrame})();var RandomDataGenerator=(function(){function RandomDataGenerator(seeds){if(typeof seeds==="undefined"){seeds=[]}this.c=1;this.sow(seeds)}RandomDataGenerator.prototype.uint32=function(){return this.rnd.apply(this)*4294967296};RandomDataGenerator.prototype.fract32=function(){return this.rnd.apply(this)+(this.rnd.apply(this)*2097152|0)*1.1102230246251565e-16};RandomDataGenerator.prototype.rnd=function(){var t=2091639*this.s0+this.c*2.3283064365386963e-10;this.c=t|0;this.s0=this.s1;this.s1=this.s2;this.s2=t-this.c;return this.s2};RandomDataGenerator.prototype.hash=function(data){var h,i,n;n=4022871197;data=data.toString();for(i=0;i<data.length;i++){n+=data.charCodeAt(i);h=0.02519603282416938*n;n=h>>>0;h-=n;h*=n;n=h>>>0;h-=n;n+=h*4294967296}return(n>>>0)*2.3283064365386963e-10};RandomDataGenerator.prototype.sow=function(seeds){if(typeof seeds==="undefined"){seeds=[]}this.s0=this.hash(" ");this.s1=this.hash(this.s0);this.s2=this.hash(this.s1);var seed;for(var i=0;seed=seeds[i++];){this.s0-=this.hash(seed);this.s0+=~~(this.s0<0);this.s1-=this.hash(seed);this.s1+=~~(this.s1<0);this.s2-=this.hash(seed);this.s2+=~~(this.s2<0)}};Object.defineProperty(RandomDataGenerator.prototype,"integer",{get:function(){return this.uint32()},enumerable:true,configurable:true});Object.defineProperty(RandomDataGenerator.prototype,"frac",{get:function(){return this.fract32()},enumerable:true,configurable:true});Object.defineProperty(RandomDataGenerator.prototype,"real",{get:function(){return this.uint32()+this.fract32()},enumerable:true,configurable:true});RandomDataGenerator.prototype.integerInRange=function(min,max){return Math.floor(this.realInRange(min,max))};RandomDataGenerator.prototype.realInRange=function(min,max){min=min||0;max=max||0;return this.frac*(max-min)+min};Object.defineProperty(RandomDataGenerator.prototype,"normal",{get:function(){return 1-2*this.frac},enumerable:true,configurable:true});Object.defineProperty(RandomDataGenerator.prototype,"uuid",{get:function(){var a,b;for(b=a="";a++<36;b+=~a%5|a*3&4?(a^15?8^this.frac*(a^20?16:4):4).toString(16):"-"){}return b},enumerable:true,configurable:true});RandomDataGenerator.prototype.pick=function(array){return array[this.integerInRange(0,array.length)]};RandomDataGenerator.prototype.weightedPick=function(array){return array[~~(Math.pow(this.frac,2)*array.length)]};RandomDataGenerator.prototype.timestamp=function(min,max){if(typeof min==="undefined"){min=946684800000}if(typeof max==="undefined"){max=1577862000000}return this.realInRange(min,max)};Object.defineProperty(RandomDataGenerator.prototype,"angle",{get:function(){return this.integerInRange(-180,180)},enumerable:true,configurable:true});return RandomDataGenerator})();var Device=(function(){function Device(){this.desktop=false;this.iOS=false;this.android=false;this.chromeOS=false;this.linux=false;this.macOS=false;this.windows=false;this.canvas=false;this.file=false;this.fileSystem=false;this.localStorage=false;this.webGL=false;this.worker=false;this.touch=false;this.css3D=false;this.arora=false;this.chrome=false;this.epiphany=false;this.firefox=false;this.ie=false;this.ieVersion=0;this.mobileSafari=false;this.midori=false;this.opera=false;this.safari=false;this.webApp=false;this.audioData=false;this.webaudio=false;this.ogg=false;this.mp3=false;this.wav=false;this.m4a=false;this.iPhone=false;this.iPhone4=false;this.iPad=false;this.pixelRatio=0;this._checkAudio();this._checkBrowser();this._checkCSS3D();this._checkDevice();this._checkFeatures();this._checkOS()}Device.prototype._checkOS=function(){var ua=navigator.userAgent;if(/Android/.test(ua)){this.android=true}else{if(/CrOS/.test(ua)){this.chromeOS=true}else{if(/iP[ao]d|iPhone/i.test(ua)){this.iOS=true}else{if(/Linux/.test(ua)){this.linux=true}else{if(/Mac OS/.test(ua)){this.macOS=true}else{if(/Windows/.test(ua)){this.windows=true}}}}}}if(this.windows||this.macOS||this.linux){this.desktop=true}};Device.prototype._checkFeatures=function(){this.canvas=!!window.CanvasRenderingContext2D;try{this.localStorage=!!localStorage.getItem}catch(error){this.localStorage=false}this.file=!!window.File&&!!window.FileReader&&!!window.FileList&&!!window.Blob;this.fileSystem=!!window.requestFileSystem;this.webGL=!!window.WebGLRenderingContext;this.worker=!!window.Worker;if("ontouchstart" in document.documentElement||window.navigator.msPointerEnabled){this.touch=true}};Device.prototype._checkBrowser=function(){var ua=navigator.userAgent;if(/Arora/.test(ua)){this.arora=true}else{if(/Chrome/.test(ua)){this.chrome=true}else{if(/Epiphany/.test(ua)){this.epiphany=true}else{if(/Firefox/.test(ua)){this.firefox=true}else{if(/Mobile Safari/.test(ua)){this.mobileSafari=true}else{if(/MSIE (\d+\.\d+);/.test(ua)){this.ie=true;this.ieVersion=parseInt(RegExp.$1)}else{if(/Midori/.test(ua)){this.midori=true}else{if(/Opera/.test(ua)){this.opera=true}else{if(/Safari/.test(ua)){this.safari=true}}}}}}}}}if(navigator.standalone){this.webApp=true}};Device.prototype._checkAudio=function(){this.audioData=!!(window.Audio);this.webaudio=!!(window.webkitAudioContext||window.AudioContext);var audioElement=document.createElement("audio");var result=false;try{if(result=!!audioElement.canPlayType){if(audioElement.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,"")){this.ogg=true}if(audioElement.canPlayType("audio/mpeg;").replace(/^no$/,"")){this.mp3=true}if(audioElement.canPlayType('audio/wav; codecs="1"').replace(/^no$/,"")){this.wav=true}if(audioElement.canPlayType("audio/x-m4a;")||audioElement.canPlayType("audio/aac;").replace(/^no$/,"")){this.m4a=true}}}catch(e){}};Device.prototype._checkDevice=function(){this.pixelRatio=window.devicePixelRatio||1;this.iPhone=navigator.userAgent.toLowerCase().indexOf("iphone")!=-1;this.iPhone4=(this.pixelRatio==2&&this.iPhone);this.iPad=navigator.userAgent.toLowerCase().indexOf("ipad")!=-1};Device.prototype._checkCSS3D=function(){var el=document.createElement("p");var has3d;var transforms={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.insertBefore(el,null);for(var t in transforms){if(el.style[t]!==undefined){el.style[t]="translate3d(1px,1px,1px)";has3d=window.getComputedStyle(el).getPropertyValue(transforms[t])}}document.body.removeChild(el);this.css3D=(has3d!==undefined&&has3d.length>0&&has3d!=="none")};Device.prototype.getAll=function(){var output="";output=output.concat("Device\n");output=output.concat("iPhone : "+this.iPhone+"\n");output=output.concat("iPhone4 : "+this.iPhone4+"\n");output=output.concat("iPad : "+this.iPad+"\n");output=output.concat("\n");output=output.concat("Operating System\n");output=output.concat("iOS: "+this.iOS+"\n");output=output.concat("Android: "+this.android+"\n");output=output.concat("ChromeOS: "+this.chromeOS+"\n");output=output.concat("Linux: "+this.linux+"\n");output=output.concat("MacOS: "+this.macOS+"\n");output=output.concat("Windows: "+this.windows+"\n");output=output.concat("\n");output=output.concat("Browser\n");output=output.concat("Arora: "+this.arora+"\n");output=output.concat("Chrome: "+this.chrome+"\n");output=output.concat("Epiphany: "+this.epiphany+"\n");output=output.concat("Firefox: "+this.firefox+"\n");output=output.concat("Internet Explorer: "+this.ie+" ("+this.ieVersion+")\n");output=output.concat("Mobile Safari: "+this.mobileSafari+"\n");output=output.concat("Midori: "+this.midori+"\n");output=output.concat("Opera: "+this.opera+"\n");output=output.concat("Safari: "+this.safari+"\n");output=output.concat("\n");output=output.concat("Features\n");output=output.concat("Canvas: "+this.canvas+"\n");output=output.concat("File: "+this.file+"\n");output=output.concat("FileSystem: "+this.fileSystem+"\n");output=output.concat("LocalStorage: "+this.localStorage+"\n");output=output.concat("WebGL: "+this.webGL+"\n");output=output.concat("Worker: "+this.worker+"\n");output=output.concat("Touch: "+this.touch+"\n");output=output.concat("CSS 3D: "+this.css3D+"\n");output=output.concat("\n");output=output.concat("Audio\n");output=output.concat("Audio Data: "+this.canvas+"\n");output=output.concat("Web Audio: "+this.canvas+"\n");output=output.concat("Can play OGG: "+this.canvas+"\n");output=output.concat("Can play MP3: "+this.canvas+"\n");output=output.concat("Can play M4A: "+this.canvas+"\n");output=output.concat("Can play WAV: "+this.canvas+"\n");return output};return Device})();var Game=(function(){function Game(callbackContext,parent,width,height,initCallback,createCallback,updateCallback,renderCallback){if(typeof parent==="undefined"){parent=""}if(typeof width==="undefined"){width=800}if(typeof height==="undefined"){height=600}if(typeof initCallback==="undefined"){initCallback=null}if(typeof createCallback==="undefined"){createCallback=null}if(typeof updateCallback==="undefined"){updateCallback=null}if(typeof renderCallback==="undefined"){renderCallback=null}var _this=this;this._maxAccumulation=32;this._accumulator=0;this._step=0;this._loadComplete=false;this._paused=false;this._pendingState=null;this.onInitCallback=null;this.onCreateCallback=null;this.onUpdateCallback=null;this.onRenderCallback=null;this.onPausedCallback=null;this.isBooted=false;this.callbackContext=callbackContext;this.onInitCallback=initCallback;this.onCreateCallback=createCallback;this.onUpdateCallback=updateCallback;this.onRenderCallback=renderCallback;if(document.readyState==="complete"||document.readyState==="interactive"){this.boot(parent,width,height)}else{document.addEventListener("DOMContentLoaded",function(){return _this.boot(parent,width,height)},false)}}Game.VERSION="Phaser version 0.8";Game.prototype.boot=function(parent,width,height){var _this=this;if(!document.body){window.setTimeout(function(){return _this.boot(parent,width,height)},13)}else{this.device=new Device();this.stage=new Stage(this,parent,width,height);this.world=new World(this,width,height);this.sound=new SoundManager(this);this.cache=new Cache(this);this.loader=new Loader(this,this.loadComplete);this.time=new Time(this);this.input=new Input(this);this.math=new GameMath(this);this.rnd=new RandomDataGenerator([(Date.now()*Math.random()).toString()]);this.framerate=60;if(this.onInitCallback==null&&this.onCreateCallback==null&&this.onUpdateCallback==null&&this.onRenderCallback==null&&this._pendingState==null){this.isBooted=false;this.stage.drawInitScreen()}else{this.isBooted=true;this._loadComplete=false;this._raf=new RequestAnimationFrame(this.loop,this);if(this._pendingState){this.switchState(this._pendingState,false,false)}else{this.startState()}}}};Game.prototype.loadComplete=function(){this._loadComplete=true};Game.prototype.loop=function(){if(this._paused==true){if(this.onPausedCallback!==null){this.onPausedCallback.call(this.callbackContext)}return}this.time.update();this.input.update();this.stage.update();this._accumulator+=this.time.delta;if(this._accumulator>this._maxAccumulation){this._accumulator=this._maxAccumulation}while(this._accumulator>=this._step){this.time.elapsed=this.time.timeScale*(this._step/1000);this.world.update();this._accumulator=this._accumulator-this._step}if(this._loadComplete&&this.onUpdateCallback){this.onUpdateCallback.call(this.callbackContext)}this.world.render();if(this._loadComplete&&this.onRenderCallback){this.onRenderCallback.call(this.callbackContext)}};Game.prototype.startState=function(){if(this.onInitCallback!==null){this.onInitCallback.call(this.callbackContext)}else{if(this.onCreateCallback!==null){this.onCreateCallback.call(this.callbackContext)}this._loadComplete=true}};Game.prototype.setCallbacks=function(initCallback,createCallback,updateCallback,renderCallback){if(typeof initCallback==="undefined"){initCallback=null}if(typeof createCallback==="undefined"){createCallback=null}if(typeof updateCallback==="undefined"){updateCallback=null}if(typeof renderCallback==="undefined"){renderCallback=null}this.onInitCallback=initCallback;this.onCreateCallback=createCallback;this.onUpdateCallback=updateCallback;this.onRenderCallback=renderCallback};Game.prototype.switchState=function(state,clearWorld,clearCache){if(typeof clearWorld==="undefined"){clearWorld=true}if(typeof clearCache==="undefined"){clearCache=false}if(this.isBooted==false){this._pendingState=state;return}if(typeof state==="function"){state=new state(this)}if(state.create||state.update){this.callbackContext=state;this.onInitCallback=null;this.onCreateCallback=null;this.onUpdateCallback=null;this.onRenderCallback=null;this.onPausedCallback=null;if(state.init){this.onInitCallback=state.init}if(state.create){this.onCreateCallback=state.create}if(state.update){this.onUpdateCallback=state.update}if(state.render){this.onRenderCallback=state.render}if(state.paused){this.onPausedCallback=state.paused}if(clearWorld){this.world.destroy();if(clearCache==true){this.cache.destroy()}}this._loadComplete=false;this.startState()}else{throw Error("Invalid State object given. Must contain at least a create or update function.");return}};Game.prototype.destroy=function(){this.callbackContext=null;this.onInitCallback=null;this.onCreateCallback=null;this.onUpdateCallback=null;this.onRenderCallback=null;this.onPausedCallback=null;this.camera=null;this.cache=null;this.input=null;this.loader=null;this.sound=null;this.stage=null;this.time=null;this.math=null;this.world=null;this.isBooted=false};Object.defineProperty(Game.prototype,"pause",{get:function(){return this._paused},set:function(value){if(value==true&&this._paused==false){this._paused=true}else{if(value==false&&this._paused==true){this._paused=false;this.time.time=Date.now();this.input.reset()}}},enumerable:true,configurable:true});Object.defineProperty(Game.prototype,"framerate",{get:function(){return 1000/this._step},set:function(value){this._step=1000/value;if(this._maxAccumulation<this._step){this._maxAccumulation=this._step}},enumerable:true,configurable:true});Game.prototype.createCamera=function(x,y,width,height){return this.world.createCamera(x,y,width,height)};Game.prototype.createSprite=function(x,y,key){if(typeof key==="undefined"){key=""}return this.world.createSprite(x,y,key)};Game.prototype.createDynamicTexture=function(key,width,height){return this.world.createDynamicTexture(key,width,height)};Game.prototype.createGroup=function(MaxSize){if(typeof MaxSize==="undefined"){MaxSize=0}return this.world.createGroup(MaxSize)};Game.prototype.createParticle=function(){return this.world.createParticle()};Game.prototype.createEmitter=function(x,y,size){if(typeof x==="undefined"){x=0}if(typeof y==="undefined"){y=0}if(typeof size==="undefined"){size=0}return this.world.createEmitter(x,y,size)};Game.prototype.createTilemap=function(key,mapData,format,tileWidth,tileHeight){return this.world.createTilemap(key,mapData,format,tileWidth,tileHeight)};Game.prototype.collide=function(ObjectOrGroup1,ObjectOrGroup2,NotifyCallback){if(typeof ObjectOrGroup1==="undefined"){ObjectOrGroup1=null}if(typeof ObjectOrGroup2==="undefined"){ObjectOrGroup2=null}if(typeof NotifyCallback==="undefined"){NotifyCallback=null}return this.world.overlap(ObjectOrGroup1,ObjectOrGroup2,NotifyCallback,World.separate)};return Game})();var FrameData=(function(){function FrameData(){this._frames=[];this._frameNames=[]}Object.defineProperty(FrameData.prototype,"total",{get:function(){return this._frames.length},enumerable:true,configurable:true});FrameData.prototype.addFrame=function(frame){frame.index=this._frames.length;this._frames.push(frame);if(frame.name!==""){this._frameNames[frame.name]=frame.index}return frame};FrameData.prototype.getFrame=function(index){if(this._frames[index]){return this._frames[index]}return null};FrameData.prototype.getFrameByName=function(name){if(this._frameNames[name]>=0){return this._frames[this._frameNames[name]]}return null};FrameData.prototype.getFrameRange=function(start,end,output){if(typeof output==="undefined"){output=[]}for(var i=start;i<=end;i++){output.push(this._frames[i])}return output};FrameData.prototype.getFrameIndexes=function(output){if(typeof output==="undefined"){output=[]}output.length=0;for(var i=0;i<this._frames.length;i++){output.push(i)}return output};FrameData.prototype.getAllFrames=function(){return this._frames};FrameData.prototype.getFrames=function(range){var output=[];for(var i=0;i<range.length;i++){output.push(this._frames[i])}return output};return FrameData})();var Frame=(function(){function Frame(x,y,width,height,name){this.name="";this.rotated=false;this.rotationDirection="cw";this.x=x;this.y=y;this.width=width;this.height=height;this.name=name;this.rotated=false;this.trimmed=false}Frame.prototype.setRotation=function(rotated,rotationDirection){};Frame.prototype.setTrim=function(trimmed,actualWidth,actualHeight,destX,destY,destWidth,destHeight){this.trimmed=trimmed;this.sourceSizeW=actualWidth;this.sourceSizeH=actualHeight;this.spriteSourceSizeX=destX;this.spriteSourceSizeY=destY;this.spriteSourceSizeW=destWidth;this.spriteSourceSizeH=destHeight};return Frame})();var Animation=(function(){function Animation(game,parent,frameData,name,frames,delay,looped){this._game=game;this._parent=parent;this._frames=frames;this._frameData=frameData;this.name=name;this.delay=1000/delay;this.looped=looped;this.isFinished=false;this.isPlaying=false}Object.defineProperty(Animation.prototype,"frameTotal",{get:function(){return this._frames.length},enumerable:true,configurable:true});Object.defineProperty(Animation.prototype,"frame",{get:function(){return this._frameIndex},set:function(value){this.currentFrame=this._frameData.getFrame(value);if(this.currentFrame!==null){this._parent.bounds.width=this.currentFrame.width;this._parent.bounds.height=this.currentFrame.height;this._frameIndex=value}},enumerable:true,configurable:true});Animation.prototype.play=function(frameRate,loop){if(typeof frameRate==="undefined"){frameRate=null}if(frameRate!==null){this.delay=1000/frameRate}if(loop!==undefined){this.looped=loop}this.isPlaying=true;this.isFinished=false;this._timeLastFrame=this._game.time.now;this._timeNextFrame=this._game.time.now+this.delay;this._frameIndex=0;this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex])};Animation.prototype.onComplete=function(){this.isPlaying=false;this.isFinished=true};Animation.prototype.stop=function(){this.isPlaying=false;this.isFinished=true};Animation.prototype.update=function(){if(this.isPlaying==true&&this._game.time.now>=this._timeNextFrame){this._frameIndex++;if(this._frameIndex==this._frames.length){if(this.looped){this._frameIndex=0;this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex])}else{this.onComplete()}}else{this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex])}this._timeLastFrame=this._game.time.now;this._timeNextFrame=this._game.time.now+this.delay;return true}return false};Animation.prototype.destroy=function(){this._game=null;this._parent=null;this._frames=null;this._frameData=null;this.currentFrame=null;this.isPlaying=false};return Animation})();var AnimationLoader=(function(){function AnimationLoader(){}AnimationLoader.parseSpriteSheet=function parseSpriteSheet(game,key,frameWidth,frameHeight,frameMax){var img=game.cache.getImage(key);if(img==null){return null}var width=img.width;var height=img.height;var row=Math.round(width/frameWidth);var column=Math.round(height/frameHeight);var total=row*column;if(frameMax!==-1){total=frameMax}if(width==0||height==0||width<frameWidth||height<frameHeight||total===0){return null}var data=new FrameData();var x=0;var y=0;for(var i=0;i<total;i++){data.addFrame(new Frame(x,y,frameWidth,frameHeight,""));x+=frameWidth;if(x===width){x=0;y+=frameHeight}}return data};AnimationLoader.parseJSONData=function parseJSONData(game,json){var data=new FrameData();var frames=json;var newFrame;for(var i=0;i<frames.length;i++){newFrame=data.addFrame(new Frame(frames[i].frame.x,frames[i].frame.y,frames[i].frame.w,frames[i].frame.h,frames[i].filename));newFrame.setTrim(frames[i].trimmed,frames[i].sourceSize.w,frames[i].sourceSize.h,frames[i].spriteSourceSize.x,frames[i].spriteSourceSize.y,frames[i].spriteSourceSize.w,frames[i].spriteSourceSize.h)}return data};return AnimationLoader})();var Cache=(function(){function Cache(game){this._game=game;this._canvases={};this._images={};this._sounds={};this._text={}}Cache.prototype.addCanvas=function(key,canvas,context){this._canvases[key]={canvas:canvas,context:context}};Cache.prototype.addSpriteSheet=function(key,url,data,frameWidth,frameHeight,frameMax){this._images[key]={url:url,data:data,spriteSheet:true,frameWidth:frameWidth,frameHeight:frameHeight};this._images[key].frameData=AnimationLoader.parseSpriteSheet(this._game,key,frameWidth,frameHeight,frameMax)};Cache.prototype.addTextureAtlas=function(key,url,data,jsonData){this._images[key]={url:url,data:data,spriteSheet:true};this._images[key].frameData=AnimationLoader.parseJSONData(this._game,jsonData)};Cache.prototype.addImage=function(key,url,data){this._images[key]={url:url,data:data,spriteSheet:false}};Cache.prototype.addSound=function(key,url,data){this._sounds[key]={url:url,data:data,decoded:false}};Cache.prototype.decodedSound=function(key,data){this._sounds[key].data=data;this._sounds[key].decoded=true};Cache.prototype.addText=function(key,url,data){this._text[key]={url:url,data:data}};Cache.prototype.getCanvas=function(key){if(this._canvases[key]){return this._canvases[key].canvas}return null};Cache.prototype.getImage=function(key){if(this._images[key]){return this._images[key].data}return null};Cache.prototype.getFrameData=function(key){if(this._images[key]&&this._images[key].spriteSheet==true){return this._images[key].frameData}return null};Cache.prototype.getSound=function(key){if(this._sounds[key]){return this._sounds[key].data}return null};Cache.prototype.isSoundDecoded=function(key){if(this._sounds[key]){return this._sounds[key].decoded}};Cache.prototype.isSpriteSheet=function(key){if(this._images[key]){return this._images[key].spriteSheet}};Cache.prototype.getText=function(key){if(this._text[key]){return this._text[key].data}return null};Cache.prototype.destroy=function(){for(var item in this._canvases){delete this._canvases[item.key]}for(var item in this._images){delete this._images[item.key]}for(var item in this._sounds){delete this._sounds[item.key]}for(var item in this._text){delete this._text[item.key]}};return Cache})();var Animations=(function(){function Animations(game,parent){this._frameData=null;this.currentFrame=null;this._game=game;this._parent=parent;this._anims={}}Animations.prototype.loadFrameData=function(frameData){this._frameData=frameData;this.frame=0};Animations.prototype.add=function(name,frames,frameRate,loop){if(typeof frames==="undefined"){frames=null}if(typeof frameRate==="undefined"){frameRate=60}if(typeof loop==="undefined"){loop=false}if(this._frameData==null){return}if(frames==null){frames=this._frameData.getFrameIndexes()}else{if(this.validateFrames(frames)==false){return}}this._anims[name]=new Animation(this._game,this._parent,this._frameData,name,frames,frameRate,loop);this.currentAnim=this._anims[name]};Animations.prototype.validateFrames=function(frames){var result=true;for(var i=0;i<frames.length;i++){if(frames[i]>this._frameData.total){return false}}};Animations.prototype.play=function(name,frameRate,loop){if(typeof frameRate==="undefined"){frameRate=null}if(this._anims[name]){this.currentAnim=this._anims[name];this.currentAnim.play(frameRate,loop)}};Animations.prototype.stop=function(name){if(this._anims[name]){this.currentAnim=this._anims[name];this.currentAnim.stop()}};Animations.prototype.update=function(){if(this.currentAnim&&this.currentAnim.update()==true){this.currentFrame=this.currentAnim.currentFrame;this._parent.bounds.width=this.currentFrame.width;this._parent.bounds.height=this.currentFrame.height}};Object.defineProperty(Animations.prototype,"frameTotal",{get:function(){return this._frameData.total},enumerable:true,configurable:true});Object.defineProperty(Animations.prototype,"frame",{get:function(){return this._frameIndex},set:function(value){this.currentFrame=this._frameData.getFrame(value);if(this.currentFrame!==null){this._parent.bounds.width=this.currentFrame.width;this._parent.bounds.height=this.currentFrame.height;this._frameIndex=value}},enumerable:true,configurable:true});Object.defineProperty(Animations.prototype,"frameName",{get:function(){return this.currentFrame.name},set:function(value){this.currentFrame=this._frameData.getFrameByName(value);if(this.currentFrame!==null){this._parent.bounds.width=this.currentFrame.width;this._parent.bounds.height=this.currentFrame.height;this._frameIndex=this.currentFrame.index}},enumerable:true,configurable:true});return Animations})();var State=(function(){function State(game){this.game=game;this.camera=game.camera;this.cache=game.cache;this.input=game.input;this.loader=game.loader;this.sound=game.sound;this.stage=game.stage;this.time=game.time;this.math=game.math;this.world=game.world}State.prototype.init=function(){};State.prototype.create=function(){};State.prototype.update=function(){};State.prototype.render=function(){};State.prototype.paused=function(){};State.prototype.createCamera=function(x,y,width,height){return this.game.world.createCamera(x,y,width,height)};State.prototype.createSprite=function(x,y,key){if(typeof key==="undefined"){key=""}return this.game.world.createSprite(x,y,key)};State.prototype.createGroup=function(MaxSize){if(typeof MaxSize==="undefined"){MaxSize=0}return this.game.world.createGroup(MaxSize)};State.prototype.createParticle=function(){return this.game.world.createParticle()};State.prototype.createEmitter=function(x,y,size){if(typeof x==="undefined"){x=0}if(typeof y==="undefined"){y=0}if(typeof size==="undefined"){size=0}return this.game.world.createEmitter(x,y,size)};State.prototype.createTilemap=function(key,mapData,format,tileWidth,tileHeight){return this.game.world.createTilemap(key,mapData,format,tileWidth,tileHeight)};State.prototype.collide=function(ObjectOrGroup1,ObjectOrGroup2,NotifyCallback){if(typeof ObjectOrGroup1==="undefined"){ObjectOrGroup1=null}if(typeof ObjectOrGroup2==="undefined"){ObjectOrGroup2=null}if(typeof NotifyCallback==="undefined"){NotifyCallback=null}return this.game.world.overlap(ObjectOrGroup1,ObjectOrGroup2,NotifyCallback,World.separate)};return State})();var Tile=(function(_super){__extends(Tile,_super);function Tile(game,Tilemap,Index,Width,Height,Visible,AllowCollisions){_super.call(this,game,0,0,Width,Height);this.immovable=true;this.moves=false;this.callback=null;this.filter=null;this.tilemap=Tilemap;this.index=Index;this.visible=Visible;this.allowCollisions=AllowCollisions;this.mapIndex=0}Tile.prototype.destroy=function(){_super.prototype.destroy.call(this);this.callback=null;this.tilemap=null};return Tile})(GameObject); |