diff --git a/build/custom/p2.js b/build/custom/p2.js index 3960117a6d..0d6dc66c71 100644 --- a/build/custom/p2.js +++ b/build/custom/p2.js @@ -1252,11 +1252,12 @@ module.exports={ "grunt-contrib-jshint": "~0.9.2", "grunt-contrib-nodeunit": "~0.1.2", "grunt-contrib-uglify": "~0.4.0", + "grunt-contrib-watch": "~0.5.0", "grunt-browserify": "~2.0.1", "z-schema": "~2.4.6" }, "dependencies": { - "poly-decomp": "git://github.com/schteppe/poly-decomp.js", + "poly-decomp": "0.1.0", "gl-matrix": "2.1.0" } } @@ -1386,7 +1387,7 @@ AABB.prototype.overlaps = function(aabb){ ((l2[1] <= u1[1] && u1[1] <= u2[1]) || (l1[1] <= u2[1] && u2[1] <= u1[1])); }; -},{"../math/vec2":30,"../utils/Utils":45}],9:[function(require,module,exports){ +},{"../math/vec2":30,"../utils/Utils":47}],9:[function(require,module,exports){ var vec2 = require('../math/vec2') var Body = require('../objects/Body') @@ -1579,10 +1580,9 @@ module.exports = GridBroadphase; * @todo Should have an option for dynamic scene size */ function GridBroadphase(options){ - options = options || {}; Broadphase.apply(this); - Utils.extend(options,{ + options = Utils.defaults(options,{ xmin: -100, xmax: 100, ymin: -100, @@ -1674,7 +1674,7 @@ GridBroadphase.prototype.getCollisionPairs = function(world){ return result; }; -},{"../collision/Broadphase":9,"../math/vec2":30,"../shapes/Circle":35,"../shapes/Particle":39,"../shapes/Plane":40,"../utils/Utils":45}],11:[function(require,module,exports){ +},{"../collision/Broadphase":9,"../math/vec2":30,"../shapes/Circle":35,"../shapes/Particle":39,"../shapes/Plane":40,"../utils/Utils":47}],11:[function(require,module,exports){ var Circle = require('../shapes/Circle'), Plane = require('../shapes/Plane'), Shape = require('../shapes/Shape'), @@ -1729,12 +1729,15 @@ var vec2 = require('../math/vec2') , add = vec2.add , dot = vec2.dot , Utils = require('../utils/Utils') +, TupleDictionary = require('../utils/TupleDictionary') +, Equation = require('../equations/Equation') , ContactEquation = require('../equations/ContactEquation') , FrictionEquation = require('../equations/FrictionEquation') , Circle = require('../shapes/Circle') +, Convex = require('../shapes/Convex') , Shape = require('../shapes/Shape') , Body = require('../objects/Body') -, Rectangle = require('../shapes/Rectangle') +, Rectangle = require('../shapes/Rectangle'); module.exports = Narrowphase; @@ -1759,7 +1762,7 @@ var tmp1 = vec2.fromValues(0,0) , tmp16 = vec2.fromValues(0,0) , tmp17 = vec2.fromValues(0,0) , tmp18 = vec2.fromValues(0,0) -, tmpArray = [] +, tmpArray = []; /** * Narrowphase. Creates contacts and friction given shapes and transforms. @@ -1822,32 +1825,32 @@ function Narrowphase(){ * The stiffness value to use in the next contact equations. * @property {Number} stiffness */ - this.stiffness = 1e7; + this.stiffness = Equation.DEFAULT_STIFFNESS; /** * The stiffness value to use in the next contact equations. * @property {Number} stiffness */ - this.relaxation = 3; + this.relaxation = Equation.DEFAULT_RELAXATION; /** * The stiffness value to use in the next friction equations. * @property frictionStiffness * @type {Number} */ - this.frictionStiffness = 1e7; + this.frictionStiffness = Equation.DEFAULT_STIFFNESS; /** * The relaxation value to use in the next friction equations. * @property frictionRelaxation * @type {Number} */ - this.frictionRelaxation = 3; + this.frictionRelaxation = Equation.DEFAULT_RELAXATION; // Keep track of the colliding bodies last step - this.collidingBodiesLastStep = { keys:[] }; -}; + this.collidingBodiesLastStep = new TupleDictionary(); +} /** * Check if the bodies were in contact since the last reset(). @@ -1857,27 +1860,19 @@ function Narrowphase(){ * @return {Boolean} */ Narrowphase.prototype.collidedLastStep = function(bi,bj){ - var id1 = bi.id, - id2 = bj.id; - if(id1 > id2){ - var tmp = id1; - id1 = id2; - id2 = tmp; - } - return !!this.collidingBodiesLastStep[id1 + " " + id2]; + var id1 = bi.id|0, + id2 = bj.id|0; + return !!this.collidingBodiesLastStep.get(id1, id2); }; // "for in" loops aren't optimised in chrome... is there a better way to handle last-step collision memory? // Maybe do this: http://jsperf.com/reflection-vs-array-of-keys function clearObject(obj){ - for(var i = 0, l = obj.keys.length; i < l; i++) { - delete obj[obj.keys[i]]; + var l = obj.keys.length; + while(l--){ + delete obj[obj.keys[l]]; } obj.keys.length = 0; - /* - for(var key in this.collidingBodiesLastStep) - delete this.collidingBodiesLastStep[key]; - */ } /** @@ -1886,23 +1881,12 @@ function clearObject(obj){ * @param {World} world */ Narrowphase.prototype.reset = function(world){ - - // Save the colliding bodies data - clearObject(this.collidingBodiesLastStep); + this.collidingBodiesLastStep.reset(); for(var i=0; i!==this.contactEquations.length; i++){ var eq = this.contactEquations[i], - id1 = eq.bodyA.id, - id2 = eq.bodyB.id; - if(id1 > id2){ - var tmp = id1; - id1 = id2; - id2 = tmp; - } - var key = id1 + " " + id2; - if(!this.collidingBodiesLastStep[key]){ - this.collidingBodiesLastStep[key] = true; - this.collidingBodiesLastStep.keys.push(key); - } + id1 = eq.bodyA.id|0, + id2 = eq.bodyB.id|0; + this.collidingBodiesLastStep.set(id1, id2, true); } if(this.reuseObjects){ @@ -1974,7 +1958,7 @@ Narrowphase.prototype.createFrictionFromContact = function(c){ var eq = this.createFrictionEquation(c.bodyA, c.bodyB, c.shapeA, c.shapeB); vec2.copy(eq.contactPointA, c.contactPointA); vec2.copy(eq.contactPointB, c.contactPointB); - vec2.rotate(eq.t, c.normalA, -Math.PI / 2); + vec2.rotate90cw(eq.t, c.normalA); eq.contactEquation = c; return eq; }; @@ -2230,7 +2214,7 @@ Narrowphase.prototype.planeLine = function(planeBody, planeShape, planeOffset, p vec2.normalize(worldEdgeUnit, worldEdge); // Get tangent to the edge. - vec2.rotate(worldTangent, worldEdgeUnit, -Math.PI/2); + vec2.rotate90cw(worldTangent, worldEdgeUnit); vec2.rotate(worldNormal, yAxis, planeAngle); @@ -2348,7 +2332,7 @@ Narrowphase.prototype.circleLine = function(bi,si,xi,ai, bj,sj,xj,aj, justTest, vec2.normalize(worldEdgeUnit, worldEdge); // Get tangent to the edge. - vec2.rotate(worldTangent, worldEdgeUnit, -Math.PI/2); + vec2.rotate90cw(worldTangent, worldEdgeUnit); // Check distance from the plane spanned by the edge vs the circle sub(dist, circleOffset, worldVertex0); @@ -2533,7 +2517,7 @@ Narrowphase.prototype.circleConvex = function( bi,si,xi,ai, bj,sj,xj,aj, justTe vec2.normalize(worldEdgeUnit, worldEdge); // Get tangent to the edge. Points out of the Convex - vec2.rotate(worldTangent, worldEdgeUnit, -Math.PI/2); + vec2.rotate90cw(worldTangent, worldEdgeUnit); // Get point on circle, closest to the polygon vec2.scale(candidate,worldTangent,-circleShape.radius); @@ -2767,8 +2751,9 @@ Narrowphase.prototype.particleConvex = function( bi,si,xi,ai, bj,sj,xj,aj, just verts = convexShape.vertices; // Check if the particle is in the polygon at all - if(!pointInConvex(particleOffset,convexShape,convexOffset,convexAngle)) + if(!pointInConvex(particleOffset,convexShape,convexOffset,convexAngle)){ return 0; + } if(justTest) return true; @@ -2789,7 +2774,7 @@ Narrowphase.prototype.particleConvex = function( bi,si,xi,ai, bj,sj,xj,aj, just vec2.normalize(worldEdgeUnit, worldEdge); // Get tangent to the edge. Points out of the Convex - vec2.rotate(worldTangent, worldEdgeUnit, -Math.PI/2); + vec2.rotate90cw(worldTangent, worldEdgeUnit); // Check distance from the infinite line (spanned by the edge) to the particle sub(dist, particleOffset, worldVertex0); @@ -3311,7 +3296,7 @@ Narrowphase.prototype.convexConvex = function( bi,si,xi,ai, bj,sj,xj,aj, justTe sub(worldEdge, worldPoint1, worldPoint0); - vec2.rotate(worldNormal, worldEdge, -Math.PI/2); // Normal points out of convex 1 + vec2.rotate90cw(worldNormal, worldEdge); // Normal points out of convex 1 vec2.normalize(worldNormal,worldNormal); sub(dist, worldPoint, worldPoint0); @@ -3348,7 +3333,7 @@ Narrowphase.prototype.convexConvex = function( bi,si,xi,ai, bj,sj,xj,aj, justTe sub(worldEdge, worldPoint1, worldPoint0); - vec2.rotate(c.normalA, worldEdge, -Math.PI/2); // Normal points out of convex A + vec2.rotate90cw(c.normalA, worldEdge); // Normal points out of convex A vec2.normalize(c.normalA,c.normalA); sub(dist, worldPoint, worldPoint0); // From edge point to the penetrating point @@ -3467,7 +3452,7 @@ Narrowphase.findSeparatingAxis = function(c1,offset1,angle1,c2,offset2,angle2,se sub(edge, worldPoint1, worldPoint0); // Get normal - just rotate 90 degrees since vertices are given in CCW - vec2.rotate(normal, edge, -Math.PI / 2); + vec2.rotate90cw(normal, edge); vec2.normalize(normal,normal); // Project hulls onto that normal @@ -3526,14 +3511,13 @@ Narrowphase.getClosestEdge = function(c,angle,axis,flip){ } var closestEdge = -1, - N = c.vertices.length, - halfPi = Math.PI / 2; + N = c.vertices.length; for(var i=0; i!==N; i++){ // Get the edge sub(edge, c.vertices[(i+1)%N], c.vertices[i%N]); // Get normal - just rotate 90 degrees since vertices are given in CCW - vec2.rotate(normal, edge, -halfPi); + vec2.rotate90cw(normal, edge); vec2.normalize(normal,normal); var d = dot(normal,localAxis); @@ -3609,8 +3593,7 @@ Narrowphase.prototype.circleHeightfield = function( circleBody,circleShape,circl // 2. 1. Get point on circle that is closest to the edge (scale normal with -radius) // 2. 2. Check if point is inside. - var found = false, - minDist = false; + var found = false; // Check all edges first for(var i=idxA; i= v0[0] && candidate[0] < v1[0] && d <= 0){ - if(minDist === false || Math.abs(d) < minDist){ - - // Store the candidate point, projected to the edge - vec2.scale(dist,worldNormal,-d); - vec2.add(minCandidate,candidate,dist); - vec2.copy(minCandidateNormal,worldNormal); - - found = true; - minDist = Math.abs(d); - - if(justTest) - return true; + if(justTest){ + return true; } - } - } - if(found){ + found = true; - var c = this.createContactEquation(hfBody,circleBody,hfShape,circleShape); + // Store the candidate point, projected to the edge + vec2.scale(dist,worldNormal,-d); + vec2.add(minCandidate,candidate,dist); + vec2.copy(minCandidateNormal,worldNormal); - // Normal is out of the heightfield - vec2.copy(c.normalA, minCandidateNormal); + var c = this.createContactEquation(hfBody,circleBody,hfShape,circleShape); - // Vector from circle to heightfield - vec2.scale(c.contactPointB, c.normalA, -radius); - add(c.contactPointB, c.contactPointB, circlePos); - sub(c.contactPointB, c.contactPointB, circleBody.position); + // Normal is out of the heightfield + vec2.copy(c.normalA, minCandidateNormal); - vec2.copy(c.contactPointA, minCandidate); - //vec2.sub(c.contactPointA, c.contactPointA, hfPos); - vec2.sub(c.contactPointA, c.contactPointA, hfBody.position); + // Vector from circle to heightfield + vec2.scale(c.contactPointB, c.normalA, -radius); + add(c.contactPointB, c.contactPointB, circlePos); + sub(c.contactPointB, c.contactPointB, circleBody.position); - this.contactEquations.push(c); + vec2.copy(c.contactPointA, minCandidate); + vec2.sub(c.contactPointA, c.contactPointA, hfBody.position); - if(this.enableFriction) - this.frictionEquations.push( this.createFrictionFromContact(c) ); + this.contactEquations.push(c); - return 1; + if(this.enableFriction){ + this.frictionEquations.push( this.createFrictionFromContact(c) ); + } + } } - // Check all vertices + found = false; if(radius > 0){ for(var i=idxA; i<=idxB; i++){ @@ -3692,6 +3667,8 @@ Narrowphase.prototype.circleHeightfield = function( circleBody,circleShape,circl if(justTest) return true; + found = true; + var c = this.createContactEquation(hfBody,circleBody,hfShape,circleShape); // Construct normal - out of heightfield @@ -3711,24 +3688,95 @@ Narrowphase.prototype.circleHeightfield = function( circleBody,circleShape,circl if(this.enableFriction){ this.frictionEquations.push(this.createFrictionFromContact(c)); } - - return 1; } } } + if(found){ + return 1; + } + return 0; }; -},{"../equations/ContactEquation":21,"../equations/FrictionEquation":23,"../math/vec2":30,"../objects/Body":31,"../shapes/Circle":35,"../shapes/Rectangle":41,"../shapes/Shape":42,"../utils/Utils":45}],13:[function(require,module,exports){ -var Circle = require('../shapes/Circle') -, Plane = require('../shapes/Plane') -, Shape = require('../shapes/Shape') -, Particle = require('../shapes/Particle') -, Utils = require('../utils/Utils') -, Broadphase = require('../collision/Broadphase') -, vec2 = require('../math/vec2') +var convexHeightfield_v0 = vec2.create(), + convexHeightfield_v1 = vec2.create(), + convexHeightfield_tilePos = vec2.create(), + convexHeightfield_tempConvexShape = new Convex([vec2.create(),vec2.create(),vec2.create(),vec2.create()]); +/** + * @method circleHeightfield + * @param {Body} bi + * @param {Circle} si + * @param {Array} xi + * @param {Body} bj + * @param {Heightfield} sj + * @param {Array} xj + * @param {Number} aj + */ +Narrowphase.prototype[Shape.RECTANGLE | Shape.HEIGHTFIELD] = +Narrowphase.prototype[Shape.CONVEX | Shape.HEIGHTFIELD] = +Narrowphase.prototype.convexHeightfield = function( convexBody,convexShape,convexPos,convexAngle, + hfBody,hfShape,hfPos,hfAngle, justTest ){ + var data = hfShape.data, + w = hfShape.elementWidth, + v0 = convexHeightfield_v0, + v1 = convexHeightfield_v1, + tilePos = convexHeightfield_tilePos, + tileConvex = convexHeightfield_tempConvexShape; + + // Get the index of the points to test against + var idxA = Math.floor( (convexBody.aabb.lowerBound[0] - hfPos[0]) / w ), + idxB = Math.ceil( (convexBody.aabb.upperBound[0] - hfPos[0]) / w ); + + if(idxA < 0) idxA = 0; + if(idxB >= data.length) idxB = data.length-1; + + // Get max and min + var max = data[idxA], + min = data[idxB]; + for(var i=idxA; i max) max = data[i]; + } + + if(convexBody.aabb.lowerBound[1] > max){ + return justTest ? false : 0; + } + + var found = false; + var numContacts = 0; + + // Loop over all edges + for(var i=idxA; i=0;j--) { - if(a[j].aabb.lowerBound[0] <= v.aabb.lowerBound[0]) - break; - a[j+1] = a[j]; - } - a[j+1] = v; - } - return a; -}; - -/** - * Sorts bodies along the Y axis. - * @method sortAxisListY - * @param {Array} a - * @return {Array} - */ -SAPBroadphase.sortAxisListY = function(a){ - for(var i=1,l=a.length;i=0;j--) { - if(a[j].aabb.lowerBound[1] <= v.aabb.lowerBound[1]) + if(a[j].aabb.lowerBound[axisIndex] <= v.aabb.lowerBound[axisIndex]){ break; + } a[j+1] = a[j]; } a[j+1] = v; @@ -3845,8 +3872,6 @@ SAPBroadphase.sortAxisListY = function(a){ return a; }; -var preliminaryList = { keys:[] }; - /** * Get the colliding pairs * @method getCollisionPairs @@ -3854,102 +3879,52 @@ var preliminaryList = { keys:[] }; * @return {Array} */ SAPBroadphase.prototype.getCollisionPairs = function(world){ - var bodiesX = this.axisListX, - bodiesY = this.axisListY, + var bodies = this.axisList, result = this.result, axisIndex = this.axisIndex; result.length = 0; // Update all AABBs if needed - for(var i=0; i!==bodiesX.length; i++){ - var b = bodiesX[i]; - if(b.aabbNeedsUpdate) b.updateAABB(); + var l = bodies.length; + while(l--){ + var b = bodies[l]; + if(b.aabbNeedsUpdate){ + b.updateAABB(); + } } // Sort the lists - SAPBroadphase.sortAxisListX(bodiesX); - SAPBroadphase.sortAxisListY(bodiesY); + SAPBroadphase.sortAxisList(bodies, axisIndex); // Look through the X list - for(var i=0, N=bodiesX.length; i!==N; i++){ - var bi = bodiesX[i]; + for(var i=0, N=bodies.length|0; i!==N; i++){ + var bi = bodies[i]; for(var j=i+1; j G = [-n -rixn n rjxn] + var r = vec2.create(); + var ri = vec2.create(); // worldAnchorA + var rj = vec2.create(); // worldAnchorB + var that = this; normal.computeGq = function(){ + var bodyA = this.bodyA, + bodyB = this.bodyB, + xi = bodyA.position, + xj = bodyB.position; + + // Transform local anchors to world + vec2.rotate(ri, localAnchorA, bodyA.angle); + vec2.rotate(rj, localAnchorB, bodyB.angle); + + vec2.add(r, xi, rj); + vec2.sub(r, r, ri); + vec2.sub(r, r, xi); + vec2.sub(r, bodyB.position, bodyA.position); - return vec2.length(r)-distance; + return vec2.length(r) - that.distance; }; // Make the contact constraint bilateral @@ -4102,13 +4134,35 @@ DistanceConstraint.prototype = new Constraint(); * @method update */ var n = vec2.create(); +var ri = vec2.create(); // worldAnchorA +var rj = vec2.create(); // worldAnchorB DistanceConstraint.prototype.update = function(){ var normal = this.equations[0], bodyA = this.bodyA, bodyB = this.bodyB, distance = this.distance, + xi = bodyA.position, + xj = bodyB.position, G = normal.G; + // Transform local anchors to world + vec2.rotate(ri, this.localAnchorA, bodyA.angle); + vec2.rotate(rj, this.localAnchorB, bodyB.angle); + + // Caluclate cross products + var rixn = vec2.crossLength(ri, n), + rjxn = vec2.crossLength(rj, n); + + /* + // G = [-n -rixn n rjxn] + G[0] = -n[0]; + G[1] = -n[1]; + G[2] = -rixn; + G[3] = n[0]; + G[4] = n[1]; + G[5] = rjxn; + */ + vec2.sub(n, bodyB.position, bodyA.position); vec2.normalize(n,n); G[0] = -n[0]; @@ -4717,6 +4771,7 @@ var worldPivotA = vec2.create(), * @param {Number} [options.maxForce] The maximum force that should be applied to constrain the bodies. * @extends Constraint * @todo Ability to specify world points + * @todo put pivot parameters in the options object? */ function RevoluteConstraint(bodyA, pivotA, bodyB, pivotB, options){ options = options || {}; @@ -4727,12 +4782,12 @@ function RevoluteConstraint(bodyA, pivotA, bodyB, pivotB, options){ /** * @property {Array} pivotA */ - this.pivotA = pivotA; + this.pivotA = vec2.fromValues(pivotA[0],pivotA[1]); /** * @property {Array} pivotB */ - this.pivotB = pivotB; + this.pivotB = vec2.fromValues(pivotB[0],pivotB[1]); // Equations to be fed to the solver var eqs = this.equations = [ @@ -5308,35 +5363,9 @@ Equation.prototype.computeGq = function(){ ai = bi.angle, aj = bj.angle; - // Transform to the given body frames - /* - vec2.rotate(qi,this.xi,ai); - vec2.rotate(qj,this.xj,aj); - vec2.add(qi,qi,xi); - vec2.add(qj,qj,xj); - */ - return Gmult(G, qi, ai, qj, aj) + this.offset; }; -var tmp_i = vec2.create(), - tmp_j = vec2.create(); -Equation.prototype.transformedGmult = function(G,vi,wi,vj,wj){ - // Transform velocity to the given body frames - // v_p = v + w x r - /* - vec2.rotate(tmp_i,this.xi,Math.PI / 2 + this.bi.angle); // Get r, and rotate 90 degrees. We get the "x r" part - vec2.rotate(tmp_j,this.xj,Math.PI / 2 + this.bj.angle); - vec2.scale(tmp_i,tmp_i,wi); // Temp vectors are now (w x r) - vec2.scale(tmp_j,tmp_j,wj); - vec2.add(tmp_i,tmp_i,vi); - vec2.add(tmp_j,tmp_j,vj); - */ - - // Note: angular velocity is same - return Gmult(G,vi,wi,vj,wj); -}; - /** * Computes G*W, where W are the body velocities * @method computeGW @@ -5350,7 +5379,7 @@ Equation.prototype.computeGW = function(){ vj = bj.velocity, wi = bi.angularVelocity, wj = bj.angularVelocity; - return this.transformedGmult(G,vi,wi,vj,wj) + this.relativeVelocity; + return Gmult(G,vi,wi,vj,wj) + this.relativeVelocity; }; /** @@ -5392,7 +5421,7 @@ Equation.prototype.computeGiMf = function(){ vec2.scale(iMfi, fi,invMassi); vec2.scale(iMfj, fj,invMassj); - return this.transformedGmult(G,iMfi,ti*invIi,iMfj,tj*invIj); + return Gmult(G,iMfi,ti*invIi,iMfj,tj*invIj); }; function getBodyInvMass(body){ @@ -5490,7 +5519,7 @@ Equation.prototype.computeInvC = function(eps){ return 1.0 / (this.computeGiMGt() + eps); }; -},{"../math/vec2":30,"../objects/Body":31,"../utils/Utils":45}],23:[function(require,module,exports){ +},{"../math/vec2":30,"../objects/Body":31,"../utils/Utils":47}],23:[function(require,module,exports){ var vec2 = require('../math/vec2') , Equation = require('./Equation') , Utils = require('../utils/Utils'); @@ -5609,7 +5638,7 @@ FrictionEquation.prototype.computeB = function(a,b,h){ return B; }; -},{"../math/vec2":30,"../utils/Utils":45,"./Equation":22}],24:[function(require,module,exports){ +},{"../math/vec2":30,"../utils/Utils":47,"./Equation":22}],24:[function(require,module,exports){ var Equation = require("./Equation"), vec2 = require('../math/vec2'); @@ -5634,7 +5663,7 @@ function RotationalLockEquation(bodyA, bodyB, options){ var G = this.G; G[2] = 1; G[5] = -1; -}; +} RotationalLockEquation.prototype = new Equation(); RotationalLockEquation.prototype.constructor = RotationalLockEquation; @@ -5725,9 +5754,16 @@ EventEmitter.prototype = { has: function ( type, listener ) { if ( this._listeners === undefined ) return false; var listeners = this._listeners; - if ( listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1 ) { - return true; + if(listener){ + if ( listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1 ) { + return true; + } + } else { + if ( listeners[ type ] !== undefined ) { + return true; + } } + return false; }, @@ -6437,6 +6473,19 @@ vec2.rotate = function(out,a,angle){ out[1] = s*x +c*y; }; +/** + * Rotate a vector 90 degrees clockwise + * @method rotate90cw + * @static + * @param {Float32Array} out + * @param {Float32Array} a + * @param {Number} angle + */ +vec2.rotate90cw = function(out, a) { + out[0] = a[1]; + out[1] = -a[0]; +}; + /** * Transform a point position to local frame. * @method toLocalFrame @@ -6836,6 +6885,8 @@ function Body(options){ this.lastAngularDampingScale = 1; this.lastDampingTimeStep = -1; + this._wakeUpAfterNarrowphase = false; + this.updateMassProperties(); } Body.prototype = new EventEmitter(); @@ -7397,6 +7448,7 @@ Body.SLEEPING = 2; },{"../collision/AABB":8,"../events/EventEmitter":26,"../math/vec2":30,"../shapes/Convex":36,"poly-decomp":6}],32:[function(require,module,exports){ var vec2 = require('../math/vec2'); +var Utils = require('../utils/Utils'); module.exports = Spring; @@ -7411,34 +7463,40 @@ module.exports = Spring; * @param {number} [options.restLength=1] A number > 0. Default: 1 * @param {number} [options.stiffness=100] Spring constant (see Hookes Law). A number >= 0. * @param {number} [options.damping=1] A number >= 0. Default: 1 - * @param {Array} [options.worldAnchorA] Where to hook the spring to body A, in world coordinates. Overrides the option "localAnchorA" if given. - * @param {Array} [options.worldAnchorB] * @param {Array} [options.localAnchorA] Where to hook the spring to body A, in local body coordinates. Defaults to the body center. * @param {Array} [options.localAnchorB] + * @param {Array} [options.worldAnchorA] Where to hook the spring to body A, in world coordinates. Overrides the option "localAnchorA" if given. + * @param {Array} [options.worldAnchorB] */ function Spring(bodyA,bodyB,options){ - options = options || {}; + options = Utils.defaults(options,{ + restLength: 1, + stiffness: 100, + damping: 1, + localAnchorA: [0,0], + localAnchorB: [0,0], + }); /** * Rest length of the spring. * @property restLength * @type {number} */ - this.restLength = typeof(options.restLength)=="number" ? options.restLength : 1; + this.restLength = options.restLength; /** * Stiffness of the spring. * @property stiffness * @type {number} */ - this.stiffness = options.stiffness || 100; + this.stiffness = options.stiffness; /** * Damping of the spring. * @property damping * @type {number} */ - this.damping = options.damping || 1; + this.damping = options.damping; /** * First connected body. @@ -7459,20 +7517,24 @@ function Spring(bodyA,bodyB,options){ * @property localAnchorA * @type {Array} */ - this.localAnchorA = vec2.fromValues(0,0); + this.localAnchorA = vec2.create(); + vec2.copy(this.localAnchorA, options.localAnchorA); /** * Anchor for bodyB in local bodyB coordinates. * @property localAnchorB * @type {Array} */ - this.localAnchorB = vec2.fromValues(0,0); + this.localAnchorB = vec2.create(); + vec2.copy(this.localAnchorB, options.localAnchorB); - if(options.localAnchorA) vec2.copy(this.localAnchorA, options.localAnchorA); - if(options.localAnchorB) vec2.copy(this.localAnchorB, options.localAnchorB); - if(options.worldAnchorA) this.setWorldAnchorA(options.worldAnchorA); - if(options.worldAnchorB) this.setWorldAnchorB(options.worldAnchorB); -}; + if(options.worldAnchorA){ + this.setWorldAnchorA(options.worldAnchorA); + } + if(options.worldAnchorB){ + this.setWorldAnchorB(options.worldAnchorB); + } +} /** * Set the anchor point on body A, using world coordinates. @@ -7578,7 +7640,7 @@ Spring.prototype.applyForce = function(){ bodyB.angularForce += rj_x_f; }; -},{"../math/vec2":30}],33:[function(require,module,exports){ +},{"../math/vec2":30,"../utils/Utils":47}],33:[function(require,module,exports){ // Export p2 classes module.exports = { AABB : require('./collision/AABB'), @@ -7620,7 +7682,7 @@ module.exports = { version : require('../package.json').version, }; -},{"../package.json":7,"./collision/AABB":8,"./collision/Broadphase":9,"./collision/GridBroadphase":10,"./collision/NaiveBroadphase":11,"./collision/Narrowphase":12,"./collision/SAPBroadphase":13,"./constraints/Constraint":14,"./constraints/DistanceConstraint":15,"./constraints/GearConstraint":16,"./constraints/LockConstraint":17,"./constraints/PrismaticConstraint":18,"./constraints/RevoluteConstraint":19,"./equations/AngleLockEquation":20,"./equations/ContactEquation":21,"./equations/Equation":22,"./equations/FrictionEquation":23,"./equations/RotationalVelocityEquation":25,"./events/EventEmitter":26,"./material/ContactMaterial":27,"./material/Material":28,"./math/vec2":30,"./objects/Body":31,"./objects/Spring":32,"./shapes/Capsule":34,"./shapes/Circle":35,"./shapes/Convex":36,"./shapes/Heightfield":37,"./shapes/Line":38,"./shapes/Particle":39,"./shapes/Plane":40,"./shapes/Rectangle":41,"./shapes/Shape":42,"./solver/GSSolver":43,"./solver/Solver":44,"./utils/Utils":45,"./world/World":49}],34:[function(require,module,exports){ +},{"../package.json":7,"./collision/AABB":8,"./collision/Broadphase":9,"./collision/GridBroadphase":10,"./collision/NaiveBroadphase":11,"./collision/Narrowphase":12,"./collision/SAPBroadphase":13,"./constraints/Constraint":14,"./constraints/DistanceConstraint":15,"./constraints/GearConstraint":16,"./constraints/LockConstraint":17,"./constraints/PrismaticConstraint":18,"./constraints/RevoluteConstraint":19,"./equations/AngleLockEquation":20,"./equations/ContactEquation":21,"./equations/Equation":22,"./equations/FrictionEquation":23,"./equations/RotationalVelocityEquation":25,"./events/EventEmitter":26,"./material/ContactMaterial":27,"./material/Material":28,"./math/vec2":30,"./objects/Body":31,"./objects/Spring":32,"./shapes/Capsule":34,"./shapes/Circle":35,"./shapes/Convex":36,"./shapes/Heightfield":37,"./shapes/Line":38,"./shapes/Particle":39,"./shapes/Plane":40,"./shapes/Rectangle":41,"./shapes/Shape":42,"./solver/GSSolver":43,"./solver/Solver":44,"./utils/Utils":47,"./world/World":51}],34:[function(require,module,exports){ var Shape = require('./Shape') , vec2 = require('../math/vec2'); @@ -7634,7 +7696,7 @@ module.exports = Capsule; * @param {Number} [length] The distance between the end points * @param {Number} [radius] Radius of the capsule */ -function Capsule(length,radius){ +function Capsule(length, radius){ /** * The distance between the end points. @@ -8008,7 +8070,8 @@ Convex.prototype.computeAABB = function(out, position, angle){ },{"../math/polyk":29,"../math/vec2":30,"./Shape":42,"poly-decomp":6}],37:[function(require,module,exports){ var Shape = require('./Shape') -, vec2 = require('../math/vec2'); +, vec2 = require('../math/vec2') +, Utils = require('../utils/Utils'); module.exports = Heightfield; @@ -8023,7 +8086,26 @@ module.exports = Heightfield; * @todo Should take maxValue as an option and also be able to compute it itself if not given. * @todo Should be possible to use along all axes, not just y */ -function Heightfield(data,maxValue,elementWidth){ +function Heightfield(data, options){ + options = Utils.defaults(options, { + maxValue : null, + minValue : null, + elementWidth : 0.1 + }); + + if(options.minValue === null || options.maxValue === null){ + options.maxValue = data[0]; + options.minValue = data[0]; + for(var i=0; i !== data.length; i++){ + var v = data[i]; + if(v > options.maxValue){ + options.maxValue = v; + } + if(v < options.minValue){ + options.minValue = v; + } + } + } /** * An array of numbers, or height values, that are spread out along the x axis. @@ -8035,13 +8117,19 @@ function Heightfield(data,maxValue,elementWidth){ * Max value of the data * @property {number} maxValue */ - this.maxValue = maxValue; + this.maxValue = options.maxValue; + + /** + * Max value of the data + * @property {number} minValue + */ + this.minValue = options.minValue; /** * The width of each element * @property {number} elementWidth */ - this.elementWidth = elementWidth; + this.elementWidth = options.elementWidth; Shape.call(this,Shape.HEIGHTFIELD); } @@ -8083,7 +8171,7 @@ Heightfield.prototype.computeAABB = function(out, position, angle){ out.lowerBound[1] = -Number.MAX_VALUE; // Infinity }; -},{"../math/vec2":30,"./Shape":42}],38:[function(require,module,exports){ +},{"../math/vec2":30,"../utils/Utils":47,"./Shape":42}],38:[function(require,module,exports){ var Shape = require('./Shape') , vec2 = require('../math/vec2') @@ -8103,10 +8191,10 @@ function Line(length){ * @property length * @type {Number} */ - this.length = length; + this.length = length || 1; Shape.call(this,Shape.LINE); -}; +} Line.prototype = new Shape(); Line.prototype.computeMomentOfInertia = function(mass){ return mass * Math.pow(this.length,2) / 12; @@ -8245,10 +8333,10 @@ Plane.prototype.updateArea = function(){ }; -},{"../math/vec2":30,"../utils/Utils":45,"./Shape":42}],41:[function(require,module,exports){ +},{"../math/vec2":30,"../utils/Utils":47,"./Shape":42}],41:[function(require,module,exports){ var vec2 = require('../math/vec2') , Shape = require('./Shape') -, Convex = require('./Convex') +, Convex = require('./Convex'); module.exports = Rectangle; @@ -8256,34 +8344,37 @@ module.exports = Rectangle; * Rectangle shape class. * @class Rectangle * @constructor - * @param {Number} w Width - * @param {Number} h Height + * @param {Number} width Width + * @param {Number} height Height * @extends Convex */ -function Rectangle(w,h){ - var verts = [ vec2.fromValues(-w/2, -h/2), - vec2.fromValues( w/2, -h/2), - vec2.fromValues( w/2, h/2), - vec2.fromValues(-w/2, h/2)]; +function Rectangle(width, height){ + width = width || 1; + height = height || 1; + + var verts = [ vec2.fromValues(-width/2, -height/2), + vec2.fromValues( width/2, -height/2), + vec2.fromValues( width/2, height/2), + vec2.fromValues(-width/2, height/2)]; /** * Total width of the rectangle * @property width * @type {Number} */ - this.width = w; + this.width = width; /** * Total height of the rectangle * @property height * @type {Number} */ - this.height = h; + this.height = height; Convex.call(this,verts); this.type = Shape.RECTANGLE; -}; +} Rectangle.prototype = new Convex([]); /** @@ -8584,8 +8675,9 @@ function GSSolver(options){ GSSolver.prototype = new Solver(); function setArrayZero(array){ - for(var i=0; i!==array.length; i++){ - array[i] = 0.0; + var l = array.length; + while(l--){ + array[l] = +0.0; } } @@ -8670,6 +8762,8 @@ GSSolver.prototype.solve = function(h, world){ } } + GSSolver.updateMultipliers(equations, lambda, 1/h); + // Set computed friction force for(j=0; j!==Neq; j++){ var eq = equations[j]; @@ -8706,6 +8800,17 @@ GSSolver.prototype.solve = function(h, world){ for(i=0; i!==Nbodies; i++){ bodies[i].addConstraintVelocity(); } + + GSSolver.updateMultipliers(equations, lambda, 1/h); + } +}; + +// Sets the .multiplier property of each equation +GSSolver.updateMultipliers = function(equations, lambda, invDt){ + // Set the .multiplier property of each equation + var l = equations.length; + while(l--){ + equations[l].multiplier = lambda[l] * invDt; } }; @@ -8733,13 +8838,12 @@ GSSolver.iterateEquation = function(j,eq,eps,Bs,invCs,lambda,useZeroRHS,dt,iter) deltalambda = maxForce*dt - lambdaj; } lambda[j] += deltalambda; - eq.multiplier = lambda[j] / dt; eq.addToWlambda(deltalambda); return deltalambda; }; -},{"../equations/FrictionEquation":23,"../math/vec2":30,"../utils/Utils":45,"./Solver":44}],44:[function(require,module,exports){ +},{"../equations/FrictionEquation":23,"../math/vec2":30,"../utils/Utils":47,"./Solver":44}],44:[function(require,module,exports){ var Utils = require('../utils/Utils') , EventEmitter = require('../events/EventEmitter') @@ -8873,7 +8977,300 @@ Solver.prototype.removeAllEquations = function(){ Solver.GS = 1; Solver.ISLAND = 2; -},{"../events/EventEmitter":26,"../utils/Utils":45}],45:[function(require,module,exports){ +},{"../events/EventEmitter":26,"../utils/Utils":47}],45:[function(require,module,exports){ +var TupleDictionary = require('./TupleDictionary'); +var Utils = require('./Utils'); + +module.exports = OverlapKeeper; + +/** + * Keeps track of overlaps in the current state and the last step state. + * @class OverlapKeeper + * @constructor + */ +function OverlapKeeper() { + this.overlappingLastState = new TupleDictionary(); + this.overlappingCurrentState = new TupleDictionary(); + this.recordPool = []; + this.tmpDict = new TupleDictionary(); + this.tmpArray1 = []; +} + +/** + * @method tick + */ +OverlapKeeper.prototype.tick = function() { + var last = this.overlappingLastState; + var current = this.overlappingCurrentState; + + // Save old objects into pool + var l = current.keys.length; + while(l--){ + var key = current.keys[l]; + this.recordPool.push(current.getByKey(key)); + } + + // Clear last object + last.reset(); + + // Transfer from new object to old + last.copy(current); + + // Clear current object + current.reset(); +}; + +/** + * @method setOverlapping + */ +OverlapKeeper.prototype.setOverlapping = function(bodyA, shapeA, bodyB, shapeB) { + var last = this.overlappingLastState; + var current = this.overlappingCurrentState; + + // Store current contact state + if(!current.get(shapeA.id, shapeB.id)){ + + var data; + if(this.recordPool.length){ + data = this.recordPool.pop(); + } else { + data = new OverlapKeeperRecord(bodyA, shapeA, bodyB, shapeB); + } + + current.set(shapeA.id, shapeB.id, data); + } +}; + +OverlapKeeper.prototype.getNewOverlaps = function(result){ + return this.getDiff(this.overlappingLastState, this.overlappingCurrentState, result); +}; + +OverlapKeeper.prototype.getEndOverlaps = function(result){ + return this.getDiff(this.overlappingCurrentState, this.overlappingLastState, result); +}; + +OverlapKeeper.prototype.getDiff = function(dictA, dictB, result){ + var result = result || []; + var last = dictA; + var current = dictB; + + result.length = 0; + + var l = current.keys.length; + while(l--){ + var key = current.keys[l]; + var data = current.data[key]; + + if(!data){ + throw new Error('Key '+key+' had no data!'); + } + + var lastData = last.data[key]; + if(!lastData){ + // Not overlapping in last state, but in current. + result.push(data); + } + } + + return result; +}; + +OverlapKeeper.prototype.isNewOverlap = function(shapeA, shapeB){ + var idA = shapeA.id|0, + idB = shapeB.id|0; + return !!!this.overlappingLastState.get(idA, idB) && !!this.overlappingCurrentState.get(idA, idB); +}; + +OverlapKeeper.prototype.getNewBodyOverlaps = function(result){ + this.tmpArray1.length = 0; + var overlaps = this.getNewOverlaps(this.tmpArray1); + return this.getBodyDiff(overlaps, result); +}; + +OverlapKeeper.prototype.getEndBodyOverlaps = function(result){ + this.tmpArray1.length = 0; + var overlaps = this.getEndOverlaps(this.tmpArray1); + return this.getBodyDiff(overlaps, result); +}; + +OverlapKeeper.prototype.getBodyDiff = function(overlaps, result){ + result = result || []; + var accumulator = this.tmpDict; + + var l = overlaps.length; + + while(l--){ + var data = overlaps[l]; + + // Since we use body id's for the accumulator, these will be a subset of the original one + accumulator.set(data.bodyA.id|0, data.bodyB.id|0, data); + } + + l = accumulator.keys.length; + while(l--){ + var data = accumulator.keys[l]; + result.push(data.bodyA, data.bodyB); + } + + accumulator.reset(); + + return result; +}; + +/** + * Overlap data container for the OverlapKeeper + * @param {Body} bodyA + * @param {Shape} shapeA + * @param {Body} bodyB + * @param {Shape} shapeB [description] + */ +function OverlapKeeperRecord(bodyA, shapeA, bodyB, shapeB){ + /** + * @property {Shape} shapeA + */ + this.shapeA = shapeA; + /** + * @property {Shape} shapeB + */ + this.shapeB = shapeB; + /** + * @property {Body} bodyA + */ + this.bodyA = bodyA; + /** + * @property {Body} bodyB + */ + this.bodyB = bodyB; +} + +OverlapKeeperRecord.prototype.set = function(bodyA, shapeA, bodyB, shapeB){ + OverlapKeeperRecord.call(this, bodyA, shapeA, bodyB, shapeB); +}; + +},{"./TupleDictionary":46,"./Utils":47}],46:[function(require,module,exports){ +var Utils = require('./Utils'); + +module.exports = TupleDictionary; + +/** + * @class TupleDictionary + * @constructor + */ +function TupleDictionary() { + + /** + * The data storage + * @property data + * @type {Array} + */ + this.data = []; + + /** + * Keys that are currently used. + * @type {Array} + */ + this.keys = []; +} + +/** + * Generate a key given two integers + * @param {number} i + * @param {number} j + * @return {string} + */ +TupleDictionary.prototype.getKey = function(id1, id2) { + id1 = id1|0; + id2 = id2|0; + + if ( (id1|0) === (id2|0) ){ + return -1; + } + + // valid for values < 2^16 + return ((id1|0) > (id2|0) ? + (id1 << 16) | (id2 & 0xFFFF) : + (id2 << 16) | (id1 & 0xFFFF))|0 + ; +}; + +/** + * @method getByKey + * @param {Number} key + * @return {Object} + */ +TupleDictionary.prototype.getByKey = function(key) { + key = key|0; + return this.data[key]; +}; + +/** + * @method get + * @param {Number} i + * @param {Number} j + * @return {Number} + */ +TupleDictionary.prototype.get = function(i, j) { + i = i|0; + j = j|0; + var key = this.getKey(i, j)|0; + return this.data[key]; +}; + +/** + * @method set + * @param {Number} i + * @param {Number} j + * @param {Number} value + */ +TupleDictionary.prototype.set = function(i, j, value) { + if(!value){ + throw new Error("No data!"); + } + + i = i|0; + j = j|0; + var key = this.getKey(i, j)|0; + + // Check if key already exists + if(!this.get(i, j)){ + this.keys.push(key); + } + + this.data[key] = value; + + return key; +}; + +/** + * @method reset + */ +TupleDictionary.prototype.reset = function() { + var data = this.data, + keys = this.keys; + + var l = keys.length|0; + while(l--){ + var key = keys[l]|0; + data[key] = undefined; + } + + keys.length = 0; +}; + +/** + * @method copy + */ +TupleDictionary.prototype.copy = function(dict) { + this.reset(); + Utils.appendArray(this.keys, dict.keys); + var l = dict.keys.length|0; + while(l--){ + var key = dict.keys[l]|0; + this.data[key] = dict.data[key]; + } +}; + +},{"./Utils":47}],47:[function(require,module,exports){ module.exports = Utils; /** @@ -8922,7 +9319,7 @@ Utils.splice = function(array,index,howmany){ * @static * @property ARRAY_TYPE */ -Utils.ARRAY_TYPE = Float32Array || Array; +Utils.ARRAY_TYPE = window.Float32Array || Array; /** * Extend an object with the properties of another @@ -8937,7 +9334,24 @@ Utils.extend = function(a,b){ } }; -},{}],46:[function(require,module,exports){ +/** + * Extend an object with the properties of another + * @static + * @method extend + * @param {object} a + * @param {object} b + */ +Utils.defaults = function(options, defaults){ + options = options || {}; + for(var key in defaults){ + if(!(key in options)){ + options[key] = defaults[key]; + } + } + return options; +}; + +},{}],48:[function(require,module,exports){ var Body = require('../objects/Body'); module.exports = Island; @@ -9024,7 +9438,7 @@ Island.prototype.sleep = function(){ return true; }; -},{"../objects/Body":31}],47:[function(require,module,exports){ +},{"../objects/Body":31}],49:[function(require,module,exports){ var vec2 = require('../math/vec2') , Island = require('./Island') , IslandNode = require('./IslandNode') @@ -9211,7 +9625,7 @@ IslandManager.prototype.split = function(world){ return islands; }; -},{"../math/vec2":30,"../objects/Body":31,"./Island":46,"./IslandNode":48}],48:[function(require,module,exports){ +},{"../math/vec2":30,"../objects/Body":31,"./Island":48,"./IslandNode":50}],50:[function(require,module,exports){ module.exports = IslandNode; /** @@ -9259,7 +9673,7 @@ IslandNode.prototype.reset = function(){ this.body = null; }; -},{}],49:[function(require,module,exports){ +},{}],51:[function(require,module,exports){ var GSSolver = require('../solver/GSSolver') , Solver = require('../solver/Solver') , NaiveBroadphase = require('../collision/NaiveBroadphase') @@ -9288,6 +9702,7 @@ var GSSolver = require('../solver/GSSolver') , SAPBroadphase = require('../collision/SAPBroadphase') , Narrowphase = require('../collision/Narrowphase') , Utils = require('../utils/Utils') +, OverlapKeeper = require('../utils/OverlapKeeper') , IslandManager = require('./IslandManager') module.exports = World; @@ -9311,11 +9726,11 @@ if(!performance.now){ * @class World * @constructor * @param {Object} [options] - * @param {Solver} options.solver Defaults to GSSolver. - * @param {Array} options.gravity Defaults to [0,-9.78] - * @param {Broadphase} options.broadphase Defaults to NaiveBroadphase - * @param {Boolean} options.islandSplit - * @param {Boolean} options.doProfiling + * @param {Solver} [options.solver] Defaults to GSSolver. + * @param {Array} [options.gravity] Defaults to [0,-9.78] + * @param {Broadphase} [options.broadphase] Defaults to NaiveBroadphase + * @param {Boolean} [options.islandSplit=false] + * @param {Boolean} [options.doProfiling=false] * @extends EventEmitter */ function World(options){ @@ -9370,7 +9785,10 @@ function World(options){ * @property gravity * @type {Array} */ - this.gravity = options.gravity || vec2.fromValues(0, -9.78); + this.gravity = vec2.fromValues(0, -9.78); + if(options.gravity){ + vec2.copy(this.gravity, options.gravity); + } /** * Gravity to use when approximating the friction max force (mu*mass*gravity). @@ -9644,7 +10062,8 @@ function World(options){ // For keeping track of overlapping shapes this.overlappingShapesLastState = { keys:[] }; this.overlappingShapesCurrentState = { keys:[] }; - this.overlappingShapeLookup = { keys:[] }; + + this.overlapKeeper = new OverlapKeeper(); } World.prototype = new Object(EventEmitter.prototype); @@ -9760,7 +10179,7 @@ World.prototype.step = function(dt,timeSinceLastCalled,maxSubSteps){ internalSteps = Math.min(internalSteps,maxSubSteps); // Do some fixed steps to catch up - for(var i=0; i= speedLimitSquaredB*2 + bj.motionState !== Body.STATIC ){ - wakeUpA = true; + var speedSquaredB = vec2.squaredLength(bj.velocity) + Math.pow(bj.angularVelocity,2); + var speedLimitSquaredB = Math.pow(bj.sleepSpeedLimit,2); + if(speedSquaredB >= speedLimitSquaredB*2){ + bi._wakeUpAfterNarrowphase = true; + } } + if( bj.allowSleep && bj.motionState === Body.DYNAMIC && bj.sleepState === Body.SLEEPING && bi.sleepState === Body.AWAKE && - bi.motionState !== Body.STATIC && - speedSquaredA >= speedLimitSquaredA*2 + bi.motionState !== Body.STATIC ){ - wakeUpB = true; - } - if(wakeUpA){ - bi.wakeUp(); - } - if(wakeUpB){ - bj.wakeUp(); + var speedSquaredA = vec2.squaredLength(bi.velocity) + Math.pow(bi.angularVelocity,2); + var speedLimitSquaredA = Math.pow(bi.sleepSpeedLimit,2); + if(speedSquaredA >= speedLimitSquaredA*2){ + bj._wakeUpAfterNarrowphase = true; + } } - var key = si.id < sj.id ? si.id+" "+ sj.id : sj.id+" "+ si.id; - if(!this.overlappingShapesLastState[key]){ + this.overlapKeeper.setOverlapping(bi, si, bj, sj); + if(this.has('beginContact') && this.overlapKeeper.isNewOverlap(si, sj)){ // Report new shape overlap var e = this.beginContactEvent; @@ -10238,24 +10636,6 @@ World.prototype.runNarrowphase = function(np,bi,si,xi,ai,bj,sj,xj,aj,cm,glen){ this.emit(e); } - // Store current contact state - var current = this.overlappingShapesCurrentState; - if(!current[key]){ - - current[key] = true; - current.keys.push(key); - - // Also store shape & body data - current[key+"_shapeA"] = si; - current.keys.push(key+"_shapeA"); - current[key+"_shapeB"] = sj; - current.keys.push(key+"_shapeB"); - current[key+"_bodyA"] = bi; - current.keys.push(key+"_bodyA"); - current[key+"_bodyB"] = bj; - current.keys.push(key+"_bodyB"); - } - // divide the max friction force by the number of contacts if(typeof(numContacts)==="number" && numFrictionEquations > 1){ // Why divide by 1? for(var i=np.frictionEquations.length-numFrictionEquations; i0&&(e=1/Math.sqrt(e),a[0]=b[0]*e,a[1]=b[1]*e),a},g.dot=function(a,b){return a[0]*b[0]+a[1]*b[1]},g.cross=function(a,b,c){var d=b[0]*c[1]-b[1]*c[0];return a[0]=a[1]=0,a[2]=d,a},g.lerp=function(a,b,c,d){var e=b[0],f=b[1];return a[0]=e+d*(c[0]-e),a[1]=f+d*(c[1]-f),a},g.transformMat2=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[2]*e,a[1]=c[1]*d+c[3]*e,a},g.transformMat2d=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[2]*e+c[4],a[1]=c[1]*d+c[3]*e+c[5],a},g.transformMat3=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[3]*e+c[6],a[1]=c[1]*d+c[4]*e+c[7],a},g.transformMat4=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[4]*e+c[12],a[1]=c[1]*d+c[5]*e+c[13],a},g.forEach=function(){var a=g.create();return function(b,c,d,e,f,g){var h,i;for(c||(c=2),d||(d=0),i=e?Math.min(e*c+d,b.length):b.length,h=d;i>h;h+=c)a[0]=b[h],a[1]=b[h+1],f(a,a,g),b[h]=a[0],b[h+1]=a[1];return b}}(),g.str=function(a){return"vec2("+a[0]+", "+a[1]+")"},"undefined"!=typeof c&&(c.vec2=g)},{}],2:[function(a,b){function c(){}var d=a("./Scalar");b.exports=c,c.lineInt=function(a,b,c){c=c||0;var e,f,g,h,i,j,k,l=[0,0];return e=a[1][1]-a[0][1],f=a[0][0]-a[1][0],g=e*a[0][0]+f*a[0][1],h=b[1][1]-b[0][1],i=b[0][0]-b[1][0],j=h*b[0][0]+i*b[0][1],k=e*i-h*f,d.eq(k,0,c)||(l[0]=(i*g-f*j)/k,l[1]=(e*j-h*g)/k),l},c.segmentsIntersect=function(a,b,c,d){var e=b[0]-a[0],f=b[1]-a[1],g=d[0]-c[0],h=d[1]-c[1];if(g*f-h*e==0)return!1;var i=(e*(c[1]-a[1])+f*(a[0]-c[0]))/(g*f-h*e),j=(g*(a[1]-c[1])+h*(c[0]-a[0]))/(h*e-g*f);return i>=0&&1>=i&&j>=0&&1>=j}},{"./Scalar":5}],3:[function(a,b){function c(){}b.exports=c,c.area=function(a,b,c){return(b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1])},c.left=function(a,b,d){return c.area(a,b,d)>0},c.leftOn=function(a,b,d){return c.area(a,b,d)>=0},c.right=function(a,b,d){return c.area(a,b,d)<0},c.rightOn=function(a,b,d){return c.area(a,b,d)<=0};var d=[],e=[];c.collinear=function(a,b,f,g){if(g){var h=d,i=e;h[0]=b[0]-a[0],h[1]=b[1]-a[1],i[0]=f[0]-b[0],i[1]=f[1]-b[1];var j=h[0]*i[0]+h[1]*i[1],k=Math.sqrt(h[0]*h[0]+h[1]*h[1]),l=Math.sqrt(i[0]*i[0]+i[1]*i[1]),m=Math.acos(j/(k*l));return g>m}return 0==c.area(a,b,f)},c.sqdist=function(a,b){var c=b[0]-a[0],d=b[1]-a[1];return c*c+d*d}},{}],4:[function(a,b){function c(){this.vertices=[]}function d(a,b,c,d,e){e=e||0;var f=b[1]-a[1],h=a[0]-b[0],i=f*a[0]+h*a[1],j=d[1]-c[1],k=c[0]-d[0],l=j*c[0]+k*c[1],m=f*k-j*h;return g.eq(m,0,e)?[0,0]:[(k*i-h*l)/m,(f*l-j*i)/m]}var e=a("./Line"),f=a("./Point"),g=a("./Scalar");b.exports=c,c.prototype.at=function(a){var b=this.vertices,c=b.length;return b[0>a?a%c+c:a%c]},c.prototype.first=function(){return this.vertices[0]},c.prototype.last=function(){return this.vertices[this.vertices.length-1]},c.prototype.clear=function(){this.vertices.length=0},c.prototype.append=function(a,b,c){if("undefined"==typeof b)throw new Error("From is not given!");if("undefined"==typeof c)throw new Error("To is not given!");if(b>c-1)throw new Error("lol1");if(c>a.vertices.length)throw new Error("lol2");if(0>b)throw new Error("lol3");for(var d=b;c>d;d++)this.vertices.push(a.vertices[d])},c.prototype.makeCCW=function(){for(var a=0,b=this.vertices,c=1;cb[a][0])&&(a=c);f.left(this.at(a-1),this.at(a),this.at(a+1))||this.reverse()},c.prototype.reverse=function(){for(var a=[],b=0,c=this.vertices.length;b!==c;b++)a.push(this.vertices.pop());this.vertices=a},c.prototype.isReflex=function(a){return f.right(this.at(a-1),this.at(a),this.at(a+1))};var h=[],i=[];c.prototype.canSee=function(a,b){var c,d,g=h,j=i;if(f.leftOn(this.at(a+1),this.at(a),this.at(b))&&f.rightOn(this.at(a-1),this.at(a),this.at(b)))return!1;d=f.sqdist(this.at(a),this.at(b));for(var k=0;k!==this.vertices.length;++k)if((k+1)%this.vertices.length!==a&&k!==a&&f.leftOn(this.at(a),this.at(b),this.at(k+1))&&f.rightOn(this.at(a),this.at(b),this.at(k))&&(g[0]=this.at(a),g[1]=this.at(b),j[0]=this.at(k),j[1]=this.at(k+1),c=e.lineInt(g,j),f.sqdist(this.at(a),c)a)for(var f=a;b>=f;f++)e.vertices.push(this.vertices[f]);else{for(var f=0;b>=f;f++)e.vertices.push(this.vertices[f]);for(var f=a;f0?this.slice(a):[this]},c.prototype.slice=function(a){if(0==a.length)return[this];if(a instanceof Array&&a.length&&a[0]instanceof Array&&2==a[0].length&&a[0][0]instanceof Array){for(var b=[this],c=0;cc;c++)if(e.segmentsIntersect(a[b],a[b+1],a[c],a[c+1]))return!1;for(var b=1;bh)return console.warn("quickDecomp: max level ("+h+") reached."),a;for(var x=0;xo&&(n=o,k=l,r=y))),f.left(v.at(x+1),v.at(x),v.at(y+1))&&f.rightOn(v.at(x+1),v.at(x),v.at(y))&&(l=d(v.at(x+1),v.at(x),v.at(y),v.at(y+1)),f.left(v.at(x-1),v.at(x),l)&&(o=f.sqdist(v.vertices[x],l),m>o&&(m=o,j=l,q=y)));if(r==(q+1)%this.vertices.length)l[0]=(k[0]+j[0])/2,l[1]=(k[1]+j[1])/2,e.push(l),q>x?(t.append(v,x,q+1),t.vertices.push(l),u.vertices.push(l),0!=r&&u.append(v,r,v.vertices.length),u.append(v,0,x+1)):(0!=x&&t.append(v,x,v.vertices.length),t.append(v,0,q+1),t.vertices.push(l),u.vertices.push(l),u.append(v,r,x+1));else{if(r>q&&(q+=this.vertices.length),p=Number.MAX_VALUE,r>q)return a;for(var y=r;q>=y;++y)f.leftOn(v.at(x-1),v.at(x),v.at(y))&&f.rightOn(v.at(x+1),v.at(x),v.at(y))&&(o=f.sqdist(v.at(x),v.at(y)),p>o&&(p=o,s=y%this.vertices.length));s>x?(t.append(v,x,s+1),0!=s&&u.append(v,s,w.length),u.append(v,0,x+1)):(0!=x&&t.append(v,x,w.length),t.append(v,0,s+1),u.append(v,s,x+1))}return t.vertices.length3&&c>=0;--c)f.collinear(this.at(c-1),this.at(c),this.at(c+1),a)&&(this.vertices.splice(c%this.vertices.length,1),c--,b++);return b}},{"./Line":2,"./Point":3,"./Scalar":5}],5:[function(a,b){function c(){}b.exports=c,c.eq=function(a,b,c){return c=c||0,Math.abs(a-b) (http://steffe.se)",keywords:["p2.js","p2","physics","engine","2d"],main:"./src/p2.js",engines:{node:"*"},repository:{type:"git",url:"https://github.com/schteppe/p2.js.git"},bugs:{url:"https://github.com/schteppe/p2.js/issues"},licenses:[{type:"MIT"}],devDependencies:{grunt:"~0.4.0","grunt-contrib-jshint":"~0.9.2","grunt-contrib-nodeunit":"~0.1.2","grunt-contrib-uglify":"~0.4.0","grunt-browserify":"~2.0.1","z-schema":"~2.4.6"},dependencies:{"poly-decomp":"git://github.com/schteppe/poly-decomp.js","gl-matrix":"2.1.0"}}},{}],8:[function(a,b){function c(a){this.lowerBound=d.create(),a&&a.lowerBound&&d.copy(this.lowerBound,a.lowerBound),this.upperBound=d.create(),a&&a.upperBound&&d.copy(this.upperBound,a.upperBound)}{var d=a("../math/vec2");a("../utils/Utils")}b.exports=c;var e=d.create();c.prototype.setFromPoints=function(a,b,c){var f=this.lowerBound,g=this.upperBound;d.set(f,Number.MAX_VALUE,Number.MAX_VALUE),d.set(g,-Number.MAX_VALUE,-Number.MAX_VALUE);for(var h=0;hj;j++)i[j]>g[j]&&(g[j]=i[j]),i[j]b;b++)a.lowerBound[b]this.upperBound[b]&&(this.upperBound[b]=a.upperBound[b])},c.prototype.overlaps=function(a){var b=this.lowerBound,c=this.upperBound,d=a.lowerBound,e=a.upperBound;return(d[0]<=c[0]&&c[0]<=e[0]||b[0]<=e[0]&&e[0]<=c[0])&&(d[1]<=c[1]&&c[1]<=e[1]||b[1]<=e[1]&&e[1]<=c[1])}},{"../math/vec2":30,"../utils/Utils":45}],9:[function(a,b){function c(a){this.type=a,this.result=[],this.world=null,this.boundingVolumeType=c.AABB}var d=a("../math/vec2"),e=a("../objects/Body");b.exports=c,c.AABB=1,c.BOUNDING_CIRCLE=2,c.prototype.setWorld=function(a){this.world=a},c.prototype.getCollisionPairs=function(){throw new Error("getCollisionPairs must be implemented in a subclass!")};var f=d.create();c.boundingRadiusCheck=function(a,b){d.sub(f,a.position,b.position);var c=d.squaredLength(f),e=a.boundingRadius+b.boundingRadius;return e*e>=c},c.aabbCheck=function(a,b){return a.aabbNeedsUpdate&&a.updateAABB(),b.aabbNeedsUpdate&&b.updateAABB(),a.aabb.overlaps(b.aabb)},c.prototype.boundingVolumeCheck=function(a,b){var d;switch(this.boundingVolumeType){case c.BOUNDING_CIRCLE:d=c.boundingRadiusCheck(a,b);break;case c.AABB:d=c.aabbCheck(a,b);break;default:throw new Error("Bounding volume type not recognized: "+this.boundingVolumeType)}return d},c.canCollide=function(a,b){return a.motionState===e.STATIC&&b.motionState===e.STATIC?!1:a.motionState===e.KINEMATIC&&b.motionState===e.STATIC||a.motionState===e.STATIC&&b.motionState===e.KINEMATIC?!1:a.motionState===e.KINEMATIC&&b.motionState===e.KINEMATIC?!1:a.sleepState===e.SLEEPING&&b.sleepState===e.SLEEPING?!1:a.sleepState===e.SLEEPING&&b.motionState===e.STATIC||b.sleepState===e.SLEEPING&&a.motionState===e.STATIC?!1:!0},c.NAIVE=1,c.SAP=2},{"../math/vec2":30,"../objects/Body":31}],10:[function(a,b){function c(a){a=a||{},d.apply(this),e.extend(a,{xmin:-100,xmax:100,ymin:-100,ymax:100,nx:10,ny:10}),this.xmin=a.xmin,this.ymin=a.ymin,this.xmax=a.xmax,this.ymax=a.ymax,this.nx=a.nx,this.ny=a.ny,this.binsizeX=(this.xmax-this.xmin)/this.nx,this.binsizeY=(this.ymax-this.ymin)/this.ny}var d=(a("../shapes/Circle"),a("../shapes/Plane"),a("../shapes/Particle"),a("../collision/Broadphase")),e=(a("../math/vec2"),a("../utils/Utils"));b.exports=c,c.prototype=new d,c.prototype.getCollisionPairs=function(a){for(var b=[],c=a.bodies,e=c.length,f=(this.binsizeX,this.binsizeY,this.nx),g=this.ny,h=this.xmin,i=this.ymin,j=this.xmax,k=this.ymax,l=[],m=f*g,n=0;m>n;n++)l.push([]);for(var o=f/(j-h),p=g/(k-i),n=0;n!==e;n++)for(var q=c[n],r=q.aabb,s=Math.max(r.lowerBound[0],h),t=Math.max(r.lowerBound[1],i),u=Math.min(r.upperBound[0],j),v=Math.min(r.upperBound[1],k),w=Math.floor(o*(s-h)),x=Math.floor(p*(t-i)),y=Math.floor(o*(u-h)),z=Math.floor(p*(v-i)),A=w;y>=A;A++)for(var B=x;z>=B;B++){var C=A,D=B,E=C*(g-1)+D;E>=0&&m>E&&l[E].push(q)}for(var n=0;n!==m;n++)for(var F=l[n],A=0,G=F.length;A!==G;A++)for(var q=F[A],B=0;B!==A;B++){var H=F[B];d.canCollide(q,H)&&this.boundingVolumeCheck(q,H)&&b.push(q,H)}return b}},{"../collision/Broadphase":9,"../math/vec2":30,"../shapes/Circle":35,"../shapes/Particle":39,"../shapes/Plane":40,"../utils/Utils":45}],11:[function(a,b){function c(){d.call(this,d.NAIVE)}{var d=(a("../shapes/Circle"),a("../shapes/Plane"),a("../shapes/Shape"),a("../shapes/Particle"),a("../collision/Broadphase"));a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.getCollisionPairs=function(a){var b=a.bodies,c=this.result;c.length=0;for(var e=0,f=b.length;e!==f;e++)for(var g=b[e],h=0;e>h;h++){var i=b[h];d.canCollide(g,i)&&this.boundingVolumeCheck(g,i)&&c.push(g,i)}return c}},{"../collision/Broadphase":9,"../math/vec2":30,"../shapes/Circle":35,"../shapes/Particle":39,"../shapes/Plane":40,"../shapes/Shape":42}],12:[function(a,b){function c(){this.contactEquations=[],this.frictionEquations=[],this.enableFriction=!0,this.slipForce=10,this.frictionCoefficient=.3,this.surfaceVelocity=0,this.reuseObjects=!0,this.reusableContactEquations=[],this.reusableFrictionEquations=[],this.restitution=0,this.stiffness=1e7,this.relaxation=3,this.frictionStiffness=1e7,this.frictionRelaxation=3,this.collidingBodiesLastStep={keys:[]}}function d(a){for(var b=0,c=a.keys.length;c>b;b++)delete a[a.keys[b]];a.keys.length=0}function e(a,b){g.set(a.vertices[0],.5*-b.length,-b.radius),g.set(a.vertices[1],.5*b.length,-b.radius),g.set(a.vertices[2],.5*b.length,b.radius),g.set(a.vertices[3],.5*-b.length,b.radius)}function f(a,b,c,d){for(var e=P,f=Q,j=R,k=S,l=a,m=b.vertices,n=null,o=0;o!==m.length+1;o++){var p=m[o%m.length],q=m[(o+1)%m.length];g.rotate(e,p,d),g.rotate(f,q,d),i(e,e,c),i(f,f,c),h(j,e,l),h(k,f,l);var r=g.crossLength(j,k);if(null===n&&(n=r),0>=r*n)return!1;n=r}return!0}var g=a("../math/vec2"),h=g.sub,i=g.add,j=g.dot,k=a("../utils/Utils"),l=a("../equations/ContactEquation"),m=a("../equations/FrictionEquation"),n=a("../shapes/Circle"),o=a("../shapes/Shape"),p=(a("../objects/Body"),a("../shapes/Rectangle"));b.exports=c;var q=g.fromValues(0,1),r=g.fromValues(0,0),s=g.fromValues(0,0),t=g.fromValues(0,0),u=g.fromValues(0,0),v=g.fromValues(0,0),w=g.fromValues(0,0),x=g.fromValues(0,0),y=g.fromValues(0,0),z=g.fromValues(0,0),A=g.fromValues(0,0),B=g.fromValues(0,0),C=g.fromValues(0,0),D=g.fromValues(0,0),E=g.fromValues(0,0),F=g.fromValues(0,0),G=g.fromValues(0,0),H=g.fromValues(0,0),I=g.fromValues(0,0),J=[];c.prototype.collidedLastStep=function(a,b){var c=a.id,d=b.id;if(c>d){var e=c;c=d,d=e}return!!this.collidingBodiesLastStep[c+" "+d]},c.prototype.reset=function(){d(this.collidingBodiesLastStep);for(var a=0;a!==this.contactEquations.length;a++){var b=this.contactEquations[a],c=b.bodyA.id,e=b.bodyB.id;if(c>e){var f=c;c=e,e=f}var g=c+" "+e;this.collidingBodiesLastStep[g]||(this.collidingBodiesLastStep[g]=!0,this.collidingBodiesLastStep.keys.push(g))}if(this.reuseObjects){var h=this.contactEquations,i=this.frictionEquations,j=this.reusableFrictionEquations,l=this.reusableContactEquations;k.appendArray(l,h),k.appendArray(j,i)}this.contactEquations.length=this.frictionEquations.length=0},c.prototype.createContactEquation=function(a,b,c,d){var e=this.reusableContactEquations.length?this.reusableContactEquations.pop():new l(a,b);return e.bodyA=a,e.bodyB=b,e.shapeA=c,e.shapeB=d,e.restitution=this.restitution,e.firstImpact=!this.collidedLastStep(a,b),e.stiffness=this.stiffness,e.relaxation=this.relaxation,e.needsUpdate=!0,e.enabled=!0,e},c.prototype.createFrictionEquation=function(a,b,c,d){var e=this.reusableFrictionEquations.length?this.reusableFrictionEquations.pop():new m(a,b);return e.bodyA=a,e.bodyB=b,e.shapeA=c,e.shapeB=d,e.setSlipForce(this.slipForce),e.frictionCoefficient=this.frictionCoefficient,e.relativeVelocity=this.surfaceVelocity,e.enabled=!0,e.needsUpdate=!0,e.stiffness=this.frictionStiffness,e.relaxation=this.frictionRelaxation,e},c.prototype.createFrictionFromContact=function(a){var b=this.createFrictionEquation(a.bodyA,a.bodyB,a.shapeA,a.shapeB);return g.copy(b.contactPointA,a.contactPointA),g.copy(b.contactPointB,a.contactPointB),g.rotate(b.t,a.normalA,-Math.PI/2),b.contactEquation=a,b},c.prototype[o.LINE|o.CONVEX]=c.prototype.convexLine=function(a,b,c,d,e,f,g,h,i){return i?!1:0},c.prototype[o.LINE|o.RECTANGLE]=c.prototype.lineRectangle=function(a,b,c,d,e,f,g,h,i){return i?!1:0};var K=new p(1,1),L=g.create();c.prototype[o.CAPSULE|o.CONVEX]=c.prototype[o.CAPSULE|o.RECTANGLE]=c.prototype.convexCapsule=function(a,b,c,d,f,h,i,j,k){var l=L;g.set(l,h.length/2,0),g.rotate(l,l,j),g.add(l,l,i);var m=this.circleConvex(f,h,l,j,a,b,c,d,k,h.radius);g.set(l,-h.length/2,0),g.rotate(l,l,j),g.add(l,l,i);var n=this.circleConvex(f,h,l,j,a,b,c,d,k,h.radius);if(k&&(m||n))return!0;var o=K;e(o,h);var p=this.convexConvex(a,b,c,d,f,o,i,j,k);return p+m+n},c.prototype[o.CAPSULE|o.LINE]=c.prototype.lineCapsule=function(a,b,c,d,e,f,g,h,i){return i?!1:0};var M=g.create(),N=g.create(),O=new p(1,1);c.prototype[o.CAPSULE|o.CAPSULE]=c.prototype.capsuleCapsule=function(a,b,c,d,f,h,i,j,k){for(var l=M,m=N,n=0,o=0;2>o;o++){g.set(l,(0==o?-1:1)*b.length/2,0),g.rotate(l,l,d),g.add(l,l,c);for(var p=0;2>p;p++){g.set(m,(0==p?-1:1)*h.length/2,0),g.rotate(m,m,j),g.add(m,m,i);var q=this.circleCircle(a,b,l,d,f,h,m,j,k,b.radius,h.radius);if(k&&q)return!0;n+=q}}var r=O;e(r,b);var s=this.convexCapsule(a,r,c,d,f,h,i,j,k);if(k&&s)return!0;n+=s,e(r,h);var t=this.convexCapsule(f,r,i,j,a,b,c,d,k);return k&&t?!0:n+=t},c.prototype[o.LINE|o.LINE]=c.prototype.lineLine=function(a,b,c,d,e,f,g,h,i){return i?!1:0},c.prototype[o.PLANE|o.LINE]=c.prototype.planeLine=function(a,b,c,d,e,f,k,l,m){var n=r,o=s,p=t,A=u,B=v,C=w,D=x,E=y,F=z,G=J;numContacts=0,g.set(n,-f.length/2,0),g.set(o,f.length/2,0),g.rotate(p,n,l),g.rotate(A,o,l),i(p,p,k),i(A,A,k),g.copy(n,p),g.copy(o,A),h(B,o,n),g.normalize(C,B),g.rotate(F,C,-Math.PI/2),g.rotate(E,q,d),G[0]=n,G[1]=o;for(var H=0;HK){if(m)return!0;var L=this.createContactEquation(a,e,b,f);numContacts++,g.copy(L.normalA,E),g.normalize(L.normalA,L.normalA),g.scale(D,E,K),h(L.contactPointA,I,D),h(L.contactPointA,L.contactPointA,a.position),h(L.contactPointB,I,k),i(L.contactPointB,L.contactPointB,k),h(L.contactPointB,L.contactPointB,e.position),this.contactEquations.push(L),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(L))}}return numContacts},c.prototype[o.PARTICLE|o.CAPSULE]=c.prototype.particleCapsule=function(a,b,c,d,e,f,g,h,i){return this.circleLine(a,b,c,d,e,f,g,h,i,f.radius,0)},c.prototype[o.CIRCLE|o.LINE]=c.prototype.circleLine=function(a,b,c,d,e,f,k,l,m,n,o){var p=f,q=l,F=e,G=k,H=c,I=a,K=b,n=n||0,o="undefined"!=typeof o?o:K.radius,L=r,M=s,N=t,O=u,P=v,Q=w,R=x,S=y,T=z,U=A,V=B,W=C,X=D,Y=E,Z=J;g.set(S,-p.length/2,0),g.set(T,p.length/2,0),g.rotate(U,S,q),g.rotate(V,T,q),i(U,U,G),i(V,V,G),g.copy(S,U),g.copy(T,V),h(Q,T,S),g.normalize(R,Q),g.rotate(P,R,-Math.PI/2),h(W,H,S);var $=j(W,P);if(h(O,S,G),h(X,H,G),Math.abs($)ab&&bb>_){if(m)return!0;var cb=this.createContactEquation(I,F,b,f);return g.scale(cb.normalA,L,-1),g.normalize(cb.normalA,cb.normalA),g.scale(cb.contactPointA,cb.normalA,o),i(cb.contactPointA,cb.contactPointA,H),h(cb.contactPointA,cb.contactPointA,I.position),h(cb.contactPointB,N,G),i(cb.contactPointB,cb.contactPointB,G),h(cb.contactPointB,cb.contactPointB,F.position),this.contactEquations.push(cb),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(cb)),1}}Z[0]=S,Z[1]=T;for(var db=0;dbW&&(g.copy(Q,O),S=W,g.scale(N,K,W),g.add(N,N,O),R=!0)}}if(R){if(m)return!0;var X=this.createContactEquation(y,q,b,j);return g.sub(X.normalA,Q,x),g.normalize(X.normalA,X.normalA),g.scale(X.contactPointA,X.normalA,n),i(X.contactPointA,X.contactPointA,x),h(X.contactPointA,X.contactPointA,y.position),h(X.contactPointB,N,w),i(X.contactPointB,X.contactPointB,w),h(X.contactPointB,X.contactPointB,q.position),this.contactEquations.push(X),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(X)),1}if(n>0)for(var T=0;TW&&(Q=W,g.scale(N,J,W),g.add(N,N,z),g.copy(P,J),R=!0)}if(R){var X=this.createContactEquation(B,q,b,k);return g.scale(X.normalA,P,-1),g.normalize(X.normalA,X.normalA),g.set(X.contactPointA,0,0),i(X.contactPointA,X.contactPointA,z),h(X.contactPointA,X.contactPointA,B.position),h(X.contactPointB,N,y),i(X.contactPointB,X.contactPointB,y),h(X.contactPointB,X.contactPointB,q.position),this.contactEquations.push(X),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(X)),1}return 0},c.prototype[o.CIRCLE]=c.prototype.circleCircle=function(a,b,c,d,e,f,j,k,l,m,n){var o=a,p=b,q=c,s=e,t=f,u=j,v=r,m=m||p.radius,n=n||t.radius;h(v,c,j);var w=m+n;if(g.squaredLength(v)>w*w)return 0;if(l)return!0;var x=this.createContactEquation(o,s,b,f);return h(x.normalA,u,q),g.normalize(x.normalA,x.normalA),g.scale(x.contactPointA,x.normalA,m),g.scale(x.contactPointB,x.normalA,-n),i(x.contactPointA,x.contactPointA,q),h(x.contactPointA,x.contactPointA,o.position),i(x.contactPointB,x.contactPointB,u),h(x.contactPointB,x.contactPointB,s.position),this.contactEquations.push(x),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(x)),1},c.prototype[o.PLANE|o.CONVEX]=c.prototype[o.PLANE|o.RECTANGLE]=c.prototype.planeConvex=function(a,b,d,e,f,k,l,m,n){var o=f,p=l,u=k,v=m,w=a,x=b,y=d,z=e,A=r,B=s,C=t,D=0;g.rotate(B,q,z);for(var E=0;E0)return 0;if(l)return!0;var x=this.createContactEquation(o,m,f,b);return g.copy(x.normalA,v),g.scale(u,x.normalA,w),h(x.contactPointA,n,u),h(x.contactPointA,x.contactPointA,o.position),h(x.contactPointB,n,m.position),this.contactEquations.push(x),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(x)),1},c.prototype[o.CIRCLE|o.PARTICLE]=c.prototype.circleParticle=function(a,b,c,d,e,f,j,k,l){var m=a,n=b,o=c,p=e,q=j,s=r;if(h(s,q,o),g.squaredLength(s)>n.radius*n.radius)return 0;if(l)return!0;var t=this.createContactEquation(m,p,b,f);return g.copy(t.normalA,s),g.normalize(t.normalA,t.normalA),g.scale(t.contactPointA,t.normalA,n.radius),i(t.contactPointA,t.contactPointA,o),h(t.contactPointA,t.contactPointA,m.position),h(t.contactPointB,q,p.position),this.contactEquations.push(t),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(t)),1};{var T=new n(1),U=g.create(),V=g.create();g.create()}c.prototype[o.PLANE|o.CAPSULE]=c.prototype.planeCapsule=function(a,b,c,d,e,f,h,j,k){var l=U,m=V,n=T;g.set(l,-f.length/2,0),g.rotate(l,l,j),i(l,l,h),g.set(m,f.length/2,0),g.rotate(m,m,j),i(m,m,h),n.radius=f.radius;var o=this.circlePlane(e,n,l,0,a,b,c,d,k),p=this.circlePlane(e,n,m,0,a,b,c,d,k);return k?o||p:o+p},c.prototype.capsulePlane=function(a,b,c,d,e,f,g,h,i){return console.warn("Narrowphase.prototype.capsulePlane() is deprecated. Use .planeCapsule() instead!"),this.planeCapsule(e,f,g,h,a,b,c,d,i)},c.prototype[o.CIRCLE|o.PLANE]=c.prototype.circlePlane=function(a,b,c,d,e,f,k,l,m){var n=a,o=b,p=c,u=e,v=k,w=l;w=w||0;var x=r,y=s,z=t;h(x,p,v),g.rotate(y,q,w);var A=j(y,x);if(A>o.radius)return 0;if(m)return!0;var B=this.createContactEquation(u,n,f,b);return g.copy(B.normalA,y),g.scale(B.contactPointB,B.normalA,-o.radius),i(B.contactPointB,B.contactPointB,p),h(B.contactPointB,B.contactPointB,n.position),g.scale(z,B.normalA,A),h(B.contactPointA,x,z),i(B.contactPointA,B.contactPointA,v),h(B.contactPointA,B.contactPointA,u.position),this.contactEquations.push(B),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(B)),1},c.convexPrecision=1e-7,c.prototype[o.CONVEX]=c.prototype[o.CONVEX|o.RECTANGLE]=c.prototype[o.RECTANGLE]=c.prototype.convexConvex=function(a,b,d,e,f,k,l,m,n,o){var p=r,q=s,w=t,A=u,B=v,C=x,D=y,E=z,F=0,o=o||c.convexPrecision,G=c.findSeparatingAxis(b,d,e,k,l,m,p);if(!G)return 0;h(D,l,d),j(p,D)>0&&g.scale(p,p,-1);var H=c.getClosestEdge(b,e,p,!0),I=c.getClosestEdge(k,m,p);if(-1===H||-1===I)return 0;for(var J=0;2>J;J++){var K=H,L=I,M=b,N=k,O=d,P=l,Q=e,R=m,S=a,T=f;if(0===J){var U;U=K,K=L,L=U,U=M,M=N,N=U,U=O,O=P,P=U,U=Q,Q=R,R=U,U=S,S=T,T=U}for(var V=L;L+2>V;V++){var W=N.vertices[(V+N.vertices.length)%N.vertices.length];g.rotate(q,W,R),i(q,q,P);for(var X=0,Y=K-1;K+2>Y;Y++){var Z=M.vertices[(Y+M.vertices.length)%M.vertices.length],$=M.vertices[(Y+1+M.vertices.length)%M.vertices.length];g.rotate(w,Z,Q),g.rotate(A,$,Q),i(w,w,O),i(A,A,O),h(B,A,w),g.rotate(E,B,-Math.PI/2),g.normalize(E,E),h(D,q,w);var _=j(E,D);o>=_&&X++}if(X>=3){if(n)return!0;var ab=this.createContactEquation(S,T,M,N);F++;var Z=M.vertices[K%M.vertices.length],$=M.vertices[(K+1)%M.vertices.length];g.rotate(w,Z,Q),g.rotate(A,$,Q),i(w,w,O),i(A,A,O),h(B,A,w),g.rotate(ab.normalA,B,-Math.PI/2),g.normalize(ab.normalA,ab.normalA),h(D,q,w);var _=j(ab.normalA,D);g.scale(C,ab.normalA,_),h(ab.contactPointA,q,O),h(ab.contactPointA,ab.contactPointA,C),i(ab.contactPointA,ab.contactPointA,O),h(ab.contactPointA,ab.contactPointA,S.position),h(ab.contactPointB,q,P),i(ab.contactPointB,ab.contactPointB,P),h(ab.contactPointB,ab.contactPointB,T.position),this.contactEquations.push(ab),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(ab))}}}return F};var W=g.fromValues(0,0);c.projectConvexOntoAxis=function(a,b,c,d,e){var f,h,i=null,k=null,l=W;g.rotate(l,d,-c);for(var m=0;mi)&&(i=h),(null===k||k>h)&&(k=h);if(k>i){var n=k;k=i,i=n}var o=j(b,d);g.set(e,k+o,i+o)};var X=g.fromValues(0,0),Y=g.fromValues(0,0),Z=g.fromValues(0,0),$=g.fromValues(0,0),_=g.fromValues(0,0),ab=g.fromValues(0,0);c.findSeparatingAxis=function(a,b,d,e,f,i,j){for(var k=null,l=!1,m=!1,n=X,o=Y,p=Z,q=$,r=_,s=ab,t=0;2!==t;t++){var u=a,v=d;1===t&&(u=e,v=i);for(var w=0;w!==u.vertices.length;w++){g.rotate(o,u.vertices[w],v),g.rotate(p,u.vertices[(w+1)%u.vertices.length],v),h(n,p,o),g.rotate(q,n,-Math.PI/2),g.normalize(q,q),c.projectConvexOntoAxis(a,b,d,q,r),c.projectConvexOntoAxis(e,f,i,q,s);var x=r,y=s,z=!1;r[0]>s[0]&&(y=r,x=s,z=!0);var A=y[0]-x[1];l=A<=c.convexPrecision,(null===k||A>k)&&(g.copy(j,q),k=A,m=l)}}return m};var bb=g.fromValues(0,0),cb=g.fromValues(0,0),db=g.fromValues(0,0);c.getClosestEdge=function(a,b,c,d){var e=bb,f=cb,i=db;g.rotate(e,c,-b),d&&g.scale(e,e,-1);for(var k=-1,l=a.vertices.length,m=Math.PI/2,n=0;n!==l;n++){h(f,a.vertices[(n+1)%l],a.vertices[n%l]),g.rotate(i,f,-m),g.normalize(i,i);var o=j(i,e);(-1==k||o>maxDot)&&(k=n%l,maxDot=o) -}return k};var eb=g.create(),fb=g.create(),gb=g.create(),hb=g.create(),ib=g.create(),jb=g.create(),kb=g.create();c.prototype[o.CIRCLE|o.HEIGHTFIELD]=c.prototype.circleHeightfield=function(a,b,c,d,e,f,j,k,l,m){var n=f.data,m=m||b.radius,o=f.elementWidth,p=fb,q=eb,r=ib,s=kb,t=jb,u=gb,v=hb,w=Math.floor((c[0]-m-j[0])/o),x=Math.ceil((c[0]+m-j[0])/o);0>w&&(w=0),x>=n.length&&(x=n.length-1);for(var y=n[w],z=n[x],A=w;x>A;A++)n[A]y&&(y=n[A]);if(c[1]-m>y)return l?!1:0;c[1]+mA;A++){g.set(u,A*o,n[A]),g.set(v,(A+1)*o,n[A+1]),g.add(u,u,j),g.add(v,v,j),g.sub(t,v,u),g.rotate(t,t,Math.PI/2),g.normalize(t,t),g.scale(q,t,-m),g.add(q,q,c),g.sub(p,q,u);var D=g.dot(p,t);if(q[0]>=u[0]&&q[0]=D&&(C===!1||Math.abs(D)0)for(var A=w;x>=A;A++)if(g.set(u,A*o,n[A]),g.add(u,u,j),g.sub(p,c,u),g.squaredLength(p)b;b++){for(var d=a[b],e=b-1;e>=0&&!(a[e].aabb.lowerBound[0]<=d.aabb.lowerBound[0]);e--)a[e+1]=a[e];a[e+1]=d}return a},c.sortAxisListY=function(a){for(var b=1,c=a.length;c>b;b++){for(var d=a[b],e=b-1;e>=0&&!(a[e].aabb.lowerBound[1]<=d.aabb.lowerBound[1]);e--)a[e+1]=a[e];a[e+1]=d}return a};var f={keys:[]};c.prototype.getCollisionPairs=function(){{var a=this.axisListX,b=this.axisListY,d=this.result;this.axisIndex}d.length=0;for(var g=0;g!==a.length;g++){var h=a[g];h.aabbNeedsUpdate&&h.updateAABB()}c.sortAxisListX(a),c.sortAxisListY(b);for(var g=0,i=a.length;g!==i;g++)for(var j=a[g],k=g+1;i>k;k++){var l=a[k];if(!c.checkBounds(j,l,0))break;if(e.canCollide(j,l)){var m=j.idk;k++){var l=b[k];if(!c.checkBounds(j,l,1))break;if(e.canCollide(j,l)){var m=j.idc)g.scale(e.normalA,i,-1),g.sub(e.contactPointA,j,h.position),g.sub(e.contactPointB,k,o.position),g.scale(n,i,c),g.add(e.contactPointA,e.contactPointA,n),-1==a.indexOf(e)&&a.push(e);else{var u=a.indexOf(e);-1!=u&&a.splice(u,1)}if(this.lowerLimitEnabled&&d>s)g.scale(f.normalA,i,1),g.sub(f.contactPointA,j,h.position),g.sub(f.contactPointB,k,o.position),g.scale(n,i,d),g.sub(f.contactPointB,f.contactPointB,n),-1==a.indexOf(f)&&a.push(f);else{var u=a.indexOf(f);-1!=u&&a.splice(u,1)}},c.prototype.enableMotor=function(){this.motorEnabled||(this.equations.push(this.motorEquation),this.motorEnabled=!0)},c.prototype.disableMotor=function(){if(this.motorEnabled){var a=this.equations.indexOf(this.motorEquation);this.equations.splice(a,1),this.motorEnabled=!1}}},{"../equations/ContactEquation":21,"../equations/Equation":22,"../equations/RotationalLockEquation":24,"../math/vec2":30,"./Constraint":14}],19:[function(a,b){function c(a,b,c,n,o){o=o||{},d.call(this,a,c,d.REVOLUTE,o);var p=this.maxForce="undefined"!=typeof o.maxForce?o.maxForce:Number.MAX_VALUE;this.pivotA=b,this.pivotB=n;var q=this.equations=[new e(a,c,-p,p),new e(a,c,-p,p)],r=q[0],s=q[1],t=this;r.computeGq=function(){return h.rotate(i,t.pivotA,a.angle),h.rotate(j,t.pivotB,c.angle),h.add(m,c.position,j),h.sub(m,m,a.position),h.sub(m,m,i),h.dot(m,k)},s.computeGq=function(){return h.rotate(i,t.pivotA,a.angle),h.rotate(j,t.pivotB,c.angle),h.add(m,c.position,j),h.sub(m,m,a.position),h.sub(m,m,i),h.dot(m,l)},s.minForce=r.minForce=-p,s.maxForce=r.maxForce=p,this.motorEquation=new f(a,c),this.motorEnabled=!1,this.angle=0,this.lowerLimitEnabled=!1,this.upperLimitEnabled=!1,this.lowerLimit=0,this.upperLimit=0,this.upperLimitEquation=new g(a,c),this.lowerLimitEquation=new g(a,c),this.upperLimitEquation.minForce=0,this.lowerLimitEquation.maxForce=0}var d=a("./Constraint"),e=a("../equations/Equation"),f=a("../equations/RotationalVelocityEquation"),g=a("../equations/RotationalLockEquation"),h=a("../math/vec2");b.exports=c;var i=h.create(),j=h.create(),k=h.fromValues(1,0),l=h.fromValues(0,1),m=h.create();c.prototype=new d,c.prototype.update=function(){var a=this.bodyA,b=this.bodyB,c=this.pivotA,d=this.pivotB,e=this.equations,f=(e[0],e[1],e[0]),g=e[1],m=this.upperLimit,n=this.lowerLimit,o=this.upperLimitEquation,p=this.lowerLimitEquation,q=this.angle=b.angle-a.angle;if(this.upperLimitEnabled&&q>m)o.angle=m,-1==e.indexOf(o)&&e.push(o);else{var r=e.indexOf(o);-1!=r&&e.splice(r,1)}if(this.lowerLimitEnabled&&n>q)p.angle=n,-1==e.indexOf(p)&&e.push(p);else{var r=e.indexOf(p);-1!=r&&e.splice(r,1)}h.rotate(i,c,a.angle),h.rotate(j,d,b.angle),f.G[0]=-1,f.G[1]=0,f.G[2]=-h.crossLength(i,k),f.G[3]=1,f.G[4]=0,f.G[5]=h.crossLength(j,k),g.G[0]=0,g.G[1]=-1,g.G[2]=-h.crossLength(i,l),g.G[3]=0,g.G[4]=1,g.G[5]=h.crossLength(j,l)},c.prototype.enableMotor=function(){this.motorEnabled||(this.equations.push(this.motorEquation),this.motorEnabled=!0)},c.prototype.disableMotor=function(){if(this.motorEnabled){var a=this.equations.indexOf(this.motorEquation);this.equations.splice(a,1),this.motorEnabled=!1}},c.prototype.motorIsEnabled=function(){return!!this.motorEnabled},c.prototype.setMotorSpeed=function(a){if(this.motorEnabled){var b=this.equations.indexOf(this.motorEquation);this.equations[b].relativeVelocity=a}},c.prototype.getMotorSpeed=function(){return this.motorEnabled?this.motorEquation.relativeVelocity:!1}},{"../equations/Equation":22,"../equations/RotationalLockEquation":24,"../equations/RotationalVelocityEquation":25,"../math/vec2":30,"./Constraint":14}],20:[function(a,b){function c(a,b,c){c=c||{},d.call(this,a,b,-Number.MAX_VALUE,Number.MAX_VALUE),this.angle=c.angle||0,this.ratio="number"==typeof c.ratio?c.ratio:1,this.setRatio(this.ratio)}{var d=a("./Equation");a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.constructor=c,c.prototype.computeGq=function(){return this.ratio*this.bodyA.angle-this.bodyB.angle+this.angle},c.prototype.setRatio=function(a){var b=this.G;b[2]=a,b[5]=-1,this.ratio=a},c.prototype.setMaxTorque=function(a){this.maxForce=a,this.minForce=-a}},{"../math/vec2":30,"./Equation":22}],21:[function(a,b){function c(a,b){d.call(this,a,b,0,Number.MAX_VALUE),this.contactPointA=e.create(),this.penetrationVec=e.create(),this.contactPointB=e.create(),this.normalA=e.create(),this.restitution=0,this.firstImpact=!1,this.shapeA=null,this.shapeB=null}var d=a("./Equation"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.constructor=c,c.prototype.computeB=function(a,b,c){var d=this.bodyA,f=this.bodyB,g=this.contactPointA,h=this.contactPointB,i=d.position,j=f.position,k=this.penetrationVec,l=this.normalA,m=this.G,n=e.crossLength(g,l),o=e.crossLength(h,l);m[0]=-l[0],m[1]=-l[1],m[2]=-n,m[3]=l[0],m[4]=l[1],m[5]=o,e.add(k,j,h),e.sub(k,k,i),e.sub(k,k,g);var p,q;this.firstImpact&&0!==this.restitution?(q=0,p=1/b*(1+this.restitution)*this.computeGW()):(q=e.dot(l,k),p=this.computeGW());var r=this.computeGiMf(),s=-q*a-p*b-c*r;return s}},{"../math/vec2":30,"./Equation":22}],22:[function(a,b){function c(a,b,d,e){this.minForce="undefined"==typeof d?-Number.MAX_VALUE:d,this.maxForce="undefined"==typeof e?Number.MAX_VALUE:e,this.bodyA=a,this.bodyB=b,this.stiffness=c.DEFAULT_STIFFNESS,this.relaxation=c.DEFAULT_RELAXATION,this.G=new h.ARRAY_TYPE(6);for(var f=0;6>f;f++)this.G[f]=0;this.offset=0,this.a=0,this.b=0,this.epsilon=0,this.timeStep=1/60,this.needsUpdate=!0,this.multiplier=0,this.relativeVelocity=0,this.enabled=!0}function d(a,b,c,d,e){return a[0]*b[0]+a[1]*b[1]+a[2]*c+a[3]*d[0]+a[4]*d[1]+a[5]*e}function e(a){return a.sleepState===i.SLEEPING?0:a.invMass}function f(a){return a.sleepState===i.SLEEPING?0:a.invInertia}b.exports=c;var g=a("../math/vec2"),h=a("../utils/Utils"),i=a("../objects/Body");c.prototype.constructor=c,c.DEFAULT_STIFFNESS=1e6,c.DEFAULT_RELAXATION=4,c.prototype.update=function(){var a=this.stiffness,b=this.relaxation,c=this.timeStep;this.a=4/(c*(1+4*b)),this.b=4*b/(1+4*b),this.epsilon=4/(c*c*a*(1+4*b)),this.needsUpdate=!1},c.prototype.computeB=function(a,b,c){var d=this.computeGW(),e=this.computeGq(),f=this.computeGiMf();return-e*a-d*b-f*c};var j=g.create(),k=g.create();c.prototype.computeGq=function(){var a=this.G,b=this.bodyA,c=this.bodyB,e=(b.position,c.position,b.angle),f=c.angle;return d(a,j,e,k,f)+this.offset};g.create(),g.create();c.prototype.transformedGmult=function(a,b,c,e,f){return d(a,b,c,e,f)},c.prototype.computeGW=function(){var a=this.G,b=this.bodyA,c=this.bodyB,d=b.velocity,e=c.velocity,f=b.angularVelocity,g=c.angularVelocity;return this.transformedGmult(a,d,f,e,g)+this.relativeVelocity},c.prototype.computeGWlambda=function(){var a=this.G,b=this.bodyA,c=this.bodyB,e=b.vlambda,f=c.vlambda,g=b.wlambda,h=c.wlambda;return d(a,e,g,f,h)};var l=g.create(),m=g.create();c.prototype.computeGiMf=function(){var a=this.bodyA,b=this.bodyB,c=a.force,d=a.angularForce,h=b.force,i=b.angularForce,j=e(a),k=e(b),n=f(a),o=f(b),p=this.G;return g.scale(l,c,j),g.scale(m,h,k),this.transformedGmult(p,l,d*n,m,i*o)},c.prototype.computeGiMGt=function(){var a=this.bodyA,b=this.bodyB,c=e(a),d=e(b),g=f(a),h=f(b),i=this.G;return i[0]*i[0]*c+i[1]*i[1]*c+i[2]*i[2]*g+i[3]*i[3]*d+i[4]*i[4]*d+i[5]*i[5]*h};{var n=g.create(),o=g.create(),p=g.create();g.create(),g.create(),g.create()}c.prototype.addToWlambda=function(a){var b=this.bodyA,c=this.bodyB,d=n,h=o,i=p,j=e(b),k=e(c),l=f(b),m=f(c),q=this.G;h[0]=q[0],h[1]=q[1],i[0]=q[3],i[1]=q[4],g.scale(d,h,j*a),g.add(b.vlambda,b.vlambda,d),b.wlambda+=l*q[2]*a,g.scale(d,i,k*a),g.add(c.vlambda,c.vlambda,d),c.wlambda+=m*q[5]*a},c.prototype.computeInvC=function(a){return 1/(this.computeGiMGt()+a)}},{"../math/vec2":30,"../objects/Body":31,"../utils/Utils":45}],23:[function(a,b){function c(a,b,c){e.call(this,a,b,-c,c),this.contactPointA=d.create(),this.contactPointB=d.create(),this.t=d.create(),this.contactEquation=null,this.shapeA=null,this.shapeB=null,this.frictionCoefficient=.3}{var d=a("../math/vec2"),e=a("./Equation");a("../utils/Utils")}b.exports=c,c.prototype=new e,c.prototype.constructor=c,c.prototype.setSlipForce=function(a){this.maxForce=a,this.minForce=-a},c.prototype.getSlipForce=function(){return this.maxForce},c.prototype.computeB=function(a,b,c){var e=(this.bodyA,this.bodyB,this.contactPointA),f=this.contactPointB,g=this.t,h=this.G;h[0]=-g[0],h[1]=-g[1],h[2]=-d.crossLength(e,g),h[3]=g[0],h[4]=g[1],h[5]=d.crossLength(f,g);var i=this.computeGW(),j=this.computeGiMf(),k=-i*b-c*j;return k}},{"../math/vec2":30,"../utils/Utils":45,"./Equation":22}],24:[function(a,b){function c(a,b,c){c=c||{},d.call(this,a,b,-Number.MAX_VALUE,Number.MAX_VALUE),this.angle=c.angle||0;var e=this.G;e[2]=1,e[5]=-1}var d=a("./Equation"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.constructor=c;var f=e.create(),g=e.create(),h=e.fromValues(1,0),i=e.fromValues(0,1);c.prototype.computeGq=function(){return e.rotate(f,h,this.bodyA.angle+this.angle),e.rotate(g,i,this.bodyB.angle),e.dot(f,g)}},{"../math/vec2":30,"./Equation":22}],25:[function(a,b){function c(a,b){d.call(this,a,b,-Number.MAX_VALUE,Number.MAX_VALUE),this.relativeVelocity=1,this.ratio=1}{var d=a("./Equation");a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.constructor=c,c.prototype.computeB=function(a,b,c){var d=this.G;d[2]=-1,d[5]=this.ratio;var e=this.computeGiMf(),f=this.computeGW(),g=-f*b-c*e;return g}},{"../math/vec2":30,"./Equation":22}],26:[function(a,b){var c=function(){};b.exports=c,c.prototype={constructor:c,on:function(a,b,c){b.context=c||this,void 0===this._listeners&&(this._listeners={});var d=this._listeners;return void 0===d[a]&&(d[a]=[]),-1===d[a].indexOf(b)&&d[a].push(b),this},has:function(a,b){if(void 0===this._listeners)return!1;var c=this._listeners;return void 0!==c[a]&&-1!==c[a].indexOf(b)?!0:!1},off:function(a,b){if(void 0===this._listeners)return this;var c=this._listeners,d=c[a].indexOf(b);return-1!==d&&c[a].splice(d,1),this},emit:function(a){if(void 0===this._listeners)return this;var b=this._listeners,c=b[a.type];if(void 0!==c){a.target=this;for(var d=0,e=c.length;e>d;d++){var f=c[d];f.call(f.context,a)}}return this}}},{}],27:[function(a,b){function c(a,b,f){if(f=f||{},!(a instanceof d&&b instanceof d))throw new Error("First two arguments must be Material instances.");this.id=c.idCounter++,this.materialA=a,this.materialB=b,this.friction="undefined"!=typeof f.friction?Number(f.friction):.3,this.restitution="undefined"!=typeof f.restitution?Number(f.restitution):0,this.stiffness="undefined"!=typeof f.stiffness?Number(f.stiffness):e.DEFAULT_STIFFNESS,this.relaxation="undefined"!=typeof f.relaxation?Number(f.relaxation):e.DEFAULT_RELAXATION,this.frictionStiffness="undefined"!=typeof f.frictionStiffness?Number(f.frictionStiffness):e.DEFAULT_STIFFNESS,this.frictionRelaxation="undefined"!=typeof f.frictionRelaxation?Number(f.frictionRelaxation):e.DEFAULT_RELAXATION,this.surfaceVelocity="undefined"!=typeof f.surfaceVelocity?Number(f.surfaceVelocity):0}var d=a("./Material"),e=a("../equations/Equation");b.exports=c,c.idCounter=0},{"../equations/Equation":22,"./Material":28}],28:[function(a,b){function c(){this.id=c.idCounter++}b.exports=c,c.idCounter=0},{}],29:[function(a,b){var c={};c.GetArea=function(a){if(a.length<6)return 0;for(var b=a.length-2,c=0,d=0;b>d;d+=2)c+=(a[d+2]-a[d])*(a[d+1]+a[d+3]);return c+=(a[0]-a[b])*(a[b+1]+a[1]),.5*-c},c.Triangulate=function(a){var b=a.length>>1;if(3>b)return[];for(var d=[],e=[],f=0;b>f;f++)e.push(f);for(var f=0,g=b;g>3;){var h=e[(f+0)%g],i=e[(f+1)%g],j=e[(f+2)%g],k=a[2*h],l=a[2*h+1],m=a[2*i],n=a[2*i+1],o=a[2*j],p=a[2*j+1],q=!1;if(c._convex(k,l,m,n,o,p)){q=!0;for(var r=0;g>r;r++){var s=e[r];if(s!=h&&s!=i&&s!=j&&c._PointInTriangle(a[2*s],a[2*s+1],k,l,m,n,o,p)){q=!1;break}}}if(q)d.push(h,i,j),e.splice((f+1)%g,1),g--,f=0;else if(f++>3*g)break}return d.push(e[0],e[1],e[2]),d},c._PointInTriangle=function(a,b,c,d,e,f,g,h){var i=g-c,j=h-d,k=e-c,l=f-d,m=a-c,n=b-d,o=i*i+j*j,p=i*k+j*l,q=i*m+j*n,r=k*k+l*l,s=k*m+l*n,t=1/(o*r-p*p),u=(r*q-p*s)*t,v=(o*s-p*q)*t;return u>=0&&v>=0&&1>u+v},c._convex=function(a,b,c,d,e,f){return(b-d)*(e-c)+(c-a)*(f-d)>=0},b.exports=c},{}],30:[function(a,b){var c=a("../../build/vec2").vec2;c.crossLength=function(a,b){return a[0]*b[1]-a[1]*b[0]},c.crossVZ=function(a,b,d){return c.rotate(a,b,-Math.PI/2),c.scale(a,a,d),a},c.crossZV=function(a,b,d){return c.rotate(a,d,Math.PI/2),c.scale(a,a,b),a},c.rotate=function(a,b,c){var d=Math.cos(c),e=Math.sin(c),f=b[0],g=b[1];a[0]=d*f-e*g,a[1]=e*f+d*g},c.toLocalFrame=function(a,b,d,e){c.copy(a,b),c.sub(a,a,d),c.rotate(a,a,-e)},c.toGlobalFrame=function(a,b,d,e){c.copy(a,b),c.rotate(a,a,e),c.add(a,a,d)},c.centroid=function(a,b,d,e){return c.add(a,b,d),c.add(a,a,e),c.scale(a,a,1/3),a},b.exports=c},{"../../build/vec2":1}],31:[function(a,b){function c(a){a=a||{},h.call(this),this.id=++c._idCounter,this.world=null,this.shapes=[],this.shapeOffsets=[],this.shapeAngles=[],this.mass=a.mass||0,this.invMass=0,this.inertia=0,this.invInertia=0,this.fixedRotation=!!a.fixedRotation||!1,this.position=d.fromValues(0,0),a.position&&d.copy(this.position,a.position),this.interpolatedPosition=d.fromValues(0,0),this.interpolatedAngle=0,this.previousPosition=d.fromValues(0,0),this.previousAngle=0,this.velocity=d.fromValues(0,0),a.velocity&&d.copy(this.velocity,a.velocity),this.vlambda=d.fromValues(0,0),this.wlambda=0,this.angle=a.angle||0,this.angularVelocity=a.angularVelocity||0,this.force=d.create(),a.force&&d.copy(this.force,a.force),this.angularForce=a.angularForce||0,this.damping="number"==typeof a.damping?a.damping:.1,this.angularDamping="number"==typeof a.angularDamping?a.angularDamping:.1,this.motionState=0===this.mass?c.STATIC:c.DYNAMIC,this.boundingRadius=0,this.aabb=new g,this.aabbNeedsUpdate=!0,this.allowSleep=!0,this.wantsToSleep=!1,this.sleepState=c.AWAKE,this.sleepSpeedLimit=.2,this.sleepTimeLimit=1,this.gravityScale=1,this.timeLastSleepy=0,this.concavePath=null,this.lastDampingScale=1,this.lastAngularDampingScale=1,this.lastDampingTimeStep=-1,this.updateMassProperties()}var d=a("../math/vec2"),e=a("poly-decomp"),f=a("../shapes/Convex"),g=a("../collision/AABB"),h=a("../events/EventEmitter");b.exports=c,c.prototype=new h,c._idCounter=0,c.prototype.setDensity=function(a){var b=this.getArea();this.mass=b*a,this.updateMassProperties()},c.prototype.getArea=function(){for(var a=0,b=0;be&&(e=h+i)}this.boundingRadius=e},c.prototype.addShape=function(a,b,c){c=c||0,b=b?d.fromValues(b[0],b[1]):d.fromValues(0,0),this.shapes.push(a),this.shapeOffsets.push(b),this.shapeAngles.push(c),this.updateMassProperties(),this.updateBoundingRadius(),this.aabbNeedsUpdate=!0},c.prototype.removeShape=function(a){var b=this.shapes.indexOf(a);return-1!==b?(this.shapes.splice(b,1),this.shapeOffsets.splice(b,1),this.shapeAngles.splice(b,1),this.aabbNeedsUpdate=!0,!0):!1},c.prototype.updateMassProperties=function(){if(this.motionState===c.STATIC||this.motionState===c.KINEMATIC)this.mass=Number.MAX_VALUE,this.invMass=0,this.inertia=Number.MAX_VALUE,this.invInertia=0;else{var a=this.shapes,b=a.length,e=this.mass/b,f=0;if(this.fixedRotation)this.inertia=Number.MAX_VALUE,this.invInertia=0;else{for(var g=0;b>g;g++){var h=a[g],i=d.squaredLength(this.shapeOffsets[g]),j=h.computeMomentOfInertia(e);f+=j+e*i}this.inertia=f,this.invInertia=f>0?1/f:0}this.invMass=1/this.mass}};var k=d.create();c.prototype.applyForce=function(a,b){var c=k;d.sub(c,b,this.position),d.add(this.force,this.force,a);var e=d.crossLength(c,a);this.angularForce+=e},c.prototype.toLocalFrame=function(a,b){d.toLocalFrame(a,b,this.position,this.angle)},c.prototype.toWorldFrame=function(a,b){d.toGlobalFrame(a,b,this.position,this.angle)},c.prototype.fromPolygon=function(a,b){b=b||{};for(var c=this.shapes.length;c>=0;--c)this.removeShape(this.shapes[c]);var g=new e.Polygon;if(g.vertices=a,g.makeCCW(),"number"==typeof b.removeCollinearPoints&&g.removeCollinearPoints(b.removeCollinearPoints),"undefined"==typeof b.skipSimpleCheck&&!g.isSimple())return!1;this.concavePath=g.vertices.slice(0);for(var c=0;c=g?(this.idleTime=0,this.sleepState=c.AWAKE):(this.idleTime+=e,this.sleepState=c.SLEEPY),this.idleTime>this.sleepTimeLimit&&(b?this.wantsToSleep=!0:this.sleep())}},c.prototype.getVelocityFromPosition=function(a,b){return a=a||d.create(),d.sub(a,this.position,this.previousPosition),d.scale(a,a,1/b),a},c.prototype.getAngularVelocityFromPosition=function(a){return(this.angle-this.previousAngle)/a},c.sleepyEvent={type:"sleepy"},c.sleepEvent={type:"sleep"},c.wakeUpEvent={type:"wakeup"},c.DYNAMIC=1,c.STATIC=2,c.KINEMATIC=4,c.AWAKE=0,c.SLEEPY=1,c.SLEEPING=2},{"../collision/AABB":8,"../events/EventEmitter":26,"../math/vec2":30,"../shapes/Convex":36,"poly-decomp":6}],32:[function(a,b){function c(a,b,c){c=c||{},this.restLength="number"==typeof c.restLength?c.restLength:1,this.stiffness=c.stiffness||100,this.damping=c.damping||1,this.bodyA=a,this.bodyB=b,this.localAnchorA=d.fromValues(0,0),this.localAnchorB=d.fromValues(0,0),c.localAnchorA&&d.copy(this.localAnchorA,c.localAnchorA),c.localAnchorB&&d.copy(this.localAnchorB,c.localAnchorB),c.worldAnchorA&&this.setWorldAnchorA(c.worldAnchorA),c.worldAnchorB&&this.setWorldAnchorB(c.worldAnchorB)}var d=a("../math/vec2");b.exports=c,c.prototype.setWorldAnchorA=function(a){this.bodyA.toLocalFrame(this.localAnchorA,a)},c.prototype.setWorldAnchorB=function(a){this.bodyB.toLocalFrame(this.localAnchorB,a)},c.prototype.getWorldAnchorA=function(a){this.bodyA.toWorldFrame(a,this.localAnchorA)},c.prototype.getWorldAnchorB=function(a){this.bodyB.toWorldFrame(a,this.localAnchorB)};var e=d.create(),f=d.create(),g=d.create(),h=d.create(),i=d.create(),j=d.create(),k=d.create(),l=d.create(),m=d.create();c.prototype.applyForce=function(){var a=this.stiffness,b=this.damping,c=this.restLength,n=this.bodyA,o=this.bodyB,p=e,q=f,r=g,s=h,t=m,u=i,v=j,w=k,x=l;this.getWorldAnchorA(u),this.getWorldAnchorB(v),d.sub(w,u,n.position),d.sub(x,v,o.position),d.sub(p,v,u);var y=d.len(p);d.normalize(q,p),d.sub(r,o.velocity,n.velocity),d.crossZV(t,o.angularVelocity,x),d.add(r,r,t),d.crossZV(t,n.angularVelocity,w),d.sub(r,r,t),d.scale(s,q,-a*(y-c)-b*d.dot(r,q)),d.sub(n.force,n.force,s),d.add(o.force,o.force,s);var z=d.crossLength(w,s),A=d.crossLength(x,s);n.angularForce-=z,o.angularForce+=A}},{"../math/vec2":30}],33:[function(a,b){b.exports={AABB:a("./collision/AABB"),AngleLockEquation:a("./equations/AngleLockEquation"),Body:a("./objects/Body"),Broadphase:a("./collision/Broadphase"),Capsule:a("./shapes/Capsule"),Circle:a("./shapes/Circle"),Constraint:a("./constraints/Constraint"),ContactEquation:a("./equations/ContactEquation"),ContactMaterial:a("./material/ContactMaterial"),Convex:a("./shapes/Convex"),DistanceConstraint:a("./constraints/DistanceConstraint"),Equation:a("./equations/Equation"),EventEmitter:a("./events/EventEmitter"),FrictionEquation:a("./equations/FrictionEquation"),GearConstraint:a("./constraints/GearConstraint"),GridBroadphase:a("./collision/GridBroadphase"),GSSolver:a("./solver/GSSolver"),Heightfield:a("./shapes/Heightfield"),Line:a("./shapes/Line"),LockConstraint:a("./constraints/LockConstraint"),Material:a("./material/Material"),Narrowphase:a("./collision/Narrowphase"),NaiveBroadphase:a("./collision/NaiveBroadphase"),Particle:a("./shapes/Particle"),Plane:a("./shapes/Plane"),RevoluteConstraint:a("./constraints/RevoluteConstraint"),PrismaticConstraint:a("./constraints/PrismaticConstraint"),Rectangle:a("./shapes/Rectangle"),RotationalVelocityEquation:a("./equations/RotationalVelocityEquation"),SAPBroadphase:a("./collision/SAPBroadphase"),Shape:a("./shapes/Shape"),Solver:a("./solver/Solver"),Spring:a("./objects/Spring"),Utils:a("./utils/Utils"),World:a("./world/World"),vec2:a("./math/vec2"),version:a("../package.json").version} -},{"../package.json":7,"./collision/AABB":8,"./collision/Broadphase":9,"./collision/GridBroadphase":10,"./collision/NaiveBroadphase":11,"./collision/Narrowphase":12,"./collision/SAPBroadphase":13,"./constraints/Constraint":14,"./constraints/DistanceConstraint":15,"./constraints/GearConstraint":16,"./constraints/LockConstraint":17,"./constraints/PrismaticConstraint":18,"./constraints/RevoluteConstraint":19,"./equations/AngleLockEquation":20,"./equations/ContactEquation":21,"./equations/Equation":22,"./equations/FrictionEquation":23,"./equations/RotationalVelocityEquation":25,"./events/EventEmitter":26,"./material/ContactMaterial":27,"./material/Material":28,"./math/vec2":30,"./objects/Body":31,"./objects/Spring":32,"./shapes/Capsule":34,"./shapes/Circle":35,"./shapes/Convex":36,"./shapes/Heightfield":37,"./shapes/Line":38,"./shapes/Particle":39,"./shapes/Plane":40,"./shapes/Rectangle":41,"./shapes/Shape":42,"./solver/GSSolver":43,"./solver/Solver":44,"./utils/Utils":45,"./world/World":49}],34:[function(a,b){function c(a,b){this.length=a||1,this.radius=b||1,d.call(this,d.CAPSULE)}var d=a("./Shape"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.computeMomentOfInertia=function(a){var b=this.radius,c=this.length+b,d=2*b;return a*(d*d+c*c)/12},c.prototype.updateBoundingRadius=function(){this.boundingRadius=this.radius+this.length/2},c.prototype.updateArea=function(){this.area=Math.PI*this.radius*this.radius+2*this.radius*this.length};var f=e.create();c.prototype.computeAABB=function(a,b,c){var d=this.radius;e.set(f,this.length,0),e.rotate(f,f,c),e.set(a.upperBound,Math.max(f[0]+d,-f[0]+d),Math.max(f[1]+d,-f[1]+d)),e.set(a.lowerBound,Math.min(f[0]-d,-f[0]-d),Math.min(f[1]-d,-f[1]-d)),e.add(a.lowerBound,a.lowerBound,b),e.add(a.upperBound,a.upperBound,b)}},{"../math/vec2":30,"./Shape":42}],35:[function(a,b){function c(a){this.radius=a||1,d.call(this,d.CIRCLE)}var d=a("./Shape"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.computeMomentOfInertia=function(a){var b=this.radius;return a*b*b/2},c.prototype.updateBoundingRadius=function(){this.boundingRadius=this.radius},c.prototype.updateArea=function(){this.area=Math.PI*this.radius*this.radius},c.prototype.computeAABB=function(a,b){var c=this.radius;e.set(a.upperBound,c,c),e.set(a.lowerBound,-c,-c),b&&(e.add(a.lowerBound,a.lowerBound,b),e.add(a.upperBound,a.upperBound,b))}},{"../math/vec2":30,"./Shape":42}],36:[function(a,b){function c(a){this.vertices=[];for(var b=0;bg;f=g,g++){var h=this.vertices[f],i=this.vertices[g],j=Math.abs(e.crossLength(h,i)),k=e.dot(i,i)+e.dot(i,h)+e.dot(h,h);b+=j*k,c+=j}return a/6*(b/c)},c.prototype.updateBoundingRadius=function(){for(var a=this.vertices,b=0,c=0;c!==a.length;c++){var d=e.squaredLength(a[c]);d>b&&(b=d)}this.boundingRadius=Math.sqrt(b)},c.triangleArea=function(a,b,c){return.5*((b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1]))},c.prototype.updateArea=function(){this.updateTriangles(),this.area=0;for(var a=this.triangles,b=this.vertices,d=0;d!==a.length;d++){var e=a[d],f=b[e[0]],g=b[e[1]],h=b[e[2]],i=c.triangleArea(f,g,h);this.area+=i}},c.prototype.computeAABB=function(a,b,c){a.setFromPoints(this.vertices,b,c)}},{"../math/polyk":29,"../math/vec2":30,"./Shape":42,"poly-decomp":6}],37:[function(a,b){function c(a,b,c){this.data=a,this.maxValue=b,this.elementWidth=c,d.call(this,d.HEIGHTFIELD)}{var d=a("./Shape");a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.computeMomentOfInertia=function(){return Number.MAX_VALUE},c.prototype.updateBoundingRadius=function(){this.boundingRadius=Number.MAX_VALUE},c.prototype.updateArea=function(){for(var a=this.data,b=0,c=0;c=v*v)break}for(w=0;w!==l;w++){var y=k[w];if(y instanceof h){var z=y.contactEquation.multiplier*y.frictionCoefficient;y.maxForce=z,y.minForce=-z}}}for(f=0;f!==i;f++){for(v=0,w=0;w!==l;w++){u=k[w];var x=c.iterateEquation(w,u,u.epsilon,s,r,q,p,a,f);v+=Math.abs(x)}if(this.usedIterations++,m>=v*v)break}for(t=0;t!==o;t++)n[t].addConstraintVelocity()}},c.iterateEquation=function(a,b,c,d,e,f,g,h){var i=d[a],j=e[a],k=f[a],l=b.computeGWlambda(),m=b.maxForce,n=b.minForce;g&&(i=0);var o=j*(i-l-c*k),p=k+o;return n*h>p?o=n*h-k:p>m*h&&(o=m*h-k),f[a]+=o,b.multiplier=f[a]/h,b.addToWlambda(o),o}},{"../equations/FrictionEquation":23,"../math/vec2":30,"../utils/Utils":45,"./Solver":44}],44:[function(a,b){function c(a,b){a=a||{},d.call(this),this.type=b,this.equations=[],this.equationSortFunction=a.equationSortFunction||!1}var d=(a("../utils/Utils"),a("../events/EventEmitter"));b.exports=c,c.prototype=new d,c.prototype.solve=function(){throw new Error("Solver.solve should be implemented by subclasses!")};var e={bodies:[]};c.prototype.solveIsland=function(a,b){this.removeAllEquations(),b.equations.length&&(this.addEquations(b.equations),e.bodies.length=0,b.getBodies(e.bodies),e.bodies.length&&this.solve(a,e))},c.prototype.sortEquations=function(){this.equationSortFunction&&this.equations.sort(this.equationSortFunction)},c.prototype.addEquation=function(a){a.enabled&&this.equations.push(a)},c.prototype.addEquations=function(a){for(var b=0,c=a.length;b!==c;b++){var d=a[b];d.enabled&&this.equations.push(d)}},c.prototype.removeEquation=function(a){var b=this.equations.indexOf(a);-1!==b&&this.equations.splice(b,1)},c.prototype.removeAllEquations=function(){this.equations.length=0},c.GS=1,c.ISLAND=2},{"../events/EventEmitter":26,"../utils/Utils":45}],45:[function(a,b){function c(){}b.exports=c,c.appendArray=function(a,b){if(b.length<15e4)a.push.apply(a,b);else for(var c=0,d=b.length;c!==d;++c)a.push(b[c])},c.splice=function(a,b,c){c=c||1;for(var d=b,e=a.length-c;e>d;d++)a[d]=a[d+c];a.length=e},c.ARRAY_TYPE=Float32Array||Array,c.extend=function(a,b){for(var c in b)a[c]=b[c]}},{}],46:[function(a,b){function c(){this.equations=[],this.bodies=[]}var d=a("../objects/Body");b.exports=c,c.prototype.reset=function(){this.equations.length=this.bodies.length=0};var e=[];c.prototype.getBodies=function(a){var b=a||[],c=this.equations;e.length=0;for(var d=0;d!==c.length;d++){var f=c[d];-1===e.indexOf(f.bodyA.id)&&(b.push(f.bodyA),e.push(f.bodyA.id)),-1===e.indexOf(f.bodyB.id)&&(b.push(f.bodyB),e.push(f.bodyB.id))}return b},c.prototype.wantsToSleep=function(){for(var a=0;ae;e++)this.internalStep(a);this.time+=b;for(var f=this.time%a,g=0;g!==this.bodies.length;g++){var h=this.bodies[g];h.motionState!==s.STATIC&&h.sleepState!==s.SLEEPING?(j.sub(N,h.position,h.previousPosition),j.scale(N,N,f/a),j.add(h.interpolatedPosition,h.position,N),h.interpolatedAngle=h.angle+(h.angle-h.previousAngle)*f/a):(j.copy(h.interpolatedPosition,h.position),h.interpolatedAngle=h.angle)}}},c.prototype.internalStep=function(a){this.stepping=!0;var b,d,e=this,f=this.doProfiling,g=this.springs.length,h=this.springs,i=this.bodies,k=this.gravity,l=this.solver,m=this.bodies.length,n=this.broadphase,o=this.narrowphase,p=this.constraints,q=K,r=(j.scale,j.add),t=(j.rotate,this.islandManager);if(this.lastTimeStep=a,f&&(b=performance.now()),this.useWorldGravityAsFrictionGravity){var u=j.length(this.gravity);0===u&&this.useFrictionGravityOnZeroGravity||(this.frictionGravity=u)}if(this.applyGravity)for(var v=0;v!==m;v++){var w=i[v],x=w.force;w.motionState===s.DYNAMIC&&w.sleepState!==s.SLEEPING&&(j.scale(q,k,w.mass*w.gravityScale),r(x,x,q))}if(this.applySpringForces)for(var v=0;v!==g;v++){var y=h[v];y.applyForce()}if(this.applyDamping)for(var v=0;v!==m;v++){var w=i[v];w.motionState===s.DYNAMIC&&w.applyDamping(a)}for(var z=n.getCollisionPairs(this),A=this.disabledBodyCollisionPairs,v=A.length-2;v>=0;v-=2)for(var B=z.length-2;B>=0;B-=2)(A[v]===z[B]&&A[v+1]===z[B+1]||A[v+1]===z[B]&&A[v]===z[B+1])&&z.splice(B,2);var C=p.length;for(v=0;v!==C;v++){var D=p[v];if(!D.collideConnected)for(var B=z.length-2;B>=0;B-=2)(D.bodyA===z[B]&&D.bodyB===z[B+1]||D.bodyB===z[B]&&D.bodyA===z[B+1])&&z.splice(B,2)}this.postBroadphaseEvent.pairs=z,this.emit(this.postBroadphaseEvent),o.reset(this);for(var v=0,E=z.length;v!==E;v+=2)for(var F=z[v],G=z[v+1],I=0,J=F.shapes.length;I!==J;I++)for(var L=F.shapes[I],M=F.shapeOffsets[I],N=F.shapeAngles[I],O=0,P=G.shapes.length;O!==P;O++){var Q=G.shapes[O],R=G.shapeOffsets[O],S=G.shapeAngles[O],T=this.defaultContactMaterial;if(L.material&&Q.material){var U=this.getContactMaterial(L.material,Q.material);U&&(T=U)}this.runNarrowphase(o,F,L,M,N,G,Q,R,S,T,this.frictionGravity)}for(var V=this.overlappingShapesLastState,v=0;v!==V.keys.length;v++){var W=V.keys[v];if(V[W]===!0&&!this.overlappingShapesCurrentState[W]){var X=this.endContactEvent;X.shapeA=V[W+"_shapeA"],X.shapeB=V[W+"_shapeB"],X.bodyA=V[W+"_bodyA"],X.bodyB=V[W+"_bodyB"],this.emit(X)}}for(var v=0;v!==V.keys.length;v++)delete V[V.keys[v]];V.keys.length=0;for(var Y=this.overlappingShapesCurrentState,v=0;v!==Y.keys.length;v++)V[Y.keys[v]]=Y[Y.keys[v]],V.keys.push(Y.keys[v]);for(var v=0;v!==Y.keys.length;v++)delete Y[Y.keys[v]];Y.keys.length=0;var Z=this.preSolveEvent;Z.contactEquations=o.contactEquations,Z.frictionEquations=o.frictionEquations,this.emit(Z);var C=p.length;for(v=0;v!==C;v++)p[v].update();if(o.contactEquations.length||o.frictionEquations.length||p.length)if(this.islandSplit){for(t.equations.length=0,H.appendArray(t.equations,o.contactEquations),H.appendArray(t.equations,o.frictionEquations),v=0;v!==C;v++)H.appendArray(t.equations,p[v].equations);t.split(this);for(var v=0;v!==t.islands.length;v++){var $=t.islands[v];$.equations.length&&l.solveIsland(a,$)}}else{for(l.addEquations(o.contactEquations),l.addEquations(o.frictionEquations),v=0;v!==C;v++)l.addEquations(p[v].equations);this.solveConstraints&&l.solve(a,this),l.removeAllEquations()}for(var v=0;v!==m;v++){var _=i[v];_.sleepState!==s.SLEEPING&&_.motionState!==s.STATIC&&c.integrateBody(_,a)}for(var v=0;v!==m;v++)i[v].setZeroForce();if(f&&(d=performance.now(),e.lastStepTime=d-b),this.emitImpactEvent)for(var ab=this.impactEvent,v=0;v!==o.contactEquations.length;v++){var bb=o.contactEquations[v];bb.firstImpact&&(ab.bodyA=bb.bodyA,ab.bodyB=bb.bodyB,ab.shapeA=bb.shapeA,ab.shapeB=bb.shapeB,ab.contactEquation=bb,this.emit(ab))}if(this.enableBodySleeping)for(v=0;v!==m;v++)i[v].sleepTick(this.time,!1,a);else if(this.enableIslandSleeping&&this.islandSplit){for(v=0;v!==m;v++)i[v].sleepTick(this.time,!0,a);for(var v=0;v0,a.frictionCoefficient=k.friction;var o;o=b.motionState===s.STATIC||b.motionState===s.KINEMATIC?f.mass:f.motionState===s.STATIC||f.motionState===s.KINEMATIC?b.mass:b.mass*f.mass/(b.mass+f.mass),a.slipForce=k.friction*l*o,a.restitution=k.restitution,a.surfaceVelocity=k.surfaceVelocity,a.frictionStiffness=k.frictionStiffness,a.frictionRelaxation=k.frictionRelaxation,a.stiffness=k.stiffness,a.relaxation=k.relaxation;var p=a[c.type|g.type],q=0;if(p){var r=c.sensor||g.sensor,t=a.frictionEquations.length;q=c.type=2*A&&(v=!0),f.allowSleep&&f.motionState===s.DYNAMIC&&f.sleepState===s.SLEEPING&&b.sleepState===s.AWAKE&&b.motionState!==s.STATIC&&x>=2*y&&(w=!0),v&&b.wakeUp(),w&&f.wakeUp();var B=c.id1)for(var D=a.frictionEquations.length-u;D=0;b--)this.removeConstraint(a[b]);for(var d=this.bodies,b=d.length-1;b>=0;b--)this.removeBody(d[b]);for(var e=this.springs,b=e.length-1;b>=0;b--)this.removeSpring(e[b]);for(var f=this.contactMaterials,b=f.length-1;b>=0;b--)this.removeContactMaterial(f[b]);c.apply(this)},c.prototype.clone=function(){var a=new c;return a.fromJSON(this.toJSON()),a};var Q=j.create(),R=j.fromValues(0,0),S=j.fromValues(0,0);c.prototype.hitTest=function(a,b,c){c=c||0;var d=new s({position:a}),e=new q,f=a,g=0,h=Q,i=R,l=S;d.addShape(e);for(var n=this.narrowphase,r=[],t=0,u=b.length;t!==u;t++)for(var v=b[t],w=0,x=v.shapes.length;w!==x;w++){var y=v.shapes[w],z=v.shapeOffsets[w]||i,A=v.shapeAngles[w]||0;j.rotate(h,z,v.angle),j.add(h,h,v.position);var B=A+v.angle;(y instanceof k&&n.circleParticle(v,y,h,B,d,e,f,g,!0)||y instanceof m&&n.particleConvex(d,e,f,g,v,y,h,B,!0)||y instanceof o&&n.particlePlane(d,e,f,g,v,y,h,B,!0)||y instanceof p&&n.particleCapsule(d,e,f,g,v,y,h,B,!0)||y instanceof q&&j.squaredLength(j.sub(l,h,a))0&&this.enable(a[d],b,!0));else a instanceof Phaser.Group?this.enable(a.children,b,c):(this.enableBody(a,b),c&&a.hasOwnProperty("children")&&a.children.length>0&&this.enable(a.children,b,!0))},enableBody:function(a,b){a.hasOwnProperty("body")&&null===a.body&&(a.body=new Phaser.Physics.P2.Body(this.game,a,a.x,a.y,1),a.body.debug=b,a.anchor.set(.5))},setImpactEvents:function(a){a?this.world.on("impact",this.impactHandler,this):this.world.off("impact",this.impactHandler,this)},setPostBroadphaseCallback:function(a,b){this.postBroadphaseCallback=a,this.callbackContext=b,null!==a?this.world.on("postBroadphase",this.postBroadphaseHandler,this):this.world.off("postBroadphase",this.postBroadphaseHandler,this)},postBroadphaseHandler:function(a){if(this.postBroadphaseCallback)for(var b=a.pairs.length;b-=2;)a.pairs[b].parent&&a.pairs[b+1].parent&&!this.postBroadphaseCallback.call(this.callbackContext,a.pairs[b].parent,a.pairs[b+1].parent)&&a.pairs.splice(b,2)},impactHandler:function(a){if(a.bodyA.parent&&a.bodyB.parent){var b=a.bodyA.parent,c=a.bodyB.parent;b._bodyCallbacks[a.bodyB.id]&&b._bodyCallbacks[a.bodyB.id].call(b._bodyCallbackContext[a.bodyB.id],b,c,a.shapeA,a.shapeB),c._bodyCallbacks[a.bodyA.id]&&c._bodyCallbacks[a.bodyA.id].call(c._bodyCallbackContext[a.bodyA.id],c,b,a.shapeB,a.shapeA),b._groupCallbacks[a.shapeB.collisionGroup]&&b._groupCallbacks[a.shapeB.collisionGroup].call(b._groupCallbackContext[a.shapeB.collisionGroup],b,c,a.shapeA,a.shapeB),c._groupCallbacks[a.shapeA.collisionGroup]&&c._groupCallbacks[a.shapeA.collisionGroup].call(c._groupCallbackContext[a.shapeA.collisionGroup],c,b,a.shapeB,a.shapeA)}},beginContactHandler:function(a){this.onBeginContact.dispatch(a.bodyA,a.bodyB,a.shapeA,a.shapeB,a.contactEquations),a.bodyA.parent&&a.bodyA.parent.onBeginContact.dispatch(a.bodyB.parent,a.shapeA,a.shapeB,a.contactEquations),a.bodyB.parent&&a.bodyB.parent.onBeginContact.dispatch(a.bodyA.parent,a.shapeB,a.shapeA,a.contactEquations)},endContactHandler:function(a){this.onEndContact.dispatch(a.bodyA,a.bodyB,a.shapeA,a.shapeB),a.bodyA.parent&&a.bodyA.parent.onEndContact.dispatch(a.bodyB.parent,a.shapeA,a.shapeB),a.bodyB.parent&&a.bodyB.parent.onEndContact.dispatch(a.bodyA.parent,a.shapeB,a.shapeA)},setBoundsToWorld:function(a,b,c,d,e){this.setBounds(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,a,b,c,d,e)},setWorldMaterial:function(a,b,c,d,e){"undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=!0),b&&this.walls.left&&(this.walls.left.shapes[0].material=a),c&&this.walls.right&&(this.walls.right.shapes[0].material=a),d&&this.walls.top&&(this.walls.top.shapes[0].material=a),e&&this.walls.bottom&&(this.walls.bottom.shapes[0].material=a)},updateBoundsCollisionGroup:function(a){var b=this.everythingCollisionGroup.mask;"undefined"==typeof a&&(b=this.boundsCollisionGroup.mask),this.walls.left&&(this.walls.left.shapes[0].collisionGroup=b),this.walls.right&&(this.walls.right.shapes[0].collisionGroup=b),this.walls.top&&(this.walls.top.shapes[0].collisionGroup=b),this.walls.bottom&&(this.walls.bottom.shapes[0].collisionGroup=b)},setBounds:function(a,b,c,d,e,f,g,h,i){"undefined"==typeof e&&(e=!0),"undefined"==typeof f&&(f=!0),"undefined"==typeof g&&(g=!0),"undefined"==typeof h&&(h=!0),"undefined"==typeof i&&(i=!0),this.walls.left&&this.world.removeBody(this.walls.left),this.walls.right&&this.world.removeBody(this.walls.right),this.walls.top&&this.world.removeBody(this.walls.top),this.walls.bottom&&this.world.removeBody(this.walls.bottom),e&&(this.walls.left=new p2.Body({mass:0,position:[this.pxmi(a),this.pxmi(b)],angle:1.5707963267948966}),this.walls.left.addShape(new p2.Plane),i&&(this.walls.left.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.left)),f&&(this.walls.right=new p2.Body({mass:0,position:[this.pxmi(a+c),this.pxmi(b)],angle:-1.5707963267948966}),this.walls.right.addShape(new p2.Plane),i&&(this.walls.right.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.right)),g&&(this.walls.top=new p2.Body({mass:0,position:[this.pxmi(a),this.pxmi(b)],angle:-3.141592653589793}),this.walls.top.addShape(new p2.Plane),i&&(this.walls.top.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.top)),h&&(this.walls.bottom=new p2.Body({mass:0,position:[this.pxmi(a),this.pxmi(d)]}),this.walls.bottom.addShape(new p2.Plane),i&&(this.walls.bottom.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.bottom))},pause:function(){this.paused=!0},resume:function(){this.paused=!1},update:function(){this.paused||this.world.step(this.useElapsedTime?this.game.time.physicsElapsed:this.frameRate)},clear:function(){this.world.clear(),this.world.off("beginContact",this.beginContactHandler,this),this.world.off("endContact",this.endContactHandler,this),this.postBroadphaseCallback=null,this.callbackContext=null,this.impactCallback=null,this.collisionGroups=[],this._toRemove=[],this._collisionGroupID=2,this.boundsCollidesWith=[]},destroy:function(){this.clear(),this.game=null},addBody:function(a){return a.data.world?!1:(this.world.addBody(a.data),this.onBodyAdded.dispatch(a),!0)},removeBody:function(a){return a.data.world==this.world&&(this.world.removeBody(a.data),this.onBodyRemoved.dispatch(a)),a},addSpring:function(a){return this.world.addSpring(a),this.onSpringAdded.dispatch(a),a},removeSpring:function(a){return this.world.removeSpring(a),this.onSpringRemoved.dispatch(a),a},createDistanceConstraint:function(a,b,c,d){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.DistanceConstraint(this,a,b,c,d)):void console.warn("Cannot create Constraint, invalid body objects given")},createGearConstraint:function(a,b,c,d){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.GearConstraint(this,a,b,c,d)):void console.warn("Cannot create Constraint, invalid body objects given")},createRevoluteConstraint:function(a,b,c,d,e){return a=this.getBody(a),c=this.getBody(c),a&&c?this.addConstraint(new Phaser.Physics.P2.RevoluteConstraint(this,a,b,c,d,e)):void console.warn("Cannot create Constraint, invalid body objects given")},createLockConstraint:function(a,b,c,d,e){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.LockConstraint(this,a,b,c,d,e)):void console.warn("Cannot create Constraint, invalid body objects given")},createPrismaticConstraint:function(a,b,c,d,e,f,g){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.PrismaticConstraint(this,a,b,c,d,e,f,g)):void console.warn("Cannot create Constraint, invalid body objects given")},addConstraint:function(a){return this.world.addConstraint(a),this.onConstraintAdded.dispatch(a),a},removeConstraint:function(a){return this.world.removeConstraint(a),this.onConstraintRemoved.dispatch(a),a},addContactMaterial:function(a){return this.world.addContactMaterial(a),this.onContactMaterialAdded.dispatch(a),a},removeContactMaterial:function(a){return this.world.removeContactMaterial(a),this.onContactMaterialRemoved.dispatch(a),a},getContactMaterial:function(a,b){return this.world.getContactMaterial(a,b)},setMaterial:function(a,b){for(var c=b.length;c--;)b[c].setMaterial(a)},createMaterial:function(a,b){a=a||"";var c=new Phaser.Physics.P2.Material(a);return this.materials.push(c),"undefined"!=typeof b&&b.setMaterial(c),c},createContactMaterial:function(a,b,c){"undefined"==typeof a&&(a=this.createMaterial()),"undefined"==typeof b&&(b=this.createMaterial());var d=new Phaser.Physics.P2.ContactMaterial(a,b,c);return this.addContactMaterial(d)},getBodies:function(){for(var a=[],b=this.world.bodies.length;b--;)a.push(this.world.bodies[b].parent);return a},getBody:function(a){return a instanceof p2.Body?a:a instanceof Phaser.Physics.P2.Body?a.data:a.body&&a.body.type===Phaser.Physics.P2JS?a.body.data:null},getSprings:function(){for(var a=[],b=this.world.springs.length;b--;)a.push(this.world.springs[b].parent);return a},getConstraints:function(){for(var a=[],b=this.world.constraints.length;b--;)a.push(this.world.constraints[b].parent);return a},hitTest:function(a,b,c,d){"undefined"==typeof b&&(b=this.world.bodies),"undefined"==typeof c&&(c=5),"undefined"==typeof d&&(d=!1);for(var e=[this.pxmi(a.x),this.pxmi(a.y)],f=[],g=b.length;g--;)b[g]instanceof Phaser.Physics.P2.Body&&(!d||b[g].data.motionState!==p2.Body.STATIC)?f.push(b[g].data):b[g]instanceof p2.Body&&b[g].parent&&(!d||b[g].motionState!==p2.Body.STATIC)?f.push(b[g]):b[g]instanceof Phaser.Sprite&&b[g].hasOwnProperty("body")&&(!d||b[g].body.data.motionState!==p2.Body.STATIC)&&f.push(b[g].body.data);return this.world.hitTest(e,f,c)},toJSON:function(){return this.world.toJSON()},createCollisionGroup:function(a){var b=Math.pow(2,this._collisionGroupID);this.walls.left&&(this.walls.left.shapes[0].collisionMask=this.walls.left.shapes[0].collisionMask|b),this.walls.right&&(this.walls.right.shapes[0].collisionMask=this.walls.right.shapes[0].collisionMask|b),this.walls.top&&(this.walls.top.shapes[0].collisionMask=this.walls.top.shapes[0].collisionMask|b),this.walls.bottom&&(this.walls.bottom.shapes[0].collisionMask=this.walls.bottom.shapes[0].collisionMask|b),this._collisionGroupID++;var c=new Phaser.Physics.P2.CollisionGroup(b);return this.collisionGroups.push(c),a&&this.setCollisionGroup(a,c),c},setCollisionGroup:function(a,b){if(a instanceof Phaser.Group)for(var c=0;ce;e++){var g=a.collision[b][e],h=this.createBody(g.x,g.y,0,c,{},g.polyline);h&&d.push(h)}return d},clearTilemapLayerBodies:function(a,b){b=a.getLayer(b);for(var c=a.layers[b].bodies.length;c--;)a.layers[b].bodies[c].destroy();a.layers[b].bodies.length=[]},convertTilemap:function(a,b,c,d){b=a.getLayer(b),"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!0),this.clearTilemapLayerBodies(a,b);for(var e=0,f=0,g=0,h=0,i=a.layers[b].height;i>h;h++){e=0;for(var j=0,k=a.layers[b].width;k>j;j++){var l=a.layers[b].data[h][j];if(l&&l.collides)if(d){var m=a.getTileRight(b,j,h);if(0===e&&(f=l.x*l.width,g=l.y*l.height,e=l.width),m&&m.collides)e+=l.width;else{var n=this.createBody(f,g,0,!1);n.addRectangle(e,l.height,e/2,l.height/2,0),c&&this.addBody(n),a.layers[b].bodies.push(n),e=0}}else{var n=this.createBody(l.x*l.width,l.y*l.height,0,!1);n.addRectangle(l.width,l.height,l.width/2,l.height/2,0),c&&this.addBody(n),a.layers[b].bodies.push(n)}}}return a.layers[b].bodies},mpx:function(a){return a*=20},pxm:function(a){return.05*a},mpxi:function(a){return a*=-20},pxmi:function(a){return a*-.05}},Object.defineProperty(Phaser.Physics.P2.prototype,"friction",{get:function(){return this.world.defaultContactMaterial.friction},set:function(a){this.world.defaultContactMaterial.friction=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"defaultFriction",{get:function(){return this.world.defaultContactMaterial.friction},set:function(a){this.world.defaultContactMaterial.friction=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"restitution",{get:function(){return this.world.defaultContactMaterial.restitution},set:function(a){this.world.defaultContactMaterial.restitution=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"defaultRestitution",{get:function(){return this.world.defaultContactMaterial.restitution},set:function(a){this.world.defaultContactMaterial.restitution=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"contactMaterial",{get:function(){return this.world.defaultContactMaterial},set:function(a){this.world.defaultContactMaterial=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"applySpringForces",{get:function(){return this.world.applySpringForces},set:function(a){this.world.applySpringForces=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"applyDamping",{get:function(){return this.world.applyDamping},set:function(a){this.world.applyDamping=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"applyGravity",{get:function(){return this.world.applyGravity},set:function(a){this.world.applyGravity=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"solveConstraints",{get:function(){return this.world.solveConstraints},set:function(a){this.world.solveConstraints=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"time",{get:function(){return this.world.time}}),Object.defineProperty(Phaser.Physics.P2.prototype,"emitImpactEvent",{get:function(){return this.world.emitImpactEvent},set:function(a){this.world.emitImpactEvent=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"enableBodySleeping",{get:function(){return this.world.enableBodySleeping},set:function(a){this.world.enableBodySleeping=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"total",{get:function(){return this.world.bodies.length}}),Phaser.Physics.P2.FixtureList=function(a){Array.isArray(a)||(a=[a]),this.rawList=a,this.init(),this.parse(this.rawList)},Phaser.Physics.P2.FixtureList.prototype={init:function(){this.namedFixtures={},this.groupedFixtures=[],this.allFixtures=[]},setCategory:function(a,b){var c=function(b){b.collisionGroup=a};this.getFixtures(b).forEach(c)},setMask:function(a,b){var c=function(b){b.collisionMask=a};this.getFixtures(b).forEach(c)},setSensor:function(a,b){var c=function(b){b.sensor=a};this.getFixtures(b).forEach(c)},setMaterial:function(a,b){var c=function(b){b.material=a};this.getFixtures(b).forEach(c)},getFixtures:function(a){var b=[];if(a){a instanceof Array||(a=[a]);var c=this;return a.forEach(function(a){c.namedFixtures[a]&&b.push(c.namedFixtures[a])}),this.flatten(b)}return this.allFixtures},getFixtureByKey:function(a){return this.namedFixtures[a]},getGroup:function(a){return this.groupedFixtures[a]},parse:function(){var a,b,c,d;c=this.rawList,d=[];for(a in c)b=c[a],isNaN(a-0)?this.namedFixtures[a]=this.flatten(b):(this.groupedFixtures[a]=this.groupedFixtures[a]||[],this.groupedFixtures[a]=this.groupedFixtures[a].concat(b)),d.push(this.allFixtures=this.flatten(this.groupedFixtures))},flatten:function(a){var b,c;return b=[],c=arguments.callee,a.forEach(function(a){return Array.prototype.push.apply(b,Array.isArray(a)?c(a):[a])}),b}},Phaser.Physics.P2.PointProxy=function(a,b){this.world=a,this.destination=b},Phaser.Physics.P2.PointProxy.prototype.constructor=Phaser.Physics.P2.PointProxy,Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype,"x",{get:function(){return this.destination[0]},set:function(a){this.destination[0]=this.world.pxm(a)}}),Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype,"y",{get:function(){return this.destination[1]},set:function(a){this.destination[1]=this.world.pxm(a)}}),Phaser.Physics.P2.InversePointProxy=function(a,b){this.world=a,this.destination=b},Phaser.Physics.P2.InversePointProxy.prototype.constructor=Phaser.Physics.P2.InversePointProxy,Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype,"x",{get:function(){return this.destination[0]},set:function(a){this.destination[0]=this.world.pxm(-a)}}),Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype,"y",{get:function(){return this.destination[1]},set:function(a){this.destination[1]=this.world.pxm(-a)}}),Phaser.Physics.P2.Body=function(a,b,c,d,e){b=b||null,c=c||0,d=d||0,"undefined"==typeof e&&(e=1),this.game=a,this.world=a.physics.p2,this.sprite=b,this.type=Phaser.Physics.P2JS,this.offset=new Phaser.Point,this.data=new p2.Body({position:[this.world.pxmi(c),this.world.pxmi(d)],mass:e}),this.data.parent=this,this.velocity=new Phaser.Physics.P2.InversePointProxy(this.world,this.data.velocity),this.force=new Phaser.Physics.P2.InversePointProxy(this.world,this.data.force),this.gravity=new Phaser.Point,this.onBeginContact=new Phaser.Signal,this.onEndContact=new Phaser.Signal,this.collidesWith=[],this.removeNextStep=!1,this.debugBody=null,this._collideWorldBounds=!0,this._bodyCallbacks={},this._bodyCallbackContext={},this._groupCallbacks={},this._groupCallbackContext={},b&&(this.setRectangleFromSprite(b),b.exists&&this.game.physics.p2.addBody(this))},Phaser.Physics.P2.Body.prototype={createBodyCallback:function(a,b,c){var d=-1;a.id?d=a.id:a.body&&(d=a.body.id),d>-1&&(null===b?(delete this._bodyCallbacks[d],delete this._bodyCallbackContext[d]):(this._bodyCallbacks[d]=b,this._bodyCallbackContext[d]=c))},createGroupCallback:function(a,b,c){null===b?(delete this._groupCallbacks[a.mask],delete this._groupCallbacksContext[a.mask]):(this._groupCallbacks[a.mask]=b,this._groupCallbackContext[a.mask]=c)},getCollisionMask:function(){var a=0;this._collideWorldBounds&&(a=this.game.physics.p2.boundsCollisionGroup.mask);for(var b=0;b=0;c--)this.data.shapes[c].collisionMask=b;else a.collisionMask=b},setCollisionGroup:function(a,b){var c=this.getCollisionMask();if("undefined"==typeof b)for(var d=this.data.shapes.length-1;d>=0;d--)this.data.shapes[d].collisionGroup=a.mask,this.data.shapes[d].collisionMask=c;else b.collisionGroup=a.mask,b.collisionMask=c},clearCollision:function(a,b,c){if("undefined"==typeof c)for(var d=this.data.shapes.length-1;d>=0;d--)a&&(this.data.shapes[d].collisionGroup=null),b&&(this.data.shapes[d].collisionMask=null);else a&&(c.collisionGroup=null),b&&(c.collisionMask=null);a&&(this.collidesWith.length=0)},collides:function(a,b,c,d){if(Array.isArray(a))for(var e=0;e=0;e--)this.data.shapes[e].collisionMask=f;else d.collisionMask=f},adjustCenterOfMass:function(){this.data.adjustCenterOfMass()},applyDamping:function(a){this.data.applyDamping(a)},applyForce:function(a,b,c){this.data.applyForce(a,[this.world.pxm(b),this.world.pxm(c)])},setZeroForce:function(){this.data.setZeroForce()},setZeroRotation:function(){this.data.angularVelocity=0},setZeroVelocity:function(){this.data.velocity[0]=0,this.data.velocity[1]=0},setZeroDamping:function(){this.data.damping=0,this.data.angularDamping=0},toLocalFrame:function(a,b){return this.data.toLocalFrame(a,b)},toWorldFrame:function(a,b){return this.data.toWorldFrame(a,b)},rotateLeft:function(a){this.data.angularVelocity=this.world.pxm(-a)},rotateRight:function(a){this.data.angularVelocity=this.world.pxm(a)},moveForward:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.velocity[0]=b*Math.cos(c),this.data.velocity[1]=b*Math.sin(c)},moveBackward:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.velocity[0]=-(b*Math.cos(c)),this.data.velocity[1]=-(b*Math.sin(c))},thrust:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.force[0]+=b*Math.cos(c),this.data.force[1]+=b*Math.sin(c)},reverse:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.force[0]-=b*Math.cos(c),this.data.force[1]-=b*Math.sin(c)},moveLeft:function(a){this.data.velocity[0]=this.world.pxmi(-a)},moveRight:function(a){this.data.velocity[0]=this.world.pxmi(a)},moveUp:function(a){this.data.velocity[1]=this.world.pxmi(-a)},moveDown:function(a){this.data.velocity[1]=this.world.pxmi(a)},preUpdate:function(){this.removeNextStep&&(this.removeFromWorld(),this.removeNextStep=!1)},postUpdate:function(){this.sprite.x=this.world.mpxi(this.data.position[0]),this.sprite.y=this.world.mpxi(this.data.position[1]),this.fixedRotation||(this.sprite.rotation=this.data.angle)},reset:function(a,b,c,d){"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1),this.setZeroForce(),this.setZeroVelocity(),this.setZeroRotation(),c&&this.setZeroDamping(),d&&(this.mass=1),this.x=a,this.y=b},addToWorld:function(){this.data.world!==this.game.physics.p2.world&&this.game.physics.p2.addBody(this)},removeFromWorld:function(){this.data.world===this.game.physics.p2.world&&this.game.physics.p2.removeBodyNextStep(this)},destroy:function(){this.removeFromWorld(),this.clearShapes(),this._bodyCallbacks={},this._bodyCallbackContext={},this._groupCallbacks={},this._groupCallbackContext={},this.debugBody&&this.debugBody.destroy(),this.debugBody=null,this.sprite=null},clearShapes:function(){for(var a=this.data.shapes.length;a--;)this.data.removeShape(this.data.shapes[a]);this.shapeChanged()},addShape:function(a,b,c,d){return"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),"undefined"==typeof d&&(d=0),this.data.addShape(a,[this.world.pxmi(b),this.world.pxmi(c)],d),this.shapeChanged(),a},addCircle:function(a,b,c,d){var e=new p2.Circle(this.world.pxm(a));return this.addShape(e,b,c,d)},addRectangle:function(a,b,c,d,e){var f=new p2.Rectangle(this.world.pxm(a),this.world.pxm(b));return this.addShape(f,c,d,e)},addPlane:function(a,b,c){var d=new p2.Plane;return this.addShape(d,a,b,c)},addParticle:function(a,b,c){var d=new p2.Particle;return this.addShape(d,a,b,c)},addLine:function(a,b,c,d){var e=new p2.Line(this.world.pxm(a));return this.addShape(e,b,c,d)},addCapsule:function(a,b,c,d,e){var f=new p2.Capsule(this.world.pxm(a),b);return this.addShape(f,c,d,e)},addPolygon:function(a,b){a=a||{},b=Array.prototype.slice.call(arguments,1);var c=[];if(1===b.length&&Array.isArray(b[0]))c=b[0].slice(0);else if(Array.isArray(b[0]))c=b[0].slice(0);else if("number"==typeof b[0])for(var d=0,e=b.length;e>d;d+=2)c.push([b[d],b[d+1]]);var f=c.length-1;c[f][0]===c[0][0]&&c[f][1]===c[0][1]&&c.pop();for(var g=0;g=0;c--)this.data.shapes[c].material=a;else b.material=a},shapeChanged:function(){this.debugBody&&this.debugBody.draw()},addPhaserPolygon:function(a,b){for(var c=this.game.cache.getPhysicsData(a,b),d=[],e=0;e=0?o>n:n>o;e=o>=0?++n:--n)k=b.vertices[e],p2.vec2.rotate(m,k,a),l.push([(m[0]+i[0])*this.ppu,-(m[1]+i[1])*this.ppu]);this.drawConvex(j,l,b.triangles,f,c,g,this.settings.debugPolygons,[i[0]*this.ppu,-i[1]*this.ppu])}else b instanceof p2.Plane?this.drawPlane(j,i[0]*this.ppu,-i[1]*this.ppu,c,f,5*g,10*g,10*g,100*this.ppu,a):b instanceof p2.Line?this.drawLine(j,b.length*this.ppu,f,g):b instanceof p2.Rectangle&&this.drawRectangle(j,i[0]*this.ppu,-i[1]*this.ppu,a,b.width*this.ppu,b.height*this.ppu,f,c,g);d++}}},drawRectangle:function(a,b,c,d,e,f,g,h,i){"undefined"==typeof i&&(i=1),"undefined"==typeof g&&(g=0),a.lineStyle(i,g,1),a.beginFill(h),a.drawRect(b-e/2,c-f/2,e,f)},drawCircle:function(a,b,c,d,e,f,g){"undefined"==typeof g&&(g=1),"undefined"==typeof f&&(f=16777215),a.lineStyle(g,0,1),a.beginFill(f,1),a.drawCircle(b,c,-e),a.endFill(),a.moveTo(b,c),a.lineTo(b+e*Math.cos(-d),c+e*Math.sin(-d))},drawLine:function(a,b,c,d){"undefined"==typeof d&&(d=1),"undefined"==typeof c&&(c=0),a.lineStyle(5*d,c,1),a.moveTo(-b/2,0),a.lineTo(b/2,0)},drawConvex:function(a,b,c,d,e,f,g,h){var i,j,k,l,m,n,o,p,q,r,s;if("undefined"==typeof f&&(f=1),"undefined"==typeof d&&(d=0),g){for(i=[16711680,65280,255],j=0;j!==b.length+1;)l=b[j%b.length],m=b[(j+1)%b.length],o=l[0],r=l[1],p=m[0],s=m[1],a.lineStyle(f,i[j%i.length],1),a.moveTo(o,-r),a.lineTo(p,-s),a.drawCircle(o,-r,2*f),j++;return a.lineStyle(f,0,1),a.drawCircle(h[0],h[1],2*f)}for(a.lineStyle(f,d,1),a.beginFill(e),j=0;j!==b.length;)k=b[j],n=k[0],q=k[1],0===j?a.moveTo(n,-q):a.lineTo(n,-q),j++;return a.endFill(),b.length>2?(a.moveTo(b[b.length-1][0],-b[b.length-1][1]),a.lineTo(b[0][0],-b[0][1])):void 0},drawPath:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;for("undefined"==typeof e&&(e=1),"undefined"==typeof c&&(c=0),a.lineStyle(e,c,1),"number"==typeof d&&a.beginFill(d),h=null,i=null,g=0;g2&&"number"==typeof d&&(a.moveTo(b[b.length-1][0],b[b.length-1][1]),a.lineTo(b[0][0],b[0][1]))},drawPlane:function(a,b,c,d,e,f,g,h,i,j){var k,l,m;"undefined"==typeof f&&(f=1),"undefined"==typeof d&&(d=16777215),a.lineStyle(f,e,11),a.beginFill(d),k=i,a.moveTo(b,-c),l=b+Math.cos(j)*this.game.width,m=c+Math.sin(j)*this.game.height,a.lineTo(l,-m),a.moveTo(b,-c),l=b+Math.cos(j)*-this.game.width,m=c+Math.sin(j)*-this.game.height,a.lineTo(l,-m)},randomPastelHex:function(){var a,b,c,d;return c=[255,255,255],d=Math.floor(256*Math.random()),b=Math.floor(256*Math.random()),a=Math.floor(256*Math.random()),d=Math.floor((d+3*c[0])/4),b=Math.floor((b+3*c[1])/4),a=Math.floor((a+3*c[2])/4),this.rgbToHex(d,b,a)},rgbToHex:function(a,b,c){return this.componentToHex(a)+this.componentToHex(b)+this.componentToHex(c)},componentToHex:function(a){var b;return b=a.toString(16),2===b.len?b:b+"0"}}),Phaser.Physics.P2.Spring=function(a,b,c,d,e,f,g,h,i,j){this.game=a.game,this.world=a,"undefined"==typeof d&&(d=1),"undefined"==typeof e&&(e=100),"undefined"==typeof f&&(f=1),d=a.pxm(d);var k={restLength:d,stiffness:e,damping:f};"undefined"!=typeof g&&null!==g&&(k.worldAnchorA=[a.pxm(g[0]),a.pxm(g[1])]),"undefined"!=typeof h&&null!==h&&(k.worldAnchorB=[a.pxm(h[0]),a.pxm(h[1])]),"undefined"!=typeof i&&null!==i&&(k.localAnchorA=[a.pxm(i[0]),a.pxm(i[1])]),"undefined"!=typeof j&&null!==j&&(k.localAnchorB=[a.pxm(j[0]),a.pxm(j[1])]),p2.Spring.call(this,b,c,k)},Phaser.Physics.P2.Spring.prototype=Object.create(p2.Spring.prototype),Phaser.Physics.P2.Spring.prototype.constructor=Phaser.Physics.P2.Spring,Phaser.Physics.P2.Material=function(a){this.name=a,p2.Material.call(this)},Phaser.Physics.P2.Material.prototype=Object.create(p2.Material.prototype),Phaser.Physics.P2.Material.prototype.constructor=Phaser.Physics.P2.Material,Phaser.Physics.P2.ContactMaterial=function(a,b,c){p2.ContactMaterial.call(this,a,b,c)},Phaser.Physics.P2.ContactMaterial.prototype=Object.create(p2.ContactMaterial.prototype),Phaser.Physics.P2.ContactMaterial.prototype.constructor=Phaser.Physics.P2.ContactMaterial,Phaser.Physics.P2.CollisionGroup=function(a){this.mask=a},Phaser.Physics.P2.DistanceConstraint=function(a,b,c,d,e){"undefined"==typeof d&&(d=100),this.game=a.game,this.world=a,d=a.pxm(d),p2.DistanceConstraint.call(this,b,c,d,e)},Phaser.Physics.P2.DistanceConstraint.prototype=Object.create(p2.DistanceConstraint.prototype),Phaser.Physics.P2.DistanceConstraint.prototype.constructor=Phaser.Physics.P2.DistanceConstraint,Phaser.Physics.P2.GearConstraint=function(a,b,c,d,e){"undefined"==typeof d&&(d=0),"undefined"==typeof e&&(e=1),this.game=a.game,this.world=a;var f={angle:d,ratio:e};p2.GearConstraint.call(this,b,c,f)},Phaser.Physics.P2.GearConstraint.prototype=Object.create(p2.GearConstraint.prototype),Phaser.Physics.P2.GearConstraint.prototype.constructor=Phaser.Physics.P2.GearConstraint,Phaser.Physics.P2.LockConstraint=function(a,b,c,d,e,f){"undefined"==typeof d&&(d=[0,0]),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=Number.MAX_VALUE),this.game=a.game,this.world=a,d=[a.pxm(d[0]),a.pxm(d[1])];var g={localOffsetB:d,localAngleB:e,maxForce:f};p2.LockConstraint.call(this,b,c,g)},Phaser.Physics.P2.LockConstraint.prototype=Object.create(p2.LockConstraint.prototype),Phaser.Physics.P2.LockConstraint.prototype.constructor=Phaser.Physics.P2.LockConstraint,Phaser.Physics.P2.PrismaticConstraint=function(a,b,c,d,e,f,g,h){"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=[0,0]),"undefined"==typeof f&&(f=[0,0]),"undefined"==typeof g&&(g=[0,0]),"undefined"==typeof h&&(h=Number.MAX_VALUE),this.game=a.game,this.world=a,e=[a.pxmi(e[0]),a.pxmi(e[1])],f=[a.pxmi(f[0]),a.pxmi(f[1])];var i={localAnchorA:e,localAnchorB:f,localAxisA:g,maxForce:h,disableRotationalLock:!d};p2.PrismaticConstraint.call(this,b,c,i)},Phaser.Physics.P2.PrismaticConstraint.prototype=Object.create(p2.PrismaticConstraint.prototype),Phaser.Physics.P2.PrismaticConstraint.prototype.constructor=Phaser.Physics.P2.PrismaticConstraint,Phaser.Physics.P2.RevoluteConstraint=function(a,b,c,d,e,f){"undefined"==typeof f&&(f=Number.MAX_VALUE),this.game=a.game,this.world=a,c=[a.pxmi(c[0]),a.pxmi(c[1])],e=[a.pxmi(e[0]),a.pxmi(e[1])],p2.RevoluteConstraint.call(this,b,c,d,e,f)},Phaser.Physics.P2.RevoluteConstraint.prototype=Object.create(p2.RevoluteConstraint.prototype),Phaser.Physics.P2.RevoluteConstraint.prototype.constructor=Phaser.Physics.P2.RevoluteConstraint; \ No newline at end of file +!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define("p2",function(){return this.p2=a()}()):"undefined"!=typeof window?window.p2=a():"undefined"!=typeof global?self.p2=a():"undefined"!=typeof self&&(self.p2=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g0&&(e=1/Math.sqrt(e),a[0]=b[0]*e,a[1]=b[1]*e),a},g.dot=function(a,b){return a[0]*b[0]+a[1]*b[1]},g.cross=function(a,b,c){var d=b[0]*c[1]-b[1]*c[0];return a[0]=a[1]=0,a[2]=d,a},g.lerp=function(a,b,c,d){var e=b[0],f=b[1];return a[0]=e+d*(c[0]-e),a[1]=f+d*(c[1]-f),a},g.transformMat2=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[2]*e,a[1]=c[1]*d+c[3]*e,a},g.transformMat2d=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[2]*e+c[4],a[1]=c[1]*d+c[3]*e+c[5],a},g.transformMat3=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[3]*e+c[6],a[1]=c[1]*d+c[4]*e+c[7],a},g.transformMat4=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[4]*e+c[12],a[1]=c[1]*d+c[5]*e+c[13],a},g.forEach=function(){var a=g.create();return function(b,c,d,e,f,g){var h,i;for(c||(c=2),d||(d=0),i=e?Math.min(e*c+d,b.length):b.length,h=d;i>h;h+=c)a[0]=b[h],a[1]=b[h+1],f(a,a,g),b[h]=a[0],b[h+1]=a[1];return b}}(),g.str=function(a){return"vec2("+a[0]+", "+a[1]+")"},"undefined"!=typeof c&&(c.vec2=g)},{}],2:[function(a,b){function c(){}var d=a("./Scalar");b.exports=c,c.lineInt=function(a,b,c){c=c||0;var e,f,g,h,i,j,k,l=[0,0];return e=a[1][1]-a[0][1],f=a[0][0]-a[1][0],g=e*a[0][0]+f*a[0][1],h=b[1][1]-b[0][1],i=b[0][0]-b[1][0],j=h*b[0][0]+i*b[0][1],k=e*i-h*f,d.eq(k,0,c)||(l[0]=(i*g-f*j)/k,l[1]=(e*j-h*g)/k),l},c.segmentsIntersect=function(a,b,c,d){var e=b[0]-a[0],f=b[1]-a[1],g=d[0]-c[0],h=d[1]-c[1];if(g*f-h*e==0)return!1;var i=(e*(c[1]-a[1])+f*(a[0]-c[0]))/(g*f-h*e),j=(g*(a[1]-c[1])+h*(c[0]-a[0]))/(h*e-g*f);return i>=0&&1>=i&&j>=0&&1>=j}},{"./Scalar":5}],3:[function(a,b){function c(){}b.exports=c,c.area=function(a,b,c){return(b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1])},c.left=function(a,b,d){return c.area(a,b,d)>0},c.leftOn=function(a,b,d){return c.area(a,b,d)>=0},c.right=function(a,b,d){return c.area(a,b,d)<0},c.rightOn=function(a,b,d){return c.area(a,b,d)<=0};var d=[],e=[];c.collinear=function(a,b,f,g){if(g){var h=d,i=e;h[0]=b[0]-a[0],h[1]=b[1]-a[1],i[0]=f[0]-b[0],i[1]=f[1]-b[1];var j=h[0]*i[0]+h[1]*i[1],k=Math.sqrt(h[0]*h[0]+h[1]*h[1]),l=Math.sqrt(i[0]*i[0]+i[1]*i[1]),m=Math.acos(j/(k*l));return g>m}return 0==c.area(a,b,f)},c.sqdist=function(a,b){var c=b[0]-a[0],d=b[1]-a[1];return c*c+d*d}},{}],4:[function(a,b){function c(){this.vertices=[]}function d(a,b,c,d,e){e=e||0;var f=b[1]-a[1],h=a[0]-b[0],i=f*a[0]+h*a[1],j=d[1]-c[1],k=c[0]-d[0],l=j*c[0]+k*c[1],m=f*k-j*h;return g.eq(m,0,e)?[0,0]:[(k*i-h*l)/m,(f*l-j*i)/m]}var e=a("./Line"),f=a("./Point"),g=a("./Scalar");b.exports=c,c.prototype.at=function(a){var b=this.vertices,c=b.length;return b[0>a?a%c+c:a%c]},c.prototype.first=function(){return this.vertices[0]},c.prototype.last=function(){return this.vertices[this.vertices.length-1]},c.prototype.clear=function(){this.vertices.length=0},c.prototype.append=function(a,b,c){if("undefined"==typeof b)throw new Error("From is not given!");if("undefined"==typeof c)throw new Error("To is not given!");if(b>c-1)throw new Error("lol1");if(c>a.vertices.length)throw new Error("lol2");if(0>b)throw new Error("lol3");for(var d=b;c>d;d++)this.vertices.push(a.vertices[d])},c.prototype.makeCCW=function(){for(var a=0,b=this.vertices,c=1;cb[a][0])&&(a=c);f.left(this.at(a-1),this.at(a),this.at(a+1))||this.reverse()},c.prototype.reverse=function(){for(var a=[],b=0,c=this.vertices.length;b!==c;b++)a.push(this.vertices.pop());this.vertices=a},c.prototype.isReflex=function(a){return f.right(this.at(a-1),this.at(a),this.at(a+1))};var h=[],i=[];c.prototype.canSee=function(a,b){var c,d,g=h,j=i;if(f.leftOn(this.at(a+1),this.at(a),this.at(b))&&f.rightOn(this.at(a-1),this.at(a),this.at(b)))return!1;d=f.sqdist(this.at(a),this.at(b));for(var k=0;k!==this.vertices.length;++k)if((k+1)%this.vertices.length!==a&&k!==a&&f.leftOn(this.at(a),this.at(b),this.at(k+1))&&f.rightOn(this.at(a),this.at(b),this.at(k))&&(g[0]=this.at(a),g[1]=this.at(b),j[0]=this.at(k),j[1]=this.at(k+1),c=e.lineInt(g,j),f.sqdist(this.at(a),c)a)for(var f=a;b>=f;f++)e.vertices.push(this.vertices[f]);else{for(var f=0;b>=f;f++)e.vertices.push(this.vertices[f]);for(var f=a;f0?this.slice(a):[this]},c.prototype.slice=function(a){if(0==a.length)return[this];if(a instanceof Array&&a.length&&a[0]instanceof Array&&2==a[0].length&&a[0][0]instanceof Array){for(var b=[this],c=0;cc;c++)if(e.segmentsIntersect(a[b],a[b+1],a[c],a[c+1]))return!1;for(var b=1;bh)return console.warn("quickDecomp: max level ("+h+") reached."),a;for(var x=0;xo&&(n=o,k=l,r=y))),f.left(v.at(x+1),v.at(x),v.at(y+1))&&f.rightOn(v.at(x+1),v.at(x),v.at(y))&&(l=d(v.at(x+1),v.at(x),v.at(y),v.at(y+1)),f.left(v.at(x-1),v.at(x),l)&&(o=f.sqdist(v.vertices[x],l),m>o&&(m=o,j=l,q=y)));if(r==(q+1)%this.vertices.length)l[0]=(k[0]+j[0])/2,l[1]=(k[1]+j[1])/2,e.push(l),q>x?(t.append(v,x,q+1),t.vertices.push(l),u.vertices.push(l),0!=r&&u.append(v,r,v.vertices.length),u.append(v,0,x+1)):(0!=x&&t.append(v,x,v.vertices.length),t.append(v,0,q+1),t.vertices.push(l),u.vertices.push(l),u.append(v,r,x+1));else{if(r>q&&(q+=this.vertices.length),p=Number.MAX_VALUE,r>q)return a;for(var y=r;q>=y;++y)f.leftOn(v.at(x-1),v.at(x),v.at(y))&&f.rightOn(v.at(x+1),v.at(x),v.at(y))&&(o=f.sqdist(v.at(x),v.at(y)),p>o&&(p=o,s=y%this.vertices.length));s>x?(t.append(v,x,s+1),0!=s&&u.append(v,s,w.length),u.append(v,0,x+1)):(0!=x&&t.append(v,x,w.length),t.append(v,0,s+1),u.append(v,s,x+1))}return t.vertices.length3&&c>=0;--c)f.collinear(this.at(c-1),this.at(c),this.at(c+1),a)&&(this.vertices.splice(c%this.vertices.length,1),c--,b++);return b}},{"./Line":2,"./Point":3,"./Scalar":5}],5:[function(a,b){function c(){}b.exports=c,c.eq=function(a,b,c){return c=c||0,Math.abs(a-b) (http://steffe.se)",keywords:["p2.js","p2","physics","engine","2d"],main:"./src/p2.js",engines:{node:"*"},repository:{type:"git",url:"https://github.com/schteppe/p2.js.git"},bugs:{url:"https://github.com/schteppe/p2.js/issues"},licenses:[{type:"MIT"}],devDependencies:{grunt:"~0.4.0","grunt-contrib-jshint":"~0.9.2","grunt-contrib-nodeunit":"~0.1.2","grunt-contrib-uglify":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-browserify":"~2.0.1","z-schema":"~2.4.6"},dependencies:{"poly-decomp":"0.1.0","gl-matrix":"2.1.0"}}},{}],8:[function(a,b){function c(a){this.lowerBound=d.create(),a&&a.lowerBound&&d.copy(this.lowerBound,a.lowerBound),this.upperBound=d.create(),a&&a.upperBound&&d.copy(this.upperBound,a.upperBound)}{var d=a("../math/vec2");a("../utils/Utils")}b.exports=c;var e=d.create();c.prototype.setFromPoints=function(a,b,c){var f=this.lowerBound,g=this.upperBound;d.set(f,Number.MAX_VALUE,Number.MAX_VALUE),d.set(g,-Number.MAX_VALUE,-Number.MAX_VALUE);for(var h=0;hj;j++)i[j]>g[j]&&(g[j]=i[j]),i[j]b;b++)a.lowerBound[b]this.upperBound[b]&&(this.upperBound[b]=a.upperBound[b])},c.prototype.overlaps=function(a){var b=this.lowerBound,c=this.upperBound,d=a.lowerBound,e=a.upperBound;return(d[0]<=c[0]&&c[0]<=e[0]||b[0]<=e[0]&&e[0]<=c[0])&&(d[1]<=c[1]&&c[1]<=e[1]||b[1]<=e[1]&&e[1]<=c[1])}},{"../math/vec2":30,"../utils/Utils":47}],9:[function(a,b){function c(a){this.type=a,this.result=[],this.world=null,this.boundingVolumeType=c.AABB}var d=a("../math/vec2"),e=a("../objects/Body");b.exports=c,c.AABB=1,c.BOUNDING_CIRCLE=2,c.prototype.setWorld=function(a){this.world=a},c.prototype.getCollisionPairs=function(){throw new Error("getCollisionPairs must be implemented in a subclass!")};var f=d.create();c.boundingRadiusCheck=function(a,b){d.sub(f,a.position,b.position);var c=d.squaredLength(f),e=a.boundingRadius+b.boundingRadius;return e*e>=c},c.aabbCheck=function(a,b){return a.aabbNeedsUpdate&&a.updateAABB(),b.aabbNeedsUpdate&&b.updateAABB(),a.aabb.overlaps(b.aabb)},c.prototype.boundingVolumeCheck=function(a,b){var d;switch(this.boundingVolumeType){case c.BOUNDING_CIRCLE:d=c.boundingRadiusCheck(a,b);break;case c.AABB:d=c.aabbCheck(a,b);break;default:throw new Error("Bounding volume type not recognized: "+this.boundingVolumeType)}return d},c.canCollide=function(a,b){return a.motionState===e.STATIC&&b.motionState===e.STATIC?!1:a.motionState===e.KINEMATIC&&b.motionState===e.STATIC||a.motionState===e.STATIC&&b.motionState===e.KINEMATIC?!1:a.motionState===e.KINEMATIC&&b.motionState===e.KINEMATIC?!1:a.sleepState===e.SLEEPING&&b.sleepState===e.SLEEPING?!1:a.sleepState===e.SLEEPING&&b.motionState===e.STATIC||b.sleepState===e.SLEEPING&&a.motionState===e.STATIC?!1:!0},c.NAIVE=1,c.SAP=2},{"../math/vec2":30,"../objects/Body":31}],10:[function(a,b){function c(a){d.apply(this),a=e.defaults(a,{xmin:-100,xmax:100,ymin:-100,ymax:100,nx:10,ny:10}),this.xmin=a.xmin,this.ymin=a.ymin,this.xmax=a.xmax,this.ymax=a.ymax,this.nx=a.nx,this.ny=a.ny,this.binsizeX=(this.xmax-this.xmin)/this.nx,this.binsizeY=(this.ymax-this.ymin)/this.ny}var d=(a("../shapes/Circle"),a("../shapes/Plane"),a("../shapes/Particle"),a("../collision/Broadphase")),e=(a("../math/vec2"),a("../utils/Utils"));b.exports=c,c.prototype=new d,c.prototype.getCollisionPairs=function(a){for(var b=[],c=a.bodies,e=c.length,f=(this.binsizeX,this.binsizeY,this.nx),g=this.ny,h=this.xmin,i=this.ymin,j=this.xmax,k=this.ymax,l=[],m=f*g,n=0;m>n;n++)l.push([]);for(var o=f/(j-h),p=g/(k-i),n=0;n!==e;n++)for(var q=c[n],r=q.aabb,s=Math.max(r.lowerBound[0],h),t=Math.max(r.lowerBound[1],i),u=Math.min(r.upperBound[0],j),v=Math.min(r.upperBound[1],k),w=Math.floor(o*(s-h)),x=Math.floor(p*(t-i)),y=Math.floor(o*(u-h)),z=Math.floor(p*(v-i)),A=w;y>=A;A++)for(var B=x;z>=B;B++){var C=A,D=B,E=C*(g-1)+D;E>=0&&m>E&&l[E].push(q)}for(var n=0;n!==m;n++)for(var F=l[n],A=0,G=F.length;A!==G;A++)for(var q=F[A],B=0;B!==A;B++){var H=F[B];d.canCollide(q,H)&&this.boundingVolumeCheck(q,H)&&b.push(q,H)}return b}},{"../collision/Broadphase":9,"../math/vec2":30,"../shapes/Circle":35,"../shapes/Particle":39,"../shapes/Plane":40,"../utils/Utils":47}],11:[function(a,b){function c(){d.call(this,d.NAIVE)}{var d=(a("../shapes/Circle"),a("../shapes/Plane"),a("../shapes/Shape"),a("../shapes/Particle"),a("../collision/Broadphase"));a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.getCollisionPairs=function(a){var b=a.bodies,c=this.result;c.length=0;for(var e=0,f=b.length;e!==f;e++)for(var g=b[e],h=0;e>h;h++){var i=b[h];d.canCollide(g,i)&&this.boundingVolumeCheck(g,i)&&c.push(g,i)}return c}},{"../collision/Broadphase":9,"../math/vec2":30,"../shapes/Circle":35,"../shapes/Particle":39,"../shapes/Plane":40,"../shapes/Shape":42}],12:[function(a,b){function c(){this.contactEquations=[],this.frictionEquations=[],this.enableFriction=!0,this.slipForce=10,this.frictionCoefficient=.3,this.surfaceVelocity=0,this.reuseObjects=!0,this.reusableContactEquations=[],this.reusableFrictionEquations=[],this.restitution=0,this.stiffness=l.DEFAULT_STIFFNESS,this.relaxation=l.DEFAULT_RELAXATION,this.frictionStiffness=l.DEFAULT_STIFFNESS,this.frictionRelaxation=l.DEFAULT_RELAXATION,this.collidingBodiesLastStep=new k}function d(a,b){f.set(a.vertices[0],.5*-b.length,-b.radius),f.set(a.vertices[1],.5*b.length,-b.radius),f.set(a.vertices[2],.5*b.length,b.radius),f.set(a.vertices[3],.5*-b.length,b.radius)}function e(a,b,c,d){for(var e=R,i=S,j=T,k=U,l=a,m=b.vertices,n=null,o=0;o!==m.length+1;o++){var p=m[o%m.length],q=m[(o+1)%m.length];f.rotate(e,p,d),f.rotate(i,q,d),h(e,e,c),h(i,i,c),g(j,e,l),g(k,i,l);var r=f.crossLength(j,k);if(null===n&&(n=r),0>=r*n)return!1;n=r}return!0}var f=a("../math/vec2"),g=f.sub,h=f.add,i=f.dot,j=a("../utils/Utils"),k=a("../utils/TupleDictionary"),l=a("../equations/Equation"),m=a("../equations/ContactEquation"),n=a("../equations/FrictionEquation"),o=a("../shapes/Circle"),p=a("../shapes/Convex"),q=a("../shapes/Shape"),r=(a("../objects/Body"),a("../shapes/Rectangle"));b.exports=c;var s=f.fromValues(0,1),t=f.fromValues(0,0),u=f.fromValues(0,0),v=f.fromValues(0,0),w=f.fromValues(0,0),x=f.fromValues(0,0),y=f.fromValues(0,0),z=f.fromValues(0,0),A=f.fromValues(0,0),B=f.fromValues(0,0),C=f.fromValues(0,0),D=f.fromValues(0,0),E=f.fromValues(0,0),F=f.fromValues(0,0),G=f.fromValues(0,0),H=f.fromValues(0,0),I=f.fromValues(0,0),J=f.fromValues(0,0),K=f.fromValues(0,0),L=[];c.prototype.collidedLastStep=function(a,b){var c=0|a.id,d=0|b.id;return!!this.collidingBodiesLastStep.get(c,d)},c.prototype.reset=function(){this.collidingBodiesLastStep.reset();for(var a=0;a!==this.contactEquations.length;a++){var b=this.contactEquations[a],c=0|b.bodyA.id,d=0|b.bodyB.id;this.collidingBodiesLastStep.set(c,d,!0)}if(this.reuseObjects){var e=this.contactEquations,f=this.frictionEquations,g=this.reusableFrictionEquations,h=this.reusableContactEquations;j.appendArray(h,e),j.appendArray(g,f)}this.contactEquations.length=this.frictionEquations.length=0},c.prototype.createContactEquation=function(a,b,c,d){var e=this.reusableContactEquations.length?this.reusableContactEquations.pop():new m(a,b);return e.bodyA=a,e.bodyB=b,e.shapeA=c,e.shapeB=d,e.restitution=this.restitution,e.firstImpact=!this.collidedLastStep(a,b),e.stiffness=this.stiffness,e.relaxation=this.relaxation,e.needsUpdate=!0,e.enabled=!0,e},c.prototype.createFrictionEquation=function(a,b,c,d){var e=this.reusableFrictionEquations.length?this.reusableFrictionEquations.pop():new n(a,b);return e.bodyA=a,e.bodyB=b,e.shapeA=c,e.shapeB=d,e.setSlipForce(this.slipForce),e.frictionCoefficient=this.frictionCoefficient,e.relativeVelocity=this.surfaceVelocity,e.enabled=!0,e.needsUpdate=!0,e.stiffness=this.frictionStiffness,e.relaxation=this.frictionRelaxation,e},c.prototype.createFrictionFromContact=function(a){var b=this.createFrictionEquation(a.bodyA,a.bodyB,a.shapeA,a.shapeB);return f.copy(b.contactPointA,a.contactPointA),f.copy(b.contactPointB,a.contactPointB),f.rotate90cw(b.t,a.normalA),b.contactEquation=a,b},c.prototype[q.LINE|q.CONVEX]=c.prototype.convexLine=function(a,b,c,d,e,f,g,h,i){return i?!1:0},c.prototype[q.LINE|q.RECTANGLE]=c.prototype.lineRectangle=function(a,b,c,d,e,f,g,h,i){return i?!1:0};var M=new r(1,1),N=f.create();c.prototype[q.CAPSULE|q.CONVEX]=c.prototype[q.CAPSULE|q.RECTANGLE]=c.prototype.convexCapsule=function(a,b,c,e,g,h,i,j,k){var l=N;f.set(l,h.length/2,0),f.rotate(l,l,j),f.add(l,l,i);var m=this.circleConvex(g,h,l,j,a,b,c,e,k,h.radius);f.set(l,-h.length/2,0),f.rotate(l,l,j),f.add(l,l,i);var n=this.circleConvex(g,h,l,j,a,b,c,e,k,h.radius);if(k&&(m||n))return!0;var o=M;d(o,h);var p=this.convexConvex(a,b,c,e,g,o,i,j,k);return p+m+n},c.prototype[q.CAPSULE|q.LINE]=c.prototype.lineCapsule=function(a,b,c,d,e,f,g,h,i){return i?!1:0};var O=f.create(),P=f.create(),Q=new r(1,1);c.prototype[q.CAPSULE|q.CAPSULE]=c.prototype.capsuleCapsule=function(a,b,c,e,g,h,i,j,k){for(var l=O,m=P,n=0,o=0;2>o;o++){f.set(l,(0==o?-1:1)*b.length/2,0),f.rotate(l,l,e),f.add(l,l,c);for(var p=0;2>p;p++){f.set(m,(0==p?-1:1)*h.length/2,0),f.rotate(m,m,j),f.add(m,m,i);var q=this.circleCircle(a,b,l,e,g,h,m,j,k,b.radius,h.radius);if(k&&q)return!0;n+=q}}var r=Q;d(r,b);var s=this.convexCapsule(a,r,c,e,g,h,i,j,k);if(k&&s)return!0;n+=s,d(r,h);var t=this.convexCapsule(g,r,i,j,a,b,c,e,k);return k&&t?!0:n+=t},c.prototype[q.LINE|q.LINE]=c.prototype.lineLine=function(a,b,c,d,e,f,g,h,i){return i?!1:0},c.prototype[q.PLANE|q.LINE]=c.prototype.planeLine=function(a,b,c,d,e,j,k,l,m){var n=t,o=u,p=v,q=w,r=x,C=y,D=z,E=A,F=B,G=L;numContacts=0,f.set(n,-j.length/2,0),f.set(o,j.length/2,0),f.rotate(p,n,l),f.rotate(q,o,l),h(p,p,k),h(q,q,k),f.copy(n,p),f.copy(o,q),g(r,o,n),f.normalize(C,r),f.rotate90cw(F,C),f.rotate(E,s,d),G[0]=n,G[1]=o;for(var H=0;HJ){if(m)return!0;var K=this.createContactEquation(a,e,b,j);numContacts++,f.copy(K.normalA,E),f.normalize(K.normalA,K.normalA),f.scale(D,E,J),g(K.contactPointA,I,D),g(K.contactPointA,K.contactPointA,a.position),g(K.contactPointB,I,k),h(K.contactPointB,K.contactPointB,k),g(K.contactPointB,K.contactPointB,e.position),this.contactEquations.push(K),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(K))}}return numContacts},c.prototype[q.PARTICLE|q.CAPSULE]=c.prototype.particleCapsule=function(a,b,c,d,e,f,g,h,i){return this.circleLine(a,b,c,d,e,f,g,h,i,f.radius,0)},c.prototype[q.CIRCLE|q.LINE]=c.prototype.circleLine=function(a,b,c,d,e,j,k,l,m,n,o){var p=j,q=l,r=e,s=k,H=c,I=a,J=b,n=n||0,o="undefined"!=typeof o?o:J.radius,K=t,M=u,N=v,O=w,P=x,Q=y,R=z,S=A,T=B,U=C,V=D,W=E,X=F,Y=G,Z=L;f.set(S,-p.length/2,0),f.set(T,p.length/2,0),f.rotate(U,S,q),f.rotate(V,T,q),h(U,U,s),h(V,V,s),f.copy(S,U),f.copy(T,V),g(Q,T,S),f.normalize(R,Q),f.rotate90cw(P,R),g(W,H,S);var $=i(W,P);if(g(O,S,s),g(X,H,s),Math.abs($)ab&&bb>_){if(m)return!0;var cb=this.createContactEquation(I,r,b,j);return f.scale(cb.normalA,K,-1),f.normalize(cb.normalA,cb.normalA),f.scale(cb.contactPointA,cb.normalA,o),h(cb.contactPointA,cb.contactPointA,H),g(cb.contactPointA,cb.contactPointA,I.position),g(cb.contactPointB,N,s),h(cb.contactPointB,cb.contactPointB,s),g(cb.contactPointB,cb.contactPointB,r.position),this.contactEquations.push(cb),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(cb)),1}}Z[0]=S,Z[1]=T;for(var db=0;dbW&&(f.copy(Q,O),S=W,f.scale(N,K,W),f.add(N,N,O),R=!0)}}if(R){if(m)return!0;var X=this.createContactEquation(y,q,b,j);return f.sub(X.normalA,Q,s),f.normalize(X.normalA,X.normalA),f.scale(X.contactPointA,X.normalA,n),h(X.contactPointA,X.contactPointA,s),g(X.contactPointA,X.contactPointA,y.position),g(X.contactPointB,N,r),h(X.contactPointB,X.contactPointB,r),g(X.contactPointB,X.contactPointB,q.position),this.contactEquations.push(X),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(X)),1}if(n>0)for(var T=0;TW&&(Q=W,f.scale(N,H,W),f.add(N,N,s),f.copy(P,H),R=!0)}if(R){var X=this.createContactEquation(A,q,b,k);return f.scale(X.normalA,P,-1),f.normalize(X.normalA,X.normalA),f.set(X.contactPointA,0,0),h(X.contactPointA,X.contactPointA,s),g(X.contactPointA,X.contactPointA,A.position),g(X.contactPointB,N,r),h(X.contactPointB,X.contactPointB,r),g(X.contactPointB,X.contactPointB,q.position),this.contactEquations.push(X),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(X)),1}return 0},c.prototype[q.CIRCLE]=c.prototype.circleCircle=function(a,b,c,d,e,i,j,k,l,m,n){var o=a,p=b,q=c,r=e,s=i,u=j,v=t,m=m||p.radius,n=n||s.radius;g(v,c,j);var w=m+n;if(f.squaredLength(v)>w*w)return 0;if(l)return!0;var x=this.createContactEquation(o,r,b,i);return g(x.normalA,u,q),f.normalize(x.normalA,x.normalA),f.scale(x.contactPointA,x.normalA,m),f.scale(x.contactPointB,x.normalA,-n),h(x.contactPointA,x.contactPointA,q),g(x.contactPointA,x.contactPointA,o.position),h(x.contactPointB,x.contactPointB,u),g(x.contactPointB,x.contactPointB,r.position),this.contactEquations.push(x),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(x)),1},c.prototype[q.PLANE|q.CONVEX]=c.prototype[q.PLANE|q.RECTANGLE]=c.prototype.planeConvex=function(a,b,d,e,j,k,l,m,n){var o=j,p=l,q=k,r=m,w=a,x=b,y=d,z=e,A=t,B=u,C=v,D=0;f.rotate(B,s,z);for(var E=0;E0)return 0;if(l)return!0;var x=this.createContactEquation(o,m,h,b);return f.copy(x.normalA,v),f.scale(r,x.normalA,w),g(x.contactPointA,n,r),g(x.contactPointA,x.contactPointA,o.position),g(x.contactPointB,n,m.position),this.contactEquations.push(x),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(x)),1},c.prototype[q.CIRCLE|q.PARTICLE]=c.prototype.circleParticle=function(a,b,c,d,e,i,j,k,l){var m=a,n=b,o=c,p=e,q=j,r=t;if(g(r,q,o),f.squaredLength(r)>n.radius*n.radius)return 0;if(l)return!0;var s=this.createContactEquation(m,p,b,i);return f.copy(s.normalA,r),f.normalize(s.normalA,s.normalA),f.scale(s.contactPointA,s.normalA,n.radius),h(s.contactPointA,s.contactPointA,o),g(s.contactPointA,s.contactPointA,m.position),g(s.contactPointB,q,p.position),this.contactEquations.push(s),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(s)),1};{var V=new o(1),W=f.create(),X=f.create();f.create()}c.prototype[q.PLANE|q.CAPSULE]=c.prototype.planeCapsule=function(a,b,c,d,e,g,i,j,k){var l=W,m=X,n=V;f.set(l,-g.length/2,0),f.rotate(l,l,j),h(l,l,i),f.set(m,g.length/2,0),f.rotate(m,m,j),h(m,m,i),n.radius=g.radius;var o=this.circlePlane(e,n,l,0,a,b,c,d,k),p=this.circlePlane(e,n,m,0,a,b,c,d,k);return k?o||p:o+p},c.prototype.capsulePlane=function(a,b,c,d,e,f,g,h,i){return console.warn("Narrowphase.prototype.capsulePlane() is deprecated. Use .planeCapsule() instead!"),this.planeCapsule(e,f,g,h,a,b,c,d,i)},c.prototype[q.CIRCLE|q.PLANE]=c.prototype.circlePlane=function(a,b,c,d,e,j,k,l,m){var n=a,o=b,p=c,q=e,r=k,w=l;w=w||0;var x=t,y=u,z=v;g(x,p,r),f.rotate(y,s,w);var A=i(y,x);if(A>o.radius)return 0;if(m)return!0;var B=this.createContactEquation(q,n,j,b);return f.copy(B.normalA,y),f.scale(B.contactPointB,B.normalA,-o.radius),h(B.contactPointB,B.contactPointB,p),g(B.contactPointB,B.contactPointB,n.position),f.scale(z,B.normalA,A),g(B.contactPointA,x,z),h(B.contactPointA,B.contactPointA,r),g(B.contactPointA,B.contactPointA,q.position),this.contactEquations.push(B),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(B)),1},c.convexPrecision=1e-7,c.prototype[q.CONVEX]=c.prototype[q.CONVEX|q.RECTANGLE]=c.prototype[q.RECTANGLE]=c.prototype.convexConvex=function(a,b,d,e,j,k,l,m,n,o){var p=t,q=u,r=v,s=w,y=x,C=z,D=A,E=B,F=0,o=o||c.convexPrecision,G=c.findSeparatingAxis(b,d,e,k,l,m,p);if(!G)return 0;g(D,l,d),i(p,D)>0&&f.scale(p,p,-1);var H=c.getClosestEdge(b,e,p,!0),I=c.getClosestEdge(k,m,p);if(-1===H||-1===I)return 0;for(var J=0;2>J;J++){var K=H,L=I,M=b,N=k,O=d,P=l,Q=e,R=m,S=a,T=j;if(0===J){var U;U=K,K=L,L=U,U=M,M=N,N=U,U=O,O=P,P=U,U=Q,Q=R,R=U,U=S,S=T,T=U}for(var V=L;L+2>V;V++){var W=N.vertices[(V+N.vertices.length)%N.vertices.length];f.rotate(q,W,R),h(q,q,P);for(var X=0,Y=K-1;K+2>Y;Y++){var Z=M.vertices[(Y+M.vertices.length)%M.vertices.length],$=M.vertices[(Y+1+M.vertices.length)%M.vertices.length];f.rotate(r,Z,Q),f.rotate(s,$,Q),h(r,r,O),h(s,s,O),g(y,s,r),f.rotate90cw(E,y),f.normalize(E,E),g(D,q,r);var _=i(E,D);o>=_&&X++}if(X>=3){if(n)return!0;var ab=this.createContactEquation(S,T,M,N);F++;var Z=M.vertices[K%M.vertices.length],$=M.vertices[(K+1)%M.vertices.length];f.rotate(r,Z,Q),f.rotate(s,$,Q),h(r,r,O),h(s,s,O),g(y,s,r),f.rotate90cw(ab.normalA,y),f.normalize(ab.normalA,ab.normalA),g(D,q,r);var _=i(ab.normalA,D);f.scale(C,ab.normalA,_),g(ab.contactPointA,q,O),g(ab.contactPointA,ab.contactPointA,C),h(ab.contactPointA,ab.contactPointA,O),g(ab.contactPointA,ab.contactPointA,S.position),g(ab.contactPointB,q,P),h(ab.contactPointB,ab.contactPointB,P),g(ab.contactPointB,ab.contactPointB,T.position),this.contactEquations.push(ab),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(ab))}}}return F};var Y=f.fromValues(0,0);c.projectConvexOntoAxis=function(a,b,c,d,e){var g,h,j=null,k=null,l=Y;f.rotate(l,d,-c);for(var m=0;mj)&&(j=h),(null===k||k>h)&&(k=h);if(k>j){var n=k;k=j,j=n}var o=i(b,d);f.set(e,k+o,j+o)};var Z=f.fromValues(0,0),$=f.fromValues(0,0),_=f.fromValues(0,0),ab=f.fromValues(0,0),bb=f.fromValues(0,0),cb=f.fromValues(0,0);c.findSeparatingAxis=function(a,b,d,e,h,i,j){for(var k=null,l=!1,m=!1,n=Z,o=$,p=_,q=ab,r=bb,s=cb,t=0;2!==t;t++){var u=a,v=d;1===t&&(u=e,v=i);for(var w=0;w!==u.vertices.length;w++){f.rotate(o,u.vertices[w],v),f.rotate(p,u.vertices[(w+1)%u.vertices.length],v),g(n,p,o),f.rotate90cw(q,n),f.normalize(q,q),c.projectConvexOntoAxis(a,b,d,q,r),c.projectConvexOntoAxis(e,h,i,q,s);var x=r,y=s,z=!1;r[0]>s[0]&&(y=r,x=s,z=!0);var A=y[0]-x[1];l=A<=c.convexPrecision,(null===k||A>k)&&(f.copy(j,q),k=A,m=l)}}return m};var db=f.fromValues(0,0),eb=f.fromValues(0,0),fb=f.fromValues(0,0);c.getClosestEdge=function(a,b,c,d){var e=db,h=eb,j=fb;f.rotate(e,c,-b),d&&f.scale(e,e,-1);for(var k=-1,l=a.vertices.length,m=0;m!==l;m++){g(h,a.vertices[(m+1)%l],a.vertices[m%l]),f.rotate90cw(j,h),f.normalize(j,j);var n=i(j,e);(-1==k||n>maxDot)&&(k=m%l,maxDot=n)}return k};var gb=f.create(),hb=f.create(),ib=f.create(),jb=f.create(),kb=f.create(),lb=f.create(),mb=f.create(); +c.prototype[q.CIRCLE|q.HEIGHTFIELD]=c.prototype.circleHeightfield=function(a,b,c,d,e,i,j,k,l,m){var n=i.data,m=m||b.radius,o=i.elementWidth,p=hb,q=gb,r=kb,s=mb,t=lb,u=ib,v=jb,w=Math.floor((c[0]-m-j[0])/o),x=Math.ceil((c[0]+m-j[0])/o);0>w&&(w=0),x>=n.length&&(x=n.length-1);for(var y=n[w],z=n[x],A=w;x>A;A++)n[A]y&&(y=n[A]);if(c[1]-m>y)return l?!1:0;c[1]+mA;A++){f.set(u,A*o,n[A]),f.set(v,(A+1)*o,n[A+1]),f.add(u,u,j),f.add(v,v,j),f.sub(t,v,u),f.rotate(t,t,Math.PI/2),f.normalize(t,t),f.scale(q,t,-m),f.add(q,q,c),f.sub(p,q,u);var C=f.dot(p,t);if(q[0]>=u[0]&&q[0]=C){if(l)return!0;B=!0,f.scale(p,t,-C),f.add(r,q,p),f.copy(s,t);var D=this.createContactEquation(e,a,i,b);f.copy(D.normalA,s),f.scale(D.contactPointB,D.normalA,-m),h(D.contactPointB,D.contactPointB,c),g(D.contactPointB,D.contactPointB,a.position),f.copy(D.contactPointA,r),f.sub(D.contactPointA,D.contactPointA,e.position),this.contactEquations.push(D),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(D))}}if(B=!1,m>0)for(var A=w;x>=A;A++)if(f.set(u,A*o,n[A]),f.add(u,u,j),f.sub(p,c,u),f.squaredLength(p)q&&(q=0),r>=k.length&&(r=k.length-1);for(var s=k[q],t=k[r],u=q;r>u;u++)k[u]s&&(s=k[u]);if(a.aabb.lowerBound[1]>s)return j?!1:0;for(var v=0,u=q;r>u;u++){f.set(m,u*l,k[u]),f.set(n,(u+1)*l,k[u+1]),f.add(m,m,h),f.add(n,n,h);var w=100;f.set(o,.5*(n[0]+m[0]),.5*(n[1]+m[1]-w)),f.sub(p.vertices[0],n,o),f.sub(p.vertices[1],m,o),f.copy(p.vertices[2],p.vertices[1]),f.copy(p.vertices[3],p.vertices[0]),p.vertices[2][1]-=w,p.vertices[3][1]-=w,v+=this.convexConvex(a,b,c,d,e,p,o,0,j)}return v}},{"../equations/ContactEquation":21,"../equations/Equation":22,"../equations/FrictionEquation":23,"../math/vec2":30,"../objects/Body":31,"../shapes/Circle":35,"../shapes/Convex":36,"../shapes/Rectangle":41,"../shapes/Shape":42,"../utils/TupleDictionary":46,"../utils/Utils":47}],13:[function(a,b){function c(){e.call(this,e.SAP),this.axisList=[],this.world=null,this.axisIndex=0;var a=this.axisList;this._addBodyHandler=function(b){a.push(b.body)},this._removeBodyHandler=function(b){var c=a.indexOf(b.body);-1!==c&&a.splice(c,1)}}var d=a("../utils/Utils"),e=a("../collision/Broadphase");b.exports=c,c.prototype=new e,c.prototype.setWorld=function(a){this.axisList.length=0,d.appendArray(this.axisList,a.bodies),a.off("addBody",this._addBodyHandler).off("removeBody",this._removeBodyHandler),a.on("addBody",this._addBodyHandler).on("removeBody",this._removeBodyHandler),this.world=a},c.sortAxisList=function(a,b){b=0|b;for(var c=1,d=a.length;d>c;c++){for(var e=a[c],f=c-1;f>=0&&!(a[f].aabb.lowerBound[b]<=e.aabb.lowerBound[b]);f--)a[f+1]=a[f];a[f+1]=e}return a},c.prototype.getCollisionPairs=function(){var a=this.axisList,b=this.result,d=this.axisIndex;b.length=0;for(var f=a.length;f--;){var g=a[f];g.aabbNeedsUpdate&&g.updateAABB()}c.sortAxisList(a,d);for(var h=0,i=0|a.length;h!==i;h++)for(var j=a[h],k=h+1;i>k;k++){var l=a[k],m=l.aabb.lowerBound[d]<=j.aabb.upperBound[d];if(!m)break;e.canCollide(j,l)&&this.boundingVolumeCheck(j,l)&&b.push(j,l)}return b}},{"../collision/Broadphase":9,"../utils/Utils":47}],14:[function(a,b){function c(a,b,c,e){this.type=c,e=d.defaults(e,{collideConnected:!0,wakeUpBodies:!0}),this.equations=[],this.bodyA=a,this.bodyB=b,this.collideConnected=e.collideConnected,e.wakeUpBodies&&(a&&a.wakeUp(),b&&b.wakeUp())}b.exports=c;var d=a("../utils/Utils");c.prototype.update=function(){throw new Error("method update() not implmemented in this Constraint subclass!")},c.DISTANCE=1,c.GEAR=2,c.LOCK=3,c.PRISMATIC=4,c.REVOLUTE=5,c.prototype.setStiffness=function(a){for(var b=this.equations,c=0;c!==b.length;c++){var d=b[c];d.stiffness=a,d.needsUpdate=!0}},c.prototype.setRelaxation=function(a){for(var b=this.equations,c=0;c!==b.length;c++){var d=b[c];d.relaxation=a,d.needsUpdate=!0}}},{"../utils/Utils":47}],15:[function(a,b){function c(a,b,c,g){g=g||{},d.call(this,a,b,d.DISTANCE,g),this.distance=c,this.localAnchorA=f.create(),this.localAnchorB=f.create();var h,i=this.localAnchorA,j=this.localAnchorB;h="undefined"==typeof g.maxForce?Number.MAX_VALUE:g.maxForce;var k=new e(a,b,-h,h);this.equations=[k];var l=f.create(),m=f.create(),n=f.create(),o=this;k.computeGq=function(){{var a=this.bodyA,b=this.bodyB,c=a.position;b.position}return f.rotate(m,i,a.angle),f.rotate(n,j,b.angle),f.add(l,c,n),f.sub(l,l,m),f.sub(l,l,c),f.sub(l,b.position,a.position),f.length(l)-o.distance},this.setMaxForce(h)}var d=a("./Constraint"),e=a("../equations/Equation"),f=a("../math/vec2");b.exports=c,c.prototype=new d;var g=f.create(),h=f.create(),i=f.create();c.prototype.update=function(){var a=this.equations[0],b=this.bodyA,c=this.bodyB,d=(this.distance,b.position,c.position,a.G);f.rotate(h,this.localAnchorA,b.angle),f.rotate(i,this.localAnchorB,c.angle);f.crossLength(h,g),f.crossLength(i,g);f.sub(g,c.position,b.position),f.normalize(g,g),d[0]=-g[0],d[1]=-g[1],d[3]=g[0],d[4]=g[1]},c.prototype.setMaxForce=function(a){var b=this.equations[0];b.minForce=-a,b.maxForce=a},c.prototype.getMaxForce=function(){var a=this.equations[0];return a.maxForce}},{"../equations/Equation":22,"../math/vec2":30,"./Constraint":14}],16:[function(a,b){function c(a,b,c){c=c||{},d.call(this,a,b,d.GEAR,c),this.equations=[new e(a,b,c)],this.angle="number"==typeof c.angle?c.angle:0,this.ratio="number"==typeof c.ratio?c.ratio:1,"number"==typeof c.maxTorque&&this.setMaxTorque(c.maxTorque)}{var d=a("./Constraint"),e=(a("../equations/Equation"),a("../equations/AngleLockEquation"));a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.update=function(){var a=this.equations[0];a.ratio!==this.ratio&&a.setRatio(this.ratio),a.angle=this.angle},c.prototype.setMaxTorque=function(a){this.equations[0].setMaxTorque(a)},c.prototype.getMaxTorque=function(){return this.equations[0].maxForce}},{"../equations/AngleLockEquation":20,"../equations/Equation":22,"../math/vec2":30,"./Constraint":14}],17:[function(a,b){function c(a,b,c){c=c||{},d.call(this,a,b,d.LOCK,c);var g="undefined"==typeof c.maxForce?Number.MAX_VALUE:c.maxForce,h=c.localOffsetB||e.fromValues(0,0);h=e.fromValues(h[0],h[1]);var i=c.localAngleB||0,j=new f(a,b,-g,g),k=new f(a,b,-g,g),l=new f(a,b,-g,g),m=e.create(),n=e.create(),o=this;j.computeGq=function(){return e.rotate(m,o.localOffsetB,a.angle),e.sub(n,b.position,a.position),e.sub(n,n,m),n[0]},k.computeGq=function(){return e.rotate(m,o.localOffsetB,a.angle),e.sub(n,b.position,a.position),e.sub(n,n,m),n[1]};var p=e.create(),q=e.create();l.computeGq=function(){return e.rotate(p,o.localOffsetB,b.angle-o.localAngleB),e.scale(p,p,-1),e.sub(n,a.position,b.position),e.add(n,n,p),e.rotate(q,p,-Math.PI/2),e.normalize(q,q),e.dot(n,q)},this.localOffsetB=h,this.localAngleB=i,this.equations.push(j,k,l),this.setMaxForce(g)}var d=a("./Constraint"),e=a("../math/vec2"),f=a("../equations/Equation");b.exports=c,c.prototype=new d,c.prototype.setMaxForce=function(a){for(var b=this.equations,c=0;cc)g.scale(e.normalA,i,-1),g.sub(e.contactPointA,j,h.position),g.sub(e.contactPointB,k,o.position),g.scale(n,i,c),g.add(e.contactPointA,e.contactPointA,n),-1==a.indexOf(e)&&a.push(e);else{var u=a.indexOf(e);-1!=u&&a.splice(u,1)}if(this.lowerLimitEnabled&&d>s)g.scale(f.normalA,i,1),g.sub(f.contactPointA,j,h.position),g.sub(f.contactPointB,k,o.position),g.scale(n,i,d),g.sub(f.contactPointB,f.contactPointB,n),-1==a.indexOf(f)&&a.push(f);else{var u=a.indexOf(f);-1!=u&&a.splice(u,1)}},c.prototype.enableMotor=function(){this.motorEnabled||(this.equations.push(this.motorEquation),this.motorEnabled=!0)},c.prototype.disableMotor=function(){if(this.motorEnabled){var a=this.equations.indexOf(this.motorEquation);this.equations.splice(a,1),this.motorEnabled=!1}}},{"../equations/ContactEquation":21,"../equations/Equation":22,"../equations/RotationalLockEquation":24,"../math/vec2":30,"./Constraint":14}],19:[function(a,b){function c(a,b,c,n,o){o=o||{},d.call(this,a,c,d.REVOLUTE,o);var p=this.maxForce="undefined"!=typeof o.maxForce?o.maxForce:Number.MAX_VALUE;this.pivotA=h.fromValues(b[0],b[1]),this.pivotB=h.fromValues(n[0],n[1]);var q=this.equations=[new e(a,c,-p,p),new e(a,c,-p,p)],r=q[0],s=q[1],t=this;r.computeGq=function(){return h.rotate(i,t.pivotA,a.angle),h.rotate(j,t.pivotB,c.angle),h.add(m,c.position,j),h.sub(m,m,a.position),h.sub(m,m,i),h.dot(m,k)},s.computeGq=function(){return h.rotate(i,t.pivotA,a.angle),h.rotate(j,t.pivotB,c.angle),h.add(m,c.position,j),h.sub(m,m,a.position),h.sub(m,m,i),h.dot(m,l)},s.minForce=r.minForce=-p,s.maxForce=r.maxForce=p,this.motorEquation=new f(a,c),this.motorEnabled=!1,this.angle=0,this.lowerLimitEnabled=!1,this.upperLimitEnabled=!1,this.lowerLimit=0,this.upperLimit=0,this.upperLimitEquation=new g(a,c),this.lowerLimitEquation=new g(a,c),this.upperLimitEquation.minForce=0,this.lowerLimitEquation.maxForce=0}var d=a("./Constraint"),e=a("../equations/Equation"),f=a("../equations/RotationalVelocityEquation"),g=a("../equations/RotationalLockEquation"),h=a("../math/vec2");b.exports=c;var i=h.create(),j=h.create(),k=h.fromValues(1,0),l=h.fromValues(0,1),m=h.create();c.prototype=new d,c.prototype.update=function(){var a=this.bodyA,b=this.bodyB,c=this.pivotA,d=this.pivotB,e=this.equations,f=(e[0],e[1],e[0]),g=e[1],m=this.upperLimit,n=this.lowerLimit,o=this.upperLimitEquation,p=this.lowerLimitEquation,q=this.angle=b.angle-a.angle;if(this.upperLimitEnabled&&q>m)o.angle=m,-1==e.indexOf(o)&&e.push(o);else{var r=e.indexOf(o);-1!=r&&e.splice(r,1)}if(this.lowerLimitEnabled&&n>q)p.angle=n,-1==e.indexOf(p)&&e.push(p);else{var r=e.indexOf(p);-1!=r&&e.splice(r,1)}h.rotate(i,c,a.angle),h.rotate(j,d,b.angle),f.G[0]=-1,f.G[1]=0,f.G[2]=-h.crossLength(i,k),f.G[3]=1,f.G[4]=0,f.G[5]=h.crossLength(j,k),g.G[0]=0,g.G[1]=-1,g.G[2]=-h.crossLength(i,l),g.G[3]=0,g.G[4]=1,g.G[5]=h.crossLength(j,l)},c.prototype.enableMotor=function(){this.motorEnabled||(this.equations.push(this.motorEquation),this.motorEnabled=!0)},c.prototype.disableMotor=function(){if(this.motorEnabled){var a=this.equations.indexOf(this.motorEquation);this.equations.splice(a,1),this.motorEnabled=!1}},c.prototype.motorIsEnabled=function(){return!!this.motorEnabled},c.prototype.setMotorSpeed=function(a){if(this.motorEnabled){var b=this.equations.indexOf(this.motorEquation);this.equations[b].relativeVelocity=a}},c.prototype.getMotorSpeed=function(){return this.motorEnabled?this.motorEquation.relativeVelocity:!1}},{"../equations/Equation":22,"../equations/RotationalLockEquation":24,"../equations/RotationalVelocityEquation":25,"../math/vec2":30,"./Constraint":14}],20:[function(a,b){function c(a,b,c){c=c||{},d.call(this,a,b,-Number.MAX_VALUE,Number.MAX_VALUE),this.angle=c.angle||0,this.ratio="number"==typeof c.ratio?c.ratio:1,this.setRatio(this.ratio)}{var d=a("./Equation");a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.constructor=c,c.prototype.computeGq=function(){return this.ratio*this.bodyA.angle-this.bodyB.angle+this.angle},c.prototype.setRatio=function(a){var b=this.G;b[2]=a,b[5]=-1,this.ratio=a},c.prototype.setMaxTorque=function(a){this.maxForce=a,this.minForce=-a}},{"../math/vec2":30,"./Equation":22}],21:[function(a,b){function c(a,b){d.call(this,a,b,0,Number.MAX_VALUE),this.contactPointA=e.create(),this.penetrationVec=e.create(),this.contactPointB=e.create(),this.normalA=e.create(),this.restitution=0,this.firstImpact=!1,this.shapeA=null,this.shapeB=null}var d=a("./Equation"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.constructor=c,c.prototype.computeB=function(a,b,c){var d=this.bodyA,f=this.bodyB,g=this.contactPointA,h=this.contactPointB,i=d.position,j=f.position,k=this.penetrationVec,l=this.normalA,m=this.G,n=e.crossLength(g,l),o=e.crossLength(h,l);m[0]=-l[0],m[1]=-l[1],m[2]=-n,m[3]=l[0],m[4]=l[1],m[5]=o,e.add(k,j,h),e.sub(k,k,i),e.sub(k,k,g);var p,q;this.firstImpact&&0!==this.restitution?(q=0,p=1/b*(1+this.restitution)*this.computeGW()):(q=e.dot(l,k),p=this.computeGW());var r=this.computeGiMf(),s=-q*a-p*b-c*r;return s}},{"../math/vec2":30,"./Equation":22}],22:[function(a,b){function c(a,b,d,e){this.minForce="undefined"==typeof d?-Number.MAX_VALUE:d,this.maxForce="undefined"==typeof e?Number.MAX_VALUE:e,this.bodyA=a,this.bodyB=b,this.stiffness=c.DEFAULT_STIFFNESS,this.relaxation=c.DEFAULT_RELAXATION,this.G=new h.ARRAY_TYPE(6);for(var f=0;6>f;f++)this.G[f]=0;this.offset=0,this.a=0,this.b=0,this.epsilon=0,this.timeStep=1/60,this.needsUpdate=!0,this.multiplier=0,this.relativeVelocity=0,this.enabled=!0}function d(a,b,c,d,e){return a[0]*b[0]+a[1]*b[1]+a[2]*c+a[3]*d[0]+a[4]*d[1]+a[5]*e}function e(a){return a.sleepState===i.SLEEPING?0:a.invMass}function f(a){return a.sleepState===i.SLEEPING?0:a.invInertia}b.exports=c;var g=a("../math/vec2"),h=a("../utils/Utils"),i=a("../objects/Body");c.prototype.constructor=c,c.DEFAULT_STIFFNESS=1e6,c.DEFAULT_RELAXATION=4,c.prototype.update=function(){var a=this.stiffness,b=this.relaxation,c=this.timeStep;this.a=4/(c*(1+4*b)),this.b=4*b/(1+4*b),this.epsilon=4/(c*c*a*(1+4*b)),this.needsUpdate=!1},c.prototype.computeB=function(a,b,c){var d=this.computeGW(),e=this.computeGq(),f=this.computeGiMf();return-e*a-d*b-f*c};var j=g.create(),k=g.create();c.prototype.computeGq=function(){var a=this.G,b=this.bodyA,c=this.bodyB,e=(b.position,c.position,b.angle),f=c.angle;return d(a,j,e,k,f)+this.offset},c.prototype.computeGW=function(){var a=this.G,b=this.bodyA,c=this.bodyB,e=b.velocity,f=c.velocity,g=b.angularVelocity,h=c.angularVelocity;return d(a,e,g,f,h)+this.relativeVelocity},c.prototype.computeGWlambda=function(){var a=this.G,b=this.bodyA,c=this.bodyB,e=b.vlambda,f=c.vlambda,g=b.wlambda,h=c.wlambda;return d(a,e,g,f,h)};var l=g.create(),m=g.create();c.prototype.computeGiMf=function(){var a=this.bodyA,b=this.bodyB,c=a.force,h=a.angularForce,i=b.force,j=b.angularForce,k=e(a),n=e(b),o=f(a),p=f(b),q=this.G;return g.scale(l,c,k),g.scale(m,i,n),d(q,l,h*o,m,j*p)},c.prototype.computeGiMGt=function(){var a=this.bodyA,b=this.bodyB,c=e(a),d=e(b),g=f(a),h=f(b),i=this.G;return i[0]*i[0]*c+i[1]*i[1]*c+i[2]*i[2]*g+i[3]*i[3]*d+i[4]*i[4]*d+i[5]*i[5]*h};{var n=g.create(),o=g.create(),p=g.create();g.create(),g.create(),g.create()}c.prototype.addToWlambda=function(a){var b=this.bodyA,c=this.bodyB,d=n,h=o,i=p,j=e(b),k=e(c),l=f(b),m=f(c),q=this.G;h[0]=q[0],h[1]=q[1],i[0]=q[3],i[1]=q[4],g.scale(d,h,j*a),g.add(b.vlambda,b.vlambda,d),b.wlambda+=l*q[2]*a,g.scale(d,i,k*a),g.add(c.vlambda,c.vlambda,d),c.wlambda+=m*q[5]*a},c.prototype.computeInvC=function(a){return 1/(this.computeGiMGt()+a)}},{"../math/vec2":30,"../objects/Body":31,"../utils/Utils":47}],23:[function(a,b){function c(a,b,c){e.call(this,a,b,-c,c),this.contactPointA=d.create(),this.contactPointB=d.create(),this.t=d.create(),this.contactEquation=null,this.shapeA=null,this.shapeB=null,this.frictionCoefficient=.3}{var d=a("../math/vec2"),e=a("./Equation");a("../utils/Utils")}b.exports=c,c.prototype=new e,c.prototype.constructor=c,c.prototype.setSlipForce=function(a){this.maxForce=a,this.minForce=-a},c.prototype.getSlipForce=function(){return this.maxForce},c.prototype.computeB=function(a,b,c){var e=(this.bodyA,this.bodyB,this.contactPointA),f=this.contactPointB,g=this.t,h=this.G;h[0]=-g[0],h[1]=-g[1],h[2]=-d.crossLength(e,g),h[3]=g[0],h[4]=g[1],h[5]=d.crossLength(f,g);var i=this.computeGW(),j=this.computeGiMf(),k=-i*b-c*j;return k}},{"../math/vec2":30,"../utils/Utils":47,"./Equation":22}],24:[function(a,b){function c(a,b,c){c=c||{},d.call(this,a,b,-Number.MAX_VALUE,Number.MAX_VALUE),this.angle=c.angle||0;var e=this.G;e[2]=1,e[5]=-1}var d=a("./Equation"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.constructor=c;var f=e.create(),g=e.create(),h=e.fromValues(1,0),i=e.fromValues(0,1);c.prototype.computeGq=function(){return e.rotate(f,h,this.bodyA.angle+this.angle),e.rotate(g,i,this.bodyB.angle),e.dot(f,g)}},{"../math/vec2":30,"./Equation":22}],25:[function(a,b){function c(a,b){d.call(this,a,b,-Number.MAX_VALUE,Number.MAX_VALUE),this.relativeVelocity=1,this.ratio=1}{var d=a("./Equation");a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.constructor=c,c.prototype.computeB=function(a,b,c){var d=this.G;d[2]=-1,d[5]=this.ratio;var e=this.computeGiMf(),f=this.computeGW(),g=-f*b-c*e;return g}},{"../math/vec2":30,"./Equation":22}],26:[function(a,b){var c=function(){};b.exports=c,c.prototype={constructor:c,on:function(a,b,c){b.context=c||this,void 0===this._listeners&&(this._listeners={});var d=this._listeners;return void 0===d[a]&&(d[a]=[]),-1===d[a].indexOf(b)&&d[a].push(b),this},has:function(a,b){if(void 0===this._listeners)return!1;var c=this._listeners;if(b){if(void 0!==c[a]&&-1!==c[a].indexOf(b))return!0}else if(void 0!==c[a])return!0;return!1},off:function(a,b){if(void 0===this._listeners)return this;var c=this._listeners,d=c[a].indexOf(b);return-1!==d&&c[a].splice(d,1),this},emit:function(a){if(void 0===this._listeners)return this;var b=this._listeners,c=b[a.type];if(void 0!==c){a.target=this;for(var d=0,e=c.length;e>d;d++){var f=c[d];f.call(f.context,a)}}return this}}},{}],27:[function(a,b){function c(a,b,f){if(f=f||{},!(a instanceof d&&b instanceof d))throw new Error("First two arguments must be Material instances.");this.id=c.idCounter++,this.materialA=a,this.materialB=b,this.friction="undefined"!=typeof f.friction?Number(f.friction):.3,this.restitution="undefined"!=typeof f.restitution?Number(f.restitution):0,this.stiffness="undefined"!=typeof f.stiffness?Number(f.stiffness):e.DEFAULT_STIFFNESS,this.relaxation="undefined"!=typeof f.relaxation?Number(f.relaxation):e.DEFAULT_RELAXATION,this.frictionStiffness="undefined"!=typeof f.frictionStiffness?Number(f.frictionStiffness):e.DEFAULT_STIFFNESS,this.frictionRelaxation="undefined"!=typeof f.frictionRelaxation?Number(f.frictionRelaxation):e.DEFAULT_RELAXATION,this.surfaceVelocity="undefined"!=typeof f.surfaceVelocity?Number(f.surfaceVelocity):0}var d=a("./Material"),e=a("../equations/Equation");b.exports=c,c.idCounter=0},{"../equations/Equation":22,"./Material":28}],28:[function(a,b){function c(){this.id=c.idCounter++}b.exports=c,c.idCounter=0},{}],29:[function(a,b){var c={};c.GetArea=function(a){if(a.length<6)return 0;for(var b=a.length-2,c=0,d=0;b>d;d+=2)c+=(a[d+2]-a[d])*(a[d+1]+a[d+3]);return c+=(a[0]-a[b])*(a[b+1]+a[1]),.5*-c},c.Triangulate=function(a){var b=a.length>>1;if(3>b)return[];for(var d=[],e=[],f=0;b>f;f++)e.push(f);for(var f=0,g=b;g>3;){var h=e[(f+0)%g],i=e[(f+1)%g],j=e[(f+2)%g],k=a[2*h],l=a[2*h+1],m=a[2*i],n=a[2*i+1],o=a[2*j],p=a[2*j+1],q=!1;if(c._convex(k,l,m,n,o,p)){q=!0;for(var r=0;g>r;r++){var s=e[r];if(s!=h&&s!=i&&s!=j&&c._PointInTriangle(a[2*s],a[2*s+1],k,l,m,n,o,p)){q=!1;break}}}if(q)d.push(h,i,j),e.splice((f+1)%g,1),g--,f=0;else if(f++>3*g)break}return d.push(e[0],e[1],e[2]),d},c._PointInTriangle=function(a,b,c,d,e,f,g,h){var i=g-c,j=h-d,k=e-c,l=f-d,m=a-c,n=b-d,o=i*i+j*j,p=i*k+j*l,q=i*m+j*n,r=k*k+l*l,s=k*m+l*n,t=1/(o*r-p*p),u=(r*q-p*s)*t,v=(o*s-p*q)*t;return u>=0&&v>=0&&1>u+v},c._convex=function(a,b,c,d,e,f){return(b-d)*(e-c)+(c-a)*(f-d)>=0},b.exports=c},{}],30:[function(a,b){var c=a("../../build/vec2").vec2;c.crossLength=function(a,b){return a[0]*b[1]-a[1]*b[0]},c.crossVZ=function(a,b,d){return c.rotate(a,b,-Math.PI/2),c.scale(a,a,d),a},c.crossZV=function(a,b,d){return c.rotate(a,d,Math.PI/2),c.scale(a,a,b),a},c.rotate=function(a,b,c){var d=Math.cos(c),e=Math.sin(c),f=b[0],g=b[1];a[0]=d*f-e*g,a[1]=e*f+d*g},c.rotate90cw=function(a,b){a[0]=b[1],a[1]=-b[0]},c.toLocalFrame=function(a,b,d,e){c.copy(a,b),c.sub(a,a,d),c.rotate(a,a,-e)},c.toGlobalFrame=function(a,b,d,e){c.copy(a,b),c.rotate(a,a,e),c.add(a,a,d)},c.centroid=function(a,b,d,e){return c.add(a,b,d),c.add(a,a,e),c.scale(a,a,1/3),a},b.exports=c},{"../../build/vec2":1}],31:[function(a,b){function c(a){a=a||{},h.call(this),this.id=++c._idCounter,this.world=null,this.shapes=[],this.shapeOffsets=[],this.shapeAngles=[],this.mass=a.mass||0,this.invMass=0,this.inertia=0,this.invInertia=0,this.fixedRotation=!!a.fixedRotation||!1,this.position=d.fromValues(0,0),a.position&&d.copy(this.position,a.position),this.interpolatedPosition=d.fromValues(0,0),this.interpolatedAngle=0,this.previousPosition=d.fromValues(0,0),this.previousAngle=0,this.velocity=d.fromValues(0,0),a.velocity&&d.copy(this.velocity,a.velocity),this.vlambda=d.fromValues(0,0),this.wlambda=0,this.angle=a.angle||0,this.angularVelocity=a.angularVelocity||0,this.force=d.create(),a.force&&d.copy(this.force,a.force),this.angularForce=a.angularForce||0,this.damping="number"==typeof a.damping?a.damping:.1,this.angularDamping="number"==typeof a.angularDamping?a.angularDamping:.1,this.motionState=0===this.mass?c.STATIC:c.DYNAMIC,this.boundingRadius=0,this.aabb=new g,this.aabbNeedsUpdate=!0,this.allowSleep=!0,this.wantsToSleep=!1,this.sleepState=c.AWAKE,this.sleepSpeedLimit=.2,this.sleepTimeLimit=1,this.gravityScale=1,this.timeLastSleepy=0,this.concavePath=null,this.lastDampingScale=1,this.lastAngularDampingScale=1,this.lastDampingTimeStep=-1,this._wakeUpAfterNarrowphase=!1,this.updateMassProperties()}var d=a("../math/vec2"),e=a("poly-decomp"),f=a("../shapes/Convex"),g=a("../collision/AABB"),h=a("../events/EventEmitter");b.exports=c,c.prototype=new h,c._idCounter=0,c.prototype.setDensity=function(a){var b=this.getArea();this.mass=b*a,this.updateMassProperties()},c.prototype.getArea=function(){for(var a=0,b=0;be&&(e=h+i)}this.boundingRadius=e},c.prototype.addShape=function(a,b,c){c=c||0,b=b?d.fromValues(b[0],b[1]):d.fromValues(0,0),this.shapes.push(a),this.shapeOffsets.push(b),this.shapeAngles.push(c),this.updateMassProperties(),this.updateBoundingRadius(),this.aabbNeedsUpdate=!0},c.prototype.removeShape=function(a){var b=this.shapes.indexOf(a);return-1!==b?(this.shapes.splice(b,1),this.shapeOffsets.splice(b,1),this.shapeAngles.splice(b,1),this.aabbNeedsUpdate=!0,!0):!1},c.prototype.updateMassProperties=function(){if(this.motionState===c.STATIC||this.motionState===c.KINEMATIC)this.mass=Number.MAX_VALUE,this.invMass=0,this.inertia=Number.MAX_VALUE,this.invInertia=0;else{var a=this.shapes,b=a.length,e=this.mass/b,f=0;if(this.fixedRotation)this.inertia=Number.MAX_VALUE,this.invInertia=0;else{for(var g=0;b>g;g++){var h=a[g],i=d.squaredLength(this.shapeOffsets[g]),j=h.computeMomentOfInertia(e);f+=j+e*i}this.inertia=f,this.invInertia=f>0?1/f:0}this.invMass=1/this.mass}};var k=d.create();c.prototype.applyForce=function(a,b){var c=k;d.sub(c,b,this.position),d.add(this.force,this.force,a);var e=d.crossLength(c,a);this.angularForce+=e},c.prototype.toLocalFrame=function(a,b){d.toLocalFrame(a,b,this.position,this.angle)},c.prototype.toWorldFrame=function(a,b){d.toGlobalFrame(a,b,this.position,this.angle)},c.prototype.fromPolygon=function(a,b){b=b||{};for(var c=this.shapes.length;c>=0;--c)this.removeShape(this.shapes[c]);var g=new e.Polygon;if(g.vertices=a,g.makeCCW(),"number"==typeof b.removeCollinearPoints&&g.removeCollinearPoints(b.removeCollinearPoints),"undefined"==typeof b.skipSimpleCheck&&!g.isSimple())return!1;this.concavePath=g.vertices.slice(0);for(var c=0;c=g?(this.idleTime=0,this.sleepState=c.AWAKE):(this.idleTime+=e,this.sleepState=c.SLEEPY),this.idleTime>this.sleepTimeLimit&&(b?this.wantsToSleep=!0:this.sleep())}},c.prototype.getVelocityFromPosition=function(a,b){return a=a||d.create(),d.sub(a,this.position,this.previousPosition),d.scale(a,a,1/b),a},c.prototype.getAngularVelocityFromPosition=function(a){return(this.angle-this.previousAngle)/a},c.sleepyEvent={type:"sleepy"},c.sleepEvent={type:"sleep"},c.wakeUpEvent={type:"wakeup"},c.DYNAMIC=1,c.STATIC=2,c.KINEMATIC=4,c.AWAKE=0,c.SLEEPY=1,c.SLEEPING=2},{"../collision/AABB":8,"../events/EventEmitter":26,"../math/vec2":30,"../shapes/Convex":36,"poly-decomp":6}],32:[function(a,b){function c(a,b,c){c=e.defaults(c,{restLength:1,stiffness:100,damping:1,localAnchorA:[0,0],localAnchorB:[0,0]}),this.restLength=c.restLength,this.stiffness=c.stiffness,this.damping=c.damping,this.bodyA=a,this.bodyB=b,this.localAnchorA=d.create(),d.copy(this.localAnchorA,c.localAnchorA),this.localAnchorB=d.create(),d.copy(this.localAnchorB,c.localAnchorB),c.worldAnchorA&&this.setWorldAnchorA(c.worldAnchorA),c.worldAnchorB&&this.setWorldAnchorB(c.worldAnchorB)}var d=a("../math/vec2"),e=a("../utils/Utils");b.exports=c,c.prototype.setWorldAnchorA=function(a){this.bodyA.toLocalFrame(this.localAnchorA,a)},c.prototype.setWorldAnchorB=function(a){this.bodyB.toLocalFrame(this.localAnchorB,a)},c.prototype.getWorldAnchorA=function(a){this.bodyA.toWorldFrame(a,this.localAnchorA)},c.prototype.getWorldAnchorB=function(a){this.bodyB.toWorldFrame(a,this.localAnchorB)};var f=d.create(),g=d.create(),h=d.create(),i=d.create(),j=d.create(),k=d.create(),l=d.create(),m=d.create(),n=d.create();c.prototype.applyForce=function(){var a=this.stiffness,b=this.damping,c=this.restLength,e=this.bodyA,o=this.bodyB,p=f,q=g,r=h,s=i,t=n,u=j,v=k,w=l,x=m;this.getWorldAnchorA(u),this.getWorldAnchorB(v),d.sub(w,u,e.position),d.sub(x,v,o.position),d.sub(p,v,u);var y=d.len(p);d.normalize(q,p),d.sub(r,o.velocity,e.velocity),d.crossZV(t,o.angularVelocity,x),d.add(r,r,t),d.crossZV(t,e.angularVelocity,w),d.sub(r,r,t),d.scale(s,q,-a*(y-c)-b*d.dot(r,q)),d.sub(e.force,e.force,s),d.add(o.force,o.force,s); +var z=d.crossLength(w,s),A=d.crossLength(x,s);e.angularForce-=z,o.angularForce+=A}},{"../math/vec2":30,"../utils/Utils":47}],33:[function(a,b){b.exports={AABB:a("./collision/AABB"),AngleLockEquation:a("./equations/AngleLockEquation"),Body:a("./objects/Body"),Broadphase:a("./collision/Broadphase"),Capsule:a("./shapes/Capsule"),Circle:a("./shapes/Circle"),Constraint:a("./constraints/Constraint"),ContactEquation:a("./equations/ContactEquation"),ContactMaterial:a("./material/ContactMaterial"),Convex:a("./shapes/Convex"),DistanceConstraint:a("./constraints/DistanceConstraint"),Equation:a("./equations/Equation"),EventEmitter:a("./events/EventEmitter"),FrictionEquation:a("./equations/FrictionEquation"),GearConstraint:a("./constraints/GearConstraint"),GridBroadphase:a("./collision/GridBroadphase"),GSSolver:a("./solver/GSSolver"),Heightfield:a("./shapes/Heightfield"),Line:a("./shapes/Line"),LockConstraint:a("./constraints/LockConstraint"),Material:a("./material/Material"),Narrowphase:a("./collision/Narrowphase"),NaiveBroadphase:a("./collision/NaiveBroadphase"),Particle:a("./shapes/Particle"),Plane:a("./shapes/Plane"),RevoluteConstraint:a("./constraints/RevoluteConstraint"),PrismaticConstraint:a("./constraints/PrismaticConstraint"),Rectangle:a("./shapes/Rectangle"),RotationalVelocityEquation:a("./equations/RotationalVelocityEquation"),SAPBroadphase:a("./collision/SAPBroadphase"),Shape:a("./shapes/Shape"),Solver:a("./solver/Solver"),Spring:a("./objects/Spring"),Utils:a("./utils/Utils"),World:a("./world/World"),vec2:a("./math/vec2"),version:a("../package.json").version}},{"../package.json":7,"./collision/AABB":8,"./collision/Broadphase":9,"./collision/GridBroadphase":10,"./collision/NaiveBroadphase":11,"./collision/Narrowphase":12,"./collision/SAPBroadphase":13,"./constraints/Constraint":14,"./constraints/DistanceConstraint":15,"./constraints/GearConstraint":16,"./constraints/LockConstraint":17,"./constraints/PrismaticConstraint":18,"./constraints/RevoluteConstraint":19,"./equations/AngleLockEquation":20,"./equations/ContactEquation":21,"./equations/Equation":22,"./equations/FrictionEquation":23,"./equations/RotationalVelocityEquation":25,"./events/EventEmitter":26,"./material/ContactMaterial":27,"./material/Material":28,"./math/vec2":30,"./objects/Body":31,"./objects/Spring":32,"./shapes/Capsule":34,"./shapes/Circle":35,"./shapes/Convex":36,"./shapes/Heightfield":37,"./shapes/Line":38,"./shapes/Particle":39,"./shapes/Plane":40,"./shapes/Rectangle":41,"./shapes/Shape":42,"./solver/GSSolver":43,"./solver/Solver":44,"./utils/Utils":47,"./world/World":51}],34:[function(a,b){function c(a,b){this.length=a||1,this.radius=b||1,d.call(this,d.CAPSULE)}var d=a("./Shape"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.computeMomentOfInertia=function(a){var b=this.radius,c=this.length+b,d=2*b;return a*(d*d+c*c)/12},c.prototype.updateBoundingRadius=function(){this.boundingRadius=this.radius+this.length/2},c.prototype.updateArea=function(){this.area=Math.PI*this.radius*this.radius+2*this.radius*this.length};var f=e.create();c.prototype.computeAABB=function(a,b,c){var d=this.radius;e.set(f,this.length,0),e.rotate(f,f,c),e.set(a.upperBound,Math.max(f[0]+d,-f[0]+d),Math.max(f[1]+d,-f[1]+d)),e.set(a.lowerBound,Math.min(f[0]-d,-f[0]-d),Math.min(f[1]-d,-f[1]-d)),e.add(a.lowerBound,a.lowerBound,b),e.add(a.upperBound,a.upperBound,b)}},{"../math/vec2":30,"./Shape":42}],35:[function(a,b){function c(a){this.radius=a||1,d.call(this,d.CIRCLE)}var d=a("./Shape"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.computeMomentOfInertia=function(a){var b=this.radius;return a*b*b/2},c.prototype.updateBoundingRadius=function(){this.boundingRadius=this.radius},c.prototype.updateArea=function(){this.area=Math.PI*this.radius*this.radius},c.prototype.computeAABB=function(a,b){var c=this.radius;e.set(a.upperBound,c,c),e.set(a.lowerBound,-c,-c),b&&(e.add(a.lowerBound,a.lowerBound,b),e.add(a.upperBound,a.upperBound,b))}},{"../math/vec2":30,"./Shape":42}],36:[function(a,b){function c(a){this.vertices=[];for(var b=0;bg;f=g,g++){var h=this.vertices[f],i=this.vertices[g],j=Math.abs(e.crossLength(h,i)),k=e.dot(i,i)+e.dot(i,h)+e.dot(h,h);b+=j*k,c+=j}return a/6*(b/c)},c.prototype.updateBoundingRadius=function(){for(var a=this.vertices,b=0,c=0;c!==a.length;c++){var d=e.squaredLength(a[c]);d>b&&(b=d)}this.boundingRadius=Math.sqrt(b)},c.triangleArea=function(a,b,c){return.5*((b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1]))},c.prototype.updateArea=function(){this.updateTriangles(),this.area=0;for(var a=this.triangles,b=this.vertices,d=0;d!==a.length;d++){var e=a[d],f=b[e[0]],g=b[e[1]],h=b[e[2]],i=c.triangleArea(f,g,h);this.area+=i}},c.prototype.computeAABB=function(a,b,c){a.setFromPoints(this.vertices,b,c)}},{"../math/polyk":29,"../math/vec2":30,"./Shape":42,"poly-decomp":6}],37:[function(a,b){function c(a,b){if(b=e.defaults(b,{maxValue:null,minValue:null,elementWidth:.1}),null===b.minValue||null===b.maxValue){b.maxValue=a[0],b.minValue=a[0];for(var c=0;c!==a.length;c++){var f=a[c];f>b.maxValue&&(b.maxValue=f),f=v*v)break}for(c.updateMultipliers(k,q,1/a),w=0;w!==l;w++){var y=k[w];if(y instanceof h){var z=y.contactEquation.multiplier*y.frictionCoefficient;y.maxForce=z,y.minForce=-z}}}for(f=0;f!==i;f++){for(v=0,w=0;w!==l;w++){u=k[w];var x=c.iterateEquation(w,u,u.epsilon,s,r,q,p,a,f);v+=Math.abs(x)}if(this.usedIterations++,m>=v*v)break}for(t=0;t!==o;t++)n[t].addConstraintVelocity();c.updateMultipliers(k,q,1/a)}},c.updateMultipliers=function(a,b,c){for(var d=a.length;d--;)a[d].multiplier=b[d]*c},c.iterateEquation=function(a,b,c,d,e,f,g,h){var i=d[a],j=e[a],k=f[a],l=b.computeGWlambda(),m=b.maxForce,n=b.minForce;g&&(i=0);var o=j*(i-l-c*k),p=k+o;return n*h>p?o=n*h-k:p>m*h&&(o=m*h-k),f[a]+=o,b.addToWlambda(o),o}},{"../equations/FrictionEquation":23,"../math/vec2":30,"../utils/Utils":47,"./Solver":44}],44:[function(a,b){function c(a,b){a=a||{},d.call(this),this.type=b,this.equations=[],this.equationSortFunction=a.equationSortFunction||!1}var d=(a("../utils/Utils"),a("../events/EventEmitter"));b.exports=c,c.prototype=new d,c.prototype.solve=function(){throw new Error("Solver.solve should be implemented by subclasses!")};var e={bodies:[]};c.prototype.solveIsland=function(a,b){this.removeAllEquations(),b.equations.length&&(this.addEquations(b.equations),e.bodies.length=0,b.getBodies(e.bodies),e.bodies.length&&this.solve(a,e))},c.prototype.sortEquations=function(){this.equationSortFunction&&this.equations.sort(this.equationSortFunction)},c.prototype.addEquation=function(a){a.enabled&&this.equations.push(a)},c.prototype.addEquations=function(a){for(var b=0,c=a.length;b!==c;b++){var d=a[b];d.enabled&&this.equations.push(d)}},c.prototype.removeEquation=function(a){var b=this.equations.indexOf(a);-1!==b&&this.equations.splice(b,1)},c.prototype.removeAllEquations=function(){this.equations.length=0},c.GS=1,c.ISLAND=2},{"../events/EventEmitter":26,"../utils/Utils":47}],45:[function(a,b){function c(){this.overlappingLastState=new e,this.overlappingCurrentState=new e,this.recordPool=[],this.tmpDict=new e,this.tmpArray1=[]}function d(a,b,c,d){this.shapeA=b,this.shapeB=d,this.bodyA=a,this.bodyB=c}{var e=a("./TupleDictionary");a("./Utils")}b.exports=c,c.prototype.tick=function(){for(var a=this.overlappingLastState,b=this.overlappingCurrentState,c=b.keys.length;c--;){var d=b.keys[c];this.recordPool.push(b.getByKey(d))}a.reset(),a.copy(b),b.reset()},c.prototype.setOverlapping=function(a,b,c,e){var f=(this.overlappingLastState,this.overlappingCurrentState);if(!f.get(b.id,e.id)){var g;g=this.recordPool.length?this.recordPool.pop():new d(a,b,c,e),f.set(b.id,e.id,g)}},c.prototype.getNewOverlaps=function(a){return this.getDiff(this.overlappingLastState,this.overlappingCurrentState,a)},c.prototype.getEndOverlaps=function(a){return this.getDiff(this.overlappingCurrentState,this.overlappingLastState,a)},c.prototype.getDiff=function(a,b,c){var c=c||[],d=a,e=b;c.length=0;for(var f=e.keys.length;f--;){var g=e.keys[f],h=e.data[g];if(!h)throw new Error("Key "+g+" had no data!");var i=d.data[g];i||c.push(h)}return c},c.prototype.isNewOverlap=function(a,b){var c=0|a.id,d=0|b.id;return!this.overlappingLastState.get(c,d)&&!!this.overlappingCurrentState.get(c,d)},c.prototype.getNewBodyOverlaps=function(a){this.tmpArray1.length=0;var b=this.getNewOverlaps(this.tmpArray1);return this.getBodyDiff(b,a)},c.prototype.getEndBodyOverlaps=function(a){this.tmpArray1.length=0;var b=this.getEndOverlaps(this.tmpArray1);return this.getBodyDiff(b,a)},c.prototype.getBodyDiff=function(a,b){b=b||[];for(var c=this.tmpDict,d=a.length;d--;){var e=a[d];c.set(0|e.bodyA.id,0|e.bodyB.id,e)}for(d=c.keys.length;d--;){var e=c.keys[d];b.push(e.bodyA,e.bodyB)}return c.reset(),b},d.prototype.set=function(a,b,c,e){d.call(this,a,b,c,e)}},{"./TupleDictionary":46,"./Utils":47}],46:[function(a,b){function c(){this.data=[],this.keys=[]}var d=a("./Utils");b.exports=c,c.prototype.getKey=function(a,b){return a=0|a,b=0|b,(0|a)===(0|b)?-1:0|((0|a)>(0|b)?a<<16|65535&b:b<<16|65535&a)},c.prototype.getByKey=function(a){return a=0|a,this.data[a]},c.prototype.get=function(a,b){a=0|a,b=0|b;var c=0|this.getKey(a,b);return this.data[c]},c.prototype.set=function(a,b,c){if(!c)throw new Error("No data!");a=0|a,b=0|b;var d=0|this.getKey(a,b);return this.get(a,b)||this.keys.push(d),this.data[d]=c,d},c.prototype.reset=function(){for(var a=this.data,b=this.keys,c=0|b.length;c--;){var d=0|b[c];a[d]=void 0}b.length=0},c.prototype.copy=function(a){this.reset(),d.appendArray(this.keys,a.keys);for(var b=0|a.keys.length;b--;){var c=0|a.keys[b];this.data[c]=a.data[c]}}},{"./Utils":47}],47:[function(a,b){function c(){}b.exports=c,c.appendArray=function(a,b){if(b.length<15e4)a.push.apply(a,b);else for(var c=0,d=b.length;c!==d;++c)a.push(b[c])},c.splice=function(a,b,c){c=c||1;for(var d=b,e=a.length-c;e>d;d++)a[d]=a[d+c];a.length=e},c.ARRAY_TYPE=window.Float32Array||Array,c.extend=function(a,b){for(var c in b)a[c]=b[c]},c.defaults=function(a,b){a=a||{};for(var c in b)c in a||(a[c]=b[c]);return a}},{}],48:[function(a,b){function c(){this.equations=[],this.bodies=[]}var d=a("../objects/Body");b.exports=c,c.prototype.reset=function(){this.equations.length=this.bodies.length=0};var e=[];c.prototype.getBodies=function(a){var b=a||[],c=this.equations;e.length=0;for(var d=0;d!==c.length;d++){var f=c[d];-1===e.indexOf(f.bodyA.id)&&(b.push(f.bodyA),e.push(f.bodyA.id)),-1===e.indexOf(f.bodyB.id)&&(b.push(f.bodyB),e.push(f.bodyB.id))}return b},c.prototype.wantsToSleep=function(){for(var a=0;a=0;v-=2)for(var B=z.length-2;B>=0;B-=2)(A[v]===z[B]&&A[v+1]===z[B+1]||A[v+1]===z[B]&&A[v]===z[B+1])&&z.splice(B,2);var C=p.length;for(v=0;v!==C;v++){var D=p[v];if(!D.collideConnected)for(var B=z.length-2;B>=0;B-=2)(D.bodyA===z[B]&&D.bodyB===z[B+1]||D.bodyB===z[B]&&D.bodyA===z[B+1])&&z.splice(B,2)}this.postBroadphaseEvent.pairs=z,this.emit(this.postBroadphaseEvent),o.reset(this);for(var v=0,E=z.length;v!==E;v+=2)for(var F=z[v],G=z[v+1],I=0,J=F.shapes.length;I!==J;I++)for(var K=F.shapes[I],M=F.shapeOffsets[I],N=F.shapeAngles[I],O=0,Q=G.shapes.length;O!==Q;O++){var R=G.shapes[O],S=G.shapeOffsets[O],T=G.shapeAngles[O],U=this.defaultContactMaterial;if(K.material&&R.material){var V=this.getContactMaterial(K.material,R.material);V&&(U=V)}this.runNarrowphase(o,F,K,M,N,G,R,S,T,U,this.frictionGravity)}for(var v=0;v!==m;v++){var W=i[v];W._wakeUpAfterNarrowphase&&(W.wakeUp(),W._wakeUpAfterNarrowphase=!1)}if(this.has("endContact")){this.overlapKeeper.getEndOverlaps(P);for(var X=this.endContactEvent,O=P.length;O--;){var Y=P[O];X.shapeA=Y.shapeA,X.shapeB=Y.shapeB,X.bodyA=Y.bodyA,X.bodyB=Y.bodyA,this.emit(X)}}this.overlapKeeper.tick();var Z=this.preSolveEvent;Z.contactEquations=o.contactEquations,Z.frictionEquations=o.frictionEquations,this.emit(Z);var C=p.length;for(v=0;v!==C;v++)p[v].update();if(o.contactEquations.length||o.frictionEquations.length||p.length)if(this.islandSplit){for(t.equations.length=0,H.appendArray(t.equations,o.contactEquations),H.appendArray(t.equations,o.frictionEquations),v=0;v!==C;v++)H.appendArray(t.equations,p[v].equations);t.split(this);for(var v=0;v!==t.islands.length;v++){var $=t.islands[v];$.equations.length&&l.solveIsland(a,$)}}else{for(l.addEquations(o.contactEquations),l.addEquations(o.frictionEquations),v=0;v!==C;v++)l.addEquations(p[v].equations);this.solveConstraints&&l.solve(a,this),l.removeAllEquations()}for(var v=0;v!==m;v++){var W=i[v];W.sleepState!==s.SLEEPING&&W.motionState!==s.STATIC&&c.integrateBody(W,a)}for(var v=0;v!==m;v++)i[v].setZeroForce();if(f&&(d=performance.now(),e.lastStepTime=d-b),this.emitImpactEvent&&this.has("impact"))for(var _=this.impactEvent,v=0;v!==o.contactEquations.length;v++){var ab=o.contactEquations[v];ab.firstImpact&&(_.bodyA=ab.bodyA,_.bodyB=ab.bodyB,_.shapeA=ab.shapeA,_.shapeB=ab.shapeB,_.contactEquation=ab,this.emit(_))}if(this.enableBodySleeping)for(v=0;v!==m;v++)i[v].sleepTick(this.time,!1,a);else if(this.enableIslandSleeping&&this.islandSplit){for(v=0;v!==m;v++)i[v].sleepTick(this.time,!0,a);for(var v=0;v0,a.frictionCoefficient=k.friction;var o;o=b.motionState===s.STATIC||b.motionState===s.KINEMATIC?f.mass:f.motionState===s.STATIC||f.motionState===s.KINEMATIC?b.mass:b.mass*f.mass/(b.mass+f.mass),a.slipForce=k.friction*l*o,a.restitution=k.restitution,a.surfaceVelocity=k.surfaceVelocity,a.frictionStiffness=k.frictionStiffness,a.frictionRelaxation=k.frictionRelaxation,a.stiffness=k.stiffness,a.relaxation=k.relaxation;var p=a[c.type|g.type],q=0;if(p){var r=c.sensor||g.sensor,t=a.frictionEquations.length;q=c.type=2*w&&(b._wakeUpAfterNarrowphase=!0)}if(f.allowSleep&&f.motionState===s.DYNAMIC&&f.sleepState===s.SLEEPING&&b.sleepState===s.AWAKE&&b.motionState!==s.STATIC){var x=j.squaredLength(b.velocity)+Math.pow(b.angularVelocity,2),y=Math.pow(b.sleepSpeedLimit,2);x>=2*y&&(f._wakeUpAfterNarrowphase=!0)}if(this.overlapKeeper.setOverlapping(b,c,f,g),this.has("beginContact")&&this.overlapKeeper.isNewOverlap(c,g)){var z=this.beginContactEvent;if(z.shapeA=c,z.shapeB=g,z.bodyA=b,z.bodyB=f,z.contactEquations.length=0,"number"==typeof q)for(var A=a.contactEquations.length-q;A1)for(var A=a.frictionEquations.length-u;A=0;b--)this.removeConstraint(a[b]);for(var d=this.bodies,b=d.length-1;b>=0;b--)this.removeBody(d[b]);for(var e=this.springs,b=e.length-1;b>=0;b--)this.removeSpring(e[b]);for(var f=this.contactMaterials,b=f.length-1;b>=0;b--)this.removeContactMaterial(f[b]);c.apply(this)},c.prototype.clone=function(){var a=new c;return a.fromJSON(this.toJSON()),a};var S=j.create(),T=j.fromValues(0,0),U=j.fromValues(0,0);c.prototype.hitTest=function(a,b,c){c=c||0;var d=new s({position:a}),e=new q,f=a,g=0,h=S,i=T,l=U;d.addShape(e);for(var n=this.narrowphase,r=[],t=0,u=b.length;t!==u;t++)for(var v=b[t],w=0,x=v.shapes.length;w!==x;w++){var y=v.shapes[w],z=v.shapeOffsets[w]||i,A=v.shapeAngles[w]||0;j.rotate(h,z,v.angle),j.add(h,h,v.position);var B=A+v.angle;(y instanceof k&&n.circleParticle(v,y,h,B,d,e,f,g,!0)||y instanceof m&&n.particleConvex(d,e,f,g,v,y,h,B,!0)||y instanceof o&&n.particlePlane(d,e,f,g,v,y,h,B,!0)||y instanceof p&&n.particleCapsule(d,e,f,g,v,y,h,B,!0)||y instanceof q&&j.squaredLength(j.sub(l,h,a))0&&this.enable(a[d],b,!0));else a instanceof Phaser.Group?this.enable(a.children,b,c):(this.enableBody(a,b),c&&a.hasOwnProperty("children")&&a.children.length>0&&this.enable(a.children,b,!0))},enableBody:function(a,b){a.hasOwnProperty("body")&&null===a.body&&(a.body=new Phaser.Physics.P2.Body(this.game,a,a.x,a.y,1),a.body.debug=b,a.anchor.set(.5))},setImpactEvents:function(a){a?this.world.on("impact",this.impactHandler,this):this.world.off("impact",this.impactHandler,this)},setPostBroadphaseCallback:function(a,b){this.postBroadphaseCallback=a,this.callbackContext=b,null!==a?this.world.on("postBroadphase",this.postBroadphaseHandler,this):this.world.off("postBroadphase",this.postBroadphaseHandler,this)},postBroadphaseHandler:function(a){if(this.postBroadphaseCallback)for(var b=a.pairs.length;b-=2;)a.pairs[b].parent&&a.pairs[b+1].parent&&!this.postBroadphaseCallback.call(this.callbackContext,a.pairs[b].parent,a.pairs[b+1].parent)&&a.pairs.splice(b,2)},impactHandler:function(a){if(a.bodyA.parent&&a.bodyB.parent){var b=a.bodyA.parent,c=a.bodyB.parent;b._bodyCallbacks[a.bodyB.id]&&b._bodyCallbacks[a.bodyB.id].call(b._bodyCallbackContext[a.bodyB.id],b,c,a.shapeA,a.shapeB),c._bodyCallbacks[a.bodyA.id]&&c._bodyCallbacks[a.bodyA.id].call(c._bodyCallbackContext[a.bodyA.id],c,b,a.shapeB,a.shapeA),b._groupCallbacks[a.shapeB.collisionGroup]&&b._groupCallbacks[a.shapeB.collisionGroup].call(b._groupCallbackContext[a.shapeB.collisionGroup],b,c,a.shapeA,a.shapeB),c._groupCallbacks[a.shapeA.collisionGroup]&&c._groupCallbacks[a.shapeA.collisionGroup].call(c._groupCallbackContext[a.shapeA.collisionGroup],c,b,a.shapeB,a.shapeA)}},beginContactHandler:function(a){this.onBeginContact.dispatch(a.bodyA,a.bodyB,a.shapeA,a.shapeB,a.contactEquations),a.bodyA.parent&&a.bodyA.parent.onBeginContact.dispatch(a.bodyB.parent,a.shapeA,a.shapeB,a.contactEquations),a.bodyB.parent&&a.bodyB.parent.onBeginContact.dispatch(a.bodyA.parent,a.shapeB,a.shapeA,a.contactEquations)},endContactHandler:function(a){this.onEndContact.dispatch(a.bodyA,a.bodyB,a.shapeA,a.shapeB),a.bodyA.parent&&a.bodyA.parent.onEndContact.dispatch(a.bodyB.parent,a.shapeA,a.shapeB),a.bodyB.parent&&a.bodyB.parent.onEndContact.dispatch(a.bodyA.parent,a.shapeB,a.shapeA)},setBoundsToWorld:function(a,b,c,d,e){this.setBounds(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,a,b,c,d,e)},setWorldMaterial:function(a,b,c,d,e){"undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=!0),b&&this.walls.left&&(this.walls.left.shapes[0].material=a),c&&this.walls.right&&(this.walls.right.shapes[0].material=a),d&&this.walls.top&&(this.walls.top.shapes[0].material=a),e&&this.walls.bottom&&(this.walls.bottom.shapes[0].material=a)},updateBoundsCollisionGroup:function(a){var b=this.everythingCollisionGroup.mask;"undefined"==typeof a&&(b=this.boundsCollisionGroup.mask),this.walls.left&&(this.walls.left.shapes[0].collisionGroup=b),this.walls.right&&(this.walls.right.shapes[0].collisionGroup=b),this.walls.top&&(this.walls.top.shapes[0].collisionGroup=b),this.walls.bottom&&(this.walls.bottom.shapes[0].collisionGroup=b)},setBounds:function(a,b,c,d,e,f,g,h,i){"undefined"==typeof e&&(e=!0),"undefined"==typeof f&&(f=!0),"undefined"==typeof g&&(g=!0),"undefined"==typeof h&&(h=!0),"undefined"==typeof i&&(i=!0),this.walls.left&&this.world.removeBody(this.walls.left),this.walls.right&&this.world.removeBody(this.walls.right),this.walls.top&&this.world.removeBody(this.walls.top),this.walls.bottom&&this.world.removeBody(this.walls.bottom),e&&(this.walls.left=new p2.Body({mass:0,position:[this.pxmi(a),this.pxmi(b)],angle:1.5707963267948966}),this.walls.left.addShape(new p2.Plane),i&&(this.walls.left.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.left)),f&&(this.walls.right=new p2.Body({mass:0,position:[this.pxmi(a+c),this.pxmi(b)],angle:-1.5707963267948966}),this.walls.right.addShape(new p2.Plane),i&&(this.walls.right.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.right)),g&&(this.walls.top=new p2.Body({mass:0,position:[this.pxmi(a),this.pxmi(b)],angle:-3.141592653589793}),this.walls.top.addShape(new p2.Plane),i&&(this.walls.top.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.top)),h&&(this.walls.bottom=new p2.Body({mass:0,position:[this.pxmi(a),this.pxmi(d)]}),this.walls.bottom.addShape(new p2.Plane),i&&(this.walls.bottom.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.bottom))},pause:function(){this.paused=!0},resume:function(){this.paused=!1},update:function(){this.paused||this.world.step(this.useElapsedTime?this.game.time.physicsElapsed:this.frameRate)},clear:function(){this.world.clear(),this.world.off("beginContact",this.beginContactHandler,this),this.world.off("endContact",this.endContactHandler,this),this.postBroadphaseCallback=null,this.callbackContext=null,this.impactCallback=null,this.collisionGroups=[],this._toRemove=[],this._collisionGroupID=2,this.boundsCollidesWith=[]},destroy:function(){this.clear(),this.game=null},addBody:function(a){return a.data.world?!1:(this.world.addBody(a.data),this.onBodyAdded.dispatch(a),!0)},removeBody:function(a){return a.data.world==this.world&&(this.world.removeBody(a.data),this.onBodyRemoved.dispatch(a)),a},addSpring:function(a){return this.world.addSpring(a),this.onSpringAdded.dispatch(a),a},removeSpring:function(a){return this.world.removeSpring(a),this.onSpringRemoved.dispatch(a),a},createDistanceConstraint:function(a,b,c,d){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.DistanceConstraint(this,a,b,c,d)):void console.warn("Cannot create Constraint, invalid body objects given")},createGearConstraint:function(a,b,c,d){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.GearConstraint(this,a,b,c,d)):void console.warn("Cannot create Constraint, invalid body objects given")},createRevoluteConstraint:function(a,b,c,d,e){return a=this.getBody(a),c=this.getBody(c),a&&c?this.addConstraint(new Phaser.Physics.P2.RevoluteConstraint(this,a,b,c,d,e)):void console.warn("Cannot create Constraint, invalid body objects given")},createLockConstraint:function(a,b,c,d,e){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.LockConstraint(this,a,b,c,d,e)):void console.warn("Cannot create Constraint, invalid body objects given")},createPrismaticConstraint:function(a,b,c,d,e,f,g){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.PrismaticConstraint(this,a,b,c,d,e,f,g)):void console.warn("Cannot create Constraint, invalid body objects given")},addConstraint:function(a){return this.world.addConstraint(a),this.onConstraintAdded.dispatch(a),a},removeConstraint:function(a){return this.world.removeConstraint(a),this.onConstraintRemoved.dispatch(a),a},addContactMaterial:function(a){return this.world.addContactMaterial(a),this.onContactMaterialAdded.dispatch(a),a},removeContactMaterial:function(a){return this.world.removeContactMaterial(a),this.onContactMaterialRemoved.dispatch(a),a},getContactMaterial:function(a,b){return this.world.getContactMaterial(a,b)},setMaterial:function(a,b){for(var c=b.length;c--;)b[c].setMaterial(a)},createMaterial:function(a,b){a=a||"";var c=new Phaser.Physics.P2.Material(a);return this.materials.push(c),"undefined"!=typeof b&&b.setMaterial(c),c},createContactMaterial:function(a,b,c){"undefined"==typeof a&&(a=this.createMaterial()),"undefined"==typeof b&&(b=this.createMaterial());var d=new Phaser.Physics.P2.ContactMaterial(a,b,c);return this.addContactMaterial(d)},getBodies:function(){for(var a=[],b=this.world.bodies.length;b--;)a.push(this.world.bodies[b].parent);return a},getBody:function(a){return a instanceof p2.Body?a:a instanceof Phaser.Physics.P2.Body?a.data:a.body&&a.body.type===Phaser.Physics.P2JS?a.body.data:null},getSprings:function(){for(var a=[],b=this.world.springs.length;b--;)a.push(this.world.springs[b].parent);return a},getConstraints:function(){for(var a=[],b=this.world.constraints.length;b--;)a.push(this.world.constraints[b].parent);return a},hitTest:function(a,b,c,d){"undefined"==typeof b&&(b=this.world.bodies),"undefined"==typeof c&&(c=5),"undefined"==typeof d&&(d=!1);for(var e=[this.pxmi(a.x),this.pxmi(a.y)],f=[],g=b.length;g--;)b[g]instanceof Phaser.Physics.P2.Body&&(!d||b[g].data.motionState!==p2.Body.STATIC)?f.push(b[g].data):b[g]instanceof p2.Body&&b[g].parent&&(!d||b[g].motionState!==p2.Body.STATIC)?f.push(b[g]):b[g]instanceof Phaser.Sprite&&b[g].hasOwnProperty("body")&&(!d||b[g].body.data.motionState!==p2.Body.STATIC)&&f.push(b[g].body.data);return this.world.hitTest(e,f,c)},toJSON:function(){return this.world.toJSON()},createCollisionGroup:function(a){var b=Math.pow(2,this._collisionGroupID);this.walls.left&&(this.walls.left.shapes[0].collisionMask=this.walls.left.shapes[0].collisionMask|b),this.walls.right&&(this.walls.right.shapes[0].collisionMask=this.walls.right.shapes[0].collisionMask|b),this.walls.top&&(this.walls.top.shapes[0].collisionMask=this.walls.top.shapes[0].collisionMask|b),this.walls.bottom&&(this.walls.bottom.shapes[0].collisionMask=this.walls.bottom.shapes[0].collisionMask|b),this._collisionGroupID++;var c=new Phaser.Physics.P2.CollisionGroup(b);return this.collisionGroups.push(c),a&&this.setCollisionGroup(a,c),c},setCollisionGroup:function(a,b){if(a instanceof Phaser.Group)for(var c=0;ce;e++){var g=a.collision[b][e],h=this.createBody(g.x,g.y,0,c,{},g.polyline);h&&d.push(h)}return d},clearTilemapLayerBodies:function(a,b){b=a.getLayer(b);for(var c=a.layers[b].bodies.length;c--;)a.layers[b].bodies[c].destroy();a.layers[b].bodies.length=[]},convertTilemap:function(a,b,c,d){b=a.getLayer(b),"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!0),this.clearTilemapLayerBodies(a,b);for(var e=0,f=0,g=0,h=0,i=a.layers[b].height;i>h;h++){e=0;for(var j=0,k=a.layers[b].width;k>j;j++){var l=a.layers[b].data[h][j];if(l&&l.collides)if(d){var m=a.getTileRight(b,j,h);if(0===e&&(f=l.x*l.width,g=l.y*l.height,e=l.width),m&&m.collides)e+=l.width;else{var n=this.createBody(f,g,0,!1);n.addRectangle(e,l.height,e/2,l.height/2,0),c&&this.addBody(n),a.layers[b].bodies.push(n),e=0}}else{var n=this.createBody(l.x*l.width,l.y*l.height,0,!1);n.addRectangle(l.width,l.height,l.width/2,l.height/2,0),c&&this.addBody(n),a.layers[b].bodies.push(n)}}}return a.layers[b].bodies},mpx:function(a){return a*=20},pxm:function(a){return.05*a},mpxi:function(a){return a*=-20},pxmi:function(a){return a*-.05}},Object.defineProperty(Phaser.Physics.P2.prototype,"friction",{get:function(){return this.world.defaultContactMaterial.friction},set:function(a){this.world.defaultContactMaterial.friction=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"defaultFriction",{get:function(){return this.world.defaultContactMaterial.friction},set:function(a){this.world.defaultContactMaterial.friction=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"restitution",{get:function(){return this.world.defaultContactMaterial.restitution},set:function(a){this.world.defaultContactMaterial.restitution=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"defaultRestitution",{get:function(){return this.world.defaultContactMaterial.restitution},set:function(a){this.world.defaultContactMaterial.restitution=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"contactMaterial",{get:function(){return this.world.defaultContactMaterial},set:function(a){this.world.defaultContactMaterial=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"applySpringForces",{get:function(){return this.world.applySpringForces},set:function(a){this.world.applySpringForces=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"applyDamping",{get:function(){return this.world.applyDamping},set:function(a){this.world.applyDamping=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"applyGravity",{get:function(){return this.world.applyGravity},set:function(a){this.world.applyGravity=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"solveConstraints",{get:function(){return this.world.solveConstraints},set:function(a){this.world.solveConstraints=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"time",{get:function(){return this.world.time}}),Object.defineProperty(Phaser.Physics.P2.prototype,"emitImpactEvent",{get:function(){return this.world.emitImpactEvent},set:function(a){this.world.emitImpactEvent=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"enableBodySleeping",{get:function(){return this.world.enableBodySleeping},set:function(a){this.world.enableBodySleeping=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"total",{get:function(){return this.world.bodies.length}}),Phaser.Physics.P2.FixtureList=function(a){Array.isArray(a)||(a=[a]),this.rawList=a,this.init(),this.parse(this.rawList)},Phaser.Physics.P2.FixtureList.prototype={init:function(){this.namedFixtures={},this.groupedFixtures=[],this.allFixtures=[]},setCategory:function(a,b){var c=function(b){b.collisionGroup=a};this.getFixtures(b).forEach(c)},setMask:function(a,b){var c=function(b){b.collisionMask=a};this.getFixtures(b).forEach(c)},setSensor:function(a,b){var c=function(b){b.sensor=a};this.getFixtures(b).forEach(c)},setMaterial:function(a,b){var c=function(b){b.material=a};this.getFixtures(b).forEach(c)},getFixtures:function(a){var b=[];if(a){a instanceof Array||(a=[a]);var c=this;return a.forEach(function(a){c.namedFixtures[a]&&b.push(c.namedFixtures[a])}),this.flatten(b)}return this.allFixtures},getFixtureByKey:function(a){return this.namedFixtures[a]},getGroup:function(a){return this.groupedFixtures[a]},parse:function(){var a,b,c,d;c=this.rawList,d=[];for(a in c)b=c[a],isNaN(a-0)?this.namedFixtures[a]=this.flatten(b):(this.groupedFixtures[a]=this.groupedFixtures[a]||[],this.groupedFixtures[a]=this.groupedFixtures[a].concat(b)),d.push(this.allFixtures=this.flatten(this.groupedFixtures))},flatten:function(a){var b,c;return b=[],c=arguments.callee,a.forEach(function(a){return Array.prototype.push.apply(b,Array.isArray(a)?c(a):[a])}),b}},Phaser.Physics.P2.PointProxy=function(a,b){this.world=a,this.destination=b},Phaser.Physics.P2.PointProxy.prototype.constructor=Phaser.Physics.P2.PointProxy,Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype,"x",{get:function(){return this.destination[0]},set:function(a){this.destination[0]=this.world.pxm(a)}}),Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype,"y",{get:function(){return this.destination[1]},set:function(a){this.destination[1]=this.world.pxm(a)}}),Phaser.Physics.P2.InversePointProxy=function(a,b){this.world=a,this.destination=b},Phaser.Physics.P2.InversePointProxy.prototype.constructor=Phaser.Physics.P2.InversePointProxy,Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype,"x",{get:function(){return this.destination[0]},set:function(a){this.destination[0]=this.world.pxm(-a)}}),Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype,"y",{get:function(){return this.destination[1]},set:function(a){this.destination[1]=this.world.pxm(-a)}}),Phaser.Physics.P2.Body=function(a,b,c,d,e){b=b||null,c=c||0,d=d||0,"undefined"==typeof e&&(e=1),this.game=a,this.world=a.physics.p2,this.sprite=b,this.type=Phaser.Physics.P2JS,this.offset=new Phaser.Point,this.data=new p2.Body({position:[this.world.pxmi(c),this.world.pxmi(d)],mass:e}),this.data.parent=this,this.velocity=new Phaser.Physics.P2.InversePointProxy(this.world,this.data.velocity),this.force=new Phaser.Physics.P2.InversePointProxy(this.world,this.data.force),this.gravity=new Phaser.Point,this.onBeginContact=new Phaser.Signal,this.onEndContact=new Phaser.Signal,this.collidesWith=[],this.removeNextStep=!1,this.debugBody=null,this._collideWorldBounds=!0,this._bodyCallbacks={},this._bodyCallbackContext={},this._groupCallbacks={},this._groupCallbackContext={},b&&(this.setRectangleFromSprite(b),b.exists&&this.game.physics.p2.addBody(this))},Phaser.Physics.P2.Body.prototype={createBodyCallback:function(a,b,c){var d=-1;a.id?d=a.id:a.body&&(d=a.body.id),d>-1&&(null===b?(delete this._bodyCallbacks[d],delete this._bodyCallbackContext[d]):(this._bodyCallbacks[d]=b,this._bodyCallbackContext[d]=c))},createGroupCallback:function(a,b,c){null===b?(delete this._groupCallbacks[a.mask],delete this._groupCallbacksContext[a.mask]):(this._groupCallbacks[a.mask]=b,this._groupCallbackContext[a.mask]=c)},getCollisionMask:function(){var a=0;this._collideWorldBounds&&(a=this.game.physics.p2.boundsCollisionGroup.mask);for(var b=0;b=0;c--)this.data.shapes[c].collisionMask=b;else a.collisionMask=b},setCollisionGroup:function(a,b){var c=this.getCollisionMask();if("undefined"==typeof b)for(var d=this.data.shapes.length-1;d>=0;d--)this.data.shapes[d].collisionGroup=a.mask,this.data.shapes[d].collisionMask=c;else b.collisionGroup=a.mask,b.collisionMask=c},clearCollision:function(a,b,c){if("undefined"==typeof c)for(var d=this.data.shapes.length-1;d>=0;d--)a&&(this.data.shapes[d].collisionGroup=null),b&&(this.data.shapes[d].collisionMask=null);else a&&(c.collisionGroup=null),b&&(c.collisionMask=null);a&&(this.collidesWith.length=0)},collides:function(a,b,c,d){if(Array.isArray(a))for(var e=0;e=0;e--)this.data.shapes[e].collisionMask=f;else d.collisionMask=f},adjustCenterOfMass:function(){this.data.adjustCenterOfMass()},applyDamping:function(a){this.data.applyDamping(a)},applyForce:function(a,b,c){this.data.applyForce(a,[this.world.pxm(b),this.world.pxm(c)])},setZeroForce:function(){this.data.setZeroForce()},setZeroRotation:function(){this.data.angularVelocity=0},setZeroVelocity:function(){this.data.velocity[0]=0,this.data.velocity[1]=0},setZeroDamping:function(){this.data.damping=0,this.data.angularDamping=0},toLocalFrame:function(a,b){return this.data.toLocalFrame(a,b)},toWorldFrame:function(a,b){return this.data.toWorldFrame(a,b)},rotateLeft:function(a){this.data.angularVelocity=this.world.pxm(-a)},rotateRight:function(a){this.data.angularVelocity=this.world.pxm(a)},moveForward:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.velocity[0]=b*Math.cos(c),this.data.velocity[1]=b*Math.sin(c)},moveBackward:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.velocity[0]=-(b*Math.cos(c)),this.data.velocity[1]=-(b*Math.sin(c))},thrust:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.force[0]+=b*Math.cos(c),this.data.force[1]+=b*Math.sin(c) +},reverse:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.force[0]-=b*Math.cos(c),this.data.force[1]-=b*Math.sin(c)},moveLeft:function(a){this.data.velocity[0]=this.world.pxmi(-a)},moveRight:function(a){this.data.velocity[0]=this.world.pxmi(a)},moveUp:function(a){this.data.velocity[1]=this.world.pxmi(-a)},moveDown:function(a){this.data.velocity[1]=this.world.pxmi(a)},preUpdate:function(){this.removeNextStep&&(this.removeFromWorld(),this.removeNextStep=!1)},postUpdate:function(){this.sprite.x=this.world.mpxi(this.data.position[0]),this.sprite.y=this.world.mpxi(this.data.position[1]),this.fixedRotation||(this.sprite.rotation=this.data.angle)},reset:function(a,b,c,d){"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1),this.setZeroForce(),this.setZeroVelocity(),this.setZeroRotation(),c&&this.setZeroDamping(),d&&(this.mass=1),this.x=a,this.y=b},addToWorld:function(){this.data.world!==this.game.physics.p2.world&&this.game.physics.p2.addBody(this)},removeFromWorld:function(){this.data.world===this.game.physics.p2.world&&this.game.physics.p2.removeBodyNextStep(this)},destroy:function(){this.removeFromWorld(),this.clearShapes(),this._bodyCallbacks={},this._bodyCallbackContext={},this._groupCallbacks={},this._groupCallbackContext={},this.debugBody&&this.debugBody.destroy(),this.debugBody=null,this.sprite=null},clearShapes:function(){for(var a=this.data.shapes.length;a--;)this.data.removeShape(this.data.shapes[a]);this.shapeChanged()},addShape:function(a,b,c,d){return"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),"undefined"==typeof d&&(d=0),this.data.addShape(a,[this.world.pxmi(b),this.world.pxmi(c)],d),this.shapeChanged(),a},addCircle:function(a,b,c,d){var e=new p2.Circle(this.world.pxm(a));return this.addShape(e,b,c,d)},addRectangle:function(a,b,c,d,e){var f=new p2.Rectangle(this.world.pxm(a),this.world.pxm(b));return this.addShape(f,c,d,e)},addPlane:function(a,b,c){var d=new p2.Plane;return this.addShape(d,a,b,c)},addParticle:function(a,b,c){var d=new p2.Particle;return this.addShape(d,a,b,c)},addLine:function(a,b,c,d){var e=new p2.Line(this.world.pxm(a));return this.addShape(e,b,c,d)},addCapsule:function(a,b,c,d,e){var f=new p2.Capsule(this.world.pxm(a),b);return this.addShape(f,c,d,e)},addPolygon:function(a,b){a=a||{},b=Array.prototype.slice.call(arguments,1);var c=[];if(1===b.length&&Array.isArray(b[0]))c=b[0].slice(0);else if(Array.isArray(b[0]))c=b[0].slice(0);else if("number"==typeof b[0])for(var d=0,e=b.length;e>d;d+=2)c.push([b[d],b[d+1]]);var f=c.length-1;c[f][0]===c[0][0]&&c[f][1]===c[0][1]&&c.pop();for(var g=0;g=0;c--)this.data.shapes[c].material=a;else b.material=a},shapeChanged:function(){this.debugBody&&this.debugBody.draw()},addPhaserPolygon:function(a,b){for(var c=this.game.cache.getPhysicsData(a,b),d=[],e=0;e=0?o>n:n>o;e=o>=0?++n:--n)k=b.vertices[e],p2.vec2.rotate(m,k,a),l.push([(m[0]+i[0])*this.ppu,-(m[1]+i[1])*this.ppu]);this.drawConvex(j,l,b.triangles,f,c,g,this.settings.debugPolygons,[i[0]*this.ppu,-i[1]*this.ppu])}else b instanceof p2.Plane?this.drawPlane(j,i[0]*this.ppu,-i[1]*this.ppu,c,f,5*g,10*g,10*g,100*this.ppu,a):b instanceof p2.Line?this.drawLine(j,b.length*this.ppu,f,g):b instanceof p2.Rectangle&&this.drawRectangle(j,i[0]*this.ppu,-i[1]*this.ppu,a,b.width*this.ppu,b.height*this.ppu,f,c,g);d++}}},drawRectangle:function(a,b,c,d,e,f,g,h,i){"undefined"==typeof i&&(i=1),"undefined"==typeof g&&(g=0),a.lineStyle(i,g,1),a.beginFill(h),a.drawRect(b-e/2,c-f/2,e,f)},drawCircle:function(a,b,c,d,e,f,g){"undefined"==typeof g&&(g=1),"undefined"==typeof f&&(f=16777215),a.lineStyle(g,0,1),a.beginFill(f,1),a.drawCircle(b,c,-e),a.endFill(),a.moveTo(b,c),a.lineTo(b+e*Math.cos(-d),c+e*Math.sin(-d))},drawLine:function(a,b,c,d){"undefined"==typeof d&&(d=1),"undefined"==typeof c&&(c=0),a.lineStyle(5*d,c,1),a.moveTo(-b/2,0),a.lineTo(b/2,0)},drawConvex:function(a,b,c,d,e,f,g,h){var i,j,k,l,m,n,o,p,q,r,s;if("undefined"==typeof f&&(f=1),"undefined"==typeof d&&(d=0),g){for(i=[16711680,65280,255],j=0;j!==b.length+1;)l=b[j%b.length],m=b[(j+1)%b.length],o=l[0],r=l[1],p=m[0],s=m[1],a.lineStyle(f,i[j%i.length],1),a.moveTo(o,-r),a.lineTo(p,-s),a.drawCircle(o,-r,2*f),j++;return a.lineStyle(f,0,1),a.drawCircle(h[0],h[1],2*f)}for(a.lineStyle(f,d,1),a.beginFill(e),j=0;j!==b.length;)k=b[j],n=k[0],q=k[1],0===j?a.moveTo(n,-q):a.lineTo(n,-q),j++;return a.endFill(),b.length>2?(a.moveTo(b[b.length-1][0],-b[b.length-1][1]),a.lineTo(b[0][0],-b[0][1])):void 0},drawPath:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;for("undefined"==typeof e&&(e=1),"undefined"==typeof c&&(c=0),a.lineStyle(e,c,1),"number"==typeof d&&a.beginFill(d),h=null,i=null,g=0;g2&&"number"==typeof d&&(a.moveTo(b[b.length-1][0],b[b.length-1][1]),a.lineTo(b[0][0],b[0][1]))},drawPlane:function(a,b,c,d,e,f,g,h,i,j){var k,l,m;"undefined"==typeof f&&(f=1),"undefined"==typeof d&&(d=16777215),a.lineStyle(f,e,11),a.beginFill(d),k=i,a.moveTo(b,-c),l=b+Math.cos(j)*this.game.width,m=c+Math.sin(j)*this.game.height,a.lineTo(l,-m),a.moveTo(b,-c),l=b+Math.cos(j)*-this.game.width,m=c+Math.sin(j)*-this.game.height,a.lineTo(l,-m)},randomPastelHex:function(){var a,b,c,d;return c=[255,255,255],d=Math.floor(256*Math.random()),b=Math.floor(256*Math.random()),a=Math.floor(256*Math.random()),d=Math.floor((d+3*c[0])/4),b=Math.floor((b+3*c[1])/4),a=Math.floor((a+3*c[2])/4),this.rgbToHex(d,b,a)},rgbToHex:function(a,b,c){return this.componentToHex(a)+this.componentToHex(b)+this.componentToHex(c)},componentToHex:function(a){var b;return b=a.toString(16),2===b.len?b:b+"0"}}),Phaser.Physics.P2.Spring=function(a,b,c,d,e,f,g,h,i,j){this.game=a.game,this.world=a,"undefined"==typeof d&&(d=1),"undefined"==typeof e&&(e=100),"undefined"==typeof f&&(f=1),d=a.pxm(d);var k={restLength:d,stiffness:e,damping:f};"undefined"!=typeof g&&null!==g&&(k.worldAnchorA=[a.pxm(g[0]),a.pxm(g[1])]),"undefined"!=typeof h&&null!==h&&(k.worldAnchorB=[a.pxm(h[0]),a.pxm(h[1])]),"undefined"!=typeof i&&null!==i&&(k.localAnchorA=[a.pxm(i[0]),a.pxm(i[1])]),"undefined"!=typeof j&&null!==j&&(k.localAnchorB=[a.pxm(j[0]),a.pxm(j[1])]),p2.Spring.call(this,b,c,k)},Phaser.Physics.P2.Spring.prototype=Object.create(p2.Spring.prototype),Phaser.Physics.P2.Spring.prototype.constructor=Phaser.Physics.P2.Spring,Phaser.Physics.P2.Material=function(a){this.name=a,p2.Material.call(this)},Phaser.Physics.P2.Material.prototype=Object.create(p2.Material.prototype),Phaser.Physics.P2.Material.prototype.constructor=Phaser.Physics.P2.Material,Phaser.Physics.P2.ContactMaterial=function(a,b,c){p2.ContactMaterial.call(this,a,b,c)},Phaser.Physics.P2.ContactMaterial.prototype=Object.create(p2.ContactMaterial.prototype),Phaser.Physics.P2.ContactMaterial.prototype.constructor=Phaser.Physics.P2.ContactMaterial,Phaser.Physics.P2.CollisionGroup=function(a){this.mask=a},Phaser.Physics.P2.DistanceConstraint=function(a,b,c,d,e){"undefined"==typeof d&&(d=100),this.game=a.game,this.world=a,d=a.pxm(d),p2.DistanceConstraint.call(this,b,c,d,e)},Phaser.Physics.P2.DistanceConstraint.prototype=Object.create(p2.DistanceConstraint.prototype),Phaser.Physics.P2.DistanceConstraint.prototype.constructor=Phaser.Physics.P2.DistanceConstraint,Phaser.Physics.P2.GearConstraint=function(a,b,c,d,e){"undefined"==typeof d&&(d=0),"undefined"==typeof e&&(e=1),this.game=a.game,this.world=a;var f={angle:d,ratio:e};p2.GearConstraint.call(this,b,c,f)},Phaser.Physics.P2.GearConstraint.prototype=Object.create(p2.GearConstraint.prototype),Phaser.Physics.P2.GearConstraint.prototype.constructor=Phaser.Physics.P2.GearConstraint,Phaser.Physics.P2.LockConstraint=function(a,b,c,d,e,f){"undefined"==typeof d&&(d=[0,0]),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=Number.MAX_VALUE),this.game=a.game,this.world=a,d=[a.pxm(d[0]),a.pxm(d[1])];var g={localOffsetB:d,localAngleB:e,maxForce:f};p2.LockConstraint.call(this,b,c,g)},Phaser.Physics.P2.LockConstraint.prototype=Object.create(p2.LockConstraint.prototype),Phaser.Physics.P2.LockConstraint.prototype.constructor=Phaser.Physics.P2.LockConstraint,Phaser.Physics.P2.PrismaticConstraint=function(a,b,c,d,e,f,g,h){"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=[0,0]),"undefined"==typeof f&&(f=[0,0]),"undefined"==typeof g&&(g=[0,0]),"undefined"==typeof h&&(h=Number.MAX_VALUE),this.game=a.game,this.world=a,e=[a.pxmi(e[0]),a.pxmi(e[1])],f=[a.pxmi(f[0]),a.pxmi(f[1])];var i={localAnchorA:e,localAnchorB:f,localAxisA:g,maxForce:h,disableRotationalLock:!d};p2.PrismaticConstraint.call(this,b,c,i)},Phaser.Physics.P2.PrismaticConstraint.prototype=Object.create(p2.PrismaticConstraint.prototype),Phaser.Physics.P2.PrismaticConstraint.prototype.constructor=Phaser.Physics.P2.PrismaticConstraint,Phaser.Physics.P2.RevoluteConstraint=function(a,b,c,d,e,f){"undefined"==typeof f&&(f=Number.MAX_VALUE),this.game=a.game,this.world=a,c=[a.pxmi(c[0]),a.pxmi(c[1])],e=[a.pxmi(e[0]),a.pxmi(e[1])],p2.RevoluteConstraint.call(this,b,c,d,e,f)},Phaser.Physics.P2.RevoluteConstraint.prototype=Object.create(p2.RevoluteConstraint.prototype),Phaser.Physics.P2.RevoluteConstraint.prototype.constructor=Phaser.Physics.P2.RevoluteConstraint; \ No newline at end of file diff --git a/build/custom/phaser-arcade-physics.js b/build/custom/phaser-arcade-physics.js index 7377ef6b88..422a352e45 100644 --- a/build/custom/phaser-arcade-physics.js +++ b/build/custom/phaser-arcade-physics.js @@ -7,7 +7,7 @@ * * Phaser - http://phaser.io * -* v2.0.4 "Mos Shirare" - Built: Thu Apr 17 2014 14:58:26 +* v2.0.4 "Mos Shirare" - Built: Tue Apr 29 2014 15:39:24 * * By Richard Davey http://www.photonstorm.com @photonstorm * @@ -314,8 +314,8 @@ PIXI.Polygon.prototype.constructor = PIXI.Polygon; * * @class Circle * @constructor - * @param x {Number} The X coordinate of the upper-left corner of the framing rectangle of this circle - * @param y {Number} The Y coordinate of the upper-left corner of the framing rectangle of this circle + * @param x {Number} The X coordinate of the center of this circle + * @param y {Number} The Y coordinate of the center of this circle * @param radius {Number} The radius of the circle */ PIXI.Circle = function(x, y, radius) @@ -570,7 +570,8 @@ PIXI.identityMatrix = new PIXI.Matrix(); */ /** - * The base class for all objects that are rendered on the screen. + * The base class for all objects that are rendered on the screen. + * This is an abstract class and should not be used on its own rather it should be extended. * * @class DisplayObject * @constructor @@ -1065,7 +1066,7 @@ PIXI.DisplayObject.prototype.generateTexture = function(renderer) var bounds = this.getLocalBounds(); var renderTexture = new PIXI.RenderTexture(bounds.width | 0, bounds.height | 0, renderer); - renderTexture.render(this); + renderTexture.render(this, new PIXI.Point(-bounds.x, -bounds.y) ); return renderTexture; }; @@ -1109,7 +1110,11 @@ PIXI.DisplayObject.prototype._generateCachedSprite = function()//renderSession) this._filters = null; this._cachedSprite.filters = tempFilters; - this._cachedSprite.texture.render(this); + this._cachedSprite.texture.render(this, new PIXI.Point(-bounds.x, -bounds.y) ); + + this._cachedSprite.anchor.x = -( bounds.x / bounds.width ); + this._cachedSprite.anchor.y = -( bounds.y / bounds.height ); + this._filters = tempFilters; @@ -2281,6 +2286,53 @@ PIXI.SpriteBatch.prototype._renderCanvas = function(renderSession) }; +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * This is the base class for creating a pixi.js filter. Currently only webGL supports filters. + * If you want to make a custom filter this should be your base class. + * @class AbstractFilter + * @constructor + * @param fragmentSrc + * @param uniforms + */ +PIXI.AbstractFilter = function(fragmentSrc, uniforms) +{ + /** + * An array of passes - some filters contain a few steps this array simply stores the steps in a liniear fashion. + * For example the blur filter has two passes blurX and blurY. + * @property passes + * @type Array an array of filter objects + * @private + */ + this.passes = [this]; + + /** + * @property shaders + * @type Array an array of shaders + * @private + */ + this.shaders = []; + + this.dirty = true; + this.padding = 0; + + /** + * @property uniforms + * @type object + * @private + */ + this.uniforms = uniforms || {}; + /** + * @property fragmentSrc + * @type Array + * @private + */ + this.fragmentSrc = fragmentSrc || []; +}; + /** * @author Mat Groves http://matgroves.com/ @Doormat23 */ @@ -2432,7 +2484,7 @@ PIXI.Text.prototype.updateText = function() var width = maxLineWidth + this.style.strokeThickness; if(this.style.dropShadow)width += this.style.dropShadowDistance; - this.canvas.width = width; + this.canvas.width = width + this.context.lineWidth; //calculate text height var lineHeight = this.determineFontHeight('font: ' + this.style.font + ';') + this.style.strokeThickness; @@ -2625,7 +2677,7 @@ PIXI.Text.prototype.wordWrap = function(text) { var wordWidth = this.context.measureText(words[j]).width; var wordWidthWithSpace = wordWidth + this.context.measureText(' ').width; - if(wordWidthWithSpace > spaceLeft) + if(j === 0 || wordWidthWithSpace > spaceLeft) { // Skip printing the newline if it's the first word of the line that is // greater than the word wrap width. @@ -2633,13 +2685,13 @@ PIXI.Text.prototype.wordWrap = function(text) { result += '\n'; } - result += words[j] + ' '; + result += words[j]; spaceLeft = this.style.wordWrapWidth - wordWidth; } else { spaceLeft -= wordWidthWithSpace; - result += words[j] + ' '; + result += ' ' + words[j]; } } @@ -5368,7 +5420,7 @@ PIXI.WebGLMaskManager.prototype.pushMask = function(maskData, renderSession) this.maskStack.push(maskData); - gl.colorMask(false, false, false, true); + gl.colorMask(false, false, false, false); gl.stencilOp(gl.KEEP,gl.KEEP,gl.INCR); PIXI.WebGLGraphics.renderGraphics(maskData, renderSession); @@ -6514,11 +6566,11 @@ PIXI.WebGLFilterManager.prototype.pushFilter = function(filterBlock) var filterArea = filterBlock._filterArea;// filterBlock.target.getBounds();///filterBlock.target.filterArea; - var padidng = filter.padding; - filterArea.x -= padidng; - filterArea.y -= padidng; - filterArea.width += padidng * 2; - filterArea.height += padidng * 2; + var padding = filter.padding; + filterArea.x -= padding; + filterArea.y -= padding; + filterArea.width += padding * 2; + filterArea.height += padding * 2; // cap filter to screen size.. if(filterArea.x < 0)filterArea.x = 0; @@ -6890,9 +6942,10 @@ PIXI.WebGLFilterManager.prototype.destroy = function() * @param gl {WebGLContext} the current WebGL drawing context * @param width {Number} the horizontal range of the filter * @param height {Number} the vertical range of the filter +* @param scaleMode {Number} Should be one of the PIXI.scaleMode consts * @private */ -PIXI.FilterTexture = function(gl, width, height) +PIXI.FilterTexture = function(gl, width, height, scaleMode) { /** * @property gl @@ -6904,9 +6957,11 @@ PIXI.FilterTexture = function(gl, width, height) this.frameBuffer = gl.createFramebuffer(); this.texture = gl.createTexture(); + scaleMode = scaleMode || PIXI.scaleModes.DEFAULT; + gl.bindTexture(gl.TEXTURE_2D, this.texture); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR : gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR : gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer ); @@ -6914,6 +6969,11 @@ PIXI.FilterTexture = function(gl, width, height) gl.bindFramebuffer(gl.FRAMEBUFFER, this.frameBuffer ); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.texture, 0); + // required for masking a mask?? + this.renderBuffer = gl.createRenderbuffer(); + gl.bindRenderbuffer(gl.RENDERBUFFER, this.renderBuffer); + gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, this.renderBuffer); + this.resize(width, height); }; @@ -6949,6 +7009,9 @@ PIXI.FilterTexture.prototype.resize = function(width, height) gl.bindTexture(gl.TEXTURE_2D, this.texture); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + // update the stencil buffer width and height + gl.bindRenderbuffer(gl.RENDERBUFFER, this.renderBuffer); + gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height); }; /** @@ -7992,7 +8055,7 @@ PIXI.Graphics = function() /** * the bounds' padding used for bounds calculation * - * @property bounds + * @property boundsPadding * @type Number */ this.boundsPadding = 10; @@ -8373,28 +8436,24 @@ PIXI.Graphics.prototype.getBounds = function( matrix ) var x4 = a * w1 + c * h0 + tx; var y4 = d * h0 + b * w1 + ty; - var maxX = -Infinity; - var maxY = -Infinity; + var maxX = x1; + var maxY = y1; - var minX = Infinity; - var minY = Infinity; + var minX = x1; + var minY = y1; - minX = x1 < minX ? x1 : minX; minX = x2 < minX ? x2 : minX; minX = x3 < minX ? x3 : minX; minX = x4 < minX ? x4 : minX; - minY = y1 < minY ? y1 : minY; minY = y2 < minY ? y2 : minY; minY = y3 < minY ? y3 : minY; minY = y4 < minY ? y4 : minY; - maxX = x1 > maxX ? x1 : maxX; maxX = x2 > maxX ? x2 : maxX; maxX = x3 > maxX ? x3 : maxX; maxX = x4 > maxX ? x4 : maxX; - maxY = y1 > maxY ? y1 : maxY; maxY = y2 > maxY ? y2 : maxY; maxY = y3 > maxY ? y3 : maxY; maxY = y4 > maxY ? y4 : maxY; @@ -9084,7 +9143,7 @@ PIXI.BaseTexture = function(source, scaleMode) if(!source)return; - if(this.source.complete || this.source.getContext) + if((this.source.complete || this.source.getContext) && this.source.width && this.source.height) { this.hasLoaded = true; this.width = this.source.width; @@ -9162,7 +9221,7 @@ PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin, scaleMode) { var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(crossorigin === undefined)crossorigin = true; + if(crossorigin === undefined && imageUrl.indexOf('data:') === -1) crossorigin = true; if(!baseTexture) { @@ -9491,8 +9550,9 @@ PIXI.TextureUvs = function() * @constructor * @param width {Number} The width of the render texture * @param height {Number} The height of the render texture + * @param scaleMode {Number} Should be one of the PIXI.scaleMode consts */ -PIXI.RenderTexture = function(width, height, renderer) +PIXI.RenderTexture = function(width, height, renderer, scaleMode) { PIXI.EventTarget.call( this ); @@ -9530,6 +9590,8 @@ PIXI.RenderTexture = function(width, height, renderer) this.baseTexture.height = this.height; this.baseTexture._glTextures = []; + this.baseTexture.scaleMode = scaleMode || PIXI.scaleModes.DEFAULT; + this.baseTexture.hasLoaded = true; // each render texture can only belong to one renderer at the moment if its webGL @@ -9539,7 +9601,7 @@ PIXI.RenderTexture = function(width, height, renderer) { var gl = this.renderer.gl; - this.textureBuffer = new PIXI.FilterTexture(gl, this.width, this.height); + this.textureBuffer = new PIXI.FilterTexture(gl, this.width, this.height, this.baseTexture.scaleMode); this.baseTexture._glTextures[gl.id] = this.textureBuffer.texture; this.render = this.renderWebGL; @@ -9702,7 +9764,7 @@ PIXI.RenderTexture.tempMatrix = new PIXI.Matrix(); * * Phaser - http://phaser.io * -* v2.0.4 "Mos Shirare" - Built: Thu Apr 17 2014 14:58:26 +* v2.0.4 "Mos Shirare" - Built: Tue Apr 29 2014 15:39:24 * * By Richard Davey http://www.photonstorm.com @photonstorm * @@ -9745,8 +9807,7 @@ PIXI.RenderTexture.tempMatrix = new PIXI.Matrix(); */ var Phaser = Phaser || { - VERSION: '<%= version %>', - DEV_VERSION: '2.0.4', + VERSION: '2.0.4', GAMES: [], AUTO: 0, @@ -10136,6 +10197,61 @@ if (!Array.prototype.forEach) } }; } + +/** +* Low-budget Float32Array knock-off, suitable for use with P2.js in IE9 +* Source: http://www.html5gamedevs.com/topic/5988-phaser-12-ie9/ +* Cameron Foale (http://www.kibibu.com) +*/ +if (typeof window.Uint32Array !== "function") +{ + var CheapArray = function(type) + { + var proto = new Array(); // jshint ignore:line + + window[type] = function(arg) { + + if (typeof(arg) === "number") + { + Array.call(this, arg); + this.length = arg; + + for (var i = 0; i < this.length; i++) + { + this[i] = 0; + } + } + else + { + Array.call(this, arg.length); + + this.length = arg.length; + + for (var i = 0; i < this.length; i++) + { + this[i] = arg[i]; + } + } + }; + + window[type].prototype = proto; + window[type].constructor = window[type]; + }; + + CheapArray('Uint32Array'); // jshint ignore:line + CheapArray('Int16Array'); // jshint ignore:line +} + +/** + * Also fix for the absent console in IE9 + */ +if (!window.console) +{ + window.console = {}; + window.console.log = window.console.assert = function(){}; + window.console.warn = window.console.assert = function(){}; +} + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -10261,7 +10377,7 @@ Phaser.Circle.prototype = { if (round) { - return Phaser.Math.distanceRound(this.x, this.y, dest.x, dest.y); + return Phaser.Math.distanceRounded(this.x, this.y, dest.x, dest.y); } else { @@ -10680,12 +10796,21 @@ PIXI.Circle = Phaser.Circle; */ /** -* Creates a new Point. If you pass no parameters a Point is created set to (0,0). * @class Phaser.Point -* @classdesc The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. +* @classdesc +* The Point object represents a location in a two-dimensional coordinate system, +* where x represents the horizontal axis and y represents the vertical axis. +* The following code creates a point at (0,0): +* `var myPoint = new Phaser.Point();` +* You can also use them as 2D Vectors and you'll find different vector related methods in this class. +*/ + +/** +* Creates a new Point object. If you pass no parameters a Point is created set to (0, 0). +* * @constructor -* @param {number} x The horizontal position of this Point (default 0) -* @param {number} y The vertical position of this Point (default 0) +* @param {number} [x=0] - The horizontal position of this Point. +* @param {number} [y=0] - The vertical position of this Point. */ Phaser.Point = function (x, y) { @@ -10693,12 +10818,12 @@ Phaser.Point = function (x, y) { y = y || 0; /** - * @property {number} x - The x coordinate of the point. + * @property {number} x - The x value of the point. */ this.x = x; /** - * @property {number} y - The y coordinate of the point. + * @property {number} y - The y value of the point. */ this.y = y; @@ -10708,29 +10833,38 @@ Phaser.Point.prototype = { /** * Copies the x and y properties from any given object to this Point. + * * @method Phaser.Point#copyFrom * @param {any} source - The object to copy from. - * @return {Point} This Point object. + * @return {Phaser.Point} This Point object. */ copyFrom: function (source) { + return this.setTo(source.x, source.y); + }, /** * Inverts the x and y values of this Point + * * @method Phaser.Point#invert - * @return {Point} This Point object. + * @return {Phaser.Point} This Point object. */ invert: function () { + return this.setTo(this.y, this.x); + }, /** - * Sets the x and y values of this Point object to the given coordinates. + * Sets the `x` and `y` values of this Point object to the given values. + * If you omit the `y` value then the `x` value will be applied to both, for example: + * `Point.setTo(2)` is the same as `Point.setTo(2, 2)` + * * @method Phaser.Point#setTo - * @param {number} x - The horizontal position of this point. - * @param {number} y - The vertical position of this point. - * @return {Point} This Point object. Useful for chaining method calls. + * @param {number} x - The horizontal value of this point. + * @param {number} [y] - The vertical value of this point. If not given the x value will be used in its place. + * @return {Phaser.Point} This Point object. Useful for chaining method calls. */ setTo: function (x, y) { @@ -10742,11 +10876,14 @@ Phaser.Point.prototype = { }, /** - * Sets the x and y values of this Point object to the given coordinates. + * Sets the `x` and `y` values of this Point object to the given values. + * If you omit the `y` value then the `x` value will be applied to both, for example: + * `Point.setTo(2)` is the same as `Point.setTo(2, 2)` + * * @method Phaser.Point#set - * @param {number} x - The horizontal position of this point. - * @param {number} y - The vertical position of this point. - * @return {Point} This Point object. Useful for chaining method calls. + * @param {number} x - The horizontal value of this point. + * @param {number} [y] - The vertical value of this point. If not given the x value will be used in its place. + * @return {Phaser.Point} This Point object. Useful for chaining method calls. */ set: function (x, y) { @@ -10759,6 +10896,7 @@ Phaser.Point.prototype = { /** * Adds the given x and y values to this Point. + * * @method Phaser.Point#add * @param {number} x - The value to add to Point.x. * @param {number} y - The value to add to Point.y. @@ -10774,6 +10912,7 @@ Phaser.Point.prototype = { /** * Subtracts the given x and y values from this Point. + * * @method Phaser.Point#subtract * @param {number} x - The value to subtract from Point.x. * @param {number} y - The value to subtract from Point.y. @@ -10788,7 +10927,8 @@ Phaser.Point.prototype = { }, /** - * Multiplies Point.x and Point.y by the given x and y values. + * Multiplies Point.x and Point.y by the given x and y values. Sometimes known as `Scale`. + * * @method Phaser.Point#multiply * @param {number} x - The value to multiply Point.x by. * @param {number} y - The value to multiply Point.x by. @@ -10804,6 +10944,7 @@ Phaser.Point.prototype = { /** * Divides Point.x and Point.y by the given x and y values. + * * @method Phaser.Point#divide * @param {number} x - The value to divide Point.x by. * @param {number} y - The value to divide Point.x by. @@ -10819,6 +10960,7 @@ Phaser.Point.prototype = { /** * Clamps the x value of this Point to be between the given min and max. + * * @method Phaser.Point#clampX * @param {number} min - The minimum value to clamp this Point to. * @param {number} max - The maximum value to clamp this Point to. @@ -10833,6 +10975,7 @@ Phaser.Point.prototype = { /** * Clamps the y value of this Point to be between the given min and max + * * @method Phaser.Point#clampY * @param {number} min - The minimum value to clamp this Point to. * @param {number} max - The maximum value to clamp this Point to. @@ -10847,6 +10990,7 @@ Phaser.Point.prototype = { /** * Clamps this Point object values to be between the given min and max. + * * @method Phaser.Point#clamp * @param {number} min - The minimum value to clamp this Point to. * @param {number} max - The maximum value to clamp this Point to. @@ -10862,6 +11006,7 @@ Phaser.Point.prototype = { /** * Creates a copy of the given Point. + * * @method Phaser.Point#clone * @param {Phaser.Point} [output] Optional Point object. If given the values will be set into this object, otherwise a brand new Point object will be created and returned. * @return {Phaser.Point} The new Point object. @@ -10883,11 +11028,12 @@ Phaser.Point.prototype = { /** * Copies the x and y properties from this Point to any given object. + * * @method Phaser.Point#copyTo * @param {any} dest - The object to copy to. * @return {Object} The dest object. */ - copyTo: function(dest) { + copyTo: function (dest) { dest.x = this.x; dest.y = this.y; @@ -10898,66 +11044,121 @@ Phaser.Point.prototype = { /** * Returns the distance of this Point object to the given object (can be a Circle, Point or anything with x/y properties) + * * @method Phaser.Point#distance * @param {object} dest - The target object. Must have visible x and y properties that represent the center of the object. * @param {boolean} [round] - Round the distance to the nearest integer (default false). * @return {number} The distance between this Point object and the destination Point object. */ distance: function (dest, round) { + return Phaser.Point.distance(this, dest, round); + }, /** * Determines whether the given objects x/y values are equal to this Point object. + * * @method Phaser.Point#equals - * @param {Phaser.Point} a - The first object to compare. - * @return {boolean} A value of true if the Points are equal, otherwise false. + * @param {Phaser.Point|any} a - The object to compare with this Point. + * @return {boolean} A value of true if the x and y points are equal, otherwise false. */ equals: function (a) { - return (a.x == this.x && a.y == this.y); + + return (a.x === this.x && a.y === this.y); + + }, + + /** + * Returns the angle between this Point object and another object with public x and y properties. + * + * @method Phaser.Point#angle + * @param {Phaser.Point|any} a - The object to get the angle from this Point to. + * @return {number} The angle between the two objects. + */ + angle: function (a) { + + return Math.atan2(this.x * a.y - this.y * a.x, this.x * a.x + this.y * a.y); + + }, + + /** + * Returns the angle squared between this Point object and another object with public x and y properties. + * + * @method Phaser.Point#angleSq + * @param {Phaser.Point|any} a - The object to get the angleSq from this Point to. + * @return {number} The angleSq between the two objects. + */ + angleSq: function (a) { + + return this.subtract(a).angle(a.subtract(this)); + }, /** * Rotates this Point around the x/y coordinates given to the desired angle. + * * @method Phaser.Point#rotate - * @param {number} x - The x coordinate of the anchor point - * @param {number} y - The y coordinate of the anchor point + * @param {number} x - The x coordinate of the anchor point. + * @param {number} y - The y coordinate of the anchor point. * @param {number} angle - The angle in radians (unless asDegrees is true) to rotate the Point to. * @param {boolean} asDegrees - Is the given rotation in radians (false) or degrees (true)? * @param {number} [distance] - An optional distance constraint between the Point and the anchor. * @return {Phaser.Point} The modified point object. */ rotate: function (x, y, angle, asDegrees, distance) { + return Phaser.Point.rotate(this, x, y, angle, asDegrees, distance); + }, /** - * Calculates the length of the vector + * Calculates the length of the Point object. + * * @method Phaser.Point#getMagnitude - * @return {number} the length of the vector + * @return {number} The length of the Point. */ - getMagnitude: function() { + getMagnitude: function () { + return Math.sqrt((this.x * this.x) + (this.y * this.y)); + }, /** - * Alters the length of the vector without changing the direction + * Calculates the length squared of the Point object. + * + * @method Phaser.Point#getMagnitudeSq + * @return {number} The length ^ 2 of the Point. + */ + getMagnitudeSq: function () { + + return (this.x * this.x) + (this.y * this.y); + + }, + + /** + * Alters the length of the Point without changing the direction. + * * @method Phaser.Point#setMagnitude - * @param {number} magnitude the desired magnitude of the resulting vector - * @return {Phaser.Point} the modified original vector + * @param {number} magnitude - The desired magnitude of the resulting Point. + * @return {Phaser.Point} This Point object. */ - setMagnitude: function(magnitude) { + setMagnitude: function (magnitude) { + return this.normalize().multiply(magnitude, magnitude); + }, /** - * Alters the vector so that its length is 1, but it retains the same direction + * Alters the Point object so that its length is 1, but it retains the same direction. + * * @method Phaser.Point#normalize - * @return {Phaser.Point} the modified original vector + * @return {Phaser.Point} This Point object. */ - normalize: function() { + normalize: function () { - if(!this.isZero()) { + if (!this.isZero()) + { var m = this.getMagnitude(); this.x /= m; this.y /= m; @@ -10968,21 +11169,89 @@ Phaser.Point.prototype = { }, /** - * Determine if this point is at 0,0 + * Determine if this point is at 0,0. + * * @method Phaser.Point#isZero - * @return {boolean} True if this Point is 0,0, otherwise false + * @return {boolean} True if this Point is 0,0, otherwise false. */ - isZero: function() { + isZero: function () { + return (this.x === 0 && this.y === 0); + + }, + + /** + * The dot product of this and another Point object. + * + * @method Phaser.Point#dot + * @param {Phaser.Point} a - The Point object to get the dot product combined with this Point. + * @return {number} The result. + */ + dot: function (a) { + + return ((this.x * a.x) + (this.y * a.y)); + + }, + + /** + * The cross product of this and another Point object. + * + * @method Phaser.Point#cross + * @param {Phaser.Point} a - The Point object to get the cross product combined with this Point. + * @return {number} The result. + */ + cross: function (a) { + + return ((this.x * a.y) - (this.y * a.x)); + + }, + + /** + * Make this Point perpendicular (90 degrees rotation) + * + * @method Phaser.Point#perp + * @return {Phaser.Point} This Point object. + */ + perp: function () { + + return this.setTo(-this.y, this.x); + + }, + + /** + * Make this Point perpendicular (-90 degrees rotation) + * + * @method Phaser.Point#rperp + * @return {Phaser.Point} This Point object. + */ + rperp: function () { + + return this.setTo(this.y, -this.x); + + }, + + /** + * Right-hand normalize (make unit length) this Point. + * + * @method Phaser.Point#normalRightHand + * @return {Phaser.Point} This Point object. + */ + normalRightHand: function () { + + return this.setTo(this.y * -1, this.x); + }, /** * Returns a string representation of this object. + * * @method Phaser.Point#toString * @return {string} A string representation of the instance. */ toString: function () { + return '[{Point (x=' + this.x + ' y=' + this.y + ')}]'; + } }; @@ -10991,6 +11260,7 @@ Phaser.Point.prototype.constructor = Phaser.Point; /** * Adds the coordinates of two points together to create a new point. +* * @method Phaser.Point.add * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. @@ -11010,6 +11280,7 @@ Phaser.Point.add = function (a, b, out) { /** * Subtracts the coordinates of two points to create a new point. +* * @method Phaser.Point.subtract * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. @@ -11029,6 +11300,7 @@ Phaser.Point.subtract = function (a, b, out) { /** * Multiplies the coordinates of two points to create a new point. +* * @method Phaser.Point.multiply * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. @@ -11048,6 +11320,7 @@ Phaser.Point.multiply = function (a, b, out) { /** * Divides the coordinates of two points to create a new point. +* * @method Phaser.Point.divide * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. @@ -11067,17 +11340,133 @@ Phaser.Point.divide = function (a, b, out) { /** * Determines whether the two given Point objects are equal. They are considered equal if they have the same x and y values. +* * @method Phaser.Point.equals * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. * @return {boolean} A value of true if the Points are equal, otherwise false. */ Phaser.Point.equals = function (a, b) { - return (a.x == b.x && a.y == b.y); + + return (a.x === b.x && a.y === b.y); + +}; + +/** +* Returns the angle between two Point objects. +* +* @method Phaser.Point.angle +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @return {number} The angle between the two Points. +*/ +Phaser.Point.angle = function (a, b) { + + return Math.atan2(a.x * b.y - a.y * b.x, a.x * b.x + a.y * b.y); + +}; + +/** +* Returns the angle squared between two Point objects. +* +* @method Phaser.Point.angleSq +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @return {number} The angle squared between the two Points. +*/ +Phaser.Point.angleSq = function (a, b) { + + return a.subtract(b).angle(b.subtract(a)); + +}; + +/** +* Creates a negative Point. +* +* @method Phaser.Point.negative +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.negative = function (a, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(-a.x, -a.y); + +}; + +/** +* Adds two 2D Points together and multiplies the result by the given scalar. +* +* @method Phaser.Point.multiplyAdd +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @param {number} s - The scaling value. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.multiplyAdd = function (a, b, s, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(a.x + b.x * s, a.y + b.y * s); + +}; + +/** +* Interpolates the two given Points, based on the `f` value (between 0 and 1) and returns a new Point. +* +* @method Phaser.Point.interpolate +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @param {number} f - The level of interpolation between the two points. Indicates where the new point will be, along the line between pt1 and pt2. If f=1, pt1 is returned; if f=0, pt2 is returned. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.interpolate = function (a, b, f, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(a.x + (b.x - a.x) * f, a.y + (b.y - a.y) * f); + +}; + +/** +* Return a perpendicular vector (90 degrees rotation) +* +* @method Phaser.Point.perp +* @param {Phaser.Point} a - The Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.perp = function (a, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(-a.y, a.x); + +}; + +/** +* Return a perpendicular vector (-90 degrees rotation) +* +* @method Phaser.Point.rperp +* @param {Phaser.Point} a - The Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.rperp = function (a, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(a.y, -a.x); + }; /** * Returns the distance of this Point object to the given object (can be a Circle, Point or anything with x/y properties). +* * @method Phaser.Point.distance * @param {object} a - The target object. Must have visible x and y properties that represent the center of the object. * @param {object} b - The target object. Must have visible x and y properties that represent the center of the object. @@ -11090,7 +11479,7 @@ Phaser.Point.distance = function (a, b, round) { if (round) { - return Phaser.Math.distanceRound(a.x, a.y, b.x, b.y); + return Phaser.Math.distanceRounded(a.x, a.y, b.x, b.y); } else { @@ -11099,15 +11488,103 @@ Phaser.Point.distance = function (a, b, round) { }; +/** +* Project two Points onto another Point. +* +* @method Phaser.Point.project +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.project = function (a, b, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + var amt = a.dot(b) / b.getMagnitudeSq(); + + if (amt !== 0) + { + out.setTo(amt * b.x, amt * b.y); + } + + return out; + +}; + +/** +* Project two Points onto a Point of unit length. +* +* @method Phaser.Point.projectUnit +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.projectUnit = function (a, b, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + var amt = a.dot(b); + + if (amt !== 0) + { + out.setTo(amt * b.x, amt * b.y); + } + + return out; + +}; + +/** +* Right-hand normalize (make unit length) a Point. +* +* @method Phaser.Point.normalRightHand +* @param {Phaser.Point} a - The Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.normalRightHand = function (a, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(a.y * -1, a.x); + +}; + +/** +* Normalize (make unit length) a Point. +* +* @method Phaser.Point.normalize +* @param {Phaser.Point} a - The Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.normalize = function (a, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + var m = a.getMagnitude(); + + if (m !== 0) + { + out.setTo(a.x / m, a.y / m); + } + + return out; + +}; + /** * Rotates a Point around the x/y coordinates given to the desired angle. +* * @method Phaser.Point.rotate * @param {Phaser.Point} a - The Point object to rotate. * @param {number} x - The x coordinate of the anchor point * @param {number} y - The y coordinate of the anchor point * @param {number} angle - The angle in radians (unless asDegrees is true) to rotate the Point to. -* @param {boolean} asDegrees - Is the given rotation in radians (false) or degrees (true)? -* @param {number} distance - An optional distance constraint between the Point and the anchor. +* @param {boolean} [asDegrees=false] - Is the given rotation in radians (false) or degrees (true)? +* @param {number} [distance] - An optional distance constraint between the Point and the anchor. * @return {Phaser.Point} The modified point object. */ Phaser.Point.rotate = function (a, x, y, angle, asDegrees, distance) { @@ -11132,6 +11609,7 @@ Phaser.Point.rotate = function (a, x, y, angle, asDegrees, distance) { /** * Calculates centroid (or midpoint) from an array of points. If only one point is provided, that point is returned. +* * @method Phaser.Point.centroid * @param {Phaser.Point[]} points - The array of one or more points. * @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. @@ -12769,7 +13247,7 @@ Phaser.Polygon.prototype = { if (intersect) { - inside = true; + inside = !inside; } } @@ -12953,6 +13431,17 @@ Phaser.Camera.prototype = { }, + /** + * Sets the Camera follow target to null, stopping it from following an object if it's doing so. + * + * @method Phaser.Camera#unfollow + */ + unfollow: function () { + + this.target = null; + + }, + /** * Move the camera focus on a display object instantly. * @method Phaser.Camera#focusOn @@ -13237,87 +13726,87 @@ Object.defineProperty(Phaser.Camera.prototype, "height", { Phaser.State = function () { /** - * @property {Phaser.Game} game - A reference to the currently running Game. + * @property {Phaser.Game} game - This is a reference to the currently running Game. */ this.game = null; /** - * @property {Phaser.GameObjectFactory} add - Reference to the GameObjectFactory. + * @property {Phaser.GameObjectFactory} add - A reference to the GameObjectFactory which can be used to add new objects to the World. */ this.add = null; /** - * @property {Phaser.GameObjectCreator} make - Reference to the GameObjectCreator. + * @property {Phaser.GameObjectCreator} make - A reference to the GameObjectCreator which can be used to make new objects. */ this.make = null; /** - * @property {Phaser.Camera} camera - A handy reference to world.camera. + * @property {Phaser.Camera} camera - A handy reference to World.camera. */ this.camera = null; /** - * @property {Phaser.Cache} cache - Reference to the assets cache. + * @property {Phaser.Cache} cache - A reference to the game cache which contains any loaded or generated assets, such as images, sound and more. */ this.cache = null; /** - * @property {Phaser.Input} input - Reference to the input manager + * @property {Phaser.Input} input - A reference to the Input Manager. */ this.input = null; /** - * @property {Phaser.Loader} load - Reference to the assets loader. + * @property {Phaser.Loader} load - A reference to the Loader, which you mostly use in the preload method of your state to load external assets. */ this.load = null; /** - * @property {Phaser.Math} math - Reference to the math helper. + * @property {Phaser.Math} math - A reference to Math class with lots of helpful functions. */ this.math = null; /** - * @property {Phaser.SoundManager} sound - Reference to the sound manager. + * @property {Phaser.SoundManager} sound - A reference to the Sound Manager which can create, play and stop sounds, as well as adjust global volume. */ this.sound = null; /** - * @property {Phaser.ScaleManager} scale - Reference to the game scale manager. + * @property {Phaser.ScaleManager} scale - A reference to the Scale Manager which controls the way the game scales on different displays. */ this.scale = null; /** - * @property {Phaser.Stage} stage - Reference to the stage. + * @property {Phaser.Stage} stage - A reference to the Stage. */ this.stage = null; /** - * @property {Phaser.Time} time - Reference to the core game clock. + * @property {Phaser.Time} time - A reference to the game clock and timed events system. */ this.time = null; /** - * @property {Phaser.TweenManager} tweens - Reference to the tween manager. + * @property {Phaser.TweenManager} tweens - A reference to the tween manager. */ this.tweens = null; /** - * @property {Phaser.World} world - Reference to the world. + * @property {Phaser.World} world - A reference to the game world. All objects live in the Game World and its size is not bound by the display resolution. */ this.world = null; /** - * @property {Phaser.Particles} particles - The Particle Manager for the game. It is called during the game update loop and in turn updates any Emitters attached to it. + * @property {Phaser.Particles} particles - The Particle Manager. It is called during the core gameloop and updates any Particle Emitters it has created. */ this.particles = null; /** - * @property {Phaser.Physics} physics - Reference to the physics manager. + * @property {Phaser.Physics} physics - A reference to the physics manager which looks after the different physics systems available within Phaser. */ this.physics = null; /** - * @property {Phaser.RandomDataGenerator} rnd - Reference to the random data generator. + * @property {Phaser.RandomDataGenerator} rnd - A reference to the seeded and repeatable random data generator. */ this.rnd = null; @@ -13326,8 +13815,9 @@ Phaser.State = function () { Phaser.State.prototype = { /** - * Override this method to add some load operations. - * If you need to use the loader, you may need to use them here. + * preload is called first. Normally you'd use this to load your game assets (or those needed for the current State) + * You shouldn't create any objects in this method that require assets that you're also loading in this method, as + * they won't yet be available. * * @method Phaser.State#preload */ @@ -13335,7 +13825,7 @@ Phaser.State.prototype = { }, /** - * Put update logic here. + * loadUpdate is called during the Loader process. This only happens if you've set one or more assets to load in the preload method. * * @method Phaser.State#loadUpdate */ @@ -13343,7 +13833,8 @@ Phaser.State.prototype = { }, /** - * Put render operations here. + * loadRender is called during the Loader process. This only happens if you've set one or more assets to load in the preload method. + * The difference between loadRender and render is that any objects you render in this method you must be sure their assets exist. * * @method Phaser.State#loadRender */ @@ -13351,8 +13842,8 @@ Phaser.State.prototype = { }, /** - * This method is called after the game engine successfully switches states. - * Feel free to add any setup code here (do not load anything here, override preload() instead). + * create is called once preload has completed, this includes the loading of any assets from the Loader. + * If you don't have a preload method then create is the first method called in your State. * * @method Phaser.State#create */ @@ -13360,7 +13851,9 @@ Phaser.State.prototype = { }, /** - * Put update logic here. + * The update method is left empty for your own use. + * It is called during the core game loop AFTER debug, physics, plugins and the Stage have had their preUpdate methods called. + * If is called BEFORE Stage, Tweens, Sounds, Input, Physics, Particles and Plugins have had their postUpdate methods called. * * @method Phaser.State#update */ @@ -13368,7 +13861,9 @@ Phaser.State.prototype = { }, /** - * Put render operations here. + * Nearly all display objects in Phaser render automatically, you don't need to tell them to render. + * However the render method is called AFTER the game renderer and plugins have rendered, so you're able to do any + * final post-processing style effects here. Note that this happens before plugins postRender takes place. * * @method Phaser.State#render */ @@ -13376,7 +13871,7 @@ Phaser.State.prototype = { }, /** - * This method will be called when game paused. + * This method will be called if the core game loop is paused. * * @method Phaser.State#paused */ @@ -13384,7 +13879,16 @@ Phaser.State.prototype = { }, /** - * This method will be called when the state is shut down (i.e. you switch to another state from this one). + * pauseUpdate is called while the game is paused instead of preUpdate, update and postUpdate. + * + * @method Phaser.State#pauseUpdate + */ + pauseUpdate: function () { + }, + + /** + * This method will be called when the State is shutdown (i.e. you switch to another state from this one). + * * @method Phaser.State#shutdown */ shutdown: function () { @@ -13503,15 +14007,20 @@ Phaser.StateManager = function (game, pendingState) { this.onLoadRenderCallback = null; /** - * @property {function} onPausedCallback - This will be called when the state is paused. + * @property {function} onPausedCallback - This will be called once each time the game is paused. */ this.onPausedCallback = null; /** - * @property {function} onResumedCallback - This will be called when the state is resumed from a paused state. + * @property {function} onResumedCallback - This will be called once each time the game is resumed from a paused state. */ this.onResumedCallback = null; + /** + * @property {function} onPauseUpdateCallback - This will be called every frame while the game is paused. + */ + this.onPauseUpdateCallback = null; + /** * @property {function} onShutDownCallback - This will be called when the state is shut down (i.e. swapped to another state). */ @@ -13617,7 +14126,7 @@ Phaser.StateManager.prototype = { this.onRenderCallback = null; this.onPausedCallback = null; this.onResumedCallback = null; - this.onDestroyCallback = null; + this.onPauseUpdateCallback = null; } delete this.states[key]; @@ -13789,6 +14298,7 @@ Phaser.StateManager.prototype = { /** * Links game properties to the State given by the key. + * * @method Phaser.StateManager#link * @param {string} key - State key. * @protected @@ -13818,6 +14328,7 @@ Phaser.StateManager.prototype = { /** * Sets the current State. Should not be called directly (use StateManager.start) + * * @method Phaser.StateManager#setCurrentState * @param {string} key - State key. * @private @@ -13840,6 +14351,7 @@ Phaser.StateManager.prototype = { this.onRenderCallback = this.states[key]['render'] || null; this.onPausedCallback = this.states[key]['paused'] || null; this.onResumedCallback = this.states[key]['resumed'] || null; + this.onPauseUpdateCallback = this.states[key]['pauseUpdate'] || null; // Used when the state is no longer the current active state this.onShutDownCallback = this.states[key]['shutdown'] || this.dummy; @@ -13928,6 +14440,26 @@ Phaser.StateManager.prototype = { }, + /** + * @method Phaser.StateManager#pauseUpdate + * @protected + */ + pauseUpdate: function () { + + if (this._created && this.onPauseUpdateCallback) + { + this.onPauseUpdateCallback.call(this.callbackContext, this.game); + } + else + { + if (this.onLoadUpdateCallback) + { + this.onLoadUpdateCallback.call(this.callbackContext, this.game); + } + } + + }, + /** * @method Phaser.StateManager#preRender * @protected @@ -13992,7 +14524,7 @@ Phaser.StateManager.prototype = { this.onRenderCallback = null; this.onPausedCallback = null; this.onResumedCallback = null; - this.onDestroyCallback = null; + this.onPauseUpdateCallback = null; this.game = null; this.states = {}; @@ -14043,7 +14575,7 @@ Phaser.LinkedList = function () { this.last = null; /** - * @property {object} game - Number of elements in the list. + * @property {number} total - Number of elements in the list. * @default */ this.total = 0; @@ -14062,7 +14594,7 @@ Phaser.LinkedList.prototype = { add: function (child) { // If the list is empty - if (this.total === 0 && this.first == null && this.last == null) + if (this.total === 0 && this.first === null && this.last === null) { this.first = child; this.last = child; @@ -14072,7 +14604,7 @@ Phaser.LinkedList.prototype = { return child; } - // Get gets appended to the end of the list, regardless of anything, and it won't have any children of its own (non-nested list) + // Gets appended to the end of the list, regardless of anything, and it won't have any children of its own (non-nested list) this.last.next = child; child.prev = this.last; @@ -14085,6 +14617,21 @@ Phaser.LinkedList.prototype = { }, + /** + * Resets the first, last, next and previous node pointers in this list. + * + * @method Phaser.LinkedList#reset + */ + reset: function () { + + this.first = null; + this.last = null; + this.next = null; + this.prev = null; + this.total = 0; + + }, + /** * Removes the given element from this linked list if it exists. * @@ -14093,12 +14640,19 @@ Phaser.LinkedList.prototype = { */ remove: function (child) { - if (child == this.first) + if (this.total === 1) + { + this.reset(); + child.next = child.prev = null; + return; + } + + if (child === this.first) { // It was 'first', make 'first' point to first.next this.first = this.first.next; } - else if (child == this.last) + else if (child === this.last) { // It was 'last', make 'last' point to last.prev this.last = this.last.prev; @@ -14118,7 +14672,7 @@ Phaser.LinkedList.prototype = { child.next = child.prev = null; - if (this.first == null ) + if (this.first === null ) { this.last = null; } @@ -14167,6 +14721,196 @@ Phaser.LinkedList.prototype.constructor = Phaser.LinkedList; * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} */ +/** +* A set data structure. Allows items to add themselves to and remove themselves from the set. Items can only exist once in the set. +* +* @class Phaser.ArrayList +* @constructor +*/ +Phaser.ArrayList = function () { + + /** + * @property {number} total - Number of objects in the list. + * @default + */ + this.total = 0; + + /** + * @property {number} position - Current cursor position. + * @default + */ + this.position = 0; + + /** + * @property {array} list - The list. + */ + this.list = []; + +}; + +Phaser.ArrayList.prototype = { + + /** + * Adds a new element to this list. The item can only exist in the list once. + * + * @method Phaser.ArrayList#add + * @param {object} child - The element to add to this list. Can be a Phaser.Sprite or any other object you need to quickly iterate through. + * @return {object} The child that was added. + */ + add: function (child) { + + if (!this.exists(child)) + { + this.list.push(child); + this.total++; + } + + return child; + + }, + + /** + * Gets the index of the child in the list, or -1 if it isn't in the list. + * + * @method Phaser.ArrayList#getIndex + * @param {object} child - The element to get the list index for. + * @return {number} The index of the child or -1 if not found. + */ + getIndex: function (child) { + + return this.list.indexOf(child); + + }, + + /** + * Checks for the child within this list. + * + * @method Phaser.ArrayList#exists + * @param {object} child - The element to get the list index for. + * @return {boolean} True if the child is found in the list, otherwise false. + */ + exists: function (child) { + + return (this.list.indexOf(child) > -1); + + }, + + /** + * Resets the list length and drops all items in the list. + * + * @method Phaser.ArrayList#reset + */ + reset: function () { + + this.list.length = 0; + this.total = 0; + + }, + + /** + * Removes the given element from this list if it exists. + * + * @method Phaser.ArrayList#remove + * @param {object} child - The child to be removed from the list. + * @return {object} child - The child that was removed. + */ + remove: function (child) { + + var idx = this.list.indexOf(child); + + if (idx > -1) + { + this.list.splice(idx, 1); + this.total--; + return child; + } + + }, + + /** + * Calls a function on all members of this list, using the member as the context for the callback. + * The function must exist on the member. + * + * @method Phaser.ArrayList#callAll + * @param {function} callback - The function to call. + * @param {...*} parameter - Additional parameters that will be passed to the callback. + */ + callAll: function (callback) { + + var args = Array.prototype.splice.call(arguments, 1); + + var i = this.list.length; + + while (i--) + { + if (this.list[i] && this.list[i][callback]) + { + this.list[i][callback].apply(this.list[i], args); + } + } + + } + +}; + +/** +* Resets the cursor to the first item in the list and returns it. +* +* @name Phaser.ArrayList#first +* @property {object} first - The first item in the list. +*/ +Object.defineProperty(Phaser.ArrayList.prototype, "first", { + + get: function () { + + this.position = 0; + + if (this.total > 0) + { + return this.list[0]; + } + else + { + return null; + } + + } + +}); + +/** +* Gets the next item in the list and returns it, advancing the cursor. +* +* @name Phaser.ArrayList#next +* @property {object} next - Advanced the cursor and return. +*/ +Object.defineProperty(Phaser.ArrayList.prototype, "next", { + + get: function () { + + if (this.position < this.total) + { + this.position++; + + return this.list[this.position]; + } + else + { + return null; + } + + } + +}); + +Phaser.ArrayList.prototype.constructor = Phaser.ArrayList; + +/** +* @author Richard Davey +* @copyright 2014 Photon Storm Ltd. +* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} +*/ + /** * @class Phaser.Signal * @classdesc A Signal is used for object communication via a custom broadcaster instead of Events. @@ -15685,6 +16429,14 @@ Phaser.Group = function (game, parent, name, addToStage, enableBody, physicsBody */ this.exists = true; + /** + * The type of objects that will be created when you use Group.create or Group.createMultiple. Defaults to Phaser.Sprite. + * When a new object is created it is passed the following parameters to its constructor: game, x, y, key, frame. + * @property {object} classType + * @default + */ + this.classType = Phaser.Sprite; + /** * @property {Phaser.Group|Phaser.Sprite} parent - The parent of this Group. */ @@ -15882,7 +16634,7 @@ Phaser.Group.prototype.getAt = function (index) { /** * Automatically creates a new Phaser.Sprite object and adds it to the top of this Group. -* Useful if you don't need to create the Sprite instances before-hand. +* You can change Group.classType to any object and this call will create an object of that type instead, but it should extend either Sprite or Image. * * @method Phaser.Group#create * @param {number} x - The x coordinate to display the newly created Sprite at. The value is in relation to the Group.x point. @@ -15890,13 +16642,13 @@ Phaser.Group.prototype.getAt = function (index) { * @param {string} key - The Game.cache key of the image that this Sprite will use. * @param {number|string} [frame] - If the Sprite image contains multiple frames you can specify which one to use here. * @param {boolean} [exists=true] - The default exists state of the Sprite. -* @return {Phaser.Sprite} The child that was created. +* @return {Phaser.Sprite|object} The child that was created. Will be a Phaser.Sprite unless Group.classType has been changed. */ Phaser.Group.prototype.create = function (x, y, key, frame, exists) { if (typeof exists === 'undefined') { exists = true; } - var child = new Phaser.Sprite(this.game, x, y, key, frame); + var child = new this.classType(this.game, x, y, key, frame); if (this.enableBody) { @@ -15929,6 +16681,7 @@ Phaser.Group.prototype.create = function (x, y, key, frame, exists) { * Automatically creates multiple Phaser.Sprite objects and adds them to the top of this Group. * Useful if you need to quickly generate a pool of identical sprites, such as bullets. By default the sprites will be set to not exist * and will be positioned at 0, 0 (relative to the Group.x/y) +* You can change Group.classType to any object and this call will create an object of that type instead, but it should extend either Sprite or Image. * * @method Phaser.Group#createMultiple * @param {number} quantity - The number of Sprites to create. @@ -17041,7 +17794,7 @@ Phaser.Group.prototype.remove = function (child, destroy) { return false; } - if (child.events) + if (child.events && !child.destroyPhase) { child.events.onRemovedFromGroup.dispatch(child, this); } @@ -17731,7 +18484,7 @@ Phaser.ScaleManager = function (game, width, height) { this.scaleFactorInversed = new Phaser.Point(1, 1); /** - * @property {Phaser.Point} margin - If the game canvas is seto to align by adjusting the margin, the margin calculation values are stored in this Point. + * @property {Phaser.Point} margin - If the game canvas is set to align by adjusting the margin, the margin calculation values are stored in this Point. * @readonly */ this.margin = new Phaser.Point(0, 0); @@ -17939,7 +18692,7 @@ Phaser.ScaleManager.prototype = { if (typeof orientationImage !== 'undefined') { - if (orientationImage == null || this.game.cache.checkImageKey(orientationImage) === false) + if (orientationImage === null || this.game.cache.checkImageKey(orientationImage) === false) { orientationImage = '__default'; } @@ -18084,9 +18837,12 @@ Phaser.ScaleManager.prototype = { refresh: function () { // We can't do anything about the status bars in iPads, web apps or desktops - if (this.game.device.iPad === false && this.game.device.webApp === false && this.game.device.desktop === false) + if (!this.game.device.iPad && !this.game.device.webApp && !this.game.device.desktop) { - if (this.game.device.android && this.game.device.chrome === false) + // TODO - Test this + // this._startHeight = window.innerHeight; + + if (this.game.device.android && !this.game.device.chrome) { window.scrollTo(0, 1); } @@ -18096,7 +18852,7 @@ Phaser.ScaleManager.prototype = { } } - if (this._check == null && this.maxIterations > 0) + if (this._check === null && this.maxIterations > 0) { this._iterations = this.maxIterations; @@ -18117,14 +18873,14 @@ Phaser.ScaleManager.prototype = { */ setScreenSize: function (force) { - if (typeof force == 'undefined') + if (typeof force === 'undefined') { force = false; } - if (this.game.device.iPad === false && this.game.device.webApp === false && this.game.device.desktop === false) + if (!this.game.device.iPad && !this.game.device.webApp && !this.game.device.desktop) { - if (this.game.device.android && this.game.device.chrome === false) + if (this.game.device.android && !this.game.device.chrome) { window.scrollTo(0, 1); } @@ -18141,28 +18897,28 @@ Phaser.ScaleManager.prototype = { // Set minimum height of content to new window height document.documentElement['style'].minHeight = window.innerHeight + 'px'; - if (this.incorrectOrientation === true) + if (this.incorrectOrientation) { this.setMaximum(); } else if (!this.isFullScreen) { - if (this.scaleMode == Phaser.ScaleManager.EXACT_FIT) + if (this.scaleMode === Phaser.ScaleManager.EXACT_FIT) { this.setExactFit(); } - else if (this.scaleMode == Phaser.ScaleManager.SHOW_ALL) + else if (this.scaleMode === Phaser.ScaleManager.SHOW_ALL) { this.setShowAll(); } } else { - if (this.fullScreenScaleMode == Phaser.ScaleManager.EXACT_FIT) + if (this.fullScreenScaleMode === Phaser.ScaleManager.EXACT_FIT) { this.setExactFit(); } - else if (this.fullScreenScaleMode == Phaser.ScaleManager.SHOW_ALL) + else if (this.fullScreenScaleMode === Phaser.ScaleManager.SHOW_ALL) { this.setShowAll(); } @@ -18181,7 +18937,7 @@ Phaser.ScaleManager.prototype = { */ setSize: function () { - if (this.incorrectOrientation === false) + if (!this.incorrectOrientation) { if (this.maxWidth && this.width > this.maxWidth) { @@ -18211,7 +18967,7 @@ Phaser.ScaleManager.prototype = { if (this.pageAlignHorizontally) { - if (this.width < window.innerWidth && this.incorrectOrientation === false) + if (this.width < window.innerWidth && !this.incorrectOrientation) { this.margin.x = Math.round((window.innerWidth - this.width) / 2); this.game.canvas.style.marginLeft = this.margin.x + 'px'; @@ -18225,7 +18981,7 @@ Phaser.ScaleManager.prototype = { if (this.pageAlignVertically) { - if (this.height < window.innerHeight && this.incorrectOrientation === false) + if (this.height < window.innerHeight && !this.incorrectOrientation) { this.margin.y = Math.round((window.innerHeight - this.height) / 2); this.game.canvas.style.marginTop = this.margin.y + 'px'; @@ -18333,7 +19089,7 @@ Object.defineProperty(Phaser.ScaleManager.prototype, "isFullScreen", { Object.defineProperty(Phaser.ScaleManager.prototype, "isPortrait", { get: function () { - return this.orientation === 0 || this.orientation == 180; + return (this.orientation === 0 || this.orientation === 180); } }); @@ -18346,7 +19102,7 @@ Object.defineProperty(Phaser.ScaleManager.prototype, "isPortrait", { Object.defineProperty(Phaser.ScaleManager.prototype, "isLandscape", { get: function () { - return this.orientation === 90 || this.orientation === -90; + return (this.orientation === 90 || this.orientation === -90); } }); @@ -18798,6 +19554,7 @@ Phaser.Game.prototype = { this.plugins = new Phaser.PluginManager(this); this.net = new Phaser.Net(this); this.debug = new Phaser.Utils.Debug(this); + this.scratch = new Phaser.BitmapData(this, '__root', 1024, 1024); this.time.boot(); this.stage.boot(); @@ -18833,7 +19590,7 @@ Phaser.Game.prototype = { */ showDebugHeader: function () { - var v = Phaser.DEV_VERSION; + var v = Phaser.VERSION; var r = 'Canvas'; var a = 'HTML Audio'; var c = 1; @@ -18880,7 +19637,7 @@ Phaser.Game.prototype = { console.log.apply(console, args); } - else + else if (window['console']) { console.log('Phaser v' + v + ' - Renderer: ' + r + ' - Audio: ' + a + ' - http://phaser.io'); } @@ -18966,7 +19723,6 @@ Phaser.Game.prototype = { this.tweens.update(); this.sound.update(); this.input.update(); - // this.state.update(); this.physics.update(); this.particles.update(); this.plugins.update(); @@ -18976,6 +19732,8 @@ Phaser.Game.prototype = { } else { + this.state.pauseUpdate(); + // this.input.update(); this.debug.preUpdate(); } @@ -19148,7 +19906,7 @@ Object.defineProperty(Phaser.Game.prototype, "paused", { { this._paused = true; this._codePaused = true; - this.sound.mute = true; + this.sound.setMute(); this.time.gamePaused(); this.onPause.dispatch(this); } @@ -19160,7 +19918,7 @@ Object.defineProperty(Phaser.Game.prototype, "paused", { this._paused = false; this._codePaused = false; this.input.reset(); - this.sound.mute = false; + this.sound.unsetMute(); this.time.gameResumed(); this.onResume.dispatch(this); } @@ -19444,10 +20202,10 @@ Phaser.Input = function (game) { this.onHold = null; /** - * A linked list of interactive objects; the InputHandler components (belonging to Sprites) register themselves with this. - * @property {Phaser.LinkedList} interactiveItems + * A list of interactive objects. Te InputHandler components add and remove themselves from this. + * @property {Phaser.ArrayList} interactiveItems */ - this.interactiveItems = new Phaser.LinkedList(); + this.interactiveItems = new Phaser.ArrayList(); /** * @property {Phaser.Point} _localPoint - Internal cache var. @@ -19697,8 +20455,6 @@ Phaser.Input.prototype = { this.onUp = new Phaser.Signal(); this.onTap = new Phaser.Signal(); this.onHold = new Phaser.Signal(); - - this.interactiveItems.callAll('reset'); } this._pollCounter = 0; @@ -20346,7 +21102,10 @@ Phaser.Key.prototype.constructor = Phaser.Key; */ /** -* The Keyboard class handles looking after keyboard input for your game. It will recognise and respond to key presses and dispatch the required events. +* The Keyboard class handles looking after keyboard input for your game. +* It will recognise and respond to key presses and dispatch the required events. +* Please be aware that lots of keyboards are unable to process certain combinations of keys due to hardware +* limitations known as ghosting. Full details here: http://www.html5gamedevs.com/topic/4876-impossible-to-use-more-than-2-keyboard-input-buttons-at-the-same-time/ * * @class Phaser.Keyboard * @constructor @@ -21763,15 +22522,15 @@ Phaser.Pointer.prototype = { this._highestRenderObject = null; this._highestInputPriorityID = -1; - // Just run through the linked list + // Run through the list if (this.game.input.interactiveItems.total > 0) { - var currentNode = this.game.input.interactiveItems.next; + var currentNode = this.game.input.interactiveItems.first; do { // If the object is using pixelPerfect checks, or has a higher InputManager.PriorityID OR if the priority ID is the same as the current highest AND it has a higher renderOrderID, then set it to the top - if (currentNode.validForInput(this._highestInputPriorityID, this._highestRenderOrderID)) + if (currentNode && currentNode.validForInput(this._highestInputPriorityID, this._highestRenderOrderID)) { if ((!fromClick && currentNode.checkPointerOver(this)) || (fromClick && currentNode.checkPointerDown(this))) { @@ -21780,9 +22539,9 @@ Phaser.Pointer.prototype = { this._highestRenderObject = currentNode; } } - currentNode = currentNode.next; + currentNode = this.game.input.interactiveItems.next; } - while (currentNode != null); + while (currentNode !== null); } if (this._highestRenderObject === null) @@ -21901,28 +22660,10 @@ Phaser.Pointer.prototype = { this.game.input.currentPointers--; } - if (this.game.input.interactiveItems.total > 0) - { - var currentNode = this.game.input.interactiveItems.next; - - do - { - if (currentNode) - { - currentNode._releasedHandler(this); - } - - currentNode = currentNode.next; - } - while (currentNode != null); - } - - if (this.targetObject) - { - this.targetObject._releasedHandler(this); - } + this.game.input.interactiveItems.callAll('_releasedHandler', this); this.targetObject = null; + return this; }, @@ -23969,7 +24710,7 @@ Phaser.InputHandler.prototype = { start: function (priority, useHandCursor) { priority = priority || 0; - if (typeof useHandCursor == 'undefined') { useHandCursor = false; } + if (typeof useHandCursor === 'undefined') { useHandCursor = false; } // Turning on if (this.enabled === false) @@ -24110,7 +24851,7 @@ Phaser.InputHandler.prototype = { */ destroy: function () { - if (this.enabled) + if (this.sprite) { if (this._setHandCursor) { @@ -24526,10 +25267,13 @@ Phaser.InputHandler.prototype = { if (this.useHandCursor && this._pointerData[pointer.id].isDragged === false) { this.game.canvas.style.cursor = "pointer"; - this._setHandCursor = false; + this._setHandCursor = true; } - this.sprite.events.onInputOver.dispatch(this.sprite, pointer); + if (this.sprite && this.sprite.events) + { + this.sprite.events.onInputOver.dispatch(this.sprite, pointer); + } } }, @@ -24589,7 +25333,11 @@ Phaser.InputHandler.prototype = { this._pointerData[pointer.id].isDown = true; this._pointerData[pointer.id].isUp = false; this._pointerData[pointer.id].timeDown = this.game.time.now; - this.sprite.events.onInputDown.dispatch(this.sprite, pointer); + + if (this.sprite && this.sprite.events) + { + this.sprite.events.onInputDown.dispatch(this.sprite, pointer); + } // Start drag if (this.draggable && this.isDragged === false) @@ -24634,12 +25382,18 @@ Phaser.InputHandler.prototype = { if (this.checkPointerOver(pointer)) { // Release the inputUp signal and provide optional parameter if pointer is still over the sprite or not - this.sprite.events.onInputUp.dispatch(this.sprite, pointer, true); + if (this.sprite && this.sprite.events) + { + this.sprite.events.onInputUp.dispatch(this.sprite, pointer, true); + } } else { // Release the inputUp signal and provide optional parameter if pointer is still over the sprite or not - this.sprite.events.onInputUp.dispatch(this.sprite, pointer, false); + if (this.sprite && this.sprite.events) + { + this.sprite.events.onInputUp.dispatch(this.sprite, pointer, false); + } // Pointer outside the sprite? Reset the cursor if (this.useHandCursor) @@ -26064,20 +26818,39 @@ Phaser.BitmapData = function (game, key, width, height) { this.ctx = this.context; /** - * @property {array} imageData - The canvas image data. + * @property {ImageData} imageData - The context image data. */ this.imageData = this.context.getImageData(0, 0, width, height); /** - * @property {UInt8Clamped} pixels - A reference to the context imageData buffer. + * @property {Uint8ClampedArray} data - A Uint8ClampedArray view into BitmapData.buffer. + */ + this.data = this.imageData.data; + + /** + * @property {Uint32Array} pixels - An Uint32Array view into BitmapData.buffer. + */ + this.pixels = null; + + /** + * @property {ArrayBuffer} buffer - An ArrayBuffer the same size as the context ImageData. */ if (this.imageData.data.buffer) { - this.pixels = this.imageData.data.buffer; + this.buffer = this.imageData.data.buffer; + this.pixels = new Uint32Array(this.buffer); } else { - this.pixels = this.imageData.data; + if (window['ArrayBuffer']) + { + this.buffer = new ArrayBuffer(this.imageData.data.length); + this.pixels = new Uint32Array(this.buffer); + } + else + { + this.pixels = this.imageData.data; + } } /** @@ -26104,11 +26877,38 @@ Phaser.BitmapData = function (game, key, width, height) { */ this.type = Phaser.BITMAPDATA; + /** + * @property {boolean} disableTextureUpload - If disableTextureUpload is true this BitmapData will never send its image data to the GPU when its dirty flag is true. + */ + this.disableTextureUpload = false; + /** * @property {boolean} dirty - If dirty this BitmapData will be re-rendered. */ this.dirty = false; + // Aliases + this.cls = this.clear; + this.update = this.refreshBuffer; + + /** + * @property {number} _tempR - Internal cache var. + * @private + */ + this._tempR = 0; + + /** + * @property {number} _tempG - Internal cache var. + * @private + */ + this._tempG = 0; + + /** + * @property {number} _tempB - Internal cache var. + * @private + */ + this._tempB = 0; + }; Phaser.BitmapData.prototype = { @@ -26139,7 +26939,14 @@ Phaser.BitmapData.prototype = { }, /** - * Clears the BitmapData. + * Clears the BitmapData context using a clearRect. + * + * @method Phaser.BitmapData#cls + */ + + /** + * Clears the BitmapData context using a clearRect. + * * @method Phaser.BitmapData#clear */ clear: function () { @@ -26151,7 +26958,27 @@ Phaser.BitmapData.prototype = { }, /** - * Resizes the BitmapData. + * Fills the BitmapData with the given color. + * + * @method Phaser.BitmapData#fill + * @param {number} r - The red color value, between 0 and 0xFF (255). + * @param {number} g - The green color value, between 0 and 0xFF (255). + * @param {number} b - The blue color value, between 0 and 0xFF (255). + * @param {number} [a=1] - The alpha color value, between 0 and 1. + */ + fill: function (r, g, b, a) { + + if (typeof a === 'undefined') { a = 1; } + + this.context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + this.context.fillRect(0, 0, this.width, this.height); + this.dirty = true; + + }, + + /** + * Resizes the BitmapData. This changes the size of the underlying canvas and refreshes the buffer. + * * @method Phaser.BitmapData#resize */ resize: function (width, height) { @@ -26164,7 +26991,7 @@ Phaser.BitmapData.prototype = { this.canvas.height = height; this.textureFrame.width = width; this.textureFrame.height = height; - this.imageData = this.context.getImageData(0, 0, width, height); + this.refreshBuffer(); } this.dirty = true; @@ -26172,50 +26999,363 @@ Phaser.BitmapData.prototype = { }, /** + * This re-creates the BitmapData.imageData from the current context. + * It then re-builds the ArrayBuffer, the data Uint8ClampedArray reference and the pixels Int32Array. + * If not given the dimensions defaults to the full size of the context. + * + * @method Phaser.BitmapData#update + * @param {number} [x=0] - The x coordinate of the top-left of the image data area to grab from. + * @param {number} [y=0] - The y coordinate of the top-left of the image data area to grab from. + * @param {number} [width] - The width of the image data area. + * @param {number} [height] - The height of the image data area. + */ + + /** + * DEPRECATED: This method will be removed in Phaser 2.1. Please use BitmapData.update instead. + * + * This re-creates the BitmapData.imageData from the current context. + * It then re-builds the ArrayBuffer, the data Uint8ClampedArray reference and the pixels Int32Array. + * If not given the dimensions defaults to the full size of the context. + * * @method Phaser.BitmapData#refreshBuffer + * @param {number} [x=0] - The x coordinate of the top-left of the image data area to grab from. + * @param {number} [y=0] - The y coordinate of the top-left of the image data area to grab from. + * @param {number} [width] - The width of the image data area. + * @param {number} [height] - The height of the image data area. + */ + refreshBuffer: function (x, y, width, height) { + + if (typeof x === 'undefined') { x = 0; } + if (typeof y === 'undefined') { y = 0; } + if (typeof width === 'undefined') { width = this.width; } + if (typeof height === 'undefined') { height = this.height; } + + this.imageData = this.context.getImageData(x, y, width, height); + this.data = this.imageData.data; + + if (this.imageData.data.buffer) + { + this.buffer = this.imageData.data.buffer; + this.pixels = new Uint32Array(this.buffer); + } + else + { + if (window['ArrayBuffer']) + { + this.buffer = new ArrayBuffer(this.imageData.data.length); + this.pixels = new Uint32Array(this.buffer); + } + else + { + this.pixels = this.imageData.data; + } + } + + }, + + /** + * Scans through the area specified in this BitmapData and sends a color object for every pixel to the given callback. + * The callback will be sent a color object with 6 properties: `{ r: number, g: number, b: number, a: number, color: number, rgba: string }`. + * Where r, g, b and a are integers between 0 and 255 representing the color component values for red, green, blue and alpha. + * The `color` property is an Int32 of the full color. Note the endianess of this will change per system. + * The `rgba` property is a CSS style rgba() string which can be used with context.fillStyle calls, among others. + * The callback will also be sent the pixels x and y coordinates respectively. + * The callback must return either `false`, in which case no change will be made to the pixel, or a new color object. + * If a new color object is returned the pixel will be set to the r, g, b and a color values given within it. + * + * @method Phaser.BitmapData#processPixelRGB + * @param {function} callback - The callback that will be sent each pixel color object to be processed. + * @param {object} callbackContext - The context under which the callback will be called. + * @param {number} [x=0] - The x coordinate of the top-left of the region to process from. + * @param {number} [y=0] - The y coordinate of the top-left of the region to process from. + * @param {number} [width] - The width of the region to process. + * @param {number} [height] - The height of the region to process. */ - refreshBuffer: function () { + processPixelRGB: function (callback, callbackContext, x, y, width, height) { + + if (typeof x === 'undefined') { x = 0; } + if (typeof y === 'undefined') { y = 0; } + if (typeof width === 'undefined') { width = this.width; } + if (typeof height === 'undefined') { height = this.height; } - this.imageData = this.context.getImageData(0, 0, this.width, this.height); - this.pixels = new Int32Array(this.imageData.data.buffer); + var w = x + width; + var h = y + height; + var pixel = Phaser.Color.createColor(); + var result = { r: 0, g: 0, b: 0, a: 0 }; + var dirty = false; - // this.data8 = new Uint8ClampedArray(this.imageData.buffer); - // this.data32 = new Uint32Array(this.imageData.buffer); + for (var ty = y; ty < h; ty++) + { + for (var tx = x; tx < w; tx++) + { + Phaser.Color.unpackPixel(this.getPixel32(tx, ty), pixel); + + result = callback.call(callbackContext, pixel, tx, ty); + + if (result !== false && result !== null) + { + this.setPixel32(tx, ty, result.r, result.g, result.b, result.a, false); + dirty = true; + } + } + } + + if (dirty) + { + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; + } + + }, + + /** + * Scans through the area specified in this BitmapData and sends the color for every pixel to the given callback along with its x and y coordinates. + * Whatever value the callback returns is set as the new color for that pixel, unless it returns the same color, in which case it's skipped. + * Note that the format of the color received will be different depending on if the system is big or little endian. + * It is expected that your callback will deal with endianess. If you'd rather Phaser did it then use processPixelRGB instead. + * The callback will also be sent the pixels x and y coordinates respectively. + * + * @method Phaser.BitmapData#processPixel + * @param {function} callback - The callback that will be sent each pixel color to be processed. + * @param {object} callbackContext - The context under which the callback will be called. + * @param {number} [x=0] - The x coordinate of the top-left of the region to process from. + * @param {number} [y=0] - The y coordinate of the top-left of the region to process from. + * @param {number} [width] - The width of the region to process. + * @param {number} [height] - The height of the region to process. + */ + processPixel: function (callback, callbackContext, x, y, width, height) { + + if (typeof x === 'undefined') { x = 0; } + if (typeof y === 'undefined') { y = 0; } + if (typeof width === 'undefined') { width = this.width; } + if (typeof height === 'undefined') { height = this.height; } + + var w = x + width; + var h = y + height; + var pixel = 0; + var result = 0; + var dirty = false; + + for (var ty = y; ty < h; ty++) + { + for (var tx = x; tx < w; tx++) + { + pixel = this.getPixel32(tx, ty); + result = callback.call(callbackContext, pixel, tx, ty); + + if (result !== pixel) + { + this.pixels[ty * this.width + tx] = result; + dirty = true; + } + } + } + + if (dirty) + { + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; + } + + }, + + /** + * Replaces all pixels matching one color with another. The color values are given as two sets of RGBA values. + * An optional region parameter controls if the replacement happens in just a specific area of the BitmapData or the entire thing. + * + * @method Phaser.BitmapData#replaceRGB + * @param {number} r1 - The red color value to be replaced. Between 0 and 255. + * @param {number} g1 - The green color value to be replaced. Between 0 and 255. + * @param {number} b1 - The blue color value to be replaced. Between 0 and 255. + * @param {number} a1 - The alpha color value to be replaced. Between 0 and 255. + * @param {number} r2 - The red color value that is the replacement color. Between 0 and 255. + * @param {number} g2 - The green color value that is the replacement color. Between 0 and 255. + * @param {number} b2 - The blue color value that is the replacement color. Between 0 and 255. + * @param {number} a2 - The alpha color value that is the replacement color. Between 0 and 255. + * @param {Phaser.Rectangle} [region] - The area to perform the search over. If not given it will replace over the whole BitmapData. + */ + replaceRGB: function (r1, g1, b1, a1, r2, g2, b2, a2, region) { + + var sx = 0; + var sy = 0; + var w = this.width; + var h = this.height; + var source = Phaser.Color.packPixel(r1, g1, b1, a1); + + if (region !== undefined && region instanceof Phaser.Rectangle) + { + sx = region.x; + sy = region.y; + w = region.width; + h = region.height; + } + + for (var y = 0; y < h; y++) + { + for (var x = 0; x < w; x++) + { + if (this.getPixel32(sx + x, sy + y) === source) + { + this.setPixel32(sx + x, sy + y, r2, g2, b2, a2, false); + } + } + } + + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; + + }, + + /** + * Sets the hue, saturation and lightness values on every pixel in the given region, or the whole BitmapData if no region was specified. + * + * @method Phaser.BitmapData#setHSL + * @param {number} [h=null] - The hue, in the range 0 - 1. + * @param {number} [s=null] - The saturation, in the range 0 - 1. + * @param {number} [l=null] - The lightness, in the range 0 - 1. + * @param {Phaser.Rectangle} [region] - The area to perform the operation on. If not given it will run over the whole BitmapData. + */ + setHSL: function (h, s, l, region) { + + if (typeof h === 'undefined' || h === null) { h = false; } + if (typeof s === 'undefined' || s === null) { s = false; } + if (typeof l === 'undefined' || l === null) { l = false; } + + if (!h && !s && !l) + { + return; + } + + if (typeof region === 'undefined') + { + region = new Phaser.Rectangle(0, 0, this.width, this.height); + } + + var pixel = Phaser.Color.createColor(); + + for (var y = region.y; y < region.bottom; y++) + { + for (var x = region.x; x < region.right; x++) + { + Phaser.Color.unpackPixel(this.getPixel32(x, y), pixel, true); + + if (h) + { + pixel.h = h; + } + + if (s) + { + pixel.s = s; + } + + if (l) + { + pixel.l = l; + } + + Phaser.Color.HSLtoRGB(pixel.h, pixel.s, pixel.l, pixel); + this.setPixel32(x, y, pixel.r, pixel.g, pixel.b, pixel.a, false); + } + } + + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; + + }, + + /** + * Shifts any or all of the hue, saturation and lightness values on every pixel in the given region, or the whole BitmapData if no region was specified. + * Shifting will add the given value onto the current h, s and l values, not replace them. + * The hue is wrapped to keep it within the range 0 to 1. Saturation and lightness are clamped to not exceed 1. + * + * @method Phaser.BitmapData#shiftHSL + * @param {number} [h=null] - The amount to shift the hue by. + * @param {number} [s=null] - The amount to shift the saturation by. + * @param {number} [l=null] - The amount to shift the lightness by. + * @param {Phaser.Rectangle} [region] - The area to perform the operation on. If not given it will run over the whole BitmapData. + */ + shiftHSL: function (h, s, l, region) { + + if (typeof h === 'undefined' || h === null) { h = false; } + if (typeof s === 'undefined' || s === null) { s = false; } + if (typeof l === 'undefined' || l === null) { l = false; } + + if (!h && !s && !l) + { + return; + } + + if (typeof region === 'undefined') + { + region = new Phaser.Rectangle(0, 0, this.width, this.height); + } + + var pixel = Phaser.Color.createColor(); + + for (var y = region.y; y < region.bottom; y++) + { + for (var x = region.x; x < region.right; x++) + { + Phaser.Color.unpackPixel(this.getPixel32(x, y), pixel, true); + + if (h) + { + pixel.h = this.game.math.wrap(pixel.h + h, 0, 1); + } + + if (s) + { + pixel.s = this.game.math.limitValue(pixel.s + s, 0, 1); + } + + if (l) + { + pixel.l = this.game.math.limitValue(pixel.l + l, 0, 1); + } + + Phaser.Color.HSLtoRGB(pixel.h, pixel.s, pixel.l, pixel); + this.setPixel32(x, y, pixel.r, pixel.g, pixel.b, pixel.a, false); + } + } + + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; }, /** * Sets the color of the given pixel to the specified red, green, blue and alpha values. + * * @method Phaser.BitmapData#setPixel32 - * @param {number} x - The X coordinate of the pixel to be set. - * @param {number} y - The Y coordinate of the pixel to be set. + * @param {number} x - The x coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} y - The y coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. * @param {number} red - The red color value, between 0 and 0xFF (255). * @param {number} green - The green color value, between 0 and 0xFF (255). * @param {number} blue - The blue color value, between 0 and 0xFF (255). * @param {number} alpha - The alpha color value, between 0 and 0xFF (255). + * @param {boolean} [immediate=true] - If `true` the context.putImageData will be called and the dirty flag set. */ - setPixel32: function (x, y, red, green, blue, alpha) { + setPixel32: function (x, y, red, green, blue, alpha, immediate) { + + if (typeof immediate === 'undefined') { immediate = true; } if (x >= 0 && x <= this.width && y >= 0 && y <= this.height) { - this.pixels[y * this.width + x] = (alpha << 24) | (blue << 16) | (green << 8) | red; - - /* - if (this.isLittleEndian) + if (Phaser.Device.LITTLE_ENDIAN) { - this.data32[y * this.width + x] = (alpha << 24) | (blue << 16) | (green << 8) | red; + this.pixels[y * this.width + x] = (alpha << 24) | (blue << 16) | (green << 8) | red; } else { - this.data32[y * this.width + x] = (red << 24) | (green << 16) | (blue << 8) | alpha; + this.pixels[y * this.width + x] = (red << 24) | (green << 16) | (blue << 8) | alpha; } - */ - - // this.imageData.data.set(this.data8); - this.context.putImageData(this.imageData, 0, 0); - - this.dirty = true; + if (immediate) + { + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; + } } }, @@ -26224,55 +27364,93 @@ Phaser.BitmapData.prototype = { * Sets the color of the given pixel to the specified red, green and blue values. * * @method Phaser.BitmapData#setPixel - * @param {number} x - The X coordinate of the pixel to be set. - * @param {number} y - The Y coordinate of the pixel to be set. - * @param {number} red - The red color value (between 0 and 255) - * @param {number} green - The green color value (between 0 and 255) - * @param {number} blue - The blue color value (between 0 and 255) + * @param {number} x - The x coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} y - The y coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} red - The red color value, between 0 and 0xFF (255). + * @param {number} green - The green color value, between 0 and 0xFF (255). + * @param {number} blue - The blue color value, between 0 and 0xFF (255). + * @param {number} alpha - The alpha color value, between 0 and 0xFF (255). + * @param {boolean} [immediate=true] - If `true` the context.putImageData will be called and the dirty flag set. */ - setPixel: function (x, y, red, green, blue) { + setPixel: function (x, y, red, green, blue, immediate) { - this.setPixel32(x, y, red, green, blue, 255); + this.setPixel32(x, y, red, green, blue, 255, immediate); }, /** - * Get the color of a specific pixel. + * Get the color of a specific pixel in the context into a color object. * - * @param {number} x - The X coordinate of the pixel to get. - * @param {number} y - The Y coordinate of the pixel to get. - * @return {number} A native color value integer (format: 0xRRGGBB) + * @method Phaser.BitmapData#getPixel + * @param {number} x - The x coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} y - The y coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {object} [out] - An object into which 4 properties will be created: r, g, b and a. If not provided a new object will be created. + * @return {object} An object with the red, green, blue and alpha values set in the r, g, b and a properties. */ - getPixel: function (x, y) { + getPixel: function (x, y, out) { - if (x >= 0 && x <= this.width && y >= 0 && y <= this.height) + if (!out) { - return this.data32[y * this.width + x]; + out = Phaser.Color.createColor(); } + var index = ~~(x + (y * this.width)); + + index *= 4; + + if (this.data[index]) + { + out.r = this.data[index]; + out.g = this.data[++index]; + out.b = this.data[++index]; + out.a = this.data[++index]; + } + + return out; + }, /** * Get the color of a specific pixel including its alpha value. + * Note that on little-endian systems the format is 0xAABBGGRR and on big-endian the format is 0xRRGGBBAA. * - * @param {number} x - The X coordinate of the pixel to get. - * @param {number} y - The Y coordinate of the pixel to get. + * @method Phaser.BitmapData#getPixel32 + * @param {number} x - The x coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} y - The y coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. * @return {number} A native color value integer (format: 0xAARRGGBB) */ getPixel32: function (x, y) { if (x >= 0 && x <= this.width && y >= 0 && y <= this.height) { - return this.data32[y * this.width + x]; + return this.pixels[y * this.width + x]; } }, + /** + * Get the color of a specific pixel including its alpha value as a color object containing r,g,b,a and rgba properties. + * + * @method Phaser.BitmapData#getPixelRGB + * @param {number} x - The x coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} y - The y coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {object} [out] - An object into which 3 properties will be created: r, g and b. If not provided a new object will be created. + * @param {boolean} [hsl=false] - Also convert the rgb values into hsl? + * @param {boolean} [hsv=false] - Also convert the rgb values into hsv? + * @return {object} An object with the red, green and blue values set in the r, g and b properties. + */ + getPixelRGB: function (x, y, out, hsl, hsv) { + + return Phaser.Color.unpackPixel(this.getPixel32(x, y), out, hsl, hsv); + + }, + /** * Gets all the pixels from the region specified by the given Rectangle object. * + * @method Phaser.BitmapData#getPixels * @param {Phaser.Rectangle} rect - The Rectangle region to get. - * @return {array} CanvasPixelArray. + * @return {ImageData} Returns a ImageData object containing a Uint8ClampedArray data property. */ getPixels: function (rect) { @@ -26283,6 +27461,7 @@ Phaser.BitmapData.prototype = { /** * Copies the pixels from the source image to this BitmapData based on the given area and destination. * + * @method Phaser.BitmapData#copyPixels * @param {HTMLImage|string} source - The Image to draw. If you give a key it will try and find the Image in the Game.Cache. * @param {Phaser.Rectangle} area - The Rectangle region to copy from the source image. * @param {number} destX - The destination x coordinate to copy the image to. @@ -26300,16 +27479,22 @@ Phaser.BitmapData.prototype = { this.context.drawImage(source, area.x, area.y, area.width, area.height, destX, destY, area.width, area.height); } + this.dirty = true; + }, /** * Draws the given image to this BitmapData at the coordinates specified. If you need to only draw a part of the image use BitmapData.copyPixels instead. * - * @param {HTMLImage|string} source - The Image to draw. If you give a key it will try and find the Image in the Game.Cache. - * @param {number} destX - The destination x coordinate to draw the image to. - * @param {number} destY - The destination y coordinate to draw the image to. + * @method Phaser.BitmapData#draw + * @param {HTMLImage|string} source - The Image to draw. If you give a string it will try and find the Image in the Game.Cache. + * @param {number} [x=0] - The x coordinate to draw the image to. + * @param {number} [y=0] - The y coordinate to draw the image to. */ - draw: function (source, destX, destY) { + draw: function (source, x, y) { + + if (typeof x === 'undefined') { x = 0; } + if (typeof y === 'undefined') { y = 0; } if (typeof source === 'string') { @@ -26318,14 +27503,38 @@ Phaser.BitmapData.prototype = { if (source) { - this.context.drawImage(source, 0, 0, source.width, source.height, destX, destY, source.width, source.height); + this.context.drawImage(source, 0, 0, source.width, source.height, x, y, source.width, source.height); } + this.dirty = true; + + }, + + /** + * Draws the given image to this BitmapData at the coordinates specified. If you need to only draw a part of the image use BitmapData.copyPixels instead. + * + * @method Phaser.BitmapData#drawSprite + * @param {Phaser.Sprite|Phaser.Image} sprite - The Sprite to draw. Must have a loaded texture and frame. + * @param {number} [x=0] - The x coordinate to draw the Sprite to. + * @param {number} [y=0] - The y coordinate to draw the Sprite to. + */ + drawSprite: function (sprite, x, y) { + + if (typeof x === 'undefined') { x = 0; } + if (typeof y === 'undefined') { y = 0; } + + var frame = sprite.texture.frame; + + this.context.drawImage(sprite.texture.baseTexture.source, frame.x, frame.y, frame.width, frame.height, x, y, frame.width, frame.height); + + this.dirty = true; + }, /** * Draws the given image onto this BitmapData using an image as an alpha mask. * + * @method Phaser.BitmapData#alphaMask * @param {HTMLImage|string} source - The Image to draw. If you give a key it will try and find the Image in the Game.Cache. * @param {HTMLImage|string} mask - The Image to use as the alpha mask. If you give a key it will try and find the Image in the Game.Cache. */ @@ -26357,17 +27566,79 @@ Phaser.BitmapData.prototype = { this.context.globalCompositeOperation = temp; + this.dirty = true; + + }, + + /** + * Scans this BitmapData for all pixels matching the given r,g,b values and then draws them into the given destination BitmapData. + * The destination BitmapData must be large enough to receive all of the pixels that are scanned. + * Although the destination BitmapData is returned from this method, it's actually modified directly in place, meaning this call is perfectly valid: + * `picture.extract(mask, r, g, b)` + * + * @method Phaser.BitmapData#extract + * @param {Phaser.BitmapData} destination - The BitmapData that the extracts pixels will be drawn to. + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {number} [a=255] - The alpha color component, in the range 0 - 255. + * @returns {Phaser.BitmapData} The BitmapData that the extract pixels were drawn on. + */ + extract: function (destination, r, g, b, a) { + + if (typeof a === 'undefined') { a = 255; } + + this.processPixelRGB( + function(pixel, x, y){ + if (pixel.r === r && pixel.g === g && pixel.b === b) + { + destination.setPixel32(x, y, r, g, b, a, false); + } + return false; + }, + this); + + destination.context.putImageData(destination.imageData, 0, 0); + destination.dirty = true; + + return destination; + + }, + + /** + * Draws a filled Circle to the BitmapData at the given x, y coordinates and radius in size. + * + * @method Phaser.BitmapData#circle + * @param {number} x - The x coordinate to draw the Circle at. + * @param {number} y - The y coordinate to draw the Circle at. + * @param {number} radius - The radius of the Circle. + * @param {string} [fillStyle] - If set the context fillStyle will be set to this value before the circle is drawn. + */ + circle: function (x, y, radius, fillStyle) { + + if (typeof fillStyle !== 'undefined') + { + this.context.fillStyle = fillStyle; + } + + this.context.beginPath(); + this.context.arc(x, y, radius, 0, Math.PI * 2, false); + this.context.closePath(); + + this.context.fill(); + }, /** * If the game is running in WebGL this will push the texture up to the GPU if it's dirty. * This is called automatically if the BitmapData is being used by a Sprite, otherwise you need to remember to call it in your render function. + * If you wish to suppress this functionality set BitmapData.disableTextureUpload to `true`. * * @method Phaser.BitmapData#render */ render: function () { - if (this.game.renderType === Phaser.WEBGL && this.dirty) + if (!this.disableTextureUpload && this.game.renderType === Phaser.WEBGL && this.dirty) { // Only needed if running in WebGL, otherwise this array will never get cleared down // should use the rendersession @@ -26549,10 +27820,11 @@ Phaser.Sprite = function (game, x, y, key, frame) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0 ]; + this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0, 0 ]; /** * @property {Phaser.Rectangle} _bounds - Internal cache var. @@ -26900,10 +28172,12 @@ Phaser.Sprite.prototype.kill = function() { */ Phaser.Sprite.prototype.destroy = function(destroyChildren) { - if (this.game === null) { return; } + if (this.game === null || this._cache[8] === 1) { return; } if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + if (this.parent) { if (this.parent instanceof Phaser.Group) @@ -26961,6 +28235,8 @@ Phaser.Sprite.prototype.destroy = function(destroyChildren) { this.mask = null; this.game = null; + this._cache[8] = 0; + }; /** @@ -27445,6 +28721,20 @@ Object.defineProperty(Phaser.Sprite.prototype, "y", { }); +/** +* @name Phaser.Sprite#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.Sprite.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -27562,10 +28852,11 @@ Phaser.Image = function (game, x, y, key, frame) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0 ]; + this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0, 0 ]; }; @@ -27834,10 +29125,12 @@ Phaser.Image.prototype.kill = function() { */ Phaser.Image.prototype.destroy = function(destroyChildren) { - if (this.game === null) { return; } + if (this.game === null || this.destroyPhase) { return; } if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + if (this.parent) { if (this.parent instanceof Phaser.Group) @@ -27885,6 +29178,8 @@ Phaser.Image.prototype.destroy = function(destroyChildren) { this.mask = null; this.game = null; + this._cache[8] = 0; + }; /** @@ -28216,6 +29511,20 @@ Object.defineProperty(Phaser.Image.prototype, "smoothed", { }); +/** +* @name Phaser.Image#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.Image.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -28363,10 +29672,11 @@ Phaser.TileSprite = function (game, x, y, width, height, key, frame) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0 ]; + this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0, 0 ]; }; @@ -28620,10 +29930,12 @@ Phaser.TileSprite.prototype.loadTexture = function (key, frame) { */ Phaser.TileSprite.prototype.destroy = function(destroyChildren) { - if (this.game === null) { return; } + if (this.game === null || this.destroyPhase) { return; } if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + if (this.filters) { this.filters = null; @@ -28669,6 +29981,8 @@ Phaser.TileSprite.prototype.destroy = function(destroyChildren) { this.mask = null; this.game = null; + this._cache[8] = 0; + }; /** @@ -28964,6 +30278,20 @@ Object.defineProperty(Phaser.TileSprite.prototype, "y", { }); +/** +* @name Phaser.TileSprite#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.TileSprite.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -29094,10 +30422,11 @@ Phaser.Text = function (game, x, y, text, style) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0 ]; + this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0, 0 ]; }; @@ -29179,10 +30508,12 @@ Phaser.Text.prototype.postUpdate = function () { */ Phaser.Text.prototype.destroy = function (destroyChildren) { - if (this.game === null) { return; } + if (this.game === null || this.destroyPhase) { return; } if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + if (this.parent) { if (this.parent instanceof Phaser.Group) @@ -29231,6 +30562,8 @@ Phaser.Text.prototype.destroy = function (destroyChildren) { this.mask = null; this.game = null; + this._cache[8] = 0; + }; /** @@ -29341,6 +30674,7 @@ Phaser.Text.prototype.updateText = function () { this.context.shadowBlur = this.style.shadowBlur; this.context.textBaseline = 'top'; + this.context.lineCap = 'round'; this.context.lineJoin = 'round'; //draw lines line by line @@ -29853,6 +31187,20 @@ Object.defineProperty(Phaser.Text.prototype, "fixedToCamera", { }); +/** +* @name Phaser.Text#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.Text.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -29978,10 +31326,11 @@ Phaser.BitmapText = function (game, x, y, font, text, size) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [0, 0, 0, 0, 1, 0, 1, 0]; + this._cache = [0, 0, 0, 0, 1, 0, 1, 0, 0]; }; @@ -30065,10 +31414,12 @@ Phaser.BitmapText.prototype.postUpdate = function () { */ Phaser.BitmapText.prototype.destroy = function(destroyChildren) { - if (this.game === null) { return; } + if (this.game === null || this.destroyPhase) { return; } if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + if (this.parent) { if (this.parent instanceof Phaser.Group) @@ -30112,6 +31463,8 @@ Phaser.BitmapText.prototype.destroy = function(destroyChildren) { this.mask = null; this.game = null; + this._cache[8] = 0; + }; /** @@ -30320,6 +31673,20 @@ Object.defineProperty(Phaser.BitmapText.prototype, "fixedToCamera", { }); +/** +* @name Phaser.BitmapText#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.BitmapText.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -31031,10 +32398,11 @@ Phaser.Graphics = function (game, x, y) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0 ]; + this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0, 0 ]; }; @@ -31107,8 +32475,12 @@ Phaser.Graphics.prototype.postUpdate = function () { */ Phaser.Graphics.prototype.destroy = function(destroyChildren) { + if (this.game === null || this.destroyPhase) { return; } + if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + this.clear(); if (this.parent) @@ -31145,6 +32517,8 @@ Phaser.Graphics.prototype.destroy = function(destroyChildren) { this.game = null; + this._cache[8] = 0; + }; /* @@ -31215,6 +32589,20 @@ Object.defineProperty(Phaser.Graphics.prototype, "fixedToCamera", { }); +/** +* @name Phaser.Graphics#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.Graphics.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -32730,6 +34118,12 @@ Phaser.Device = function (game) { */ this.littleEndian = false; + /** + * @property {boolean} support32bit - Does the device context support 32bit pixel manipulation using array buffer views? + * @default + */ + this.support32bit = false; + /** * @property {boolean} fullscreen - Does the browser support the Full Screen API? * @default @@ -32764,6 +34158,8 @@ Phaser.Device = function (game) { }; +Phaser.Device.LITTLE_ENDIAN = false; + Phaser.Device.prototype = { /** @@ -33052,7 +34448,7 @@ Phaser.Device.prototype = { }, /** - * Check PixelRatio of devices. + * Check PixelRatio, iOS device, Vibration API, ArrayBuffers and endianess. * @method Phaser.Device#_checkDevice * @private */ @@ -33065,15 +34461,21 @@ Phaser.Device.prototype = { if (typeof Int8Array !== 'undefined') { - this.littleEndian = new Int8Array(new Int16Array([1]).buffer)[0] > 0; this.typedArray = true; } else { - this.littleEndian = false; this.typedArray = false; } + if (typeof ArrayBuffer !== 'undefined' && typeof Uint8Array !== 'undefined' && typeof Uint32Array !== 'undefined') + { + this.littleEndian = this._checkIsLittleEndian(); + Phaser.Device.LITTLE_ENDIAN = this.littleEndian; + } + + this.support32bit = (typeof ArrayBuffer !== "undefined" && typeof Uint8ClampedArray !== "undefined" && typeof Int32Array !== "undefined" && this.littleEndian !== null && this._checkIsUint8ClampedImageData()); + navigator.vibrate = navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate; if (navigator.vibrate) @@ -33083,6 +34485,67 @@ Phaser.Device.prototype = { }, + /** + * Check Little or Big Endian system. + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Device#_checkIsLittleEndian + * @private + */ + _checkIsLittleEndian: function () { + + var a = new ArrayBuffer(4); + var b = new Uint8Array(a); + var c = new Uint32Array(a); + + b[0] = 0xa1; + b[1] = 0xb2; + b[2] = 0xc3; + b[3] = 0xd4; + + if (c[0] == 0xd4c3b2a1) + { + return true; + } + + if (c[0] == 0xa1b2c3d4) + { + return false; + } + else + { + // Could not determine endianness + return null; + } + + }, + + /** + * Test to see if ImageData uses CanvasPixelArray or Uint8ClampedArray. + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Device#_checkIsUint8ClampedImageData + * @private + */ + _checkIsUint8ClampedImageData: function () { + + if (typeof Uint8ClampedArray === "undefined") + { + return false; + } + + var elem = document.createElement('canvas'); + var ctx = elem.getContext('2d'); + + if (!ctx) + { + return false; + } + + var image = ctx.createImageData(1, 1); + + return image.data instanceof Uint8ClampedArray; + + }, + /** * Check whether the host environment support 3D CSS. * @method Phaser.Device#_checkCSS3D @@ -33964,6 +35427,21 @@ Phaser.Math = { }, + /** + * Ensures the given value is between min and max inclusive. + * + * @method Phaser.Math#limitValue + * @param {number} value - The value to limit. + * @param {number} min - The minimum the value can be. + * @param {number} max - The maximum the value can be. + * @return {number} The limited value. + */ + limitValue: function(value, min, max) { + + return value < min ? min : value > max ? max : value; + + }, + /** * Randomly returns either a 1 or -1. * @@ -33971,7 +35449,9 @@ Phaser.Math = { * @return {number} 1 or -1 */ randomSign: function () { + return (Math.random() > 0.5) ? 1 : -1; + }, /** @@ -34606,18 +36086,7 @@ Phaser.Math = { */ smoothstep: function ( x, min, max ) { - if (x <= min) - { - return 0; - } - - if (x >= max) - { - return 1; - } - - x = (x - min) / (max - min); - + x = Math.max(0, Math.min(1, (x - min) / (max - min))); return x * x * (3 - 2 * x); }, @@ -34633,18 +36102,7 @@ Phaser.Math = { */ smootherstep: function ( x, min, max ) { - if (x <= min) - { - return 0; - } - - if (x >= max) - { - return 1; - } - - x = (x - min) / (max - min); - + x = Math.max(0, Math.min(1, (x - min) / (max - min))); return x * x * x * (x * (x * 6 - 15) + 10); }, @@ -34756,6 +36214,7 @@ Phaser.RandomDataGenerator.prototype = { /** * Private random helper. + * * @method Phaser.RandomDataGenerator#rnd * @private * @return {number} @@ -34803,9 +36262,10 @@ Phaser.RandomDataGenerator.prototype = { /** * Internal method that creates a seed hash. + * * @method Phaser.RandomDataGenerator#hash - * @param {Any} data * @private + * @param {Any} data * @return {number} hashed value. */ hash: function (data) { @@ -34831,29 +36291,38 @@ Phaser.RandomDataGenerator.prototype = { /** * Returns a random integer between 0 and 2^32. + * * @method Phaser.RandomDataGenerator#integer * @return {number} A random integer between 0 and 2^32. */ integer: function() { + return this.rnd.apply(this) * 0x100000000;// 2^32 + }, /** * Returns a random real number between 0 and 1. + * * @method Phaser.RandomDataGenerator#frac * @return {number} A random real number between 0 and 1. */ frac: function() { - return this.rnd.apply(this) + (this.rnd.apply(this) * 0x200000 | 0) * 1.1102230246251565e-16;// 2^-53 + + return this.rnd.apply(this) + (this.rnd.apply(this) * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53 + }, /** * Returns a random real number between 0 and 2^32. + * * @method Phaser.RandomDataGenerator#real * @return {number} A random real number between 0 and 2^32. */ real: function() { + return this.integer() + this.frac(); + }, /** @@ -34865,11 +36334,14 @@ Phaser.RandomDataGenerator.prototype = { * @return {number} A random number between min and max. */ integerInRange: function (min, max) { - return Math.round(this.realInRange(min, max)); + + return Math.floor(this.realInRange(0, max - min + 1)) + min; + }, /** * Returns a random real number between min and max. + * * @method Phaser.RandomDataGenerator#realInRange * @param {number} min - The minimum value in the range. * @param {number} max - The maximum value in the range. @@ -34883,15 +36355,19 @@ Phaser.RandomDataGenerator.prototype = { /** * Returns a random real number between -1 and 1. + * * @method Phaser.RandomDataGenerator#normal * @return {number} A random real number between -1 and 1. */ normal: function () { + return 1 - 2 * this.frac(); + }, /** * Returns a valid RFC4122 version4 ID hex string from https://gist.github.com/1308368 + * * @method Phaser.RandomDataGenerator#uuid * @return {string} A valid RFC4122 version4 ID hex string */ @@ -34910,42 +36386,54 @@ Phaser.RandomDataGenerator.prototype = { /** * Returns a random member of `array`. + * * @method Phaser.RandomDataGenerator#pick * @param {Array} ary - An Array to pick a random member of. * @return {any} A random member of the array. */ pick: function (ary) { + return ary[this.integerInRange(0, ary.length - 1)]; + }, /** * Returns a random member of `array`, favoring the earlier entries. + * * @method Phaser.RandomDataGenerator#weightedPick * @param {Array} ary - An Array to pick a random member of. * @return {any} A random member of the array. */ weightedPick: function (ary) { + return ary[~~(Math.pow(this.frac(), 2) * (ary.length - 1))]; + }, /** * Returns a random timestamp between min and max, or between the beginning of 2000 and the end of 2020 if min and max aren't specified. + * * @method Phaser.RandomDataGenerator#timestamp * @param {number} min - The minimum value in the range. * @param {number} max - The maximum value in the range. * @return {number} A random timestamp between min and max. */ timestamp: function (min, max) { + return this.realInRange(min || 946684800000, max || 1577862000000); + }, /** * Returns a random angle between -180 and 180. + * * @method Phaser.RandomDataGenerator#angle * @return {number} A random number between -180 and 180. */ angle: function() { + return this.integerInRange(-180, 180); + } }; @@ -35916,6 +37404,11 @@ Phaser.Tween.prototype = { repeat = repeat || 0; yoyo = yoyo || false; + if (yoyo && repeat === 0) + { + repeat = 1; + } + var self; if (this._parent) @@ -36160,6 +37653,7 @@ Phaser.Tween.prototype = { repeat: function (times) { this._repeat = times; + return this; }, @@ -36175,6 +37669,12 @@ Phaser.Tween.prototype = { yoyo: function(yoyo) { this._yoyo = yoyo; + + if (yoyo && this._repeat === 0) + { + this._repeat = 1; + } + return this; }, @@ -36421,7 +37921,6 @@ Phaser.Tween.prototype = { this.onLoop.dispatch(this._object); return true; - } else { @@ -37098,6 +38597,11 @@ Phaser.Time = function (game) { */ this.deltaCap = 0; + /** + * @property {number} timeCap - If the difference in time between two frame updates exceeds this value, the frame time is reset to avoid huge elapsed counts. + */ + this.timeCap = 1000; + /** * @property {number} frames - The number of frames record in the last second. Only calculated if Time.advancedTiming is true. */ @@ -37224,29 +38728,27 @@ Phaser.Time.prototype = { * * @method Phaser.Time#update * @protected - * @param {number} time - The current timestamp, either performance.now or Date.now depending on the browser. + * @param {number} time - The current timestamp. */ update: function (time) { this.now = time; - if (this._justResumed) - { - this.time = this.now; - this._justResumed = false; + this.timeToCall = this.game.math.max(0, 16 - (time - this.lastTime)); - this.events.resume(); + this.elapsed = this.now - this.time; - for (var i = 0; i < this._timers.length; i++) - { - this._timers[i]._resume(); - } + // spike-dislike + if (this.elapsed > this.timeCap) + { + // For some reason the time between now and the last time the game was updated was larger than our timeCap + // This can happen if the Stage.disableVisibilityChange is true and you swap tabs, which makes the raf pause. + // In this case we'll drop to some default values to stop the game timers going nuts. + this.elapsed = 1 / 60; } - this.timeToCall = this.game.math.max(0, 16 - (time - this.lastTime)); - - this.elapsed = this.now - this.time; - this.physicsElapsed = this.elapsed / 1000; + // Calculate physics elapsed, ensure it's > 0, use 1/60 as a fallback + this.physicsElapsed = this.elapsed / 1000 || 1 / 60; if (this.deltaCap > 0 && this.physicsElapsed > this.deltaCap) { @@ -37329,12 +38831,19 @@ Phaser.Time.prototype = { */ gameResumed: function () { - this.pauseDuration = Date.now() - this._pauseStarted; - // Level out the elapsed timer to avoid spikes - this.time = Date.now(); + this.time = this.now = Date.now(); + + this.pauseDuration = this.time - this._pauseStarted; - this._justResumed = true; + this.events.resume(); + + var i = this._timers.length; + + while (i--) + { + this._timers[i]._resume(); + } }, @@ -37430,6 +38939,12 @@ Phaser.Timer = function (game, autoDestroy) { */ this.expired = false; + /** + * @property {number} elapsed - Elapsed time since the last frame (in ms). + * @protected + */ + this.elapsed = 0; + /** * @property {array} events - An array holding all of this timers Phaser.TimerEvent objects. Use the methods add, repeat and loop to populate it. */ @@ -37447,6 +38962,11 @@ Phaser.Timer = function (game, autoDestroy) { */ this.nextTick = 0; + /** + * @property {number} timeCap - If the difference in time between two frame updates exceeds this value, the event times are reset to avoid catch-up situations. + */ + this.timeCap = 1000; + /** * @property {boolean} paused - The paused state of the Timer. You can pause the timer by calling Timer.pause() and Timer.resume() or by the game pausing. * @readonly @@ -37483,7 +39003,7 @@ Phaser.Timer = function (game, autoDestroy) { * @property {number} _now - The current start-time adjusted time. * @private */ - this._now = 0; + this._now = Date.now(); /** * @property {number} _len - Temp. array length variable. @@ -37599,7 +39119,7 @@ Phaser.Timer.prototype = { }, /** - * Adds a new Event to this Timer that will repeat for the given number of iterations. + * Adds a new TimerEvent that will always play through once and then repeat for the given number of iterations. * The event will fire after the given amount of 'delay' milliseconds has passed once the Timer has started running. * Call Timer.start() once you have added all of the Events you require for this Timer. The delay is in relation to when the Timer starts, not the time it was added. * If the Timer is already running the delay will be calculated based on the timers current time. @@ -37757,7 +39277,8 @@ Phaser.Timer.prototype = { }, /** - * The main Timer update event, called automatically by the Game clock. + * The main Timer update event, called automatically by Phaser.Time.update. + * * @method Phaser.Timer#update * @protected * @param {number} time - The time from the core game clock. @@ -37770,7 +39291,18 @@ Phaser.Timer.prototype = { return true; } + this.elapsed = time - this._now; this._now = time; + + // spike-dislike + if (this.elapsed > this.timeCap) + { + // For some reason the time between now and the last time the game was updated was larger than our timeCap. + // This can happen if the Stage.disableVisibilityChange is true and you swap tabs, which makes the raf pause. + // In this case we need to adjust the TimerEvents and nextTick. + this.adjustEvents(time - this.elapsed); + } + this._marked = 0; // Clears events marked for deletion and resets _len and _i to 0. @@ -37845,14 +39377,16 @@ Phaser.Timer.prototype = { */ pause: function () { - if (this.running && !this.expired) + if (this.paused) { - this._pauseStarted = this.game.time.now; - - this.paused = true; - this._codePaused = true; + return; } + this._pauseStarted = this.game.time.now; + + this.paused = true; + this._codePaused = true; + }, /** @@ -37862,37 +39396,73 @@ Phaser.Timer.prototype = { */ _pause: function () { - if (this.running && !this.expired) + if (this.paused) { - this._pauseStarted = this.game.time.now; + return; + } - this.paused = true; + this._pauseStarted = this.game.time.now; + + this.paused = true; + + }, + + /** + * Adjusts the time of all pending events and the nextTick by the given baseTime. + * + * @method Phaser.Timer#adjustEvents + */ + adjustEvents: function (baseTime) { + + for (var i = 0; i < this.events.length; i++) + { + if (!this.events[i].pendingDelete) + { + // Work out how long there would have been from when the game paused until the events next tick + var t = this.events[i].tick - baseTime; + + if (t < 0) + { + t = 0; + } + + // Add the difference on to the time now + this.events[i].tick = this._now + t; + } + } + + var d = this.nextTick - baseTime; + + if (d < 0) + { + this.nextTick = this._now; + } + else + { + this.nextTick = this._now + d; } }, /** * Resumes the Timer and updates all pending events. + * * @method Phaser.Timer#resume */ resume: function () { - if (this.running && !this.expired) + if (!this.paused) { - var pauseDuration = this.game.time.now - this._pauseStarted; - - this._pauseTotal += pauseDuration; + return; + } - for (var i = 0; i < this.events.length; i++) - { - this.events[i].tick += pauseDuration; - } + this._pauseTotal += this.game.time.pauseDuration; + this._now = this.game.time.now; - this.nextTick += pauseDuration; + this.adjustEvents(this._pauseStarted); - this.paused = false; - this._codePaused = false; - } + this.paused = false; + this._codePaused = false; }, @@ -38129,6 +39699,12 @@ Phaser.AnimationManager = function (sprite) { */ this.currentFrame = null; + /** + * @property {Phaser.Animation} currentAnim - The currently displayed animation, if any. + * @default + */ + this.currentAnim = null; + /** * @property {boolean} updateIfVisible - Should the animation data continue to update even if the Sprite.visible is set to false. * @default @@ -38797,6 +40373,64 @@ Phaser.Animation.prototype = { }, + /** + * Sets this animations playback to a given frame with the given ID. + * + * @method Phaser.Animation#setFrame + * @param {string|number} [frameId] - The identifier of the frame to set. Can be the name of the frame, the sprite index of the frame, or the animation-local frame index. + * @param {boolean} [useLocalFrameIndex=false] - If you provide a number for frameId, should it use the numeric indexes of the frameData, or the 0-indexed frame index local to the animation. + */ + setFrame: function(frameId, useLocalFrameIndex) { + + var frameIndex; + + if (typeof useLocalFrameIndex === 'undefined') + { + useLocalFrameIndex = false; + } + + // Find the index to the desired frame. + if (typeof frameId === "string") + { + for (var i = 0; i < this._frames.length; i++) + { + if (this._frameData.getFrame(this._frames[i]).name === frameId) + { + frameIndex = i; + } + } + } + else if (typeof frameId === "number") + { + if (useLocalFrameIndex) + { + frameIndex = frameId; + } + else + { + for (var i = 0; i < this._frames.length; i++) + { + if (this.frames[i] === frameIndex) + { + frameIndex = i; + } + } + } + } + + if (frameIndex) + { + // Set the current frame index to the found index. Subtract 1 so that it animates to the desired frame on update. + this._frameIndex = frameIndex - 1; + + // Make the animation update at next update + this._timeNextFrame = this.game.time.now; + + this.update(); + } + + }, + /** * Stops playback of this animation and set it to a finished state. If a resetFrame is provided it will stop playback and set frame to the first in the animation. * If `dispatchComplete` is true it will dispatch the complete events, otherwise they'll be ignored. @@ -39102,6 +40736,7 @@ Object.defineProperty(Phaser.Animation.prototype, 'speed', { * @param {number} stop - The number to count to. If your frames are named 'explosion_0001' to 'explosion_0034' the stop value is 34. * @param {string} [suffix=''] - The end of the filename. If the filename was 'explosion_0001-large' the prefix would be '-large'. * @param {number} [zeroPad=0] - The number of zeroes to pad the min and max values with. If your frames are named 'explosion_0001' to 'explosion_0034' then the zeroPad is 4. +* @return {array} An array of framenames. */ Phaser.Animation.generateFrameNames = function (prefix, start, stop, suffix, zeroPad) { @@ -41151,6 +42786,12 @@ Phaser.Loader = function (game) { */ this._xhr = new XMLHttpRequest(); + /** + * @property {XDomainRequest} - An ajax request used specifically by IE9 for CORs loading issues. + * @private + */ + this._ajax = null; + /** * @property {boolean} isLoading - True if the Loader is in the process of loading the queue. * @default @@ -42067,12 +43708,50 @@ Phaser.Loader.prototype = { break; case 'json': - this._xhr.open("GET", this.baseURL + file.url, true); - this._xhr.responseType = "text"; - this._xhr.onload = function () { - return _this.jsonLoadComplete(_this._fileIndex); - }; - this._xhr.send(); + + if (window.XDomainRequest) + { + this._ajax = new window.XDomainRequest(); + + // XDomainRequest has a few querks. Occasionally it will abort requests + // A way to avoid this is to make sure ALL callbacks are set even if not used + // More info here: http://stackoverflow.com/questions/15786966/xdomainrequest-aborts-post-on-ie-9 + this._ajax.timeout = 3000; + + this._ajax.onerror = function () { + return _this.dataLoadError(_this._fileIndex); + }; + + this._ajax.ontimeout = function () { + return _this.dataLoadError(_this._fileIndex); + }; + + this._ajax.onprogress = function() {}; + + this._ajax.onload = function(){ + return _this.jsonLoadComplete(_this._fileIndex); + }; + + this._ajax.open('GET', this.baseURL + file.url, true); + + this._ajax.send(); + } + else + { + this._xhr.open("GET", this.baseURL + file.url, true); + this._xhr.responseType = "text"; + + this._xhr.onload = function () { + return _this.jsonLoadComplete(_this._fileIndex); + }; + + this._xhr.onerror = function () { + return _this.dataLoadError(_this._fileIndex); + }; + + this._xhr.send(); + } + break; case 'tilemap': @@ -42596,21 +44275,6 @@ Phaser.LoaderParser = { */ bitmapFont: function (game, xml, cacheKey, xSpacing, ySpacing) { - if (!xml || /MSIE 9/i.test(navigator.userAgent)) - { - if (typeof(window.DOMParser) === 'function') - { - var domparser = new DOMParser(); - xml = domparser.parseFromString(this.ajaxRequest.responseText, 'text/xml'); - } - else - { - var div = document.createElement('div'); - div.innerHTML = this.ajaxRequest.responseText; - xml = div; - } - } - var data = {}; var info = xml.getElementsByTagName('info')[0]; var common = xml.getElementsByTagName('common')[0]; @@ -42700,15 +44364,14 @@ Phaser.Sound = function (game, key, volume, loop, connect) { this.key = key; /** - * @property {boolean} loop - Whether or not the sound will loop. + * @property {boolean} loop - Whether or not the sound or current sound marker will loop. */ this.loop = loop; /** - * @property {number} _volume - The global audio volume. A value between 0 (silence) and 1 (full volume). - * @private + * @property {number} volume - The sound or sound marker volume. A value between 0 (silence) and 1 (full volume). */ - this._volume = volume; + this.volume = volume; /** * @property {object} markers - The sound markers. @@ -42720,26 +44383,13 @@ Phaser.Sound = function (game, key, volume, loop, connect) { */ this.context = null; - /** - * @property {Description} _buffer - Decoded data buffer / Audio tag. - * @private - */ - this._buffer = null; - - /** - * @property {boolean} _muted - Boolean indicating whether the sound is muted or not. - * @private - * @default - */ - this._muted = false; - /** * @property {boolean} autoplay - Boolean indicating whether the sound should start automatically. */ this.autoplay = false; /** - * @property {number} totalDuration - The total duration of the sound, in milliseconds + * @property {number} totalDuration - The total duration of the sound in seconds. */ this.totalDuration = 0; @@ -42755,10 +44405,20 @@ Phaser.Sound = function (game, key, volume, loop, connect) { this.currentTime = 0; /** - * @property {number} duration - The duration of the sound. + * @property {number} duration - The duration of the current sound marker in seconds. */ this.duration = 0; + /** + * @property {number} durationMS - The duration of the current sound marker in ms. + */ + this.durationMS = 0; + + /** + * @property {number} position - The position of the current sound marker. + */ + this.position = 0; + /** * @property {number} stopTime - The time the sound stopped. */ @@ -42820,6 +44480,16 @@ Phaser.Sound = function (game, key, volume, loop, connect) { */ this.externalNode = null; + /** + * @property {object} masterGainNode - The master gain node in a Web Audio system. + */ + this.masterGainNode = null; + + /** + * @property {object} gainNode - The gain node in a Web Audio system. + */ + this.gainNode = null; + if (this.usingWebAudio) { this.context = this.game.sound.context; @@ -42899,6 +44569,54 @@ Phaser.Sound = function (game, key, volume, loop, connect) { */ this.onMarkerComplete = new Phaser.Signal(); + /** + * @property {number} _volume - The global audio volume. A value between 0 (silence) and 1 (full volume). + * @private + */ + this._volume = volume; + + /** + * @property {any} _buffer - Decoded data buffer / Audio tag. + * @private + */ + this._buffer = null; + + /** + * @property {boolean} _muted - Boolean indicating whether the sound is muted or not. + * @private + */ + this._muted = false; + + /** + * @property {number} _tempMarker - Internal marker var. + * @private + */ + this._tempMarker = 0; + + /** + * @property {number} _tempPosition - Internal marker var. + * @private + */ + this._tempPosition = 0; + + /** + * @property {number} _tempVolume - Internal marker var. + * @private + */ + this._tempVolume = 0; + + /** + * @property {boolean} _tempLoop - Internal marker var. + * @private + */ + this._tempLoop = 0; + + /** + * @property {boolean} _paused - Was this sound paused via code or a game event? + * @private + */ + this._paused = false; + }; Phaser.Sound.prototype = { @@ -43235,6 +44953,7 @@ Phaser.Sound.prototype = { /** * Restart the sound, or a marked section of it. + * * @method Phaser.Sound#restart * @param {string} [marker=''] - If you want to play a marker then give the key here, otherwise leave blank to play the full sound. * @param {number} [position=0] - The starting position to play the sound from - this is ignored if you provide a marker. @@ -43253,7 +44972,8 @@ Phaser.Sound.prototype = { }, /** - * Pauses the sound + * Pauses the sound. + * * @method Phaser.Sound#pause */ pause: function () { @@ -43271,7 +44991,8 @@ Phaser.Sound.prototype = { }, /** - * Resumes the sound + * Resumes the sound. + * * @method Phaser.Sound#resume */ resume: function () { @@ -43431,7 +45152,9 @@ Object.defineProperty(Phaser.Sound.prototype, "isDecoded", { Object.defineProperty(Phaser.Sound.prototype, "mute", { get: function () { - return this._muted; + + return (this._muted || this.game.sound.mute); + }, set: function (value) { @@ -43739,6 +45462,7 @@ Phaser.SoundManager.prototype = { /** * Stops all the sounds in the game. + * * @method Phaser.SoundManager#stopAll */ stopAll: function () { @@ -43755,6 +45479,7 @@ Phaser.SoundManager.prototype = { /** * Pauses all the sounds in the game. + * * @method Phaser.SoundManager#pauseAll */ pauseAll: function () { @@ -43770,7 +45495,8 @@ Phaser.SoundManager.prototype = { }, /** - * resumes every sound in the game. + * Resumes every sound in the game. + * * @method Phaser.SoundManager#resumeAll */ resumeAll: function () { @@ -43787,6 +45513,7 @@ Phaser.SoundManager.prototype = { /** * Decode a sound by its assets key. + * * @method Phaser.SoundManager#decode * @param {string} key - Assets key of the sound to be decoded. * @param {Phaser.Sound} [sound] - Its buffer will be set to decoded data. @@ -43819,6 +45546,7 @@ Phaser.SoundManager.prototype = { /** * Updates every sound in the game. + * * @method Phaser.SoundManager#update */ update: function () { @@ -43846,6 +45574,7 @@ Phaser.SoundManager.prototype = { /** * Adds a new Sound into the SoundManager. + * * @method Phaser.SoundManager#add * @param {string} key - Asset key for the sound. * @param {number} [volume=1] - Default value for the volume. @@ -44033,7 +45762,7 @@ Object.defineProperty(Phaser.SoundManager.prototype, "mute", { } else { - if (this._muted === false) + if (!this._muted) { return; } @@ -44334,7 +46063,7 @@ Phaser.Utils.Debug.prototype = { if (sound.currentMarker !== '') { - this.line('Marker: ' + sound.currentMarker + ' Duration: ' + sound.duration); + this.line('Marker: ' + sound.currentMarker + ' Duration: ' + sound.duration + ' (ms: ' + sound.durationMS + ')'); this.line('Start: ' + sound.markers[sound.currentMarker].start + ' Stop: ' + sound.markers[sound.currentMarker].stop); this.line('Position: ' + sound.position); } @@ -44363,6 +46092,25 @@ Phaser.Utils.Debug.prototype = { }, + /** + * Render Timer information. + * + * @method Phaser.Utils.Debug#timer + * @param {Phaser.Timer} timer - The Phaser.Timer to show the debug information for. + * @param {number} x - X position of the debug info to be rendered. + * @param {number} y - Y position of the debug info to be rendered. + * @param {string} [color='rgb(255,255,255)'] - color of the debug info to be rendered. (format is css color string). + */ + timer: function (timer, x, y, color) { + + this.start(x, y, color); + this.line('Timer (running: ' + timer.running + ' expired: ' + timer.expired + ')'); + this.line('Next Tick: ' + timer.next + ' Duration: ' + timer.duration); + this.line('Paused: ' + timer.paused + ' Length: ' + timer.length); + this.stop(); + + }, + /** * Renders the Pointer.circle object onto the stage in green if down or red if up along with debug text. * @@ -44815,25 +46563,479 @@ Phaser.Utils.Debug.prototype.constructor = Phaser.Utils.Debug; */ /** -* A collection of methods useful for manipulating and comparing colors. +* The Phaser.Color class is a set of static methods that assist in color manipulation and conversion. * * @class Phaser.Color */ Phaser.Color = { + /** + * Packs the r, g, b, a components into a single integer, for use with Int32Array. + * If device is little endian then ABGR order is used. Otherwise RGBA order is used. + * + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Color.packPixel + * @static + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {number} a - The alpha color component, in the range 0 - 255. + * @return {number} The packed color + */ + packPixel: function (r, g, b, a) { + + if (Phaser.Device.LITTLE_ENDIAN) + { + return (a << 24) | (b << 16) | (g << 8) | r; + } + else + { + return (r << 24) | (g << 16) | (b << 8) | a; + } + + }, + + /** + * Unpacks the r, g, b, a components into the specified color object, or a new + * object, for use with Int32Array. If little endian, then ABGR order is used when + * unpacking, otherwise, RGBA order is used. The resulting color object has the + * `r, g, b, a` properties which are unrelated to endianness. + * + * Note that the integer is assumed to be packed in the correct endianness. On little-endian + * the format is 0xAABBGGRR and on big-endian the format is 0xRRGGBBAA. If you want a + * endian-independent method, use fromRGBA(rgba) and toRGBA(r, g, b, a). + * + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Color.unpackPixel + * @static + * @param {number} rgba - The integer, packed in endian order by packPixel. + * @param {object} [out] - An object into which 3 properties will be created: r, g and b. If not provided a new object will be created. + * @param {boolean} [hsl=false] - Also convert the rgb values into hsl? + * @param {boolean} [hsv=false] - Also convert the rgb values into hsv? + * @return {object} An object with the red, green and blue values set in the r, g and b properties. + */ + unpackPixel: function (rgba, out, hsl, hsv) { + + if (typeof out === 'undefined' || out === null) { out = Phaser.Color.createColor(); } + if (typeof hsl === 'undefined' || hsl === null) { hsl = false; } + if (typeof hsv === 'undefined' || hsv === null) { hsv = false; } + + if (Phaser.Device.LITTLE_ENDIAN) + { + out.a = ((rgba & 0xff000000) >>> 24); + out.b = ((rgba & 0x00ff0000) >>> 16); + out.g = ((rgba & 0x0000ff00) >>> 8); + out.r = ((rgba & 0x000000ff)); + } + else + { + out.r = ((rgba & 0xff000000) >>> 24); + out.g = ((rgba & 0x00ff0000) >>> 16); + out.b = ((rgba & 0x0000ff00) >>> 8); + out.a = ((rgba & 0x000000ff)); + } + + out.color = rgba; + out.rgba = 'rgba(' + out.r + ',' + out.g + ',' + out.b + ',' + (out.a / 255) + ')'; + + if (hsl) + { + Phaser.Color.RGBtoHSL(out.r, out.g, out.b, out); + } + + if (hsv) + { + Phaser.Color.RGBtoHSV(out.r, out.g, out.b, out); + } + + return out; + + }, + + /** + * A utility to convert an integer in 0xRRGGBBAA format to a color object. + * This does not rely on endianness. + * + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Color.fromRGBA + * @static + * @param {number} rgba - An RGBA hex + * @param {object} [out] - The object to use, optional. + * @return {object} A color object. + */ + fromRGBA: function (rgba, out) { + + if (!out) + { + out = Phaser.Color.createColor(); + } + + out.r = ((rgba & 0xff000000) >>> 24); + out.g = ((rgba & 0x00ff0000) >>> 16); + out.b = ((rgba & 0x0000ff00) >>> 8); + out.a = ((rgba & 0x000000ff)); + + out.rgba = 'rgba(' + out.r + ',' + out.g + ',' + out.b + ',' + out.a + ')'; + + return out; + + }, + + /** + * A utility to convert RGBA components to a 32 bit integer in RRGGBBAA format. + * + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Color.toRGBA + * @static + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {number} a - The alpha color component, in the range 0 - 255. + * @return {number} A RGBA-packed 32 bit integer + */ + toRGBA: function (r, g, b, a) { + + return (r << 24) | (g << 16) | (b << 8) | a; + + }, + + /** + * Converts an RGB color value to HSL (hue, saturation and lightness). + * Conversion forumla from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes RGB values are contained in the set [0, 255] and returns h, s and l in the set [0, 1]. + * Based on code by Michael Jackson (https://github.com/mjijackson) + * + * @method Phaser.Color.RGBtoHSL + * @static + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {object} [out] - An object into which 3 properties will be created, h, s and l. If not provided a new object will be created. + * @return {object} An object with the hue, saturation and lightness values set in the h, s and l properties. + */ + RGBtoHSL: function (r, g, b, out) { + + if (!out) + { + out = Phaser.Color.createColor(r, g, b, 1); + } + + r /= 255; + g /= 255; + b /= 255; + + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + + // achromatic by default + out.h = 0; + out.s = 0; + out.l = (max + min) / 2; + + if (max !== min) + { + var d = max - min; + + out.s = out.l > 0.5 ? d / (2 - max - min) : d / (max + min); + + if (max === r) + { + out.h = (g - b) / d + (g < b ? 6 : 0); + } + else if (max === g) + { + out.h = (b - r) / d + 2; + } + else if (max === b) + { + out.h = (r - g) / d + 4; + } + + out.h /= 6; + } + + return out; + + }, + + /** + * Converts an HSL (hue, saturation and lightness) color value to RGB. + * Conversion forumla from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes HSL values are contained in the set [0, 1] and returns r, g and b values in the set [0, 255]. + * Based on code by Michael Jackson (https://github.com/mjijackson) + * + * @method Phaser.Color.HSLtoRGB + * @static + * @param {number} h - The hue, in the range 0 - 1. + * @param {number} s - The saturation, in the range 0 - 1. + * @param {number} l - The lightness, in the range 0 - 1. + * @param {object} [out] - An object into which 3 properties will be created: r, g and b. If not provided a new object will be created. + * @return {object} An object with the red, green and blue values set in the r, g and b properties. + */ + HSLtoRGB: function (h, s, l, out) { + + if (!out) + { + out = Phaser.Color.createColor(l, l, l); + } + else + { + // achromatic by default + out.r = l; + out.g = l; + out.b = l; + } + + if (s !== 0) + { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + out.r = Phaser.Color.hueToColor(p, q, h + 1 / 3); + out.g = Phaser.Color.hueToColor(p, q, h); + out.b = Phaser.Color.hueToColor(p, q, h - 1 / 3); + } + + // out.r = (out.r * 255 | 0); + // out.g = (out.g * 255 | 0); + // out.b = (out.b * 255 | 0); + + out.r = Math.floor((out.r * 255 | 0)); + out.g = Math.floor((out.g * 255 | 0)); + out.b = Math.floor((out.b * 255 | 0)); + + Phaser.Color.updateColor(out); + + return out; + + }, + + /** + * Converts an RGB color value to HSV (hue, saturation and value). + * Conversion forumla from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes RGB values are contained in the set [0, 255] and returns h, s and v in the set [0, 1]. + * Based on code by Michael Jackson (https://github.com/mjijackson) + * + * @method Phaser.Color.RGBtoHSV + * @static + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {object} [out] - An object into which 3 properties will be created, h, s and v. If not provided a new object will be created. + * @return {object} An object with the hue, saturation and value set in the h, s and v properties. + */ + RGBtoHSV: function (r, g, b, out) { + + if (!out) + { + out = Phaser.Color.createColor(r, g, b, 255); + } + + r /= 255; + g /= 255; + b /= 255; + + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var d = max - min; + + // achromatic by default + out.h = 0; + out.s = max === 0 ? 0 : d / max; + out.v = max; + + if (max !== min) + { + if (max === r) + { + out.h = (g - b) / d + (g < b ? 6 : 0); + } + else if (max === g) + { + out.h = (b - r) / d + 2; + } + else if (max === b) + { + out.h = (r - g) / d + 4; + } + + out.h /= 6; + } + + return out; + + }, + + /** + * Converts an HSV (hue, saturation and value) color value to RGB. + * Conversion forumla from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes HSV values are contained in the set [0, 1] and returns r, g and b values in the set [0, 255]. + * Based on code by Michael Jackson (https://github.com/mjijackson) + * + * @method Phaser.Color.HSVtoRGB + * @static + * @param {number} h - The hue, in the range 0 - 1. + * @param {number} s - The saturation, in the range 0 - 1. + * @param {number} v - The value, in the range 0 - 1. + * @param {object} [out] - An object into which 3 properties will be created: r, g and b. If not provided a new object will be created. + * @return {object} An object with the red, green and blue values set in the r, g and b properties. + */ + HSVtoRGB: function (h, s, v, out) { + + if (typeof out === 'undefined') { out = Phaser.Color.createColor(0, 0, 0, 1, h, s, 0, v); } + + var r, g, b; + var i = Math.floor(h * 6); + var f = h * 6 - i; + var p = v * (1 - s); + var q = v * (1 - f * s); + var t = v * (1 - (1 - f) * s); + + switch (i % 6) + { + case 0: + r = v; + g = t; + b = p; + break; + case 1: + r = q; + g = v; + b = p; + break; + case 2: + r = p; + g = v; + b = t; + break; + case 3: + r = p; + g = q; + b = v; + break; + case 4: + r = t; + g = p; + b = v; + break; + case 5: + r = v; + g = p; + b = q; + break; + } + + out.r = Math.floor(r * 255); + out.g = Math.floor(g * 255); + out.b = Math.floor(b * 255); + + Phaser.Color.updateColor(out); + + return out; + + }, + + /** + * Converts a hue to an RGB color. + * Based on code by Michael Jackson (https://github.com/mjijackson) + * + * @method Phaser.Color.hueToColor + * @static + * @param {number} p + * @param {number} q + * @param {number} t + * @return {number} The color component value. + */ + hueToColor: function (p, q, t) { + + if (t < 0) + { + t += 1; + } + + if (t > 1) + { + t -= 1; + } + + if (t < 1 / 6) + { + return p + (q - p) * 6 * t; + } + + if (t < 1 / 2) + { + return q; + } + + if (t < 2 / 3) + { + return p + (q - p) * (2 / 3 - t) * 6; + } + + return p; + + }, + + /** + * A utility function to create a lightweight 'color' object with the default components. + * Any components that are not specified will default to zero. + * + * This is useful when you want to use a shared color object for the getPixel and getPixelAt methods. + * + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Color.createColor + * @static + * @param {number} [r=0] - The red color component, in the range 0 - 255. + * @param {number} [g=0] - The green color component, in the range 0 - 255. + * @param {number} [b=0] - The blue color component, in the range 0 - 255. + * @param {number} [a=1] - The alpha color component, in the range 0 - 1. + * @param {number} [h=0] - The hue, in the range 0 - 1. + * @param {number} [s=0] - The saturation, in the range 0 - 1. + * @param {number} [l=0] - The lightness, in the range 0 - 1. + * @param {number} [v=0] - The value, in the range 0 - 1. + * @return {object} The resulting object with r, g, b, a properties and h, s, l and v. + */ + createColor: function (r, g, b, a, h, s, l, v) { + + var out = { r: r || 0, g: g || 0, b: b || 0, a: a || 1, h: h || 0, s: s || 0, l: l || 0, v: v || 0, color: 0 }; + + out.rgba = 'rgba(' + out.r + ',' + out.g + ',' + out.b + ',' + out.a + ')'; + + return out; + + }, + + /** + * Takes a color object and updates the rgba property. + * + * @method Phaser.Color.updateColor + * @static + * @param {object} out - The color object to update. + * @returns {number} A native color value integer (format: 0xAARRGGBB). + */ + updateColor: function (out) { + + out.rgba = 'rgba(' + out.r + ',' + out.g + ',' + out.b + ',' + out.a + ')'; + + return out; + + }, + /** * Given an alpha and 3 color values this will return an integer representation of it. * * @method Phaser.Color.getColor32 * @static - * @param {number} alpha - The Alpha value (between 0 and 255). - * @param {number} red - The Red channel value (between 0 and 255). - * @param {number} green - The Green channel value (between 0 and 255). - * @param {number} blue - The Blue channel value (between 0 and 255). + * @param {number} a - The alpha color component, in the range 0 - 255. + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. * @returns {number} A native color value integer (format: 0xAARRGGBB). */ - getColor32: function (alpha, red, green, blue) { - return alpha << 24 | red << 16 | green << 8 | blue; + getColor32: function (a, r, g, b) { + + return a << 24 | r << 16 | g << 8 | b; + }, /** @@ -44841,119 +47043,169 @@ Phaser.Color = { * * @method Phaser.Color.getColor * @static - * @param {number} red - The Red channel value (between 0 and 255). - * @param {number} green - The Green channel value (between 0 and 255). - * @param {number} blue - The Blue channel value (between 0 and 255). + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. * @returns {number} A native color value integer (format: 0xRRGGBB). */ - getColor: function (red, green, blue) { - return red << 16 | green << 8 | blue; + getColor: function (r, g, b) { + + return r << 16 | g << 8 | b; + }, /** - * Converts the given hex string into an integer color value. + * Converts the given color values into a string. + * If prefix was '#' it will be in the format `#RRGGBB` otherwise `0xAARRGGBB`. * - * @method Phaser.Color.hexToRGB + * @method Phaser.Color.RGBtoString * @static - * @param {string} h - The string hex color to convert. - * @returns {number} The rgb color value. + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {number} [a=255] - The alpha color component, in the range 0 - 255. + * @param {string} [prefix='#'] - The prefix used in the return string. If '#' it will return `#RRGGBB`, else `0xAARRGGBB`. + * @return {string} A string containing the color values. If prefix was '#' it will be in the format `#RRGGBB` otherwise `0xAARRGGBB`. */ - hexToRGB: function (h) { + RGBtoString: function (r, g, b, a, prefix) { - var hex16 = (h.charAt(0) == "#") ? h.substring(1, 7) : h; + if (typeof a === 'undefined') { a = 255; } + if (typeof prefix === 'undefined') { prefix = '#'; } - if (hex16.length == 3) + if (prefix === '#') { - hex16 = hex16.charAt(0) + hex16.charAt(0) + hex16.charAt(1) + hex16.charAt(1) + hex16.charAt(2) + hex16.charAt(2); + return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); } + else + { + return '0x' + Phaser.Color.componentToHex(a) + Phaser.Color.componentToHex(r) + Phaser.Color.componentToHex(g) + Phaser.Color.componentToHex(b); + } + + }, + + /** + * Converts a hex string into an integer color value. + * + * @method Phaser.Color.hexToRGB + * @static + * @param {string} hex - The hex string to convert. Can be in the short-hand format `#03f` or `#0033ff`. + * @return {number} The rgb color value in the format 0xAARRGGBB. + */ + hexToRGB: function (hex) { - var red = parseInt(hex16.substring(0, 2), 16); - var green = parseInt(hex16.substring(2, 4), 16); - var blue = parseInt(hex16.substring(4, 6), 16); + var rgb = Phaser.Color.hexToColor(hex); - return red << 16 | green << 8 | blue; + if (rgb) + { + return Phaser.Color.getColor32(rgb.a, rgb.r, rgb.g, rgb.b); + } }, /** - * Returns a string containing handy information about the given color including string hex value, - * RGB format information and HSL information. Each section starts on a newline, 3 lines in total. + * Converts a hex string into a Phaser Color object. * - * @method Phaser.Color.getColorInfo + * @method Phaser.Color.hexToColor * @static - * @param {number} color - A color value in the format 0xAARRGGBB. - * @returns {string} String containing the 3 lines of information. + * @param {string} hex - The hex string to convert. Can be in the short-hand format `#03f` or `#0033ff`. + * @param {object} [out] - An object into which 3 properties will be created: r, g and b. If not provided a new object will be created. + * @return {object} An object with the red, green and blue values set in the r, g and b properties. */ - getColorInfo: function (color) { + hexToColor: function (hex, out) { - var argb = Phaser.Color.getRGB(color); - var hsl = Phaser.Color.RGBtoHSV(color); + if (!out) + { + out = Phaser.Color.createColor(); + } - // Hex format - var result = Phaser.Color.RGBtoHexstring(color) + "\n"; + // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") + var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; - // RGB format - result = result.concat("Alpha: " + argb.alpha + " Red: " + argb.red + " Green: " + argb.green + " Blue: " + argb.blue) + "\n"; + hex = hex.replace(shorthandRegex, function(m, r, g, b) { + return r + r + g + g + b + b; + }); - // HSL info - result = result.concat("Hue: " + hsl.hue + " Saturation: " + hsl.saturation + " Lightnes: " + hsl.lightness); + var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); - return result; + if (result) + { + out.r = parseInt(result[1], 16); + out.g = parseInt(result[2], 16); + out.b = parseInt(result[3], 16); + } + + return out; }, /** - * Return a string representation of the color in the format 0xAARRGGBB. + * Return a string containing a hex representation of the given color component. * - * @method Phaser.Color.RGBtoHexstring + * @method Phaser.Color.componentToHex * @static - * @param {number} color - The color to get the string representation for - * @returns {string} A string of length 10 characters in the format 0xAARRGGBB + * @param {number} color - The color channel to get the hex value for, must be a value between 0 and 255. + * @returns {string} A string of length 2 characters, i.e. 255 = ff, 100 = 64. */ - RGBtoHexstring: function (color) { + componentToHex: function (color) { - var argb = Phaser.Color.getRGB(color); - - return "0x" + Phaser.Color.colorToHexstring(argb.alpha) + Phaser.Color.colorToHexstring(argb.red) + Phaser.Color.colorToHexstring(argb.green) + Phaser.Color.colorToHexstring(argb.blue); + var hex = color.toString(16); + return hex.length == 1 ? "0" + hex : hex; }, /** - * Return a string representation of the color in the format #RRGGBB. + * Get HSV color wheel values in an array which will be 360 elements in size. * - * @method Phaser.Color.RGBtoWebstring + * @method Phaser.Color.HSVColorWheel * @static - * @param {number} color - The color to get the string representation for. - * @returns {string} A string of length 10 characters in the format 0xAARRGGBB. + * @param {number} [s=1] - The saturation, in the range 0 - 1. + * @param {number} [v=1] - The value, in the range 0 - 1. + * @return {array} An array containing 360 elements corresponding to the HSV color wheel. */ - RGBtoWebstring: function (color) { + HSVColorWheel: function (s, v) { - var argb = Phaser.Color.getRGB(color); + if (typeof s === 'undefined') { s = 1.0; } + if (typeof v === 'undefined') { v = 1.0; } - return "#" + Phaser.Color.colorToHexstring(argb.red) + Phaser.Color.colorToHexstring(argb.green) + Phaser.Color.colorToHexstring(argb.blue); + var colors = []; + + for (var c = 0; c <= 359; c++) + { + colors.push(Phaser.Color.HSVtoRGB(c / 359, s, v)); + } + + return colors; }, /** - * Return a string containing a hex representation of the given color. + * Get HSL color wheel values in an array which will be 360 elements in size. * - * @method Phaser.Color.colorToHexstring + * @method Phaser.Color.HSLColorWheel * @static - * @param {number} color - The color channel to get the hex value for, must be a value between 0 and 255). - * @returns {string} A string of length 2 characters, i.e. 255 = FF, 0 = 00. + * @param {number} [s=0.5] - The saturation, in the range 0 - 1. + * @param {number} [l=0.5] - The lightness, in the range 0 - 1. + * @return {array} An array containing 360 elements corresponding to the HSL color wheel. */ - colorToHexstring: function (color) { + HSLColorWheel: function (s, l) { - var digits = "0123456789ABCDEF"; - var lsd = color % 16; - var msd = (color - lsd) / 16; - var hexified = digits.charAt(msd) + digits.charAt(lsd); - return hexified; + if (typeof s === 'undefined') { s = 0.5; } + if (typeof l === 'undefined') { l = 0.5; } + + var colors = []; + + for (var c = 0; c <= 359; c++) + { + colors.push(Phaser.Color.HSLtoRGB(c / 359, s, l)); + } + + return colors; }, /** * Interpolates the two given colours based on the supplied step and currentStep properties. + * * @method Phaser.Color.interpolateColor * @static * @param {number} color1 - The first color value. @@ -45043,11 +47295,8 @@ Phaser.Color = { if (typeof alpha === "undefined") { alpha = 255; } // Sanity checks - if (max > 255) { - return Phaser.Color.getColor(255, 255, 255); - } - - if (min > max) { + if (max > 255 || min > max) + { return Phaser.Color.getColor(255, 255, 255); } @@ -45156,6 +47405,85 @@ Phaser.Color = { */ getBlue: function (color) { return color & 0xFF; + }, + + // The following are all DEPRECATED + + /** + * DEPRECATED: This method will be removed in Phaser 2.1. + * Returns a string containing handy information about the given color including string hex value, + * RGB format information. Each section starts on a newline, 3 lines in total. + * + * @method Phaser.Color.getColorInfo + * @static + * @param {number} color - A color value in the format 0xAARRGGBB. + * @returns {string} String containing the 3 lines of information. + */ + getColorInfo: function (color) { + + var argb = Phaser.Color.getRGB(color); + + // Hex format + var result = Phaser.Color.RGBtoHexstring(color) + "\n"; + + // RGB format + result = result.concat("Alpha: " + argb.alpha + " Red: " + argb.red + " Green: " + argb.green + " Blue: " + argb.blue) + "\n"; + + return result; + + }, + + /** + * DEPRECATED: This method will be removed in Phaser 2.1. Please use Phaser.Color.RGBtoString instead. + * Return a string representation of the color in the format 0xAARRGGBB. + * + * @method Phaser.Color.RGBtoHexstring + * @static + * @param {number} color - The color to get the string representation for + * @returns {string} A string of length 10 characters in the format 0xAARRGGBB + */ + RGBtoHexstring: function (color) { + + var argb = Phaser.Color.getRGB(color); + + return "0x" + Phaser.Color.colorToHexstring(argb.alpha) + Phaser.Color.colorToHexstring(argb.red) + Phaser.Color.colorToHexstring(argb.green) + Phaser.Color.colorToHexstring(argb.blue); + + }, + + /** + * DEPRECATED: This method will be removed in Phaser 2.1. Please use Phaser.Color.RGBtoString instead. + * Return a string representation of the color in the format #RRGGBB. + * + * @method Phaser.Color.RGBtoWebstring + * @static + * @param {number} color - The color to get the string representation for. + * @returns {string} A string of length 10 characters in the format 0xAARRGGBB. + */ + RGBtoWebstring: function (color) { + + var argb = Phaser.Color.getRGB(color); + + return "#" + Phaser.Color.colorToHexstring(argb.red) + Phaser.Color.colorToHexstring(argb.green) + Phaser.Color.colorToHexstring(argb.blue); + + }, + + /** + * DEPRECATED: This method will be removed in Phaser 2.1. Please use Phaser.Color.componentToHex instead. + * Return a string containing a hex representation of the given color. + * + * @method Phaser.Color.colorToHexstring + * @static + * @param {number} color - The color channel to get the hex value for, must be a value between 0 and 255). + * @returns {string} A string of length 2 characters, i.e. 255 = FF, 0 = 00. + */ + colorToHexstring: function (color) { + + var digits = "0123456789ABCDEF"; + var lsd = color % 16; + var msd = (color - lsd) / 16; + var hexified = digits.charAt(msd) + digits.charAt(lsd); + return hexified; + } }; @@ -48508,7 +50836,7 @@ Phaser.Particles.Arcade.Emitter.prototype.emitParticle = function () { { particle.setScaleData(this.scaleData); } - else if (this.minParticleScale !== this.maxParticleScale) + else if (this.minParticleScale !== 1 || this.maxParticleScale !== 1) { particle.scale.set(this.game.rnd.realInRange(this.minParticleScale, this.maxParticleScale)); } @@ -48838,7 +51166,7 @@ Phaser.Tile = function (layer, index, x, y, width, height) { this.layer = layer; /** - * @property {number} index - The index of this tile within the map data corresponding to the tileset. + * @property {number} index - The index of this tile within the map data corresponding to the tileset, or -1 if this represents a blank/null tile. */ this.index = index; @@ -49273,6 +51601,11 @@ Phaser.Tilemap = function (game, key, tileWidth, tileHeight, width, height) { */ this.orientation = data.orientation; + /** + * @property {number} format - The format of the map data, either Phaser.Tilemap.CSV or Phaser.Tilemap.TILED_JSON. + */ + this.format = data.format; + /** * @property {number} version - The version of the map data (as specified in Tiled, usually 1). */ @@ -49453,6 +51786,12 @@ Phaser.Tilemap.prototype = { if (typeof tileset === 'string') { key = tileset; + + if (!this.game.cache.checkImageKey(key)) + { + console.warn('Phaser.Tilemap.addTilesetImage: Invalid image key given: "' + key + '"'); + return null; + } } else { @@ -49463,6 +51802,12 @@ Phaser.Tilemap.prototype = { if (typeof tileset === 'string') { tileset = this.getTilesetIndex(tileset); + + if (tileset === null && this.format === Phaser.Tilemap.TILED_JSON) + { + console.warn('Phaser.Tilemap.addTilesetImage: No data found in the JSON matching the tileset name: "' + key + '"'); + return null; + } } if (this.tilesets[tileset]) @@ -49644,21 +51989,6 @@ Phaser.Tilemap.prototype = { return; } - var row; - var output = []; - - for (var y = 0; y < height; y++) - { - row = []; - - for (var x = 0; x < width; x++) - { - row.push(null); - } - - output.push(row); - } - var layer = { name: name, @@ -49674,10 +52004,28 @@ Phaser.Tilemap.prototype = { indexes: [], callbacks: [], bodies: [], - data: output + data: null }; + var row; + var output = []; + + for (var y = 0; y < height; y++) + { + row = []; + + for (var x = 0; x < width; x++) + { + // row.push(null); + row.push(new Phaser.Tile(layer, -1, x, y, tileWidth, tileHeight)); + } + + output.push(row); + } + + layer.data = output; + this.layers.push(layer); this.currentLayer = this.layers.length - 1; @@ -50787,7 +53135,8 @@ Phaser.Tilemap.prototype = { }, /** - * Removes all layers from this tile map and nulls the game reference. + * Removes all layer data from this tile map and nulls the game reference. + * Note: You are responsible for destroying any TilemapLayer objects you generated yourself, as Tilemap doesn't keep a reference to them. * * @method Phaser.Tilemap#destroy */ @@ -51366,19 +53715,22 @@ Phaser.TilemapLayer.prototype.render = function () { { tile = this._column[x]; - set = this.map.tilesets[this.map.tiles[tile.index][2]]; - - if (this.debug === false && tile.alpha !== this.context.globalAlpha) + if (tile.index > -1) { - this.context.globalAlpha = tile.alpha; - } + set = this.map.tilesets[this.map.tiles[tile.index][2]]; - set.draw(this.context, Math.floor(this._mc.tx), Math.floor(this._mc.ty), tile.index); + if (this.debug === false && tile.alpha !== this.context.globalAlpha) + { + this.context.globalAlpha = tile.alpha; + } - if (tile.debug) - { - this.context.fillStyle = 'rgba(0, 255, 0, 0.4)'; - this.context.fillRect(Math.floor(this._mc.tx), Math.floor(this._mc.ty), this.map.tileWidth, this.map.tileHeight); + set.draw(this.context, Math.floor(this._mc.tx), Math.floor(this._mc.ty), tile.index); + + if (tile.debug) + { + this.context.fillStyle = 'rgba(0, 255, 0, 0.4)'; + this.context.fillRect(Math.floor(this._mc.tx), Math.floor(this._mc.ty), this.map.tileWidth, this.map.tileHeight); + } } } @@ -51691,7 +54043,7 @@ Phaser.TilemapParser = { for (var x = 0; x < column.length; x++) { - output[y][x] = new Phaser.Tile(0, parseInt(column[x], 10), x, y, tileWidth, tileHeight); + output[y][x] = new Phaser.Tile(map.layers[0], parseInt(column[x], 10), x, y, tileWidth, tileHeight); } if (width === 0) @@ -51700,6 +54052,7 @@ Phaser.TilemapParser = { } } + map.format = Phaser.Tilemap.CSV; map.name = key; map.width = width; map.height = height; @@ -51720,6 +54073,7 @@ Phaser.TilemapParser = { /** * Returns an empty map data object. + * * @method Phaser.TilemapParser.getEmptyData * @return {object} Generated map data. */ @@ -51800,6 +54154,7 @@ Phaser.TilemapParser = { map.tileWidth = json.tilewidth; map.tileHeight = json.tileheight; map.orientation = json.orientation; + map.format = Phaser.Tilemap.TILED_JSON; map.version = json.version; map.properties = json.properties; map.widthInPixels = map.width * map.tileWidth; @@ -51844,7 +54199,7 @@ Phaser.TilemapParser = { // Loop through the data field in the JSON. - // This is an array containing the tile indexes, one after the other. null = no tile, everything else = the tile index (starting at 1 for Tiled, 0 for CSV) + // This is an array containing the tile indexes, one after the other. -1 = no tile, everything else = the tile index (starting at 1 for Tiled, 0 for CSV) // If the map contains multiple tilesets then the indexes are relative to that which the set starts from. // Need to set which tileset in the cache = which tileset in the JSON, if you do this manually it means you can use the same map data but a new tileset. @@ -51857,7 +54212,7 @@ Phaser.TilemapParser = { } else { - row.push(null); + row.push(new Phaser.Tile(layer, -1, x, output.length, json.tilewidth, json.tileheight)); } x++; @@ -52253,3 +54608,7 @@ Phaser.Tileset.prototype.constructor = Phaser.Tileset; root.Phaser = Phaser; } }).call(this); + +/* +* "Don't follow strange women who lure you into woods with beautiful poetry." - @djfood +*/ diff --git a/build/custom/phaser-arcade-physics.min.js b/build/custom/phaser-arcade-physics.min.js index 69ad95751c..e23cc12790 100644 --- a/build/custom/phaser-arcade-physics.min.js +++ b/build/custom/phaser-arcade-physics.min.js @@ -1,15 +1,15 @@ /* Phaser (AP) v2.0.4 - http://phaser.io - @photonstorm - (c) 2014 Photon Storm Ltd. */ -(function(){var a=this,b=b||{};b.WEBGL_RENDERER=0,b.CANVAS_RENDERER=1,b.VERSION="v1.5.2",b.blendModes={NORMAL:0,ADD:1,MULTIPLY:2,SCREEN:3,OVERLAY:4,DARKEN:5,LIGHTEN:6,COLOR_DODGE:7,COLOR_BURN:8,HARD_LIGHT:9,SOFT_LIGHT:10,DIFFERENCE:11,EXCLUSION:12,HUE:13,SATURATION:14,COLOR:15,LUMINOSITY:16},b.scaleModes={DEFAULT:0,LINEAR:0,NEAREST:1},b.INTERACTION_FREQUENCY=30,b.AUTO_PREVENT_DEFAULT=!0,b.RAD_TO_DEG=180/Math.PI,b.DEG_TO_RAD=Math.PI/180,b.Point=function(a,b){this.x=a||0,this.y=b||0},b.Point.prototype.clone=function(){return new b.Point(this.x,this.y)},b.Point.prototype.constructor=b.Point,b.Point.prototype.set=function(a,b){this.x=a||0,this.y=b||(0!==b?this.x:0)},b.Rectangle=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},b.Rectangle.prototype.clone=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},b.Rectangle.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=this.x;if(a>=c&&a<=c+this.width){var d=this.y;if(b>=d&&b<=d+this.height)return!0}return!1},b.Rectangle.prototype.constructor=b.Rectangle,b.EmptyRectangle=new b.Rectangle(0,0,0,0),b.Polygon=function(a){if(a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var c=[],d=0,e=a.length;e>d;d+=2)c.push(new b.Point(a[d],a[d+1]));a=c}this.points=a},b.Polygon.prototype.clone=function(){for(var a=[],c=0;cb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!c)}return c},b.Polygon.prototype.constructor=b.Polygon,b.Circle=function(a,b,c){this.x=a||0,this.y=b||0,this.radius=c||0},b.Circle.prototype.clone=function(){return new b.Circle(this.x,this.y,this.radius)},b.Circle.prototype.contains=function(a,b){if(this.radius<=0)return!1;var c=this.x-a,d=this.y-b,e=this.radius*this.radius;return c*=c,d*=d,e>=c+d},b.Circle.prototype.constructor=b.Circle,b.Ellipse=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},b.Ellipse.prototype.clone=function(){return new b.Ellipse(this.x,this.y,this.width,this.height)},b.Ellipse.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=(a-this.x)/this.width,d=(b-this.y)/this.height;return c*=c,d*=d,1>=c+d},b.Ellipse.prototype.getBounds=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},b.Ellipse.prototype.constructor=b.Ellipse,b.determineMatrixArrayType=function(){return"undefined"!=typeof Float32Array?Float32Array:Array},b.Matrix2=b.determineMatrixArrayType(),b.Matrix=function(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0},b.Matrix.prototype.fromArray=function(a){this.a=a[0],this.b=a[1],this.c=a[3],this.d=a[4],this.tx=a[2],this.ty=a[5]},b.Matrix.prototype.toArray=function(a){this.array||(this.array=new Float32Array(9));var b=this.array;return a?(this.array[0]=this.a,this.array[1]=this.c,this.array[2]=0,this.array[3]=this.b,this.array[4]=this.d,this.array[5]=0,this.array[6]=this.tx,this.array[7]=this.ty,this.array[8]=1):(this.array[0]=this.a,this.array[1]=this.b,this.array[2]=this.tx,this.array[3]=this.c,this.array[4]=this.d,this.array[5]=this.ty,this.array[6]=0,this.array[7]=0,this.array[8]=1),b},b.identityMatrix=new b.Matrix,b.DisplayObject=function(){this.position=new b.Point,this.scale=new b.Point(1,1),this.pivot=new b.Point(0,0),this.rotation=0,this.alpha=1,this.visible=!0,this.hitArea=null,this.buttonMode=!1,this.renderable=!1,this.parent=null,this.stage=null,this.worldAlpha=1,this._interactive=!1,this.defaultCursor="pointer",this.worldTransform=new b.Matrix,this.color=[],this.dynamic=!0,this._sr=0,this._cr=1,this.filterArea=null,this._bounds=new b.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this._cacheAsBitmap=!1,this._cacheIsDirty=!1},b.DisplayObject.prototype.constructor=b.DisplayObject,b.DisplayObject.prototype.setInteractive=function(a){this.interactive=a},Object.defineProperty(b.DisplayObject.prototype,"interactive",{get:function(){return this._interactive},set:function(a){this._interactive=a,this.stage&&(this.stage.dirty=!0)}}),Object.defineProperty(b.DisplayObject.prototype,"worldVisible",{get:function(){var a=this;do{if(!a.visible)return!1;a=a.parent}while(a);return!0}}),Object.defineProperty(b.DisplayObject.prototype,"mask",{get:function(){return this._mask},set:function(a){this._mask&&(this._mask.isMask=!1),this._mask=a,this._mask&&(this._mask.isMask=!0)}}),Object.defineProperty(b.DisplayObject.prototype,"filters",{get:function(){return this._filters},set:function(a){if(a){for(var b=[],c=0;c=0&&b<=this.children.length))throw new Error(a+" The index "+b+" supplied is out of bounds "+this.children.length);a.parent&&a.parent.removeChild(a),a.parent=this,this.children.splice(b,0,a),this.stage&&a.setStageReference(this.stage)},b.DisplayObjectContainer.prototype.swapChildren=function(a,b){if(a!==b){var c=this.children.indexOf(a),d=this.children.indexOf(b);if(0>c||0>d)throw new Error("swapChildren: Both the supplied DisplayObjects must be a child of the caller.");this.children[c]=b,this.children[d]=a}},b.DisplayObjectContainer.prototype.getChildAt=function(a){if(a>=0&&a0&&d>=e){for(var f=this.children.splice(c,e),g=0;ga;a++)this.children[a].updateTransform()},b.DisplayObjectContainer.prototype.getBounds=function(a){if(0===this.children.length)return b.EmptyRectangle;if(a){var c=this.worldTransform;this.worldTransform=a,this.updateTransform(),this.worldTransform=c}for(var d,e,f,g=1/0,h=1/0,i=-1/0,j=-1/0,k=!1,l=0,m=this.children.length;m>l;l++){var n=this.children[l];n.visible&&(k=!0,d=this.children[l].getBounds(a),g=ge?i:e,j=j>f?j:f)}if(!k)return b.EmptyRectangle;var o=this._bounds;return o.x=g,o.y=h,o.width=i-g,o.height=j-h,o},b.DisplayObjectContainer.prototype.getLocalBounds=function(){var a=this.worldTransform;this.worldTransform=b.identityMatrix;for(var c=0,d=this.children.length;d>c;c++)this.children[c].updateTransform();var e=this.getBounds();return this.worldTransform=a,e},b.DisplayObjectContainer.prototype.setStageReference=function(a){this.stage=a,this._interactive&&(this.stage.dirty=!0);for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d.setStageReference(a)}},b.DisplayObjectContainer.prototype.removeStageReference=function(){for(var a=0,b=this.children.length;b>a;a++){var c=this.children[a];c.removeStageReference()}this._interactive&&(this.stage.dirty=!0),this.stage=null},b.DisplayObjectContainer.prototype._renderWebGL=function(a){if(this.visible&&!(this.alpha<=0)){if(this._cacheAsBitmap)return void this._renderCachedSprite(a);var b,c;if(this._mask||this._filters){for(this._mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a),a.spriteBatch.start()),this._filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);a.spriteBatch.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),a.spriteBatch.start()}else for(b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},b.DisplayObjectContainer.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){if(this._cacheAsBitmap)return void this._renderCachedSprite(a);this._mask&&a.maskManager.pushMask(this._mask,a.context);for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},b.Sprite=function(a){b.DisplayObjectContainer.call(this),this.anchor=new b.Point,this.texture=a,this._width=0,this._height=0,this.tint=16777215,this.blendMode=b.blendModes.NORMAL,a.baseTexture.hasLoaded?this.onTextureUpdate():(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},b.Sprite.prototype=Object.create(b.DisplayObjectContainer.prototype),b.Sprite.prototype.constructor=b.Sprite,Object.defineProperty(b.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(a){this.scale.x=a/this.texture.frame.width,this._width=a}}),Object.defineProperty(b.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(a){this.scale.y=a/this.texture.frame.height,this._height=a}}),b.Sprite.prototype.setTexture=function(a){this.texture.baseTexture!==a.baseTexture?(this.textureChange=!0,this.texture=a):this.texture=a,this.cachedTint=16777215,this.updateFrame=!0},b.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},b.Sprite.prototype.getBounds=function(a){var b=this.texture.frame.width,c=this.texture.frame.height,d=b*(1-this.anchor.x),e=b*-this.anchor.x,f=c*(1-this.anchor.y),g=c*-this.anchor.y,h=a||this.worldTransform,i=h.a,j=h.c,k=h.b,l=h.d,m=h.tx,n=h.ty,o=i*e+k*g+m,p=l*g+j*e+n,q=i*d+k*g+m,r=l*g+j*d+n,s=i*d+k*f+m,t=l*f+j*d+n,u=i*e+k*f+m,v=l*f+j*e+n,w=-1/0,x=-1/0,y=1/0,z=1/0;y=y>o?o:y,y=y>q?q:y,y=y>s?s:y,y=y>u?u:y,z=z>p?p:z,z=z>r?r:z,z=z>t?t:z,z=z>v?v:z,w=o>w?o:w,w=q>w?q:w,w=s>w?s:w,w=u>w?u:w,x=p>x?p:x,x=r>x?r:x,x=t>x?t:x,x=v>x?v:x;var A=this._bounds;return A.x=y,A.width=w-y,A.y=z,A.height=x-z,this._currentBounds=A,A},b.Sprite.prototype._renderWebGL=function(a){if(this.visible&&!(this.alpha<=0)){var b,c;if(this._mask||this._filters){var d=a.spriteBatch;for(this._mask&&(d.stop(),a.maskManager.pushMask(this.mask,a),d.start()),this._filters&&(d.flush(),a.filterManager.pushFilter(this._filterBlock)),d.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);d.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),d.start()}else for(a.spriteBatch.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},b.Sprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){var c=this.texture.frame,d=a.context,e=this.texture;if(this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,d.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),this._mask&&a.maskManager.pushMask(this._mask,a.context),c&&c.width&&c.height&&e.baseTexture.source){d.globalAlpha=this.worldAlpha;var f=this.worldTransform;if(a.roundPixels?d.setTransform(f.a,f.c,f.b,f.d,0|f.tx,0|f.ty):d.setTransform(f.a,f.c,f.b,f.d,f.tx,f.ty),a.smoothProperty&&a.scaleMode!==this.texture.baseTexture.scaleMode&&(a.scaleMode=this.texture.baseTexture.scaleMode,d[a.smoothProperty]=a.scaleMode===b.scaleModes.LINEAR),16777215!==this.tint){if(this.cachedTint!==this.tint){if(!e.baseTexture.hasLoaded)return;this.cachedTint=this.tint,this.tintedTexture=b.CanvasTinter.getTintedTexture(this,this.tint)}d.drawImage(this.tintedTexture,0,0,c.width,c.height,this.anchor.x*-c.width,this.anchor.y*-c.height,c.width,c.height)}else if(e.trim){var g=e.trim;d.drawImage(this.texture.baseTexture.source,c.x,c.y,c.width,c.height,g.x-this.anchor.x*g.width,g.y-this.anchor.y*g.height,c.width,c.height)}else d.drawImage(this.texture.baseTexture.source,c.x,c.y,c.width,c.height,this.anchor.x*-c.width,this.anchor.y*-c.height,c.width,c.height)}for(var h=0,i=this.children.length;i>h;h++){var j=this.children[h];j._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},b.Sprite.fromFrame=function(a){var c=b.TextureCache[a];if(!c)throw new Error('The frameId "'+a+'" does not exist in the texture cache'+this);return new b.Sprite(c)},b.Sprite.fromImage=function(a,c,d){var e=b.Texture.fromImage(a,c,d);return new b.Sprite(e)},b.SpriteBatch=function(a){b.DisplayObjectContainer.call(this),this.textureThing=a,this.ready=!1},b.SpriteBatch.prototype=Object.create(b.DisplayObjectContainer.prototype),b.SpriteBatch.constructor=b.SpriteBatch,b.SpriteBatch.prototype.initWebGL=function(a){this.fastSpriteBatch=new b.WebGLFastSpriteBatch(a),this.ready=!0},b.SpriteBatch.prototype.updateTransform=function(){b.DisplayObject.prototype.updateTransform.call(this)},b.SpriteBatch.prototype._renderWebGL=function(a){!this.visible||this.alpha<=0||!this.children.length||(this.ready||this.initWebGL(a.gl),a.spriteBatch.stop(),a.shaderManager.activateShader(a.shaderManager.fastShader),this.fastSpriteBatch.begin(this,a),this.fastSpriteBatch.render(this),a.shaderManager.activateShader(a.shaderManager.defaultShader),a.spriteBatch.start())},b.SpriteBatch.prototype._renderCanvas=function(a){var c=a.context;c.globalAlpha=this.worldAlpha,b.DisplayObject.prototype.updateTransform.call(this);for(var d=this.worldTransform,e=!0,f=0;fe?(g>0&&(b+="\n"),b+=f[g]+" ",e=this.style.wordWrapWidth-h):(e-=i,b+=f[g]+" ")}d=2?parseInt(c[c.length-2],10):b.BitmapText.fonts[this.fontName].size,this.dirty=!0,this.tint=a.tint},b.BitmapText.prototype.updateText=function(){for(var a=b.BitmapText.fonts[this.fontName],c=new b.Point,d=null,e=[],f=0,g=[],h=0,i=this.fontSize/a.size,j=0;j=j;j++){var n=0;"right"===this.style.align?n=f-g[j]:"center"===this.style.align&&(n=(f-g[j])/2),m.push(n)}var o=this.children.length,p=e.length,q=this.tint||16777215;for(j=0;p>j;j++){var r=o>j?this.children[j]:this._pool.pop();r?r.setTexture(e[j].texture):r=new b.Sprite(e[j].texture),r.position.x=(e[j].position.x+m[e[j].line])*i,r.position.y=e[j].position.y*i,r.scale.x=r.scale.y=i,r.tint=q,r.parent||this.addChild(r)}for(;this.children.length>p;){var s=this.getChildAt(this.children.length-1);this._pool.push(s),this.removeChild(s)}this.textWidth=f*i,this.textHeight=(c.y+a.lineHeight)*i},b.BitmapText.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.dirty=!1),b.DisplayObjectContainer.prototype.updateTransform.call(this)},b.BitmapText.fonts={},b.Stage=function(a){b.DisplayObjectContainer.call(this),this.worldTransform=new b.Matrix,this.interactive=!0,this.interactionManager=new b.InteractionManager(this),this.dirty=!0,this.stage=this,this.stage.hitArea=new b.Rectangle(0,0,1e5,1e5),this.setBackgroundColor(a)},b.Stage.prototype=Object.create(b.DisplayObjectContainer.prototype),b.Stage.prototype.constructor=b.Stage,b.Stage.prototype.setInteractionDelegate=function(a){this.interactionManager.setTargetDomElement(a)},b.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var a=0,b=this.children.length;b>a;a++)this.children[a].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},b.Stage.prototype.setBackgroundColor=function(a){this.backgroundColor=a||0,this.backgroundColorSplit=b.hex2rgb(this.backgroundColor);var c=this.backgroundColor.toString(16);c="000000".substr(0,6-c.length)+c,this.backgroundColorString="#"+c},b.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global};for(var c=0,d=["ms","moz","webkit","o"],e=0;e>16&255)/255,(a>>8&255)/255,(255&a)/255]},b.rgb2hex=function(a){return(255*a[0]<<16)+(255*a[1]<<8)+255*a[2]},"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),b.AjaxRequest=function(){var a=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new window.XMLHttpRequest:!1;for(var b=0;b0&&0===(a&a-1))return a;for(var b=1;a>b;)b<<=1;return b},b.EventTarget=function(){var a={};this.addEventListener=this.on=function(b,c){void 0===a[b]&&(a[b]=[]),-1===a[b].indexOf(c)&&a[b].push(c)},this.dispatchEvent=this.emit=function(b){if(a[b.type]&&a[b.type].length)for(var c=0,d=a[b.type].length;d>c;c++)a[b.type][c](b)},this.removeEventListener=this.off=function(b,c){var d=a[b].indexOf(c);-1!==d&&a[b].splice(d,1)},this.removeAllEventListeners=function(b){var c=a[b];c&&(c.length=0)}},b.PolyK={},b.PolyK.Triangulate=function(a){var c=!0,d=a.length>>1;if(3>d)return[];for(var e=[],f=[],g=0;d>g;g++)f.push(g);g=0;for(var h=d;h>3;){var i=f[(g+0)%h],j=f[(g+1)%h],k=f[(g+2)%h],l=a[2*i],m=a[2*i+1],n=a[2*j],o=a[2*j+1],p=a[2*k],q=a[2*k+1],r=!1;if(b.PolyK._convex(l,m,n,o,p,q,c)){r=!0;for(var s=0;h>s;s++){var t=f[s];if(t!==i&&t!==j&&t!==k&&b.PolyK._PointInTriangle(a[2*t],a[2*t+1],l,m,n,o,p,q)){r=!1;break}}}if(r)e.push(i,j,k),f.splice((g+1)%h,1),h--,g=0;else if(g++>3*h){if(!c)return window.console.log("PIXI Warning: shape too complex to fill"),[];for(e=[],f=[],g=0;d>g;g++)f.push(g);g=0,h=d,c=!1}}return e.push(f[0],f[1],f[2]),e},b.PolyK._PointInTriangle=function(a,b,c,d,e,f,g,h){var i=g-c,j=h-d,k=e-c,l=f-d,m=a-c,n=b-d,o=i*i+j*j,p=i*k+j*l,q=i*m+j*n,r=k*k+l*l,s=k*m+l*n,t=1/(o*r-p*p),u=(r*q-p*s)*t,v=(o*s-p*q)*t;return u>=0&&v>=0&&1>u+v},b.PolyK._convex=function(a,b,c,d,e,f,g){return(b-d)*(e-c)+(c-a)*(f-d)>=0===g},b.initDefaultShaders=function(){},b.CompileVertexShader=function(a,c){return b._CompileShader(a,c,a.VERTEX_SHADER)},b.CompileFragmentShader=function(a,c){return b._CompileShader(a,c,a.FRAGMENT_SHADER)},b._CompileShader=function(a,b,c){var d=b.join("\n"),e=a.createShader(c);return a.shaderSource(e,d),a.compileShader(e),a.getShaderParameter(e,a.COMPILE_STATUS)?e:(window.console.log(a.getShaderInfoLog(e)),null)},b.compileProgram=function(a,c,d){var e=b.CompileFragmentShader(a,d),f=b.CompileVertexShader(a,c),g=a.createProgram();return a.attachShader(g,f),a.attachShader(g,e),a.linkProgram(g),a.getProgramParameter(g,a.LINK_STATUS)||window.console.log("Could not initialise shaders"),g},b.PixiShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"],this.textureCount=0,this.attributes=[],this.init()},b.PixiShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc||b.PixiShader.defaultVertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.dimensions=a.getUniformLocation(c,"dimensions"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.colorAttribute=a.getAttribLocation(c,"aColor"),-1===this.colorAttribute&&(this.colorAttribute=2),this.attributes=[this.aVertexPosition,this.aTextureCoord,this.colorAttribute];for(var d in this.uniforms)this.uniforms[d].uniformLocation=a.getUniformLocation(c,d);this.initUniforms(),this.program=c},b.PixiShader.prototype.initUniforms=function(){this.textureCount=1;var a,b=this.gl;for(var c in this.uniforms){a=this.uniforms[c];var d=a.type;"sampler2D"===d?(a._init=!1,null!==a.value&&this.initSampler2D(a)):"mat2"===d||"mat3"===d||"mat4"===d?(a.glMatrix=!0,a.glValueLength=1,"mat2"===d?a.glFunc=b.uniformMatrix2fv:"mat3"===d?a.glFunc=b.uniformMatrix3fv:"mat4"===d&&(a.glFunc=b.uniformMatrix4fv)):(a.glFunc=b["uniform"+d],a.glValueLength="2f"===d||"2i"===d?2:"3f"===d||"3i"===d?3:"4f"===d||"4i"===d?4:1)}},b.PixiShader.prototype.initSampler2D=function(a){if(a.value&&a.value.baseTexture&&a.value.baseTexture.hasLoaded){var b=this.gl;if(b.activeTexture(b["TEXTURE"+this.textureCount]),b.bindTexture(b.TEXTURE_2D,a.value.baseTexture._glTextures[b.id]),a.textureData){var c=a.textureData,d=c.magFilter?c.magFilter:b.LINEAR,e=c.minFilter?c.minFilter:b.LINEAR,f=c.wrapS?c.wrapS:b.CLAMP_TO_EDGE,g=c.wrapT?c.wrapT:b.CLAMP_TO_EDGE,h=c.luminance?b.LUMINANCE:b.RGBA;if(c.repeat&&(f=b.REPEAT,g=b.REPEAT),b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL,!!c.flipY),c.width){var i=c.width?c.width:512,j=c.height?c.height:2,k=c.border?c.border:0;b.texImage2D(b.TEXTURE_2D,0,h,i,j,k,h,b.UNSIGNED_BYTE,null)}else b.texImage2D(b.TEXTURE_2D,0,h,b.RGBA,b.UNSIGNED_BYTE,a.value.baseTexture.source);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,d),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,e),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,f),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,g)}b.uniform1i(a.uniformLocation,this.textureCount),a._init=!0,this.textureCount++}},b.PixiShader.prototype.syncUniforms=function(){this.textureCount=1;var a,c=this.gl;for(var d in this.uniforms)a=this.uniforms[d],1===a.glValueLength?a.glMatrix===!0?a.glFunc.call(c,a.uniformLocation,a.transpose,a.value):a.glFunc.call(c,a.uniformLocation,a.value):2===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y):3===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y,a.value.z):4===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y,a.value.z,a.value.w):"sampler2D"===a.type&&(a._init?(c.activeTexture(c["TEXTURE"+this.textureCount]),c.bindTexture(c.TEXTURE_2D,a.value.baseTexture._glTextures[c.id]||b.createWebGLTexture(a.value.baseTexture,c)),c.uniform1i(a.uniformLocation,this.textureCount),this.textureCount++):this.initSampler2D(a))},b.PixiShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attributes=null},b.PixiShader.defaultVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec2 aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","varying vec2 vTextureCoord;","varying vec4 vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {"," gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vec3 color = mod(vec3(aColor.y/65536.0, aColor.y/256.0, aColor.y), 256.0) / 256.0;"," vColor = vec4(color * aColor.x, aColor.x);","}"],b.PixiFastShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform mat3 uMatrix;","varying vec2 vTextureCoord;","varying float vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {"," vec2 v;"," vec2 sv = aVertexPosition * aScale;"," v.x = (sv.x) * cos(aRotation) - (sv.y) * sin(aRotation);"," v.y = (sv.x) * sin(aRotation) + (sv.y) * cos(aRotation);"," v = ( uMatrix * vec3(v + aPositionCoord , 1.0) ).xy ;"," gl_Position = vec4( ( v / projectionVector) + center , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"],this.textureCount=0,this.init() -},b.PixiFastShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.dimensions=a.getUniformLocation(c,"dimensions"),this.uMatrix=a.getUniformLocation(c,"uMatrix"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aPositionCoord=a.getAttribLocation(c,"aPositionCoord"),this.aScale=a.getAttribLocation(c,"aScale"),this.aRotation=a.getAttribLocation(c,"aRotation"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.colorAttribute=a.getAttribLocation(c,"aColor"),-1===this.colorAttribute&&(this.colorAttribute=2),this.attributes=[this.aVertexPosition,this.aPositionCoord,this.aScale,this.aRotation,this.aTextureCoord,this.colorAttribute],this.program=c},b.PixiFastShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attributes=null},b.StripShader=function(){this.program=null,this.fragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform float alpha;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));"," gl_FragColor = gl_FragColor * alpha;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","varying vec2 vTextureCoord;","uniform vec2 offsetVector;","varying float vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition, 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / projectionVector.y + 1.0 , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"]},b.StripShader.prototype.init=function(){var a=b.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.colorAttribute=a.getAttribLocation(c,"aColor"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.translationMatrix=a.getUniformLocation(c,"translationMatrix"),this.alpha=a.getUniformLocation(c,"alpha"),this.program=c},b.PrimitiveShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision mediump float;","varying vec4 vColor;","void main(void) {"," gl_FragColor = vColor;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform float alpha;","uniform vec3 tint;","varying vec4 vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"],this.init()},b.PrimitiveShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.tintColor=a.getUniformLocation(c,"tint"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.colorAttribute=a.getAttribLocation(c,"aColor"),this.attributes=[this.aVertexPosition,this.colorAttribute],this.translationMatrix=a.getUniformLocation(c,"translationMatrix"),this.alpha=a.getUniformLocation(c,"alpha"),this.program=c},b.PrimitiveShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attribute=null},b.WebGLGraphics=function(){},b.WebGLGraphics.renderGraphics=function(a,c){var d=c.gl,e=c.projection,f=c.offset,g=c.shaderManager.primitiveShader;a._webGL[d.id]||(a._webGL[d.id]={points:[],indices:[],lastIndex:0,buffer:d.createBuffer(),indexBuffer:d.createBuffer()});var h=a._webGL[d.id];a.dirty&&(a.dirty=!1,a.clearDirty&&(a.clearDirty=!1,h.lastIndex=0,h.points=[],h.indices=[]),b.WebGLGraphics.updateGraphics(a,d)),c.shaderManager.activatePrimitiveShader(),d.blendFunc(d.ONE,d.ONE_MINUS_SRC_ALPHA),d.uniformMatrix3fv(g.translationMatrix,!1,a.worldTransform.toArray(!0)),d.uniform2f(g.projectionVector,e.x,-e.y),d.uniform2f(g.offsetVector,-f.x,-f.y),d.uniform3fv(g.tintColor,b.hex2rgb(a.tint)),d.uniform1f(g.alpha,a.worldAlpha),d.bindBuffer(d.ARRAY_BUFFER,h.buffer),d.vertexAttribPointer(g.aVertexPosition,2,d.FLOAT,!1,24,0),d.vertexAttribPointer(g.colorAttribute,4,d.FLOAT,!1,24,8),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,h.indexBuffer),d.drawElements(d.TRIANGLE_STRIP,h.indices.length,d.UNSIGNED_SHORT,0),c.shaderManager.deactivatePrimitiveShader()},b.WebGLGraphics.updateGraphics=function(a,c){for(var d=a._webGL[c.id],e=d.lastIndex;e3&&b.WebGLGraphics.buildPoly(f,d),f.lineWidth>0&&b.WebGLGraphics.buildLine(f,d)):f.type===b.Graphics.RECT?b.WebGLGraphics.buildRectangle(f,d):(f.type===b.Graphics.CIRC||f.type===b.Graphics.ELIP)&&b.WebGLGraphics.buildCircle(f,d)}d.lastIndex=a.graphicsData.length,d.glPoints=new Float32Array(d.points),c.bindBuffer(c.ARRAY_BUFFER,d.buffer),c.bufferData(c.ARRAY_BUFFER,d.glPoints,c.STATIC_DRAW),d.glIndicies=new Uint16Array(d.indices),c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,d.indexBuffer),c.bufferData(c.ELEMENT_ARRAY_BUFFER,d.glIndicies,c.STATIC_DRAW)},b.WebGLGraphics.buildRectangle=function(a,c){var d=a.points,e=d[0],f=d[1],g=d[2],h=d[3];if(a.fill){var i=b.hex2rgb(a.fillColor),j=a.fillAlpha,k=i[0]*j,l=i[1]*j,m=i[2]*j,n=c.points,o=c.indices,p=n.length/6;n.push(e,f),n.push(k,l,m,j),n.push(e+g,f),n.push(k,l,m,j),n.push(e,f+h),n.push(k,l,m,j),n.push(e+g,f+h),n.push(k,l,m,j),o.push(p,p,p+1,p+2,p+3,p+3)}if(a.lineWidth){var q=a.points;a.points=[e,f,e+g,f,e+g,f+h,e,f+h,e,f],b.WebGLGraphics.buildLine(a,c),a.points=q}},b.WebGLGraphics.buildCircle=function(a,c){var d=a.points,e=d[0],f=d[1],g=d[2],h=d[3],i=40,j=2*Math.PI/i,k=0;if(a.fill){var l=b.hex2rgb(a.fillColor),m=a.fillAlpha,n=l[0]*m,o=l[1]*m,p=l[2]*m,q=c.points,r=c.indices,s=q.length/6;for(r.push(s),k=0;i+1>k;k++)q.push(e,f,n,o,p,m),q.push(e+Math.sin(j*k)*g,f+Math.cos(j*k)*h,n,o,p,m),r.push(s++,s++);r.push(s-1)}if(a.lineWidth){var t=a.points;for(a.points=[],k=0;i+1>k;k++)a.points.push(e+Math.sin(j*k)*g,f+Math.cos(j*k)*h);b.WebGLGraphics.buildLine(a,c),a.points=t}},b.WebGLGraphics.buildLine=function(a,c){var d=0,e=a.points;if(0!==e.length){if(a.lineWidth%2)for(d=0;dd;d++)l=e[2*(d-1)],m=e[2*(d-1)+1],n=e[2*d],o=e[2*d+1],p=e[2*(d+1)],q=e[2*(d+1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,t=-(o-q),u=n-p,F=Math.sqrt(t*t+u*u),t/=F,u/=F,t*=L,u*=L,x=-s+m-(-s+o),y=-r+n-(-r+l),z=(-r+l)*(-s+o)-(-r+n)*(-s+m),A=-u+q-(-u+o),B=-t+n-(-t+p),C=(-t+p)*(-u+o)-(-t+n)*(-u+q),D=x*B-A*y,Math.abs(D)<.1?(D+=10.1,G.push(n-r,o-s,O,P,Q,N),G.push(n+r,o+s,O,P,Q,N)):(j=(y*C-B*z)/D,k=(A*z-x*C)/D,E=(j-n)*(j-n)+(k-o)+(k-o),E>19600?(v=r-t,w=s-u,F=Math.sqrt(v*v+w*w),v/=F,w/=F,v*=L,w*=L,G.push(n-v,o-w),G.push(O,P,Q,N),G.push(n+v,o+w),G.push(O,P,Q,N),G.push(n-v,o-w),G.push(O,P,Q,N),J++):(G.push(j,k),G.push(O,P,Q,N),G.push(n-(j-n),o-(k-o)),G.push(O,P,Q,N)));for(l=e[2*(I-2)],m=e[2*(I-2)+1],n=e[2*(I-1)],o=e[2*(I-1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,G.push(n-r,o-s),G.push(O,P,Q,N),G.push(n+r,o+s),G.push(O,P,Q,N),H.push(K),d=0;J>d;d++)H.push(K++);H.push(K-1)}},b.WebGLGraphics.buildPoly=function(a,c){var d=a.points;if(!(d.length<6)){var e=c.points,f=c.indices,g=d.length/2,h=b.hex2rgb(a.fillColor),i=a.fillAlpha,j=h[0]*i,k=h[1]*i,l=h[2]*i,m=b.PolyK.Triangulate(d),n=e.length/6,o=0;for(o=0;oo;o++)e.push(d[2*o],d[2*o+1],j,k,l,i)}},b.glContexts=[],b.WebGLRenderer=function(a,c,d,e,f){b.defaultRenderer||(b.defaultRenderer=this),this.type=b.WEBGL_RENDERER,this.transparent=!!e,this.width=a||800,this.height=c||600,this.view=d||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height,this.contextLost=this.handleContextLost.bind(this),this.contextRestoredLost=this.handleContextRestored.bind(this),this.view.addEventListener("webglcontextlost",this.contextLost,!1),this.view.addEventListener("webglcontextrestored",this.contextRestoredLost,!1),this.options={alpha:this.transparent,antialias:!!f,premultipliedAlpha:!!e,stencil:!0};try{this.gl=this.view.getContext("experimental-webgl",this.options)}catch(g){try{this.gl=this.view.getContext("webgl",this.options)}catch(h){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}var i=this.gl;this.glContextId=i.id=b.WebGLRenderer.glContextId++,b.glContexts[this.glContextId]=i,b.blendModesWebGL||(b.blendModesWebGL=[],b.blendModesWebGL[b.blendModes.NORMAL]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.ADD]=[i.SRC_ALPHA,i.DST_ALPHA],b.blendModesWebGL[b.blendModes.MULTIPLY]=[i.DST_COLOR,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SCREEN]=[i.SRC_ALPHA,i.ONE],b.blendModesWebGL[b.blendModes.OVERLAY]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.DARKEN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.LIGHTEN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR_DODGE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR_BURN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.HARD_LIGHT]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SOFT_LIGHT]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.DIFFERENCE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.EXCLUSION]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.HUE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SATURATION]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.LUMINOSITY]=[i.ONE,i.ONE_MINUS_SRC_ALPHA]),this.projection=new b.Point,this.projection.x=this.width/2,this.projection.y=-this.height/2,this.offset=new b.Point(0,0),this.resize(this.width,this.height),this.contextLost=!1,this.shaderManager=new b.WebGLShaderManager(i),this.spriteBatch=new b.WebGLSpriteBatch(i),this.maskManager=new b.WebGLMaskManager(i),this.filterManager=new b.WebGLFilterManager(i,this.transparent),this.renderSession={},this.renderSession.gl=this.gl,this.renderSession.drawCount=0,this.renderSession.shaderManager=this.shaderManager,this.renderSession.maskManager=this.maskManager,this.renderSession.filterManager=this.filterManager,this.renderSession.spriteBatch=this.spriteBatch,this.renderSession.renderer=this,i.useProgram(this.shaderManager.defaultShader.program),i.disable(i.DEPTH_TEST),i.disable(i.CULL_FACE),i.enable(i.BLEND),i.colorMask(!0,!0,!0,this.transparent)},b.WebGLRenderer.prototype.constructor=b.WebGLRenderer,b.WebGLRenderer.prototype.render=function(a){if(!this.contextLost){this.__stage!==a&&(a.interactive&&a.interactionManager.removeEvents(),this.__stage=a),b.WebGLRenderer.updateTextures(),a.updateTransform(),a._interactive&&(a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this)));var c=this.gl;c.viewport(0,0,this.width,this.height),c.bindFramebuffer(c.FRAMEBUFFER,null),this.transparent?c.clearColor(0,0,0,0):c.clearColor(a.backgroundColorSplit[0],a.backgroundColorSplit[1],a.backgroundColorSplit[2],1),c.clear(c.COLOR_BUFFER_BIT),this.renderDisplayObject(a,this.projection),a.interactive?a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this)):a._interactiveEventsAdded&&(a._interactiveEventsAdded=!1,a.interactionManager.setTarget(this))}},b.WebGLRenderer.prototype.renderDisplayObject=function(a,b,c){this.renderSession.drawCount=0,this.renderSession.currentBlendMode=9999,this.renderSession.projection=b,this.renderSession.offset=this.offset,this.spriteBatch.begin(this.renderSession),this.filterManager.begin(this.renderSession,c),a._renderWebGL(this.renderSession),this.spriteBatch.end()},b.WebGLRenderer.updateTextures=function(){var a=0;for(a=0;a=0;c--){var d=a._glTextures[c],e=b.glContexts[c];e&&d&&e.deleteTexture(d)}a._glTextures.length=0},b.WebGLRenderer.updateTextureFrame=function(a){a.updateFrame=!1,a._updateWebGLuvs()},b.WebGLRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b,this.gl.viewport(0,0,this.width,this.height),this.projection.x=this.width/2,this.projection.y=-this.height/2},b.createWebGLTexture=function(a,c){return a.hasLoaded&&(a._glTextures[c.id]=c.createTexture(),c.bindTexture(c.TEXTURE_2D,a._glTextures[c.id]),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,a.source),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),a._powerOf2?(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.REPEAT),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.REPEAT)):(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE)),c.bindTexture(c.TEXTURE_2D,null)),a._glTextures[c.id]},b.updateWebGLTexture=function(a,c){a._glTextures[c.id]&&(c.bindTexture(c.TEXTURE_2D,a._glTextures[c.id]),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,a.source),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),a._powerOf2?(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.REPEAT),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.REPEAT)):(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE)),c.bindTexture(c.TEXTURE_2D,null))},b.WebGLRenderer.prototype.handleContextLost=function(a){a.preventDefault(),this.contextLost=!0},b.WebGLRenderer.prototype.handleContextRestored=function(){try{this.gl=this.view.getContext("experimental-webgl",this.options)}catch(a){try{this.gl=this.view.getContext("webgl",this.options)}catch(c){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}var d=this.gl;d.id=b.WebGLRenderer.glContextId++,this.shaderManager.setContext(d),this.spriteBatch.setContext(d),this.maskManager.setContext(d),this.filterManager.setContext(d),this.renderSession.gl=this.gl,d.disable(d.DEPTH_TEST),d.disable(d.CULL_FACE),d.enable(d.BLEND),d.colorMask(!0,!0,!0,this.transparent),this.gl.viewport(0,0,this.width,this.height);for(var e in b.TextureCache){var f=b.TextureCache[e].baseTexture;f._glTextures=[]}this.contextLost=!1},b.WebGLRenderer.prototype.destroy=function(){this.view.removeEventListener("webglcontextlost",this.contextLost),this.view.removeEventListener("webglcontextrestored",this.contextRestoredLost),b.glContexts[this.glContextId]=null,this.projection=null,this.offset=null,this.shaderManager.destroy(),this.spriteBatch.destroy(),this.maskManager.destroy(),this.filterManager.destroy(),this.shaderManager=null,this.spriteBatch=null,this.maskManager=null,this.filterManager=null,this.gl=null,this.renderSession=null},b.WebGLRenderer.glContextId=0,b.WebGLMaskManager=function(a){this.maskStack=[],this.maskPosition=0,this.setContext(a)},b.WebGLMaskManager.prototype.setContext=function(a){this.gl=a},b.WebGLMaskManager.prototype.pushMask=function(a,c){var d=this.gl;0===this.maskStack.length&&(d.enable(d.STENCIL_TEST),d.stencilFunc(d.ALWAYS,1,1)),this.maskStack.push(a),d.colorMask(!1,!1,!1,!0),d.stencilOp(d.KEEP,d.KEEP,d.INCR),b.WebGLGraphics.renderGraphics(a,c),d.colorMask(!0,!0,!0,!0),d.stencilFunc(d.NOTEQUAL,0,this.maskStack.length),d.stencilOp(d.KEEP,d.KEEP,d.KEEP)},b.WebGLMaskManager.prototype.popMask=function(a){var c=this.gl,d=this.maskStack.pop();d&&(c.colorMask(!1,!1,!1,!1),c.stencilOp(c.KEEP,c.KEEP,c.DECR),b.WebGLGraphics.renderGraphics(d,a),c.colorMask(!0,!0,!0,!0),c.stencilFunc(c.NOTEQUAL,0,this.maskStack.length),c.stencilOp(c.KEEP,c.KEEP,c.KEEP)),0===this.maskStack.length&&c.disable(c.STENCIL_TEST)},b.WebGLMaskManager.prototype.destroy=function(){this.maskStack=null,this.gl=null},b.WebGLShaderManager=function(a){this.maxAttibs=10,this.attribState=[],this.tempAttribState=[];for(var b=0;bd;d+=6,e+=4)this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3;this.drawing=!1,this.currentBatchSize=0,this.currentBaseTexture=null,this.setContext(a)},b.WebGLSpriteBatch.prototype.setContext=function(a){this.gl=a,this.vertexBuffer=a.createBuffer(),this.indexBuffer=a.createBuffer(),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,this.vertices,a.DYNAMIC_DRAW),this.currentBlendMode=99999},b.WebGLSpriteBatch.prototype.begin=function(a){this.renderSession=a,this.shader=this.renderSession.shaderManager.defaultShader,this.start()},b.WebGLSpriteBatch.prototype.end=function(){this.flush()},b.WebGLSpriteBatch.prototype.render=function(a){var b=a.texture;(b.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=b.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode);var c=a._uvs||a.texture._uvs;if(c){var d,e,f,g,h=a.worldAlpha,i=a.tint,j=this.vertices,k=a.anchor.x,l=a.anchor.y;if(a.texture.trim){var m=a.texture.trim;e=m.x-k*m.width,d=e+b.frame.width,g=m.y-l*m.height,f=g+b.frame.height}else d=b.frame.width*(1-k),e=b.frame.width*-k,f=b.frame.height*(1-l),g=b.frame.height*-l;var n=4*this.currentBatchSize*this.vertSize,o=a.worldTransform,p=o.a,q=o.c,r=o.b,s=o.d,t=o.tx,u=o.ty;j[n++]=p*e+r*g+t,j[n++]=s*g+q*e+u,j[n++]=c.x0,j[n++]=c.y0,j[n++]=h,j[n++]=i,j[n++]=p*d+r*g+t,j[n++]=s*g+q*d+u,j[n++]=c.x1,j[n++]=c.y1,j[n++]=h,j[n++]=i,j[n++]=p*d+r*f+t,j[n++]=s*f+q*d+u,j[n++]=c.x2,j[n++]=c.y2,j[n++]=h,j[n++]=i,j[n++]=p*e+r*f+t,j[n++]=s*f+q*e+u,j[n++]=c.x3,j[n++]=c.y3,j[n++]=h,j[n++]=i,this.currentBatchSize++}},b.WebGLSpriteBatch.prototype.renderTilingSprite=function(a){var c=a.tilingTexture;(c.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=c.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode),a._uvs||(a._uvs=new b.TextureUvs);var d=a._uvs;a.tilePosition.x%=c.baseTexture.width*a.tileScaleOffset.x,a.tilePosition.y%=c.baseTexture.height*a.tileScaleOffset.y;var e=a.tilePosition.x/(c.baseTexture.width*a.tileScaleOffset.x),f=a.tilePosition.y/(c.baseTexture.height*a.tileScaleOffset.y),g=a.width/c.baseTexture.width/(a.tileScale.x*a.tileScaleOffset.x),h=a.height/c.baseTexture.height/(a.tileScale.y*a.tileScaleOffset.y);d.x0=0-e,d.y0=0-f,d.x1=1*g-e,d.y1=0-f,d.x2=1*g-e,d.y2=1*h-f,d.x3=0-e,d.y3=1*h-f;var i=a.worldAlpha,j=a.tint,k=this.vertices,l=a.width,m=a.height,n=a.anchor.x,o=a.anchor.y,p=l*(1-n),q=l*-n,r=m*(1-o),s=m*-o,t=4*this.currentBatchSize*this.vertSize,u=a.worldTransform,v=u.a,w=u.c,x=u.b,y=u.d,z=u.tx,A=u.ty;k[t++]=v*q+x*s+z,k[t++]=y*s+w*q+A,k[t++]=d.x0,k[t++]=d.y0,k[t++]=i,k[t++]=j,k[t++]=v*p+x*s+z,k[t++]=y*s+w*p+A,k[t++]=d.x1,k[t++]=d.y1,k[t++]=i,k[t++]=j,k[t++]=v*p+x*r+z,k[t++]=y*r+w*p+A,k[t++]=d.x2,k[t++]=d.y2,k[t++]=i,k[t++]=j,k[t++]=v*q+x*r+z,k[t++]=y*r+w*q+A,k[t++]=d.x3,k[t++]=d.y3,k[t++]=i,k[t++]=j,this.currentBatchSize++},b.WebGLSpriteBatch.prototype.flush=function(){if(0!==this.currentBatchSize){var a=this.gl;if(a.bindTexture(a.TEXTURE_2D,this.currentBaseTexture._glTextures[a.id]||b.createWebGLTexture(this.currentBaseTexture,a)),this.currentBatchSize>.5*this.size)a.bufferSubData(a.ARRAY_BUFFER,0,this.vertices);else{var c=this.vertices.subarray(0,4*this.currentBatchSize*this.vertSize);a.bufferSubData(a.ARRAY_BUFFER,0,c)}a.drawElements(a.TRIANGLES,6*this.currentBatchSize,a.UNSIGNED_SHORT,0),this.currentBatchSize=0,this.renderSession.drawCount++}},b.WebGLSpriteBatch.prototype.stop=function(){this.flush()},b.WebGLSpriteBatch.prototype.start=function(){var a=this.gl;a.activeTexture(a.TEXTURE0),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var c=this.renderSession.projection;a.uniform2f(this.shader.projectionVector,c.x,c.y);var d=4*this.vertSize;a.vertexAttribPointer(this.shader.aVertexPosition,2,a.FLOAT,!1,d,0),a.vertexAttribPointer(this.shader.aTextureCoord,2,a.FLOAT,!1,d,8),a.vertexAttribPointer(this.shader.colorAttribute,2,a.FLOAT,!1,d,16),this.currentBlendMode!==b.blendModes.NORMAL&&this.setBlendMode(b.blendModes.NORMAL)},b.WebGLSpriteBatch.prototype.setBlendMode=function(a){this.flush(),this.currentBlendMode=a;var c=b.blendModesWebGL[this.currentBlendMode];this.gl.blendFunc(c[0],c[1])},b.WebGLSpriteBatch.prototype.destroy=function(){this.vertices=null,this.indices=null,this.gl.deleteBuffer(this.vertexBuffer),this.gl.deleteBuffer(this.indexBuffer),this.currentBaseTexture=null,this.gl=null},b.WebGLFastSpriteBatch=function(a){this.vertSize=10,this.maxSize=6e3,this.size=this.maxSize;var b=4*this.size*this.vertSize,c=6*this.maxSize;this.vertices=new Float32Array(b),this.indices=new Uint16Array(c),this.vertexBuffer=null,this.indexBuffer=null,this.lastIndexCount=0;for(var d=0,e=0;c>d;d+=6,e+=4)this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3;this.drawing=!1,this.currentBatchSize=0,this.currentBaseTexture=null,this.currentBlendMode=0,this.renderSession=null,this.shader=null,this.matrix=null,this.setContext(a)},b.WebGLFastSpriteBatch.prototype.setContext=function(a){this.gl=a,this.vertexBuffer=a.createBuffer(),this.indexBuffer=a.createBuffer(),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,this.vertices,a.DYNAMIC_DRAW),this.currentBlendMode=99999},b.WebGLFastSpriteBatch.prototype.begin=function(a,b){this.renderSession=b,this.shader=this.renderSession.shaderManager.fastShader,this.matrix=a.worldTransform.toArray(!0),this.start()},b.WebGLFastSpriteBatch.prototype.end=function(){this.flush()},b.WebGLFastSpriteBatch.prototype.render=function(a){var b=a.children,c=b[0];if(c.texture._uvs){this.currentBaseTexture=c.texture.baseTexture,c.blendMode!==this.currentBlendMode&&this.setBlendMode(c.blendMode);for(var d=0,e=b.length;e>d;d++)this.renderSprite(b[d]);this.flush()}},b.WebGLFastSpriteBatch.prototype.renderSprite=function(a){if(a.visible&&(a.texture.baseTexture===this.currentBaseTexture||(this.flush(),this.currentBaseTexture=a.texture.baseTexture,a.texture._uvs))){var b,c,d,e,f,g,h,i,j=this.vertices;if(b=a.texture._uvs,c=a.texture.frame.width,d=a.texture.frame.height,a.texture.trim){var k=a.texture.trim;f=k.x-a.anchor.x*k.width,e=f+a.texture.frame.width,h=k.y-a.anchor.y*k.height,g=h+a.texture.frame.height}else e=a.texture.frame.width*(1-a.anchor.x),f=a.texture.frame.width*-a.anchor.x,g=a.texture.frame.height*(1-a.anchor.y),h=a.texture.frame.height*-a.anchor.y;i=4*this.currentBatchSize*this.vertSize,j[i++]=f,j[i++]=h,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x0,j[i++]=b.y1,j[i++]=a.alpha,j[i++]=e,j[i++]=h,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x1,j[i++]=b.y1,j[i++]=a.alpha,j[i++]=e,j[i++]=g,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x2,j[i++]=b.y2,j[i++]=a.alpha,j[i++]=f,j[i++]=g,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x3,j[i++]=b.y3,j[i++]=a.alpha,this.currentBatchSize++,this.currentBatchSize>=this.size&&this.flush()}},b.WebGLFastSpriteBatch.prototype.flush=function(){if(0!==this.currentBatchSize){var a=this.gl;if(this.currentBaseTexture._glTextures[a.id]||b.createWebGLTexture(this.currentBaseTexture,a),a.bindTexture(a.TEXTURE_2D,this.currentBaseTexture._glTextures[a.id]),this.currentBatchSize>.5*this.size)a.bufferSubData(a.ARRAY_BUFFER,0,this.vertices);else{var c=this.vertices.subarray(0,4*this.currentBatchSize*this.vertSize);a.bufferSubData(a.ARRAY_BUFFER,0,c)}a.drawElements(a.TRIANGLES,6*this.currentBatchSize,a.UNSIGNED_SHORT,0),this.currentBatchSize=0,this.renderSession.drawCount++}},b.WebGLFastSpriteBatch.prototype.stop=function(){this.flush()},b.WebGLFastSpriteBatch.prototype.start=function(){var a=this.gl;a.activeTexture(a.TEXTURE0),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var c=this.renderSession.projection;a.uniform2f(this.shader.projectionVector,c.x,c.y),a.uniformMatrix3fv(this.shader.uMatrix,!1,this.matrix);var d=4*this.vertSize;a.vertexAttribPointer(this.shader.aVertexPosition,2,a.FLOAT,!1,d,0),a.vertexAttribPointer(this.shader.aPositionCoord,2,a.FLOAT,!1,d,8),a.vertexAttribPointer(this.shader.aScale,2,a.FLOAT,!1,d,16),a.vertexAttribPointer(this.shader.aRotation,1,a.FLOAT,!1,d,24),a.vertexAttribPointer(this.shader.aTextureCoord,2,a.FLOAT,!1,d,28),a.vertexAttribPointer(this.shader.colorAttribute,1,a.FLOAT,!1,d,36),this.currentBlendMode!==b.blendModes.NORMAL&&this.setBlendMode(b.blendModes.NORMAL)},b.WebGLFastSpriteBatch.prototype.setBlendMode=function(a){this.flush(),this.currentBlendMode=a;var c=b.blendModesWebGL[this.currentBlendMode];this.gl.blendFunc(c[0],c[1])},b.WebGLFilterManager=function(a,b){this.transparent=b,this.filterStack=[],this.offsetX=0,this.offsetY=0,this.setContext(a)},b.WebGLFilterManager.prototype.setContext=function(a){this.gl=a,this.texturePool=[],this.initShaderBuffers()},b.WebGLFilterManager.prototype.begin=function(a,b){this.renderSession=a,this.defaultShader=a.shaderManager.defaultShader;var c=this.renderSession.projection;this.width=2*c.x,this.height=2*-c.y,this.buffer=b},b.WebGLFilterManager.prototype.pushFilter=function(a){var c=this.gl,d=this.renderSession.projection,e=this.renderSession.offset;a._filterArea=a.target.filterArea||a.target.getBounds(),this.filterStack.push(a);var f=a.filterPasses[0];this.offsetX+=a._filterArea.x,this.offsetY+=a._filterArea.y;var g=this.texturePool.pop();g?g.resize(this.width,this.height):g=new b.FilterTexture(this.gl,this.width,this.height),c.bindTexture(c.TEXTURE_2D,g.texture);var h=a._filterArea,i=f.padding;h.x-=i,h.y-=i,h.width+=2*i,h.height+=2*i,h.x<0&&(h.x=0),h.width>this.width&&(h.width=this.width),h.y<0&&(h.y=0),h.height>this.height&&(h.height=this.height),c.bindFramebuffer(c.FRAMEBUFFER,g.frameBuffer),c.viewport(0,0,h.width,h.height),d.x=h.width/2,d.y=-h.height/2,e.x=-h.x,e.y=-h.y,c.uniform2f(this.defaultShader.projectionVector,h.width/2,-h.height/2),c.uniform2f(this.defaultShader.offsetVector,-h.x,-h.y),c.colorMask(!0,!0,!0,!0),c.clearColor(0,0,0,0),c.clear(c.COLOR_BUFFER_BIT),a._glFilterTexture=g},b.WebGLFilterManager.prototype.popFilter=function(){var a=this.gl,c=this.filterStack.pop(),d=c._filterArea,e=c._glFilterTexture,f=this.renderSession.projection,g=this.renderSession.offset;if(c.filterPasses.length>1){a.viewport(0,0,d.width,d.height),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),this.vertexArray[0]=0,this.vertexArray[1]=d.height,this.vertexArray[2]=d.width,this.vertexArray[3]=d.height,this.vertexArray[4]=0,this.vertexArray[5]=0,this.vertexArray[6]=d.width,this.vertexArray[7]=0,a.bufferSubData(a.ARRAY_BUFFER,0,this.vertexArray),a.bindBuffer(a.ARRAY_BUFFER,this.uvBuffer),this.uvArray[2]=d.width/this.width,this.uvArray[5]=d.height/this.height,this.uvArray[6]=d.width/this.width,this.uvArray[7]=d.height/this.height,a.bufferSubData(a.ARRAY_BUFFER,0,this.uvArray);var h=e,i=this.texturePool.pop();i||(i=new b.FilterTexture(this.gl,this.width,this.height)),i.resize(this.width,this.height),a.bindFramebuffer(a.FRAMEBUFFER,i.frameBuffer),a.clear(a.COLOR_BUFFER_BIT),a.disable(a.BLEND);for(var j=0;j0&&(b.Texture.frameUpdates.length=0)},b.CanvasRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b},b.CanvasRenderer.prototype.renderDisplayObject=function(a,b){this.renderSession.context=b||this.context,a._renderCanvas(this.renderSession)},b.CanvasRenderer.prototype.renderStripFlat=function(a){var b=this.context,c=a.verticies,d=c.length/2;this.count++,b.beginPath();for(var e=1;d-2>e;e++){var f=2*e,g=c[f],h=c[f+2],i=c[f+4],j=c[f+1],k=c[f+3],l=c[f+5];b.moveTo(g,j),b.lineTo(h,k),b.lineTo(i,l)}b.fillStyle="#FF0000",b.fill(),b.closePath()},b.CanvasRenderer.prototype.renderStrip=function(a){var b=this.context,c=a.verticies,d=a.uvs,e=c.length/2;this.count++;for(var f=1;e-2>f;f++){var g=2*f,h=c[g],i=c[g+2],j=c[g+4],k=c[g+1],l=c[g+3],m=c[g+5],n=d[g]*a.texture.width,o=d[g+2]*a.texture.width,p=d[g+4]*a.texture.width,q=d[g+1]*a.texture.height,r=d[g+3]*a.texture.height,s=d[g+5]*a.texture.height;b.save(),b.beginPath(),b.moveTo(h,k),b.lineTo(i,l),b.lineTo(j,m),b.closePath(),b.clip();var t=n*r+q*p+o*s-r*p-q*o-n*s,u=h*r+q*j+i*s-r*j-q*i-h*s,v=n*i+h*p+o*j-i*p-h*o-n*j,w=n*r*j+q*i*p+h*o*s-h*r*p-q*o*j-n*i*s,x=k*r+q*m+l*s-r*m-q*l-k*s,y=n*l+k*p+o*m-l*p-k*o-n*m,z=n*r*m+q*l*p+k*o*s-k*r*p-q*o*m-n*l*s;b.transform(u/t,x/t,v/t,y/t,w/t,z/t),b.drawImage(a.texture.baseTexture.source,0,0),b.restore()}},b.CanvasBuffer=function(a,b){this.width=a,this.height=b,this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=a,this.canvas.height=b},b.CanvasBuffer.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},b.CanvasBuffer.prototype.resize=function(a,b){this.width=this.canvas.width=a,this.height=this.canvas.height=b},b.CanvasGraphics=function(){},b.CanvasGraphics.renderGraphics=function(a,c){for(var d=a.worldAlpha,e="",f=0;f1&&(d=1,window.console.log("Pixi.js warning: masks in canvas can only mask using the first path in the graphics object"));for(var e=0;1>e;e++){var f=a.graphicsData[e],g=f.points;if(f.type===b.Graphics.POLY){c.beginPath(),c.moveTo(g[0],g[1]);for(var h=1;hd;d++)this.children[d]._renderWebGL(a);a.spriteBatch.stop()}this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),a.drawCount++,a.spriteBatch.start()}},b.Graphics.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha&&this.isMask!==!0){var c=a.context,d=this.worldTransform;this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,c.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),c.setTransform(d.a,d.c,d.b,d.d,d.tx,d.ty),b.CanvasGraphics.renderGraphics(this,c);for(var e=0,f=this.children.length;f>e;e++)this.children[e]._renderCanvas(a)}},b.Graphics.prototype.getBounds=function(a){this.bounds||this.updateBounds();var b=this.bounds.x,c=this.bounds.width+this.bounds.x,d=this.bounds.y,e=this.bounds.height+this.bounds.y,f=a||this.worldTransform,g=f.a,h=f.c,i=f.b,j=f.d,k=f.tx,l=f.ty,m=g*c+i*e+k,n=j*e+h*c+l,o=g*b+i*e+k,p=j*e+h*b+l,q=g*b+i*d+k,r=j*d+h*b+l,s=g*c+i*d+k,t=j*d+h*c+l,u=-1/0,v=-1/0,w=1/0,x=1/0;w=w>m?m:w,w=w>o?o:w,w=w>q?q:w,w=w>s?s:w,x=x>n?n:x,x=x>p?p:x,x=x>r?r:x,x=x>t?t:x,u=m>u?m:u,u=o>u?o:u,u=q>u?q:u,u=s>u?s:u,v=n>v?n:v,v=p>v?p:v,v=r>v?r:v,v=t>v?t:v;var y=this._bounds;return y.x=w,y.width=u-w,y.y=x,y.height=v-x,y},b.Graphics.prototype.updateBounds=function(){for(var a,c,d,e,f,g=1/0,h=-1/0,i=1/0,j=-1/0,k=0;kc?c:g,h=c+e>h?c+e:h,i=i>d?c:i,j=d+f>j?d+f:j;else if(m===b.Graphics.CIRC||m===b.Graphics.ELIP)c=a[0],d=a[1],e=a[2]+n/2,f=a[3]+n/2,g=g>c-e?c-e:g,h=c+e>h?c+e:h,i=i>d-f?d-f:i,j=d+f>j?d+f:j;else for(var o=0;oc-n?c-n:g,h=c+n>h?c+n:h,i=i>d-n?d-n:i,j=d+n>j?d+n:j}var p=this.boundsPadding;this.bounds=new b.Rectangle(g-p,i-p,h-g+2*p,j-i+2*p)},b.Graphics.prototype._generateCachedSprite=function(){var a=this.getLocalBounds();if(this._cachedSprite)this._cachedSprite.buffer.resize(a.width,a.height);else{var c=new b.CanvasBuffer(a.width,a.height),d=b.Texture.fromCanvas(c.canvas);this._cachedSprite=new b.Sprite(d),this._cachedSprite.buffer=c,this._cachedSprite.worldTransform=this.worldTransform}this._cachedSprite.anchor.x=-(a.x/a.width),this._cachedSprite.anchor.y=-(a.y/a.height),this._cachedSprite.buffer.context.translate(-a.x,-a.y),b.CanvasGraphics.renderGraphics(this,this._cachedSprite.buffer.context),this._cachedSprite.alpha=this.alpha},b.Graphics.prototype.destroyCachedSprite=function(){this._cachedSprite.texture.destroy(!0),this._cachedSprite=null},b.Graphics.POLY=0,b.Graphics.RECT=1,b.Graphics.CIRC=2,b.Graphics.ELIP=3,b.TilingSprite=function(a,c,d){b.Sprite.call(this,a),this.width=c||100,this.height=d||100,this.tileScale=new b.Point(1,1),this.tileScaleOffset=new b.Point(1,1),this.tilePosition=new b.Point(0,0),this.renderable=!0,this.tint=16777215,this.blendMode=b.blendModes.NORMAL},b.TilingSprite.prototype=Object.create(b.Sprite.prototype),b.TilingSprite.prototype.constructor=b.TilingSprite,Object.defineProperty(b.TilingSprite.prototype,"width",{get:function(){return this._width},set:function(a){this._width=a}}),Object.defineProperty(b.TilingSprite.prototype,"height",{get:function(){return this._height},set:function(a){this._height=a}}),b.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},b.TilingSprite.prototype.setTexture=function(a){this.texture!==a&&(this.texture=a,this.refreshTexture=!0,this.cachedTint=16777215)},b.TilingSprite.prototype._renderWebGL=function(a){if(this.visible!==!1&&0!==this.alpha){var c,d;for(this.mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a),a.spriteBatch.start()),this.filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),!this.tilingTexture||this.refreshTexture?(this.generateTilingTexture(!0),this.tilingTexture&&this.tilingTexture.needsUpdate&&(b.updateWebGLTexture(this.tilingTexture.baseTexture,a.gl),this.tilingTexture.needsUpdate=!1)):a.spriteBatch.renderTilingSprite(this),c=0,d=this.children.length;d>c;c++)this.children[c]._renderWebGL(a);a.spriteBatch.stop(),this.filters&&a.filterManager.popFilter(),this.mask&&a.maskManager.popMask(a),a.spriteBatch.start()}},b.TilingSprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){var c=a.context;this._mask&&a.maskManager.pushMask(this._mask,c),c.globalAlpha=this.worldAlpha;var d=this.worldTransform;if(c.setTransform(d.a,d.c,d.b,d.d,d.tx,d.ty),!this.__tilePattern||this.refreshTexture){if(this.generateTilingTexture(!1),!this.tilingTexture)return;this.__tilePattern=c.createPattern(this.tilingTexture.baseTexture.source,"repeat")}this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,c.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),c.beginPath();var e=this.tilePosition,f=this.tileScale;e.x%=this.tilingTexture.baseTexture.width,e.y%=this.tilingTexture.baseTexture.height,c.scale(f.x,f.y),c.translate(e.x,e.y),c.fillStyle=this.__tilePattern,c.fillRect(-e.x+this.anchor.x*-this._width,-e.y+this.anchor.y*-this._height,this._width/f.x,this._height/f.y),c.scale(1/f.x,1/f.y),c.translate(-e.x,-e.y),c.closePath(),this._mask&&a.maskManager.popMask(a.context)}},b.TilingSprite.prototype.getBounds=function(){var a=this._width,b=this._height,c=a*(1-this.anchor.x),d=a*-this.anchor.x,e=b*(1-this.anchor.y),f=b*-this.anchor.y,g=this.worldTransform,h=g.a,i=g.c,j=g.b,k=g.d,l=g.tx,m=g.ty,n=h*d+j*f+l,o=k*f+i*d+m,p=h*c+j*f+l,q=k*f+i*c+m,r=h*c+j*e+l,s=k*e+i*c+m,t=h*d+j*e+l,u=k*e+i*d+m,v=-1/0,w=-1/0,x=1/0,y=1/0;x=x>n?n:x,x=x>p?p:x,x=x>r?r:x,x=x>t?t:x,y=y>o?o:y,y=y>q?q:y,y=y>s?s:y,y=y>u?u:y,v=n>v?n:v,v=p>v?p:v,v=r>v?r:v,v=t>v?t:v,w=o>w?o:w,w=q>w?q:w,w=s>w?s:w,w=u>w?u:w;var z=this._bounds;return z.x=x,z.width=v-x,z.y=y,z.height=w-y,this._currentBounds=z,z},b.TilingSprite.prototype.generateTilingTexture=function(a){var c=this.texture;if(c.baseTexture.hasLoaded){var d,e,f=c.baseTexture,g=c.frame,h=g.width!==f.width||g.height!==f.height,i=!1;if(a?(d=b.getNextPowerOfTwo(g.width),e=b.getNextPowerOfTwo(g.height),g.width!==d&&g.height!==e&&(i=!0)):h&&(d=g.width,e=g.height,i=!0),i){var j;this.tilingTexture&&this.tilingTexture.isTiling?(j=this.tilingTexture.canvasBuffer,j.resize(d,e),this.tilingTexture.baseTexture.width=d,this.tilingTexture.baseTexture.height=e,this.tilingTexture.needsUpdate=!0):(j=new b.CanvasBuffer(d,e),this.tilingTexture=b.Texture.fromCanvas(j.canvas),this.tilingTexture.canvasBuffer=j,this.tilingTexture.isTiling=!0),j.context.drawImage(c.baseTexture.source,g.x,g.y,g.width,g.height,0,0,d,e),this.tileScaleOffset.x=g.width/d,this.tileScaleOffset.y=g.height/e}else this.tilingTexture&&this.tilingTexture.isTiling&&this.tilingTexture.destroy(!0),this.tileScaleOffset.x=1,this.tileScaleOffset.y=1,this.tilingTexture=c;this.refreshTexture=!1,this.tilingTexture.baseTexture._powerOf2=!0}},b.BaseTextureCache={},b.texturesToUpdate=[],b.texturesToDestroy=[],b.BaseTextureCacheIdGenerator=0,b.BaseTexture=function(a,c){if(b.EventTarget.call(this),this.width=100,this.height=100,this.scaleMode=c||b.scaleModes.DEFAULT,this.hasLoaded=!1,this.source=a,this.id=b.BaseTextureCacheIdGenerator++,this._glTextures=[],a){if(this.source.complete||this.source.getContext)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,b.texturesToUpdate.push(this);else{var d=this;this.source.onload=function(){d.hasLoaded=!0,d.width=d.source.width,d.height=d.source.height,b.texturesToUpdate.push(d),d.dispatchEvent({type:"loaded",content:d})}}this.imageUrl=null,this._powerOf2=!1}},b.BaseTexture.prototype.constructor=b.BaseTexture,b.BaseTexture.prototype.destroy=function(){this.imageUrl&&(delete b.BaseTextureCache[this.imageUrl],this.imageUrl=null,this.source.src=null),this.source=null,b.texturesToDestroy.push(this)},b.BaseTexture.prototype.updateSourceImage=function(a){this.hasLoaded=!1,this.source.src=null,this.source.src=a},b.BaseTexture.fromImage=function(a,c,d){var e=b.BaseTextureCache[a];if(void 0===c&&(c=!0),!e){var f=new Image;c&&(f.crossOrigin=""),f.src=a,e=new b.BaseTexture(f,d),e.imageUrl=a,b.BaseTextureCache[a]=e}return e},b.BaseTexture.fromCanvas=function(a,c){a._pixiId||(a._pixiId="canvas_"+b.TextureCacheIdGenerator++);var d=b.BaseTextureCache[a._pixiId];return d||(d=new b.BaseTexture(a,c),b.BaseTextureCache[a._pixiId]=d),d},b.TextureCache={},b.FrameCache={},b.TextureCacheIdGenerator=0,b.Texture=function(a,c){if(b.EventTarget.call(this),c||(this.noFrame=!0,c=new b.Rectangle(0,0,1,1)),a instanceof b.Texture&&(a=a.baseTexture),this.baseTexture=a,this.frame=c,this.trim=null,this.scope=this,this._uvs=null,a.hasLoaded)this.noFrame&&(c=new b.Rectangle(0,0,a.width,a.height)),this.setFrame(c);else{var d=this;a.addEventListener("loaded",function(){d.onBaseTextureLoaded()})}},b.Texture.prototype.constructor=b.Texture,b.Texture.prototype.onBaseTextureLoaded=function(){var a=this.baseTexture;a.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new b.Rectangle(0,0,a.width,a.height)),this.setFrame(this.frame),this.scope.dispatchEvent({type:"update",content:this})},b.Texture.prototype.destroy=function(a){a&&this.baseTexture.destroy()},b.Texture.prototype.setFrame=function(a){if(this.frame=a,this.width=a.width,this.height=a.height,a.x+a.width>this.baseTexture.width||a.y+a.height>this.baseTexture.height)throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,b.Texture.frameUpdates.push(this)},b.Texture.prototype._updateWebGLuvs=function(){this._uvs||(this._uvs=new b.TextureUvs);var a=this.frame,c=this.baseTexture.width,d=this.baseTexture.height;this._uvs.x0=a.x/c,this._uvs.y0=a.y/d,this._uvs.x1=(a.x+a.width)/c,this._uvs.y1=a.y/d,this._uvs.x2=(a.x+a.width)/c,this._uvs.y2=(a.y+a.height)/d,this._uvs.x3=a.x/c,this._uvs.y3=(a.y+a.height)/d},b.Texture.fromImage=function(a,c,d){var e=b.TextureCache[a];return e||(e=new b.Texture(b.BaseTexture.fromImage(a,c,d)),b.TextureCache[a]=e),e},b.Texture.fromFrame=function(a){var c=b.TextureCache[a];if(!c)throw new Error('The frameId "'+a+'" does not exist in the texture cache ');return c},b.Texture.fromCanvas=function(a,c){var d=b.BaseTexture.fromCanvas(a,c);return new b.Texture(d)},b.Texture.addTextureToCache=function(a,c){b.TextureCache[c]=a},b.Texture.removeTextureFromCache=function(a){var c=b.TextureCache[a];return delete b.TextureCache[a],delete b.BaseTextureCache[a],c},b.Texture.frameUpdates=[],b.TextureUvs=function(){this.x0=0,this.y0=0,this.x1=0,this.y1=0,this.x2=0,this.y2=0,this.x3=0,this.y4=0},b.RenderTexture=function(a,c,d){if(b.EventTarget.call(this),this.width=a||100,this.height=c||100,this.frame=new b.Rectangle(0,0,this.width,this.height),this.baseTexture=new b.BaseTexture,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.baseTexture._glTextures=[],this.baseTexture.hasLoaded=!0,this.renderer=d||b.defaultRenderer,this.renderer.type===b.WEBGL_RENDERER){var e=this.renderer.gl;this.textureBuffer=new b.FilterTexture(e,this.width,this.height),this.baseTexture._glTextures[e.id]=this.textureBuffer.texture,this.render=this.renderWebGL,this.projection=new b.Point(this.width/2,-this.height/2)}else this.render=this.renderCanvas,this.textureBuffer=new b.CanvasBuffer(this.width,this.height),this.baseTexture.source=this.textureBuffer.canvas;b.Texture.frameUpdates.push(this)},b.RenderTexture.prototype=Object.create(b.Texture.prototype),b.RenderTexture.prototype.constructor=b.RenderTexture,b.RenderTexture.prototype.resize=function(a,c){if(this.width=a,this.height=c,this.frame.width=this.width,this.frame.height=this.height,this.renderer.type===b.WEBGL_RENDERER){this.projection.x=this.width/2,this.projection.y=-this.height/2;var d=this.renderer.gl;d.bindTexture(d.TEXTURE_2D,this.baseTexture._glTextures[d.id]),d.texImage2D(d.TEXTURE_2D,0,d.RGBA,this.width,this.height,0,d.RGBA,d.UNSIGNED_BYTE,null)}else this.textureBuffer.resize(this.width,this.height);b.Texture.frameUpdates.push(this)},b.RenderTexture.prototype.renderWebGL=function(a,c,d){var e=this.renderer.gl;e.colorMask(!0,!0,!0,!0),e.viewport(0,0,this.width,this.height),e.bindFramebuffer(e.FRAMEBUFFER,this.textureBuffer.frameBuffer),d&&this.textureBuffer.clear();var f=a.children,g=a.worldTransform;a.worldTransform=b.RenderTexture.tempMatrix,a.worldTransform.d=-1,a.worldTransform.ty=-2*this.projection.y,c&&(a.worldTransform.tx=c.x,a.worldTransform.ty-=c.y);for(var h=0,i=f.length;i>h;h++)f[h].updateTransform();b.WebGLRenderer.updateTextures(),this.renderer.renderDisplayObject(a,this.projection,this.textureBuffer.frameBuffer),a.worldTransform=g},b.RenderTexture.prototype.renderCanvas=function(a,c,d){var e=a.children,f=a.worldTransform;a.worldTransform=b.RenderTexture.tempMatrix,c&&(a.worldTransform.tx=c.x,a.worldTransform.ty=c.y);for(var g=0,h=e.length;h>g;g++)e[g].updateTransform();d&&this.textureBuffer.clear();var i=this.textureBuffer.context;this.renderer.renderDisplayObject(a,i),i.setTransform(1,0,0,1,0,0),a.worldTransform=f},b.RenderTexture.tempMatrix=new b.Matrix,"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=b),exports.PIXI=b):"undefined"!=typeof define&&define.amd?define("PIXI",function(){return a.PIXI=b}()):a.PIXI=b}).call(this),function(){var a=this,b=b||{VERSION:"<%= version %>",DEV_VERSION:"2.0.4",GAMES:[],AUTO:0,CANVAS:1,WEBGL:2,HEADLESS:3,NONE:0,LEFT:1,RIGHT:2,UP:3,DOWN:4,SPRITE:0,BUTTON:1,IMAGE:2,GRAPHICS:3,TEXT:4,TILESPRITE:5,BITMAPTEXT:6,GROUP:7,RENDERTEXTURE:8,TILEMAP:9,TILEMAPLAYER:10,EMITTER:11,POLYGON:12,BITMAPDATA:13,CANVAS_FILTER:14,WEBGL_FILTER:15,ELLIPSE:16,SPRITEBATCH:17,RETROFONT:18,blendModes:{NORMAL:0,ADD:1,MULTIPLY:2,SCREEN:3,OVERLAY:4,DARKEN:5,LIGHTEN:6,COLOR_DODGE:7,COLOR_BURN:8,HARD_LIGHT:9,SOFT_LIGHT:10,DIFFERENCE:11,EXCLUSION:12,HUE:13,SATURATION:14,COLOR:15,LUMINOSITY:16},scaleModes:{DEFAULT:0,LINEAR:0,NEAREST:1}};PIXI.InteractionManager=function(){},b.Utils={parseDimension:function(a,b){var c=0,d=0;return"string"==typeof a?"%"===a.substr(-1)?(c=parseInt(a,10)/100,d=0===b?window.innerWidth*c:window.innerHeight*c):d=parseInt(a,10):d=a,d},shuffle:function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},pad:function(a,b,c,d){if("undefined"==typeof b)var b=0;if("undefined"==typeof c)var c=" ";if("undefined"==typeof d)var d=3; -var e=0;if(b+1>=a.length)switch(d){case 1:a=new Array(b+1-a.length).join(c)+a;break;case 3:var f=Math.ceil((e=b-a.length)/2),g=e-f;a=new Array(g+1).join(c)+a+new Array(f+1).join(c);break;default:a+=new Array(b+1-a.length).join(c)}return a},isPlainObject:function(a){if("object"!=typeof a||a.nodeType||a===a.window)return!1;try{if(a.constructor&&!{}.hasOwnProperty.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},extend:function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for("boolean"==typeof h&&(k=h,h=arguments[1]||{},i=2),j===i&&(h=this,--i);j>i;i++)if(null!=(a=arguments[i]))for(c in a)d=h[c],e=a[c],h!==e&&(k&&e&&(b.Utils.isPlainObject(e)||(f=Array.isArray(e)))?(f?(f=!1,g=d&&Array.isArray(d)?d:[]):g=d&&b.Utils.isPlainObject(d)?d:{},h[c]=b.Utils.extend(k,g,e)):void 0!==e&&(h[c]=e));return h}},"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),Array.isArray||(Array.isArray=function(a){return"[object Array]"==Object.prototype.toString.call(a)}),Array.prototype.forEach||(Array.prototype.forEach=function(a){"use strict";if(void 0===this||null===this)throw new TypeError;var b=Object(this),c=b.length>>>0;if("function"!=typeof a)throw new TypeError;for(var d=arguments.length>=2?arguments[1]:void 0,e=0;c>e;e++)e in b&&a.call(d,b[e],e,b)}),b.Circle=function(a,b,c){a=a||0,b=b||0,c=c||0,this.x=a,this.y=b,this._diameter=c,this._radius=c>0?.5*c:0},b.Circle.prototype={circumference:function(){return 2*Math.PI*this._radius},setTo:function(a,b,c){return this.x=a,this.y=b,this._diameter=c,this._radius=.5*c,this},copyFrom:function(a){return this.setTo(a.x,a.y,a.diameter)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.diameter=this._diameter,a},distance:function(a,c){return"undefined"==typeof c&&(c=!1),c?b.Math.distanceRound(this.x,this.y,a.x,a.y):b.Math.distance(this.x,this.y,a.x,a.y)},clone:function(a){return"undefined"==typeof a?a=new b.Circle(this.x,this.y,this.diameter):a.setTo(this.x,this.y,this.diameter),a},contains:function(a,c){return b.Circle.contains(this,a,c)},circumferencePoint:function(a,c,d){return b.Circle.circumferencePoint(this,a,c,d)},offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},toString:function(){return"[{Phaser.Circle (x="+this.x+" y="+this.y+" diameter="+this.diameter+" radius="+this.radius+")}]"}},b.Circle.prototype.constructor=b.Circle,Object.defineProperty(b.Circle.prototype,"diameter",{get:function(){return this._diameter},set:function(a){a>0&&(this._diameter=a,this._radius=.5*a)}}),Object.defineProperty(b.Circle.prototype,"radius",{get:function(){return this._radius},set:function(a){a>0&&(this._radius=a,this._diameter=2*a)}}),Object.defineProperty(b.Circle.prototype,"left",{get:function(){return this.x-this._radius},set:function(a){a>this.x?(this._radius=0,this._diameter=0):this.radius=this.x-a}}),Object.defineProperty(b.Circle.prototype,"right",{get:function(){return this.x+this._radius},set:function(a){athis.y?(this._radius=0,this._diameter=0):this.radius=this.y-a}}),Object.defineProperty(b.Circle.prototype,"bottom",{get:function(){return this.y+this._radius},set:function(a){a0?Math.PI*this._radius*this._radius:0}}),Object.defineProperty(b.Circle.prototype,"empty",{get:function(){return 0===this._diameter},set:function(a){a===!0&&this.setTo(0,0,0)}}),b.Circle.contains=function(a,b,c){if(a.radius>0&&b>=a.left&&b<=a.right&&c>=a.top&&c<=a.bottom){var d=(a.x-b)*(a.x-b),e=(a.y-c)*(a.y-c);return d+e<=a.radius*a.radius}return!1},b.Circle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.diameter==b.diameter},b.Circle.intersects=function(a,c){return b.Math.distance(a.x,a.y,c.x,c.y)<=a.radius+c.radius},b.Circle.circumferencePoint=function(a,c,d,e){return"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=new b.Point),d===!0&&(c=b.Math.degToRad(c)),e.x=a.x+a.radius*Math.cos(c),e.y=a.y+a.radius*Math.sin(c),e},b.Circle.intersectsRectangle=function(a,b){var c=Math.abs(a.x-b.x-b.halfWidth),d=b.halfWidth+a.radius;if(c>d)return!1;var e=Math.abs(a.y-b.y-b.halfHeight),f=b.halfHeight+a.radius;if(e>f)return!1;if(c<=b.halfWidth||e<=b.halfHeight)return!0;var g=c-b.halfWidth,h=e-b.halfHeight,i=g*g,j=h*h,k=a.radius*a.radius;return k>=i+j},PIXI.Circle=b.Circle,b.Point=function(a,b){a=a||0,b=b||0,this.x=a,this.y=b},b.Point.prototype={copyFrom:function(a){return this.setTo(a.x,a.y)},invert:function(){return this.setTo(this.y,this.x)},setTo:function(a,b){return this.x=a||0,this.y=b||(0!==b?this.x:0),this},set:function(a,b){return this.x=a||0,this.y=b||(0!==b?this.x:0),this},add:function(a,b){return this.x+=a,this.y+=b,this},subtract:function(a,b){return this.x-=a,this.y-=b,this},multiply:function(a,b){return this.x*=a,this.y*=b,this},divide:function(a,b){return this.x/=a,this.y/=b,this},clampX:function(a,c){return this.x=b.Math.clamp(this.x,a,c),this},clampY:function(a,c){return this.y=b.Math.clamp(this.y,a,c),this},clamp:function(a,c){return this.x=b.Math.clamp(this.x,a,c),this.y=b.Math.clamp(this.y,a,c),this},clone:function(a){return"undefined"==typeof a?a=new b.Point(this.x,this.y):a.setTo(this.x,this.y),a},copyTo:function(a){return a.x=this.x,a.y=this.y,a},distance:function(a,c){return b.Point.distance(this,a,c)},equals:function(a){return a.x==this.x&&a.y==this.y},rotate:function(a,c,d,e,f){return b.Point.rotate(this,a,c,d,e,f)},getMagnitude:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},setMagnitude:function(a){return this.normalize().multiply(a,a)},normalize:function(){if(!this.isZero()){var a=this.getMagnitude();this.x/=a,this.y/=a}return this},isZero:function(){return 0===this.x&&0===this.y},toString:function(){return"[{Point (x="+this.x+" y="+this.y+")}]"}},b.Point.prototype.constructor=b.Point,b.Point.add=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x+c.x,d.y=a.y+c.y,d},b.Point.subtract=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x-c.x,d.y=a.y-c.y,d},b.Point.multiply=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x*c.x,d.y=a.y*c.y,d},b.Point.divide=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x/c.x,d.y=a.y/c.y,d},b.Point.equals=function(a,b){return a.x==b.x&&a.y==b.y},b.Point.distance=function(a,c,d){return"undefined"==typeof d&&(d=!1),d?b.Math.distanceRound(a.x,a.y,c.x,c.y):b.Math.distance(a.x,a.y,c.x,c.y)},b.Point.rotate=function(a,c,d,e,f,g){return f=f||!1,g=g||null,f&&(e=b.Math.degToRad(e)),null===g&&(g=Math.sqrt((c-a.x)*(c-a.x)+(d-a.y)*(d-a.y))),a.setTo(c+g*Math.cos(e),d+g*Math.sin(e))},b.Point.centroid=function(a,c){if("undefined"==typeof c&&(c=new b.Point),"[object Array]"!==Object.prototype.toString.call(a))throw new Error("Phaser.Point. Parameter 'points' must be an array");var d=a.length;if(1>d)throw new Error("Phaser.Point. Parameter 'points' array must not be empty");if(1===d)return c.copyFrom(a[0]),c;for(var e=0;d>e;e++)b.Point.add(c,a[e],c);return c.divide(d,d),c},PIXI.Point=b.Point,b.Rectangle=function(a,b,c,d){a=a||0,b=b||0,c=c||0,d=d||0,this.x=a,this.y=b,this.width=c,this.height=d},b.Rectangle.prototype={offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},setTo:function(a,b,c,d){return this.x=a,this.y=b,this.width=c,this.height=d,this},floor:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y)},floorAll:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.width=Math.floor(this.width),this.height=Math.floor(this.height)},copyFrom:function(a){return this.setTo(a.x,a.y,a.width,a.height)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.width=this.width,a.height=this.height,a},inflate:function(a,c){return b.Rectangle.inflate(this,a,c)},size:function(a){return b.Rectangle.size(this,a)},clone:function(a){return b.Rectangle.clone(this,a)},contains:function(a,c){return b.Rectangle.contains(this,a,c)},containsRect:function(a){return b.Rectangle.containsRect(this,a)},equals:function(a){return b.Rectangle.equals(this,a)},intersection:function(a,c){return b.Rectangle.intersection(this,a,c)},intersects:function(a,c){return b.Rectangle.intersects(this,a,c)},intersectsRaw:function(a,c,d,e,f){return b.Rectangle.intersectsRaw(this,a,c,d,e,f)},union:function(a,c){return b.Rectangle.union(this,a,c)},toString:function(){return"[{Rectangle (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+" empty="+this.empty+")}]"}},Object.defineProperty(b.Rectangle.prototype,"halfWidth",{get:function(){return Math.round(this.width/2)}}),Object.defineProperty(b.Rectangle.prototype,"halfHeight",{get:function(){return Math.round(this.height/2)}}),Object.defineProperty(b.Rectangle.prototype,"bottom",{get:function(){return this.y+this.height},set:function(a){this.height=a<=this.y?0:this.y-a}}),Object.defineProperty(b.Rectangle.prototype,"bottomRight",{get:function(){return new b.Point(this.right,this.bottom)},set:function(a){this.right=a.x,this.bottom=a.y}}),Object.defineProperty(b.Rectangle.prototype,"left",{get:function(){return this.x},set:function(a){this.width=a>=this.right?0:this.right-a,this.x=a}}),Object.defineProperty(b.Rectangle.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=a<=this.x?0:this.x+a}}),Object.defineProperty(b.Rectangle.prototype,"volume",{get:function(){return this.width*this.height}}),Object.defineProperty(b.Rectangle.prototype,"perimeter",{get:function(){return 2*this.width+2*this.height}}),Object.defineProperty(b.Rectangle.prototype,"centerX",{get:function(){return this.x+this.halfWidth},set:function(a){this.x=a-this.halfWidth}}),Object.defineProperty(b.Rectangle.prototype,"centerY",{get:function(){return this.y+this.halfHeight},set:function(a){this.y=a-this.halfHeight}}),Object.defineProperty(b.Rectangle.prototype,"top",{get:function(){return this.y},set:function(a){a>=this.bottom?(this.height=0,this.y=a):this.height=this.bottom-a}}),Object.defineProperty(b.Rectangle.prototype,"topLeft",{get:function(){return new b.Point(this.x,this.y)},set:function(a){this.x=a.x,this.y=a.y}}),Object.defineProperty(b.Rectangle.prototype,"empty",{get:function(){return!this.width||!this.height},set:function(a){a===!0&&this.setTo(0,0,0,0)}}),b.Rectangle.prototype.constructor=b.Rectangle,b.Rectangle.inflate=function(a,b,c){return a.x-=b,a.width+=2*b,a.y-=c,a.height+=2*c,a},b.Rectangle.inflatePoint=function(a,c){return b.Rectangle.inflate(a,c.x,c.y)},b.Rectangle.size=function(a,c){return"undefined"==typeof c?c=new b.Point(a.width,a.height):c.setTo(a.width,a.height),c},b.Rectangle.clone=function(a,c){return"undefined"==typeof c?c=new b.Rectangle(a.x,a.y,a.width,a.height):c.setTo(a.x,a.y,a.width,a.height),c},b.Rectangle.contains=function(a,b,c){return a.width<=0||a.height<=0?!1:b>=a.x&&b<=a.right&&c>=a.y&&c<=a.bottom},b.Rectangle.containsRaw=function(a,b,c,d,e,f){return e>=a&&a+c>=e&&f>=b&&b+d>=f},b.Rectangle.containsPoint=function(a,c){return b.Rectangle.contains(a,c.x,c.y)},b.Rectangle.containsRect=function(a,b){return a.volume>b.volume?!1:a.x>=b.x&&a.y>=b.y&&a.right<=b.right&&a.bottom<=b.bottom},b.Rectangle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.width==b.width&&a.height==b.height},b.Rectangle.intersection=function(a,c,d){return"undefined"==typeof d&&(d=new b.Rectangle),b.Rectangle.intersects(a,c)&&(d.x=Math.max(a.x,c.x),d.y=Math.max(a.y,c.y),d.width=Math.min(a.right,c.right)-d.x,d.height=Math.min(a.bottom,c.bottom)-d.y),d},b.Rectangle.intersects=function(a,b){return a.width<=0||a.height<=0||b.width<=0||b.height<=0?!1:!(a.rightb.right||a.y>b.bottom)},b.Rectangle.intersectsRaw=function(a,b,c,d,e,f){return"undefined"==typeof f&&(f=0),!(b>a.right+f||ca.bottom+f||e=c&&d>=a&&b>=e&&f>=b},coordinatesOnLine:function(a,b){"undefined"==typeof a&&(a=1),"undefined"==typeof b&&(b=[]);var c=Math.round(this.start.x),d=Math.round(this.start.y),e=Math.round(this.end.x),f=Math.round(this.end.y),g=Math.abs(e-c),h=Math.abs(f-d),i=e>c?1:-1,j=f>d?1:-1,k=g-h;b.push([c,d]);for(var l=1;c!=e||d!=f;){var m=k<<1;m>-h&&(k-=h,c+=i),g>m&&(k+=g,d+=j),l%a===0&&b.push([c,d]),l++}return b}},Object.defineProperty(b.Line.prototype,"length",{get:function(){return Math.sqrt((this.end.x-this.start.x)*(this.end.x-this.start.x)+(this.end.y-this.start.y)*(this.end.y-this.start.y))}}),Object.defineProperty(b.Line.prototype,"angle",{get:function(){return Math.atan2(this.end.y-this.start.y,this.end.x-this.start.x)}}),Object.defineProperty(b.Line.prototype,"slope",{get:function(){return(this.end.y-this.start.y)/(this.end.x-this.start.x)}}),Object.defineProperty(b.Line.prototype,"perpSlope",{get:function(){return-((this.end.x-this.start.x)/(this.end.y-this.start.y))}}),Object.defineProperty(b.Line.prototype,"x",{get:function(){return Math.min(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"y",{get:function(){return Math.min(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"left",{get:function(){return Math.min(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"right",{get:function(){return Math.max(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"top",{get:function(){return Math.min(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"bottom",{get:function(){return Math.max(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"width",{get:function(){return Math.abs(this.start.x-this.end.x)}}),Object.defineProperty(b.Line.prototype,"height",{get:function(){return Math.abs(this.start.y-this.end.y)}}),b.Line.intersectsPoints=function(a,c,d,e,f,g){"undefined"==typeof f&&(f=!0),"undefined"==typeof g&&(g=new b.Point);var h=c.y-a.y,i=e.y-d.y,j=a.x-c.x,k=d.x-e.x,l=c.x*a.y-a.x*c.y,m=e.x*d.y-d.x*e.y,n=h*k-i*j;if(0===n)return null;if(g.x=(j*m-k*l)/n,g.y=(i*l-h*m)/n,f){if(Math.pow(g.x-c.x+(g.y-c.y),2)>Math.pow(a.x-c.x+(a.y-c.y),2))return null;if(Math.pow(g.x-a.x+(g.y-a.y),2)>Math.pow(a.x-c.x+(a.y-c.y),2))return null;if(Math.pow(g.x-e.x+(g.y-e.y),2)>Math.pow(d.x-e.x+(d.y-e.y),2))return null;if(Math.pow(g.x-d.x+(g.y-d.y),2)>Math.pow(d.x-e.x+(d.y-e.y),2))return null}return g},b.Line.intersects=function(a,c,d,e){return b.Line.intersectsPoints(a.start,a.end,c.start,c.end,d,e)},b.Ellipse=function(a,c,d,e){this.type=b.ELLIPSE,a=a||0,c=c||0,d=d||0,e=e||0,this.x=a,this.y=c,this.width=d,this.height=e},b.Ellipse.prototype={setTo:function(a,b,c,d){return this.x=a,this.y=b,this.width=c,this.height=d,this},copyFrom:function(a){return this.setTo(a.x,a.y,a.width,a.height)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.width=this.width,a.height=this.height,a},clone:function(a){return"undefined"==typeof a?a=new b.Ellipse(this.x,this.y,this.width,this.height):a.setTo(this.x,this.y,this.width,this.height),a},contains:function(a,c){return b.Ellipse.contains(this,a,c)},toString:function(){return"[{Phaser.Ellipse (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+")}]"}},b.Ellipse.prototype.constructor=b.Ellipse,Object.defineProperty(b.Ellipse.prototype,"left",{get:function(){return this.x},set:function(a){this.x=a}}),Object.defineProperty(b.Ellipse.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=ad+e},b.Ellipse.prototype.getBounds=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Ellipse=b.Ellipse,b.Polygon=function(a){if(this.type=b.POLYGON,a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var c=[],d=0,e=a.length;e>d;d+=2)c.push(new b.Point(a[d],a[d+1]));a=c}this.points=a},b.Polygon.prototype={clone:function(){for(var a=[],c=0;cb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!0)}return c}},b.Polygon.prototype.constructor=b.Polygon,PIXI.Polygon=b.Polygon,b.Camera=function(a,c,d,e,f,g){this.game=a,this.world=a.world,this.id=0,this.view=new b.Rectangle(d,e,f,g),this.screenView=new b.Rectangle(d,e,f,g),this.bounds=new b.Rectangle(d,e,f,g),this.deadzone=null,this.visible=!0,this.atLimit={x:!1,y:!1},this.target=null,this._edge=0,this.displayObject=null,this.scale=null},b.Camera.FOLLOW_LOCKON=0,b.Camera.FOLLOW_PLATFORMER=1,b.Camera.FOLLOW_TOPDOWN=2,b.Camera.FOLLOW_TOPDOWN_TIGHT=3,b.Camera.prototype={follow:function(a,c){"undefined"==typeof c&&(c=b.Camera.FOLLOW_LOCKON),this.target=a;var d;switch(c){case b.Camera.FOLLOW_PLATFORMER:var e=this.width/8,f=this.height/3;this.deadzone=new b.Rectangle((this.width-e)/2,(this.height-f)/2-.25*f,e,f);break;case b.Camera.FOLLOW_TOPDOWN:d=Math.max(this.width,this.height)/4,this.deadzone=new b.Rectangle((this.width-d)/2,(this.height-d)/2,d,d);break;case b.Camera.FOLLOW_TOPDOWN_TIGHT:d=Math.max(this.width,this.height)/8,this.deadzone=new b.Rectangle((this.width-d)/2,(this.height-d)/2,d,d);break;case b.Camera.FOLLOW_LOCKON:this.deadzone=null;break;default:this.deadzone=null}},focusOn:function(a){this.setPosition(Math.round(a.x-this.view.halfWidth),Math.round(a.y-this.view.halfHeight))},focusOnXY:function(a,b){this.setPosition(Math.round(a-this.view.halfWidth),Math.round(b-this.view.halfHeight))},update:function(){this.target&&this.updateTarget(),this.bounds&&this.checkBounds(),this.displayObject.position.x=-this.view.x,this.displayObject.position.y=-this.view.y},updateTarget:function(){this.deadzone?(this._edge=this.target.x-this.deadzone.x,this.view.x>this._edge&&(this.view.x=this._edge),this._edge=this.target.x+this.target.width-this.deadzone.x-this.deadzone.width,this.view.xthis._edge&&(this.view.y=this._edge),this._edge=this.target.y+this.target.height-this.deadzone.y-this.deadzone.height,this.view.y=this.bounds.right&&(this.atLimit.x=!0,this.view.x=this.bounds.right-this.width),this.view.y<=this.bounds.top&&(this.atLimit.y=!0,this.view.y=this.bounds.top),this.view.bottom>=this.bounds.bottom&&(this.atLimit.y=!0,this.view.y=this.bounds.bottom-this.height),this.view.floor()},setPosition:function(a,b){this.view.x=a,this.view.y=b,this.bounds&&this.checkBounds()},setSize:function(a,b){this.view.width=a,this.view.height=b},reset:function(){this.target=null,this.view.x=0,this.view.y=0}},b.Camera.prototype.constructor=b.Camera,Object.defineProperty(b.Camera.prototype,"x",{get:function(){return this.view.x},set:function(a){this.view.x=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(b.Camera.prototype,"y",{get:function(){return this.view.y},set:function(a){this.view.y=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(b.Camera.prototype,"width",{get:function(){return this.view.width},set:function(a){this.view.width=a}}),Object.defineProperty(b.Camera.prototype,"height",{get:function(){return this.view.height},set:function(a){this.view.height=a}}),b.State=function(){this.game=null,this.add=null,this.make=null,this.camera=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.sound=null,this.scale=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.particles=null,this.physics=null,this.rnd=null},b.State.prototype={preload:function(){},loadUpdate:function(){},loadRender:function(){},create:function(){},update:function(){},render:function(){},paused:function(){},shutdown:function(){}},b.State.prototype.constructor=b.State,b.StateManager=function(a,b){this.game=a,this.states={},this._pendingState=null,"undefined"!=typeof b&&null!==b&&(this._pendingState=b),this._clearWorld=!1,this._clearCache=!1,this._created=!1,this._args=[],this.current="",this.onInitCallback=null,this.onPreloadCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPreRenderCallback=null,this.onLoadUpdateCallback=null,this.onLoadRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onShutDownCallback=null},b.StateManager.prototype={boot:function(){this.game.onPause.add(this.pause,this),this.game.onResume.add(this.resume,this),this.game.load.onLoadComplete.add(this.loadComplete,this),null!==this._pendingState&&("string"==typeof this._pendingState?this.start(this._pendingState,!1,!1):this.add("default",this._pendingState,!0))},add:function(a,c,d){"undefined"==typeof d&&(d=!1);var e;return c instanceof b.State?e=c:"object"==typeof c?(e=c,e.game=this.game):"function"==typeof c&&(e=new c(this.game)),this.states[a]=e,d&&(this.game.isBooted?this.start(a):this._pendingState=a),e},remove:function(a){this.current===a&&(this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onDestroyCallback=null),delete this.states[a]},start:function(a,b,c){"undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=!1),this.checkState(a)&&(this._pendingState=a,this._clearWorld=b,this._clearCache=c,arguments.length>3&&(this._args=Array.prototype.splice.call(arguments,3)))},restart:function(a,b){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!1),this._pendingState=this.current,this._clearWorld=a,this._clearCache=b,arguments.length>2&&(this._args=Array.prototype.splice.call(arguments,2))},dummy:function(){},preUpdate:function(){this._pendingState&&this.game.isBooted&&(this.current&&(this.onShutDownCallback.call(this.callbackContext,this.game),this.game.tweens.removeAll(),this.game.camera.reset(),this.game.input.reset(!0),this.game.physics.clear(),this.game.time.removeAll(),this._clearWorld&&(this.game.world.shutdown(),this._clearCache===!0&&this.game.cache.destroy())),this.setCurrentState(this._pendingState),this.onPreloadCallback?(this.game.load.reset(),this.onPreloadCallback.call(this.callbackContext,this.game),0===this.game.load.totalQueuedFiles()?this.loadComplete():this.game.load.start()):this.loadComplete(),this.current===this._pendingState&&(this._pendingState=null))},checkState:function(a){if(this.states[a]){var b=!1;return this.states[a].preload&&(b=!0),this.states[a].create&&(b=!0),this.states[a].update&&(b=!0),this.states[a].render&&(b=!0),b===!1?(console.warn("Invalid Phaser State object given. Must contain at least a one of the required functions: preload, create, update or render"),!1):!0}return console.warn("Phaser.StateManager - No state found with the key: "+a),!1},link:function(a){this.states[a].game=this.game,this.states[a].add=this.game.add,this.states[a].make=this.game.make,this.states[a].camera=this.game.camera,this.states[a].cache=this.game.cache,this.states[a].input=this.game.input,this.states[a].load=this.game.load,this.states[a].math=this.game.math,this.states[a].sound=this.game.sound,this.states[a].scale=this.game.scale,this.states[a].state=this,this.states[a].stage=this.game.stage,this.states[a].time=this.game.time,this.states[a].tweens=this.game.tweens,this.states[a].world=this.game.world,this.states[a].particles=this.game.particles,this.states[a].rnd=this.game.rnd,this.states[a].physics=this.game.physics},setCurrentState:function(a){this.callbackContext=this.states[a],this.link(a),this.onInitCallback=this.states[a].init||this.dummy,this.onPreloadCallback=this.states[a].preload||null,this.onLoadRenderCallback=this.states[a].loadRender||null,this.onLoadUpdateCallback=this.states[a].loadUpdate||null,this.onCreateCallback=this.states[a].create||null,this.onUpdateCallback=this.states[a].update||null,this.onPreRenderCallback=this.states[a].preRender||null,this.onRenderCallback=this.states[a].render||null,this.onPausedCallback=this.states[a].paused||null,this.onResumedCallback=this.states[a].resumed||null,this.onShutDownCallback=this.states[a].shutdown||this.dummy,this.current=a,this._created=!1,this.onInitCallback.apply(this.callbackContext,this._args),this._args=[]},getCurrentState:function(){return this.states[this.current]},loadComplete:function(){this._created===!1&&this.onCreateCallback?(this._created=!0,this.onCreateCallback.call(this.callbackContext,this.game)):this._created=!0},pause:function(){this._created&&this.onPausedCallback&&this.onPausedCallback.call(this.callbackContext,this.game)},resume:function(){this._created&&this.onResumedCallback&&this.onResumedCallback.call(this.callbackContext,this.game)},update:function(){this._created&&this.onUpdateCallback?this.onUpdateCallback.call(this.callbackContext,this.game):this.onLoadUpdateCallback&&this.onLoadUpdateCallback.call(this.callbackContext,this.game)},preRender:function(){this.onPreRenderCallback&&this.onPreRenderCallback.call(this.callbackContext,this.game)},render:function(){this._created&&this.onRenderCallback?(this.game.renderType===b.CANVAS&&(this.game.context.save(),this.game.context.setTransform(1,0,0,1,0,0)),this.onRenderCallback.call(this.callbackContext,this.game),this.game.renderType===b.CANVAS&&this.game.context.restore()):this.onLoadRenderCallback&&this.onLoadRenderCallback.call(this.callbackContext,this.game)},destroy:function(){this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onDestroyCallback=null,this.game=null,this.states={},this._pendingState=null}},b.StateManager.prototype.constructor=b.StateManager,b.LinkedList=function(){this.next=null,this.prev=null,this.first=null,this.last=null,this.total=0},b.LinkedList.prototype={add:function(a){return 0===this.total&&null==this.first&&null==this.last?(this.first=a,this.last=a,this.next=a,a.prev=this,this.total++,a):(this.last.next=a,a.prev=this.last,this.last=a,this.total++,a)},remove:function(a){a==this.first?this.first=this.first.next:a==this.last&&(this.last=this.last.prev),a.prev&&(a.prev.next=a.next),a.next&&(a.next.prev=a.prev),a.next=a.prev=null,null==this.first&&(this.last=null),this.total--},callAll:function(a){if(this.first&&this.last){var b=this.first;do b&&b[a]&&b[a].call(b),b=b.next;while(b!=this.last.next)}}},b.LinkedList.prototype.constructor=b.LinkedList,b.Signal=function(){this._bindings=[],this._prevParams=null;var a=this;this.dispatch=function(){b.Signal.prototype.dispatch.apply(a,arguments)}},b.Signal.prototype={memorize:!1,_shouldPropagate:!0,active:!0,validateListener:function(a,b){if("function"!=typeof a)throw new Error("listener is a required param of {fn}() and should be a Function.".replace("{fn}",b))},_registerListener:function(a,c,d,e){var f,g=this._indexOfListener(a,d);if(-1!==g){if(f=this._bindings[g],f.isOnce()!==c)throw new Error("You cannot add"+(c?"":"Once")+"() then add"+(c?"Once":"")+"() the same listener without removing the relationship first.")}else f=new b.SignalBinding(this,a,c,d,e),this._addBinding(f);return this.memorize&&this._prevParams&&f.execute(this._prevParams),f},_addBinding:function(a){var b=this._bindings.length;do--b;while(this._bindings[b]&&a._priority<=this._bindings[b]._priority);this._bindings.splice(b+1,0,a)},_indexOfListener:function(a,b){for(var c,d=this._bindings.length;d--;)if(c=this._bindings[d],c._listener===a&&c.context===b)return d;return-1},has:function(a,b){return-1!==this._indexOfListener(a,b)},add:function(a,b,c){return this.validateListener(a,"add"),this._registerListener(a,!1,b,c)},addOnce:function(a,b,c){return this.validateListener(a,"addOnce"),this._registerListener(a,!0,b,c)},remove:function(a,b){this.validateListener(a,"remove");var c=this._indexOfListener(a,b);return-1!==c&&(this._bindings[c]._destroy(),this._bindings.splice(c,1)),a},removeAll:function(){for(var a=this._bindings.length;a--;)this._bindings[a]._destroy();this._bindings.length=0},getNumListeners:function(){return this._bindings.length},halt:function(){this._shouldPropagate=!1},dispatch:function(){if(this.active){var a,b=Array.prototype.slice.call(arguments),c=this._bindings.length;if(this.memorize&&(this._prevParams=b),c){a=this._bindings.slice(),this._shouldPropagate=!0;do c--;while(a[c]&&this._shouldPropagate&&a[c].execute(b)!==!1)}}},forget:function(){this._prevParams=null},dispose:function(){this.removeAll(),delete this._bindings,delete this._prevParams},toString:function(){return"[Phaser.Signal active:"+this.active+" numListeners:"+this.getNumListeners()+"]"}},b.Signal.prototype.constructor=b.Signal,b.SignalBinding=function(a,b,c,d,e){this._listener=b,this._isOnce=c,this.context=d,this._signal=a,this._priority=e||0},b.SignalBinding.prototype={active:!0,params:null,execute:function(a){var b,c;return this.active&&this._listener&&(c=this.params?this.params.concat(a):a,b=this._listener.apply(this.context,c),this._isOnce&&this.detach()),b},detach:function(){return this.isBound()?this._signal.remove(this._listener,this.context):null},isBound:function(){return!!this._signal&&!!this._listener},isOnce:function(){return this._isOnce},getListener:function(){return this._listener},getSignal:function(){return this._signal},_destroy:function(){delete this._signal,delete this._listener,delete this.context},toString:function(){return"[Phaser.SignalBinding isOnce:"+this._isOnce+", isBound:"+this.isBound()+", active:"+this.active+"]" -}},b.SignalBinding.prototype.constructor=b.SignalBinding,b.Filter=function(a,c,d){this.game=a,this.type=b.WEBGL_FILTER,this.passes=[this],this.shaders=[],this.dirty=!0,this.padding=0,this.uniforms={time:{type:"1f",value:0},resolution:{type:"2f",value:{x:256,y:256}},mouse:{type:"2f",value:{x:0,y:0}}},this.fragmentSrc=d||[]},b.Filter.prototype={init:function(){},setResolution:function(a,b){this.uniforms.resolution.value.x=a,this.uniforms.resolution.value.y=b},update:function(a){"undefined"!=typeof a&&(a.x>0&&(this.uniforms.mouse.x=a.x.toFixed(2)),a.y>0&&(this.uniforms.mouse.y=a.y.toFixed(2))),this.uniforms.time.value=this.game.time.totalElapsedSeconds()},destroy:function(){this.game=null}},b.Filter.prototype.constructor=b.Filter,Object.defineProperty(b.Filter.prototype,"width",{get:function(){return this.uniforms.resolution.value.x},set:function(a){this.uniforms.resolution.value.x=a}}),Object.defineProperty(b.Filter.prototype,"height",{get:function(){return this.uniforms.resolution.value.y},set:function(a){this.uniforms.resolution.value.y=a}}),b.Plugin=function(a,b){"undefined"==typeof b&&(b=null),this.game=a,this.parent=b,this.active=!1,this.visible=!1,this.hasPreUpdate=!1,this.hasUpdate=!1,this.hasPostUpdate=!1,this.hasRender=!1,this.hasPostRender=!1},b.Plugin.prototype={preUpdate:function(){},update:function(){},render:function(){},postRender:function(){},destroy:function(){this.game=null,this.parent=null,this.active=!1,this.visible=!1}},b.Plugin.prototype.constructor=b.Plugin,b.PluginManager=function(a){this.game=a,this.plugins=[],this._len=0,this._i=0},b.PluginManager.prototype={add:function(a){var b=!1;return"function"==typeof a?a=new a(this.game,this._parent):(a.game=this.game,a.parent=this),"function"==typeof a.preUpdate&&(a.hasPreUpdate=!0,b=!0),"function"==typeof a.update&&(a.hasUpdate=!0,b=!0),"function"==typeof a.postUpdate&&(a.hasPostUpdate=!0,b=!0),"function"==typeof a.render&&(a.hasRender=!0,b=!0),"function"==typeof a.postRender&&(a.hasPostRender=!0,b=!0),b?((a.hasPreUpdate||a.hasUpdate||a.hasPostUpdate)&&(a.active=!0),(a.hasRender||a.hasPostRender)&&(a.visible=!0),this._len=this.plugins.push(a),"function"==typeof a.init&&a.init(),a):null},remove:function(a){for(this._i=this._len;this._i--;)if(this.plugins[this._i]===a)return a.destroy(),this.plugins.splice(this._i,1),void this._len--},removeAll:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].destroy();this.plugins.length=0,this._len=0},preUpdate:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasPreUpdate&&this.plugins[this._i].preUpdate()},update:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasUpdate&&this.plugins[this._i].update()},postUpdate:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasPostUpdate&&this.plugins[this._i].postUpdate()},render:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].visible&&this.plugins[this._i].hasRender&&this.plugins[this._i].render()},postRender:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].visible&&this.plugins[this._i].hasPostRender&&this.plugins[this._i].postRender()},destroy:function(){this.removeAll(),this.game=null}},b.PluginManager.prototype.constructor=b.PluginManager,b.Stage=function(a,c,d){this.game=a,this.offset=new b.Point,PIXI.Stage.call(this,0,!1),this.name="_stage_root",this.interactive=!1,this.disableVisibilityChange=!1,this.checkOffsetInterval=2500,this.exists=!0,this.currentRenderOrderID=0,this._hiddenVar="hidden",this._nextOffsetCheck=0,this._backgroundColor=0,a.config?this.parseConfig(a.config):(this.game.canvas=b.Canvas.create(c,d),this.game.canvas.style["-webkit-full-screen"]="width: 100%; height: 100%")},b.Stage.prototype=Object.create(PIXI.Stage.prototype),b.Stage.prototype.constructor=b.Stage,b.Stage.prototype.preUpdate=function(){this.currentRenderOrderID=0;for(var a=this.children.length,b=0;a>b;b++)this.children[b].preUpdate()},b.Stage.prototype.update=function(){for(var a=this.children.length;a--;)this.children[a].update()},b.Stage.prototype.postUpdate=function(){if(this.game.world.camera.target){this.game.world.camera.target.postUpdate(),this.game.world.camera.update();for(var a=this.children.length;a--;)this.children[a]!==this.game.world.camera.target&&this.children[a].postUpdate()}else{this.game.world.camera.update();for(var a=this.children.length;a--;)this.children[a].postUpdate()}this.checkOffsetInterval!==!1&&this.game.time.now>this._nextOffsetCheck&&(b.Canvas.getOffset(this.game.canvas,this.offset),this._nextOffsetCheck=this.game.time.now+this.checkOffsetInterval)},b.Stage.prototype.parseConfig=function(a){this.game.canvas=a.canvasID?b.Canvas.create(this.game.width,this.game.height,a.canvasID):b.Canvas.create(this.game.width,this.game.height),a.canvasStyle?this.game.canvas.stlye=a.canvasStyle:this.game.canvas.style["-webkit-full-screen"]="width: 100%; height: 100%",a.checkOffsetInterval&&(this.checkOffsetInterval=a.checkOffsetInterval),a.disableVisibilityChange&&(this.disableVisibilityChange=a.disableVisibilityChange),a.fullScreenScaleMode&&(this.fullScreenScaleMode=a.fullScreenScaleMode),a.scaleMode&&(this.scaleMode=a.scaleMode),a.backgroundColor&&(this.backgroundColor=a.backgroundColor)},b.Stage.prototype.boot=function(){b.Canvas.getOffset(this.game.canvas,this.offset),this.bounds=new b.Rectangle(this.offset.x,this.offset.y,this.game.width,this.game.height);var a=this;this._onChange=function(b){return a.visibilityChange(b)},b.Canvas.setUserSelect(this.game.canvas,"none"),b.Canvas.setTouchAction(this.game.canvas,"none"),this.checkVisibility()},b.Stage.prototype.checkVisibility=function(){this._hiddenVar=void 0!==document.webkitHidden?"webkitvisibilitychange":void 0!==document.mozHidden?"mozvisibilitychange":void 0!==document.msHidden?"msvisibilitychange":void 0!==document.hidden?"visibilitychange":null,this._hiddenVar&&document.addEventListener(this._hiddenVar,this._onChange,!1),window.onpagehide=this._onChange,window.onpageshow=this._onChange,window.onblur=this._onChange,window.onfocus=this._onChange},b.Stage.prototype.visibilityChange=function(a){return this.disableVisibilityChange?void 0:"pagehide"===a.type||"blur"===a.type||"pageshow"===a.type||"focus"===a.type?void("pagehide"===a.type||"blur"===a.type?this.game.focusLoss(a):("pageshow"===a.type||"focus"===a.type)&&this.game.focusGain(a)):void(document.hidden||document.mozHidden||document.msHidden||document.webkitHidden?this.game.gamePaused(a):this.game.gameResumed(a))},b.Stage.prototype.setBackgroundColor=function(a){this._backgroundColor=a||0,this.backgroundColorSplit=PIXI.hex2rgb(this.backgroundColor);var b=this._backgroundColor.toString(16);b="000000".substr(0,6-b.length)+b,this.backgroundColorString="#"+b},Object.defineProperty(b.Stage.prototype,"backgroundColor",{get:function(){return this._backgroundColor},set:function(a){this._backgroundColor=a,this.game.transparent===!1&&("string"==typeof a&&(a=b.Color.hexToRGB(a)),this.setBackgroundColor(a))}}),Object.defineProperty(b.Stage.prototype,"smoothed",{get:function(){return!PIXI.scaleModes.LINEAR},set:function(a){PIXI.scaleModes.LINEAR=a?0:1}}),b.Group=function(a,c,d,e,f,g){"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=!1),"undefined"==typeof g&&(g=b.Physics.ARCADE),this.game=a,"undefined"==typeof c&&(c=a.world),this.name=d||"group",PIXI.DisplayObjectContainer.call(this),e?this.game.stage.addChild(this):c&&c.addChild(this),this.z=0,this.type=b.GROUP,this.alive=!0,this.exists=!0,this.scale=new b.Point(1,1),this.cursor=null,this.cameraOffset=new b.Point,this.enableBody=f,this.enableBodyDebug=!1,this.physicsBodyType=g,this._sortProperty="z",this._cache=[0,0,0,0,1,0,1,0,0,0]},b.Group.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),b.Group.prototype.constructor=b.Group,b.Group.RETURN_NONE=0,b.Group.RETURN_TOTAL=1,b.Group.RETURN_CHILD=2,b.Group.SORT_ASCENDING=-1,b.Group.SORT_DESCENDING=1,b.Group.prototype.add=function(a){return a.parent!==this&&(this.enableBody&&this.game.physics.enable(a,this.physicsBodyType),this.addChild(a),a.z=this.children.length,a.events&&a.events.onAddedToGroup.dispatch(a,this),null===this.cursor&&(this.cursor=a)),a},b.Group.prototype.addAt=function(a,b){return a.parent!==this&&(this.enableBody&&this.game.physics.enable(a,this.physicsBodyType),this.addChildAt(a,b),this.updateZ(),a.events&&a.events.onAddedToGroup.dispatch(a,this),null===this.cursor&&(this.cursor=a)),a},b.Group.prototype.getAt=function(a){return 0>a||a>=this.children.length?-1:this.getChildAt(a)},b.Group.prototype.create=function(a,c,d,e,f){"undefined"==typeof f&&(f=!0);var g=new b.Sprite(this.game,a,c,d,e);return this.enableBody&&this.game.physics.enable(g,this.physicsBodyType),g.exists=f,g.visible=f,g.alive=f,this.addChild(g),g.z=this.children.length,g.events&&g.events.onAddedToGroup.dispatch(g,this),null===this.cursor&&(this.cursor=g),g},b.Group.prototype.createMultiple=function(a,b,c,d){"undefined"==typeof d&&(d=!1);for(var e=0;a>e;e++)this.create(0,0,b,c,d)},b.Group.prototype.updateZ=function(){for(var a=this.children.length;a--;)this.children[a].z=a},b.Group.prototype.resetCursor=function(a){return"undefined"==typeof a&&(a=0),a>this.children.length-1&&(a=0),this.cursor?(this._cache[8]=a,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.next=function(){return this.cursor?(this._cache[8]>=this.children.length-1?this._cache[8]=0:this._cache[8]++,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.previous=function(){return this.cursor?(0===this._cache[8]?this._cache[8]=this.children.length-1:this._cache[8]--,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.swap=function(a,b){var c=this.swapChildren(a,b);return c&&this.updateZ(),c},b.Group.prototype.bringToTop=function(a){return a.parent===this&&this.getIndex(a)0&&(this.remove(a),this.addAt(a,0)),a},b.Group.prototype.moveUp=function(a){if(a.parent===this&&this.getIndex(a)0){var b=this.getIndex(a),c=this.getAt(b-1);c&&this.swap(a,c)}return a},b.Group.prototype.xy=function(a,b,c){return 0>a||a>this.children.length?-1:(this.getChildAt(a).x=b,void(this.getChildAt(a).y=c))},b.Group.prototype.reverse=function(){this.children.reverse(),this.updateZ()},b.Group.prototype.getIndex=function(a){return this.children.indexOf(a)},b.Group.prototype.replace=function(a,c){var d=this.getIndex(a);if(-1!==d){void 0!==c.parent&&(c.events.onRemovedFromGroup.dispatch(c,this),c.parent.removeChild(c),c.parent instanceof b.Group&&c.parent.updateZ());var e=a;return this.remove(e),this.addAt(c,d),e}},b.Group.prototype.setProperty=function(a,b,c,d){d=d||0;var e=b.length;1===e&&a.hasOwnProperty(b[0])?0===d?a[b[0]]=c:1==d?a[b[0]]+=c:2==d?a[b[0]]-=c:3==d?a[b[0]]*=c:4==d&&(a[b[0]]/=c):2===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])?0===d?a[b[0]][b[1]]=c:1==d?a[b[0]][b[1]]+=c:2==d?a[b[0]][b[1]]-=c:3==d?a[b[0]][b[1]]*=c:4==d&&(a[b[0]][b[1]]/=c):3===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])&&a[b[0]][b[1]].hasOwnProperty(b[2])?0===d?a[b[0]][b[1]][b[2]]=c:1==d?a[b[0]][b[1]][b[2]]+=c:2==d?a[b[0]][b[1]][b[2]]-=c:3==d?a[b[0]][b[1]][b[2]]*=c:4==d&&(a[b[0]][b[1]][b[2]]/=c):4===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])&&a[b[0]][b[1]].hasOwnProperty(b[2])&&a[b[0]][b[1]][b[2]].hasOwnProperty(b[3])&&(0===d?a[b[0]][b[1]][b[2]][b[3]]=c:1==d?a[b[0]][b[1]][b[2]][b[3]]+=c:2==d?a[b[0]][b[1]][b[2]][b[3]]-=c:3==d?a[b[0]][b[1]][b[2]][b[3]]*=c:4==d&&(a[b[0]][b[1]][b[2]][b[3]]/=c))},b.Group.prototype.set=function(a,b,c,d,e,f){b=b.split("."),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1),(d===!1||d&&a.alive)&&(e===!1||e&&a.visible)&&this.setProperty(a,b,c,f)},b.Group.prototype.setAll=function(a,b,c,d,e){a=a.split("."),"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1),e=e||0;for(var f=0,g=this.children.length;g>f;f++)(!c||c&&this.children[f].alive)&&(!d||d&&this.children[f].visible)&&this.setProperty(this.children[f],a,b,e)},b.Group.prototype.setAllChildren=function(a,c,d,e,f){"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1),f=f||0;for(var g=0,h=this.children.length;h>g;g++)(!d||d&&this.children[g].alive)&&(!e||e&&this.children[g].visible)&&(this.children[g]instanceof b.Group?this.children[g].setAllChildren(a,c,d,e,f):this.setProperty(this.children[g],a.split("."),c,f))},b.Group.prototype.addAll=function(a,b,c,d){this.setAll(a,b,c,d,1)},b.Group.prototype.subAll=function(a,b,c,d){this.setAll(a,b,c,d,2)},b.Group.prototype.multiplyAll=function(a,b,c,d){this.setAll(a,b,c,d,3)},b.Group.prototype.divideAll=function(a,b,c,d){this.setAll(a,b,c,d,4)},b.Group.prototype.callAllExists=function(a,b){for(var c=Array.prototype.splice.call(arguments,2),d=0,e=this.children.length;e>d;d++)this.children[d].exists===b&&this.children[d][a]&&this.children[d][a].apply(this.children[d],c)},b.Group.prototype.callbackFromArray=function(a,b,c){if(1==c){if(a[b[0]])return a[b[0]]}else if(2==c){if(a[b[0]][b[1]])return a[b[0]][b[1]]}else if(3==c){if(a[b[0]][b[1]][b[2]])return a[b[0]][b[1]][b[2]]}else if(4==c){if(a[b[0]][b[1]][b[2]][b[3]])return a[b[0]][b[1]][b[2]][b[3]]}else if(a[b])return a[b];return!1},b.Group.prototype.callAll=function(a,b){if("undefined"!=typeof a){a=a.split(".");var c=a.length;if("undefined"==typeof b||null===b||""===b)b=null;else if("string"==typeof b){b=b.split(".");var d=b.length}for(var e=Array.prototype.splice.call(arguments,2),f=null,g=null,h=0,i=this.children.length;i>h;h++)f=this.callbackFromArray(this.children[h],a,c),b&&f?(g=this.callbackFromArray(this.children[h],b,d),f&&f.apply(g,e)):f&&f.apply(this.children[h],e)}},b.Group.prototype.preUpdate=function(){if(!this.exists||!this.parent.exists)return this.renderOrderID=-1,!1;for(var a=this.children.length;a--;)this.children[a].preUpdate();return!0},b.Group.prototype.update=function(){for(var a=this.children.length;a--;)this.children[a].update()},b.Group.prototype.postUpdate=function(){1===this._cache[7]&&(this.x=this.game.camera.view.x+this.cameraOffset.x,this.y=this.game.camera.view.y+this.cameraOffset.y);for(var a=this.children.length;a--;)this.children[a].postUpdate()},b.Group.prototype.forEach=function(a,b,c){"undefined"==typeof c&&(c=!1);var d=Array.prototype.splice.call(arguments,3);d.unshift(null);for(var e=0,f=this.children.length;f>e;e++)(!c||c&&this.children[e].exists)&&(d[0]=this.children[e],a.apply(b,d))},b.Group.prototype.forEachExists=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("exists",!0,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.forEachAlive=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("alive",!0,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.forEachDead=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("alive",!1,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.sort=function(a,c){this.children.length<2||("undefined"==typeof a&&(a="z"),"undefined"==typeof c&&(c=b.Group.SORT_ASCENDING),this._sortProperty=a,this.children.sort(c===b.Group.SORT_ASCENDING?this.ascendingSortHandler.bind(this):this.descendingSortHandler.bind(this)),this.updateZ())},b.Group.prototype.customSort=function(a,b){this.children.length<2||(this.children.sort(a.bind(b)),this.updateZ())},b.Group.prototype.ascendingSortHandler=function(a,b){return a[this._sortProperty]b[this._sortProperty]?1:a.zb[this._sortProperty]?-1:0},b.Group.prototype.iterate=function(a,c,d,e,f,g){if(d===b.Group.RETURN_TOTAL&&0===this.children.length)return 0;"undefined"==typeof e&&(e=!1);for(var h=0,i=0,j=this.children.length;j>i;i++)if(this.children[i][a]===c&&(h++,e&&(g[0]=this.children[i],e.apply(f,g)),d===b.Group.RETURN_CHILD))return this.children[i];return d===b.Group.RETURN_TOTAL?h:d===b.Group.RETURN_CHILD?null:void 0},b.Group.prototype.getFirstExists=function(a){return"boolean"!=typeof a&&(a=!0),this.iterate("exists",a,b.Group.RETURN_CHILD)},b.Group.prototype.getFirstAlive=function(){return this.iterate("alive",!0,b.Group.RETURN_CHILD)},b.Group.prototype.getFirstDead=function(){return this.iterate("alive",!1,b.Group.RETURN_CHILD)},b.Group.prototype.getTop=function(){return this.children.length>0?this.children[this.children.length-1]:void 0},b.Group.prototype.getBottom=function(){return this.children.length>0?this.children[0]:void 0},b.Group.prototype.countLiving=function(){return this.iterate("alive",!0,b.Group.RETURN_TOTAL)},b.Group.prototype.countDead=function(){return this.iterate("alive",!1,b.Group.RETURN_TOTAL)},b.Group.prototype.getRandom=function(a,b){return 0===this.children.length?null:(a=a||0,b=b||this.children.length,this.game.math.getRandom(this.children,a,b))},b.Group.prototype.remove=function(a,b){if("undefined"==typeof b&&(b=!1),0===this.children.length||-1===this.children.indexOf(a))return!1;a.events&&a.events.onRemovedFromGroup.dispatch(a,this);var c=this.removeChild(a);return this.updateZ(),this.cursor===a&&this.next(),b&&c&&c.destroy(!0),!0},b.Group.prototype.removeAll=function(a){if("undefined"==typeof a&&(a=!1),0!==this.children.length){do{this.children[0].events&&this.children[0].events.onRemovedFromGroup.dispatch(this.children[0],this);var b=this.removeChild(this.children[0]);a&&b&&b.destroy(!0)}while(this.children.length>0);this.cursor=null}},b.Group.prototype.removeBetween=function(a,b,c){if("undefined"==typeof b&&(b=this.children.length),"undefined"==typeof c&&(c=!1),0!==this.children.length){if(a>b||0>a||b>this.children.length)return!1;for(var d=b;d>=a;){this.children[d].events&&this.children[d].events.onRemovedFromGroup.dispatch(this.children[d],this);var e=this.removeChild(this.children[d]);c&&e&&e.destroy(!0),this.cursor===this.children[d]&&(this.cursor=null),d--}this.updateZ()}},b.Group.prototype.destroy=function(a,b){null!==this.game&&("undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!1),this.removeAll(a),this.cursor=null,b||(this.parent&&this.parent.removeChild(this),this.game=null,this.exists=!1))},Object.defineProperty(b.Group.prototype,"total",{get:function(){return this.iterate("exists",!0,b.Group.RETURN_TOTAL)}}),Object.defineProperty(b.Group.prototype,"length",{get:function(){return this.children.length}}),Object.defineProperty(b.Group.prototype,"angle",{get:function(){return b.Math.radToDeg(this.rotation)},set:function(a){this.rotation=b.Math.degToRad(a)}}),Object.defineProperty(b.Group.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),b.World=function(a){b.Group.call(this,a,null,"__world",!1),this.bounds=new b.Rectangle(0,0,a.width,a.height),this.camera=null},b.World.prototype=Object.create(b.Group.prototype),b.World.prototype.constructor=b.World,b.World.prototype.boot=function(){this.camera=new b.Camera(this.game,0,0,0,this.game.width,this.game.height),this.camera.displayObject=this,this.camera.scale=this.scale,this.game.camera=this.camera,this.game.stage.addChild(this)},b.World.prototype.setBounds=function(a,b,c,d){cthis.bounds.right&&(a.x=this.bounds.left),a._currentBounds.bottomthis.bounds.bottom&&(a.y=this.bounds.top)):(a.x+bthis.bounds.right&&(a.x=this.bounds.left-b),a.y+bthis.bounds.bottom&&(a.y=this.bounds.top-b))},Object.defineProperty(b.World.prototype,"width",{get:function(){return this.bounds.width},set:function(a){this.bounds.width=a}}),Object.defineProperty(b.World.prototype,"height",{get:function(){return this.bounds.height},set:function(a){this.bounds.height=a}}),Object.defineProperty(b.World.prototype,"centerX",{get:function(){return this.bounds.halfWidth}}),Object.defineProperty(b.World.prototype,"centerY",{get:function(){return this.bounds.halfHeight}}),Object.defineProperty(b.World.prototype,"randomX",{get:function(){return this.bounds.x<0?this.game.rnd.integerInRange(this.bounds.x,this.bounds.width-Math.abs(this.bounds.x)):this.game.rnd.integerInRange(this.bounds.x,this.bounds.width)}}),Object.defineProperty(b.World.prototype,"randomY",{get:function(){return this.bounds.y<0?this.game.rnd.integerInRange(this.bounds.y,this.bounds.height-Math.abs(this.bounds.y)):this.game.rnd.integerInRange(this.bounds.y,this.bounds.height)}}),b.ScaleManager=function(a,c,d){this.game=a,this.width=c,this.height=d,this.minWidth=null,this.maxWidth=null,this.minHeight=null,this.maxHeight=null,this.forceLandscape=!1,this.forcePortrait=!1,this.incorrectOrientation=!1,this.pageAlignHorizontally=!1,this.pageAlignVertically=!1,this.maxIterations=5,this.orientationSprite=null,this.enterLandscape=new b.Signal,this.enterPortrait=new b.Signal,this.enterIncorrectOrientation=new b.Signal,this.leaveIncorrectOrientation=new b.Signal,this.hasResized=new b.Signal,this.fullScreenTarget=this.game.canvas,this.enterFullScreen=new b.Signal,this.leaveFullScreen=new b.Signal,this.orientation=0,window.orientation?this.orientation=window.orientation:window.outerWidth>window.outerHeight&&(this.orientation=90),this.scaleFactor=new b.Point(1,1),this.scaleFactorInversed=new b.Point(1,1),this.margin=new b.Point(0,0),this.aspectRatio=0,this.sourceAspectRatio=c/d,this.event=null,this.scaleMode=b.ScaleManager.NO_SCALE,this.fullScreenScaleMode=b.ScaleManager.NO_SCALE,this._startHeight=0,this._width=0,this._height=0;var e=this;window.addEventListener("orientationchange",function(a){return e.checkOrientation(a)},!1),window.addEventListener("resize",function(a){return e.checkResize(a)},!1),document.addEventListener("webkitfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("mozfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("fullscreenchange",function(a){return e.fullScreenChange(a)},!1)},b.ScaleManager.EXACT_FIT=0,b.ScaleManager.NO_SCALE=1,b.ScaleManager.SHOW_ALL=2,b.ScaleManager.prototype={startFullScreen:function(a){!this.isFullScreen&&this.game.device.fullscreen&&("undefined"!=typeof a&&this.game.renderType===b.CANVAS&&(this.game.stage.smoothed=a),this._width=this.width,this._height=this.height,this.game.device.fullscreenKeyboard?this.fullScreenTarget[this.game.device.requestFullscreen](Element.ALLOW_KEYBOARD_INPUT):this.fullScreenTarget[this.game.device.requestFullscreen]())},stopFullScreen:function(){this.fullScreenTarget[this.game.device.cancelFullscreen]()},fullScreenChange:function(a){this.event=a,this.isFullScreen?(this.fullScreenScaleMode===b.ScaleManager.EXACT_FIT?(this.fullScreenTarget.style.width="100%",this.fullScreenTarget.style.height="100%",this.width=window.outerWidth,this.height=window.outerHeight,this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height,this.checkResize()):this.fullScreenScaleMode===b.ScaleManager.SHOW_ALL&&(this.setShowAll(),this.refresh()),this.enterFullScreen.dispatch(this.width,this.height)):(this.fullScreenTarget.style.width=this.game.width+"px",this.fullScreenTarget.style.height=this.game.height+"px",this.width=this._width,this.height=this._height,this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height,this.leaveFullScreen.dispatch(this.width,this.height))},forceOrientation:function(a,c,d){"undefined"==typeof c&&(c=!1),this.forceLandscape=a,this.forcePortrait=c,"undefined"!=typeof d&&((null==d||this.game.cache.checkImageKey(d)===!1)&&(d="__default"),this.orientationSprite=new b.Image(this.game,this.game.width/2,this.game.height/2,PIXI.TextureCache[d]),this.orientationSprite.anchor.set(.5),this.checkOrientationState(),this.incorrectOrientation?(this.orientationSprite.visible=!0,this.game.world.visible=!1):(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.game.stage.addChild(this.orientationSprite))},checkOrientationState:function(){this.incorrectOrientation?(this.forceLandscape&&window.innerWidth>window.innerHeight||this.forcePortrait&&window.innerHeight>window.innerWidth)&&(this.incorrectOrientation=!1,this.leaveIncorrectOrientation.dispatch(),this.orientationSprite&&(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.scaleMode!==b.ScaleManager.NO_SCALE&&this.refresh()):(this.forceLandscape&&window.innerWidthwindow.outerHeight?90:0,this.isLandscape?this.enterLandscape.dispatch(this.orientation,!0,!1):this.enterPortrait.dispatch(this.orientation,!1,!0),this.scaleMode!==b.ScaleManager.NO_SCALE&&this.refresh(),this.checkOrientationState()},refresh:function(){if(this.game.device.iPad===!1&&this.game.device.webApp===!1&&this.game.device.desktop===!1&&(this.game.device.android&&this.game.device.chrome===!1?window.scrollTo(0,1):window.scrollTo(0,0)),null==this._check&&this.maxIterations>0){this._iterations=this.maxIterations;var a=this;this._check=window.setInterval(function(){return a.setScreenSize()},10),this.setScreenSize()}},setScreenSize:function(a){"undefined"==typeof a&&(a=!1),this.game.device.iPad===!1&&this.game.device.webApp===!1&&this.game.device.desktop===!1&&(this.game.device.android&&this.game.device.chrome===!1?window.scrollTo(0,1):window.scrollTo(0,0)),this._iterations--,(a||window.innerHeight>this._startHeight||this._iterations<0)&&(document.documentElement.style.minHeight=window.innerHeight+"px",this.incorrectOrientation===!0?this.setMaximum():this.isFullScreen?this.fullScreenScaleMode==b.ScaleManager.EXACT_FIT?this.setExactFit():this.fullScreenScaleMode==b.ScaleManager.SHOW_ALL&&this.setShowAll():this.scaleMode==b.ScaleManager.EXACT_FIT?this.setExactFit():this.scaleMode==b.ScaleManager.SHOW_ALL&&this.setShowAll(),this.setSize(),clearInterval(this._check),this._check=null)},setSize:function(){this.incorrectOrientation===!1&&(this.maxWidth&&this.width>this.maxWidth&&(this.width=this.maxWidth),this.maxHeight&&this.height>this.maxHeight&&(this.height=this.maxHeight),this.minWidth&&this.widththis.maxWidth?this.maxWidth:a,this.height=this.maxHeight&&b>this.maxHeight?this.maxHeight:b}},b.ScaleManager.prototype.constructor=b.ScaleManager,Object.defineProperty(b.ScaleManager.prototype,"isFullScreen",{get:function(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement}}),Object.defineProperty(b.ScaleManager.prototype,"isPortrait",{get:function(){return 0===this.orientation||180==this.orientation}}),Object.defineProperty(b.ScaleManager.prototype,"isLandscape",{get:function(){return 90===this.orientation||-90===this.orientation}}),b.Game=function(a,c,d,e,f,g,h,i){this.id=b.GAMES.push(this)-1,this.config=null,this.physicsConfig=i,this.parent="",this.width=800,this.height=600,this.transparent=!1,this.antialias=!0,this.renderer=null,this.renderType=b.AUTO,this.state=null,this.isBooted=!1,this.isRunning=!1,this.raf=null,this.add=null,this.make=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.net=null,this.scale=null,this.sound=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.physics=null,this.rnd=null,this.device=null,this.camera=null,this.canvas=null,this.context=null,this.debug=null,this.particles=null,this.stepping=!1,this.pendingStep=!1,this.stepCount=0,this.onPause=null,this.onResume=null,this.onBlur=null,this.onFocus=null,this._paused=!1,this._codePaused=!1,1===arguments.length&&"object"==typeof arguments[0]?this.parseConfig(arguments[0]):("undefined"!=typeof a&&(this.width=a),"undefined"!=typeof c&&(this.height=c),"undefined"!=typeof d&&(this.renderer=d,this.renderType=d),"undefined"!=typeof e&&(this.parent=e),"undefined"!=typeof g&&(this.transparent=g),"undefined"!=typeof h&&(this.antialias=h),this.rnd=new b.RandomDataGenerator([(Date.now()*Math.random()).toString()]),this.state=new b.StateManager(this,f));var j=this;return this._onBoot=function(){return j.boot()},"complete"===document.readyState||"interactive"===document.readyState?window.setTimeout(this._onBoot,0):(document.addEventListener("DOMContentLoaded",this._onBoot,!1),window.addEventListener("load",this._onBoot,!1)),this},b.Game.prototype={parseConfig:function(a){this.config=a,a.width&&(this.width=b.Utils.parseDimension(a.width,0)),a.height&&(this.height=b.Utils.parseDimension(a.height,1)),a.renderer&&(this.renderer=a.renderer,this.renderType=a.renderer),a.parent&&(this.parent=a.parent),a.transparent&&(this.transparent=a.transparent),a.antialias&&(this.antialias=a.antialias),a.physicsConfig&&(this.physicsConfig=a.physicsConfig);var c=[(Date.now()*Math.random()).toString()];a.seed&&(c=a.seed),this.rnd=new b.RandomDataGenerator(c); -var d=null;a.state&&(d=a.state),this.state=new b.StateManager(this,d)},boot:function(){this.isBooted||(document.body?(document.removeEventListener("DOMContentLoaded",this._onBoot),window.removeEventListener("load",this._onBoot),this.onPause=new b.Signal,this.onResume=new b.Signal,this.onBlur=new b.Signal,this.onFocus=new b.Signal,this.isBooted=!0,this.device=new b.Device(this),this.math=b.Math,this.stage=new b.Stage(this,this.width,this.height),this.scale=new b.ScaleManager(this,this.width,this.height),this.setUpRenderer(),this.device.checkFullScreenSupport(),this.world=new b.World(this),this.add=new b.GameObjectFactory(this),this.make=new b.GameObjectCreator(this),this.cache=new b.Cache(this),this.load=new b.Loader(this),this.time=new b.Time(this),this.tweens=new b.TweenManager(this),this.input=new b.Input(this),this.sound=new b.SoundManager(this),this.physics=new b.Physics(this,this.physicsConfig),this.particles=new b.Particles(this),this.plugins=new b.PluginManager(this),this.net=new b.Net(this),this.debug=new b.Utils.Debug(this),this.time.boot(),this.stage.boot(),this.world.boot(),this.input.boot(),this.sound.boot(),this.state.boot(),this.debug.boot(),this.showDebugHeader(),this.isRunning=!0,this.raf=this.config&&this.config.forceSetTimeOut?new b.RequestAnimationFrame(this,this.config.forceSetTimeOut):new b.RequestAnimationFrame(this,!1),this.raf.start()):window.setTimeout(this._onBoot,20))},showDebugHeader:function(){var a=b.DEV_VERSION,c="Canvas",d="HTML Audio",e=1;if(this.renderType===b.WEBGL?(c="WebGL",e++):this.renderType==b.HEADLESS&&(c="Headless"),this.device.webAudio&&(d="WebAudio",e++),this.device.chrome){for(var f=["%c %c %c Phaser v"+a+" - "+c+" - "+d+" %c %c http://phaser.io %c %c ♥%c♥%c♥ ","background: #0cf300","background: #00bc17","color: #ffffff; background: #00711f;","background: #00bc17","background: #0cf300","background: #00bc17"],g=0;3>g;g++)f.push(e>g?"color: #ff2424; background: #fff":"color: #959595; background: #fff");console.log.apply(console,f)}else console.log("Phaser v"+a+" - Renderer: "+c+" - Audio: "+d+" - http://phaser.io")},setUpRenderer:function(){if(this.device.trident&&(this.renderType=b.CANVAS),this.renderType===b.HEADLESS||this.renderType===b.CANVAS||this.renderType===b.AUTO&&this.device.webGL===!1){if(!this.device.canvas)throw new Error("Phaser.Game - cannot create Canvas or WebGL context, aborting.");this.renderType===b.AUTO&&(this.renderType=b.CANVAS),this.renderer=new PIXI.CanvasRenderer(this.width,this.height,this.canvas,this.transparent),this.context=this.renderer.context}else this.renderType=b.WEBGL,this.renderer=new PIXI.WebGLRenderer(this.width,this.height,this.canvas,this.transparent,this.antialias),this.context=null;this.renderType!==b.HEADLESS&&(this.stage.smoothed=this.antialias,b.Canvas.addToDOM(this.canvas,this.parent,!0),b.Canvas.setTouchAction(this.canvas))},update:function(a){this.time.update(a),this._paused||this.pendingStep?this.debug.preUpdate():(this.stepping&&(this.pendingStep=!0),this.debug.preUpdate(),this.physics.preUpdate(),this.state.preUpdate(),this.plugins.preUpdate(),this.stage.preUpdate(),this.state.update(),this.stage.update(),this.tweens.update(),this.sound.update(),this.input.update(),this.physics.update(),this.particles.update(),this.plugins.update(),this.stage.postUpdate(),this.plugins.postUpdate()),this.renderType!=b.HEADLESS&&(this.renderer.render(this.stage),this.plugins.render(),this.state.render(),this.plugins.postRender())},enableStep:function(){this.stepping=!0,this.pendingStep=!1,this.stepCount=0},disableStep:function(){this.stepping=!1,this.pendingStep=!1},step:function(){this.pendingStep=!1,this.stepCount++},destroy:function(){this.raf.stop(),this.input.destroy(),this.state.destroy(),this.physics.destroy(),this.state=null,this.cache=null,this.input=null,this.load=null,this.sound=null,this.stage=null,this.time=null,this.world=null,this.isBooted=!1},gamePaused:function(a){this._paused||(this._paused=!0,this.time.gamePaused(),this.sound.setMute(),this.onPause.dispatch(a))},gameResumed:function(a){this._paused&&!this._codePaused&&(this._paused=!1,this.time.gameResumed(),this.input.reset(),this.sound.unsetMute(),this.onResume.dispatch(a))},focusLoss:function(a){this.onBlur.dispatch(a),this.gamePaused(a)},focusGain:function(a){this.onFocus.dispatch(a),this.gameResumed(a)}},b.Game.prototype.constructor=b.Game,Object.defineProperty(b.Game.prototype,"paused",{get:function(){return this._paused},set:function(a){a===!0?this._paused===!1&&(this._paused=!0,this._codePaused=!0,this.sound.mute=!0,this.time.gamePaused(),this.onPause.dispatch(this)):this._paused&&(this._paused=!1,this._codePaused=!1,this.input.reset(),this.sound.mute=!1,this.time.gameResumed(),this.onResume.dispatch(this))}}),b.Input=function(a){this.game=a,this.hitCanvas=null,this.hitContext=null,this.moveCallback=null,this.moveCallbackContext=this,this.pollRate=0,this.disabled=!1,this.multiInputOverride=b.Input.MOUSE_TOUCH_COMBINE,this.position=null,this.speed=null,this.circle=null,this.scale=null,this.maxPointers=10,this.currentPointers=0,this.tapRate=200,this.doubleTapRate=300,this.holdRate=2e3,this.justPressedRate=200,this.justReleasedRate=200,this.recordPointerHistory=!1,this.recordRate=100,this.recordLimit=100,this.pointer1=null,this.pointer2=null,this.pointer3=null,this.pointer4=null,this.pointer5=null,this.pointer6=null,this.pointer7=null,this.pointer8=null,this.pointer9=null,this.pointer10=null,this.activePointer=null,this.mousePointer=null,this.mouse=null,this.keyboard=null,this.touch=null,this.mspointer=null,this.gamepad=null,this.resetLocked=!1,this.onDown=null,this.onUp=null,this.onTap=null,this.onHold=null,this.interactiveItems=new b.LinkedList,this._localPoint=new b.Point,this._pollCounter=0,this._oldPosition=null,this._x=0,this._y=0},b.Input.MOUSE_OVERRIDES_TOUCH=0,b.Input.TOUCH_OVERRIDES_MOUSE=1,b.Input.MOUSE_TOUCH_COMBINE=2,b.Input.prototype={boot:function(){this.mousePointer=new b.Pointer(this.game,0),this.pointer1=new b.Pointer(this.game,1),this.pointer2=new b.Pointer(this.game,2),this.mouse=new b.Mouse(this.game),this.keyboard=new b.Keyboard(this.game),this.touch=new b.Touch(this.game),this.mspointer=new b.MSPointer(this.game),this.gamepad=new b.Gamepad(this.game),this.onDown=new b.Signal,this.onUp=new b.Signal,this.onTap=new b.Signal,this.onHold=new b.Signal,this.scale=new b.Point(1,1),this.speed=new b.Point,this.position=new b.Point,this._oldPosition=new b.Point,this.circle=new b.Circle(0,0,44),this.activePointer=this.mousePointer,this.currentPointers=0,this.hitCanvas=document.createElement("canvas"),this.hitCanvas.width=1,this.hitCanvas.height=1,this.hitContext=this.hitCanvas.getContext("2d"),this.mouse.start(),this.keyboard.start(),this.touch.start(),this.mspointer.start(),this.mousePointer.active=!0},destroy:function(){this.mouse.stop(),this.keyboard.stop(),this.touch.stop(),this.mspointer.stop(),this.gamepad.stop(),this.moveCallback=null},setMoveCallback:function(a,b){this.moveCallback=a,this.moveCallbackContext=b},addPointer:function(){for(var a=0,c=10;c>0;c--)null===this["pointer"+c]&&(a=c);return 0===a?(console.warn("You can only have 10 Pointer objects"),null):(this["pointer"+a]=new b.Pointer(this.game,a),this["pointer"+a])},update:function(){return this.keyboard.update(),this.pollRate>0&&this._pollCounter=c;c++)this["pointer"+c]&&this["pointer"+c].reset();this.currentPointers=0,"none"!==this.game.canvas.style.cursor&&(this.game.canvas.style.cursor="inherit"),a&&(this.onDown.dispose(),this.onUp.dispose(),this.onTap.dispose(),this.onHold.dispose(),this.onDown=new b.Signal,this.onUp=new b.Signal,this.onTap=new b.Signal,this.onHold=new b.Signal,this.interactiveItems.callAll("reset")),this._pollCounter=0}},resetSpeed:function(a,b){this._oldPosition.setTo(a,b),this.speed.setTo(0,0)},startPointer:function(a){if(this.maxPointers<10&&this.totalActivePointers==this.maxPointers)return null;if(this.pointer1.active===!1)return this.pointer1.start(a);if(this.pointer2.active===!1)return this.pointer2.start(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active===!1)return this["pointer"+b].start(a);return null},updatePointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.move(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.move(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].move(a);return null},stopPointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.stop(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.stop(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].stop(a);return null},getPointer:function(a){if(a=a||!1,this.pointer1.active==a)return this.pointer1;if(this.pointer2.active==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active==a)return this["pointer"+b];return null},getPointerFromIdentifier:function(a){if(this.pointer1.identifier==a)return this.pointer1;if(this.pointer2.identifier==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].identifier==a)return this["pointer"+b];return null},getLocalPosition:function(a,c,d){"undefined"==typeof d&&(d=new b.Point);var e=a.worldTransform,f=1/(e.a*e.d+e.b*-e.c);return d.setTo(e.d*f*c.x+-e.b*f*c.y+(e.ty*e.b-e.tx*e.d)*f,e.a*f*c.y+-e.c*f*c.x+(-e.ty*e.a+e.tx*e.c)*f)},hitTest:function(a,c,d){if(!a.worldVisible)return!1;if(this.getLocalPosition(a,c,this._localPoint),d.copyFrom(this._localPoint),a.hitArea&&a.hitArea.contains)return a.hitArea.contains(this._localPoint.x,this._localPoint.y)?!0:!1;if(a instanceof b.TileSprite){var e=a.width,f=a.height,g=-e*a.anchor.x;if(this._localPoint.x>g&&this._localPoint.xh&&this._localPoint.yg&&this._localPoint.xh&&this._localPoint.yi;i++)if(this.hitTest(a.children[i],c,d))return!0;return!1}},b.Input.prototype.constructor=b.Input,Object.defineProperty(b.Input.prototype,"x",{get:function(){return this._x},set:function(a){this._x=Math.floor(a)}}),Object.defineProperty(b.Input.prototype,"y",{get:function(){return this._y},set:function(a){this._y=Math.floor(a)}}),Object.defineProperty(b.Input.prototype,"pollLocked",{get:function(){return this.pollRate>0&&this._pollCounter=a;a++)this["pointer"+a]&&this["pointer"+a].active&&this.currentPointers++;return this.currentPointers}}),Object.defineProperty(b.Input.prototype,"worldX",{get:function(){return this.game.camera.view.x+this.x}}),Object.defineProperty(b.Input.prototype,"worldY",{get:function(){return this.game.camera.view.y+this.y}}),b.Key=function(a,c){this.game=a,this.enabled=!0,this.event=null,this.isDown=!1,this.isUp=!0,this.altKey=!1,this.ctrlKey=!1,this.shiftKey=!1,this.timeDown=0,this.duration=0,this.timeUp=-2500,this.repeats=0,this.keyCode=c,this.onDown=new b.Signal,this.onHoldCallback=null,this.onHoldContext=null,this.onUp=new b.Signal},b.Key.prototype={update:function(){this.enabled&&this.isDown&&(this.duration=this.game.time.now-this.timeDown,this.repeats++,this.onHoldCallback&&this.onHoldCallback.call(this.onHoldContext,this))},processKeyDown:function(a){this.enabled&&(this.event=a,this.isDown||(this.altKey=a.altKey,this.ctrlKey=a.ctrlKey,this.shiftKey=a.shiftKey,this.isDown=!0,this.isUp=!1,this.timeDown=this.game.time.now,this.duration=0,this.repeats=0,this.onDown.dispatch(this)))},processKeyUp:function(a){this.enabled&&(this.event=a,this.isUp||(this.isDown=!1,this.isUp=!0,this.timeUp=this.game.time.now,this.duration=this.game.time.now-this.timeDown,this.onUp.dispatch(this)))},reset:function(a){"undefined"==typeof a&&(a=!0),this.isDown=!1,this.isUp=!0,this.timeUp=this.game.time.now,this.duration=this.game.time.now-this.timeDown,this.enabled=!0,a&&(this.onDown.removeAll(),this.onUp.removeAll(),this.onHoldCallback=null,this.onHoldContext=null)},justPressed:function(a){return"undefined"==typeof a&&(a=2500),this.isDown&&this.duration=this.game.input.holdRate&&((this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&this.game.input.onHold.dispatch(this),this._holdSent=!0),this.game.input.recordPointerHistory&&this.game.time.now>=this._nextDrop&&(this._nextDrop=this.game.time.now+this.game.input.recordRate,this._history.push({x:this.position.x,y:this.position.y}),this._history.length>this.game.input.recordLimit&&this._history.shift()))},move:function(a,c){if(!this.game.input.pollLocked){if("undefined"==typeof c&&(c=!1),"undefined"!=typeof a.button&&(this.button=a.button),this.clientX=a.clientX,this.clientY=a.clientY,this.pageX=a.pageX,this.pageY=a.pageY,this.screenX=a.screenX,this.screenY=a.screenY,this.x=(this.pageX-this.game.stage.offset.x)*this.game.input.scale.x,this.y=(this.pageY-this.game.stage.offset.y)*this.game.input.scale.y,this.position.setTo(this.x,this.y),this.circle.x=this.x,this.circle.y=this.y,(this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.activePointer=this,this.game.input.x=this.x,this.game.input.y=this.y,this.game.input.position.setTo(this.game.input.x,this.game.input.y),this.game.input.circle.x=this.game.input.x,this.game.input.circle.y=this.game.input.y),this.game.paused)return this;if(this.game.input.moveCallback&&this.game.input.moveCallback.call(this.game.input.moveCallbackContext,this,this.x,this.y),null!==this.targetObject&&this.targetObject.isDragged===!0)return this.targetObject.update(this)===!1&&(this.targetObject=null),this;if(this._highestRenderOrderID=Number.MAX_SAFE_INTEGER,this._highestRenderObject=null,this._highestInputPriorityID=-1,this.game.input.interactiveItems.total>0){var d=this.game.input.interactiveItems.next;do d.validForInput(this._highestInputPriorityID,this._highestRenderOrderID)&&(!c&&d.checkPointerOver(this)||c&&d.checkPointerDown(this))&&(this._highestRenderOrderID=d.sprite._cache[3],this._highestInputPriorityID=d.priorityID,this._highestRenderObject=d),d=d.next;while(null!=d)}return null===this._highestRenderObject?this.targetObject&&(this.targetObject._pointerOutHandler(this),this.targetObject=null):null===this.targetObject?(this.targetObject=this._highestRenderObject,this._highestRenderObject._pointerOverHandler(this)):this.targetObject===this._highestRenderObject?this._highestRenderObject.update(this)===!1&&(this.targetObject=null):(this.targetObject._pointerOutHandler(this),this.targetObject=this._highestRenderObject,this.targetObject._pointerOverHandler(this)),this}},leave:function(a){this.withinGame=!1,this.move(a,!1)},stop:function(a){if(this._stateReset)return void a.preventDefault();if(this.timeUp=this.game.time.now,(this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.onUp.dispatch(this,a),this.duration>=0&&this.duration<=this.game.input.tapRate&&(this.timeUp-this.previousTapTime0&&(this.active=!1),this.withinGame=!1,this.isDown=!1,this.isUp=!0,this.positionUp.setTo(this.x,this.y),this.isMouse===!1&&this.game.input.currentPointers--,this.game.input.interactiveItems.total>0){var c=this.game.input.interactiveItems.next;do c&&c._releasedHandler(this),c=c.next;while(null!=c)}return this.targetObject&&this.targetObject._releasedHandler(this),this.targetObject=null,this},justPressed:function(a){return a=a||this.game.input.justPressedRate,this.isDown===!0&&this.timeDown+a>this.game.time.now},justReleased:function(a){return a=a||this.game.input.justReleasedRate,this.isUp===!0&&this.timeUp+a>this.game.time.now},reset:function(){this.isMouse===!1&&(this.active=!1),this.identifier=null,this.isDown=!1,this.isUp=!0,this.totalTouches=0,this._holdSent=!1,this._history.length=0,this._stateReset=!0,this.targetObject&&this.targetObject._releasedHandler(this),this.targetObject=null}},b.Pointer.prototype.constructor=b.Pointer,Object.defineProperty(b.Pointer.prototype,"duration",{get:function(){return this.isUp?-1:this.game.time.now-this.timeDown}}),Object.defineProperty(b.Pointer.prototype,"worldX",{get:function(){return this.game.world.camera.x+this.x}}),Object.defineProperty(b.Pointer.prototype,"worldY",{get:function(){return this.game.world.camera.y+this.y}}),b.Touch=function(a){this.game=a,this.disabled=!1,this.callbackContext=this.game,this.touchStartCallback=null,this.touchMoveCallback=null,this.touchEndCallback=null,this.touchEnterCallback=null,this.touchLeaveCallback=null,this.touchCancelCallback=null,this.preventDefault=!0,this.event=null,this._onTouchStart=null,this._onTouchMove=null,this._onTouchEnd=null,this._onTouchEnter=null,this._onTouchLeave=null,this._onTouchCancel=null,this._onTouchMove=null},b.Touch.prototype={start:function(){if(null===this._onTouchStart){var a=this;this.game.device.touch&&(this._onTouchStart=function(b){return a.onTouchStart(b)},this._onTouchMove=function(b){return a.onTouchMove(b)},this._onTouchEnd=function(b){return a.onTouchEnd(b)},this._onTouchEnter=function(b){return a.onTouchEnter(b)},this._onTouchLeave=function(b){return a.onTouchLeave(b)},this._onTouchCancel=function(b){return a.onTouchCancel(b)},this.game.canvas.addEventListener("touchstart",this._onTouchStart,!1),this.game.canvas.addEventListener("touchmove",this._onTouchMove,!1),this.game.canvas.addEventListener("touchend",this._onTouchEnd,!1),this.game.canvas.addEventListener("touchenter",this._onTouchEnter,!1),this.game.canvas.addEventListener("touchleave",this._onTouchLeave,!1),this.game.canvas.addEventListener("touchcancel",this._onTouchCancel,!1))}},consumeDocumentTouches:function(){this._documentTouchMove=function(a){a.preventDefault()},document.addEventListener("touchmove",this._documentTouchMove,!1)},onTouchStart:function(a){if(this.event=a,this.touchStartCallback&&this.touchStartCallback.call(this.callbackContext,a),!this.game.input.disabled&&!this.disabled){this.preventDefault&&a.preventDefault();for(var b=0;b0&&e>this.deadZone||0>e&&e<-this.deadZone?{axis:d,value:e}:{axis:d,value:0})}this._prevTimestamp=this._rawPad.timestamp}},connect:function(a){var b=!this._connected;this._index=a.index,this._connected=!0,this._rawPad=a,this._rawButtons=a.buttons,this._axes=a.axes,b&&this._padParent.onConnectCallback&&this._padParent.onConnectCallback.call(this._padParent.callbackContext,this._index),b&&this.onConnectCallback&&this.onConnectCallback.call(this.callbackContext)},disconnect:function(){var a=this._connected;this._connected=!1,this._rawPad=void 0,this._rawButtons=[],this._buttons=[];var b=this._index;this._index=null,a&&this._padParent.onDisconnectCallback&&this._padParent.onDisconnectCallback.call(this._padParent.callbackContext,b),a&&this.onDisconnectCallback&&this.onDisconnectCallback.call(this.callbackContext)},processAxisChange:function(a){this.game.input.disabled||this.game.input.gamepad.disabled||this._axes[a.axis]!==a.value&&(this._axes[a.axis]=a.value,this._padParent.onAxisCallback&&this._padParent.onAxisCallback.call(this._padParent.callbackContext,a,this._index),this.onAxisCallback&&this.onAxisCallback.call(this.callbackContext,a))},processButtonDown:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onDownCallback&&this._padParent.onDownCallback.call(this._padParent.callbackContext,a,b,this._index),this.onDownCallback&&this.onDownCallback.call(this.callbackContext,a,b),this._buttons[a]&&this._buttons[a].isDown?this._buttons[a].duration=this.game.time.now-this._buttons[a].timeDown:this._buttons[a]?(this._buttons[a].isDown=!0,this._buttons[a].timeDown=this.game.time.now,this._buttons[a].duration=0,this._buttons[a].value=b):this._buttons[a]={isDown:!0,timeDown:this.game.time.now,timeUp:0,duration:0,value:b},this._hotkeys[a]&&this._hotkeys[a].processButtonDown(b))},processButtonUp:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onUpCallback&&this._padParent.onUpCallback.call(this._padParent.callbackContext,a,b,this._index),this.onUpCallback&&this.onUpCallback.call(this.callbackContext,a,b),this._hotkeys[a]&&this._hotkeys[a].processButtonUp(b),this._buttons[a]?(this._buttons[a].isDown=!1,this._buttons[a].timeUp=this.game.time.now,this._buttons[a].value=b):this._buttons[a]={isDown:!1,timeDown:this.game.time.now,timeUp:this.game.time.now,duration:0,value:b})},processButtonFloat:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onFloatCallback&&this._padParent.onFloatCallback.call(this._padParent.callbackContext,a,b,this._index),this.onFloatCallback&&this.onFloatCallback.call(this.callbackContext,a,b),this._buttons[a]?this._buttons[a].value=b:this._buttons[a]={value:b},this._hotkeys[a]&&this._hotkeys[a].processButtonFloat(b))},axis:function(a){return this._axes[a]?this._axes[a]:!1},isDown:function(a){return this._buttons[a]?this._buttons[a].isDown:!1},justReleased:function(a,b){return"undefined"==typeof b&&(b=250),this._buttons[a]&&this._buttons[a].isDown===!1&&this.game.time.now-this._buttons[a].timeUpd;d++)this._pointerData[d]={id:d,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1};this.snapOffset=new b.Point,this.enabled=!0,this._wasEnabled=!0,this.sprite.events&&null===this.sprite.events.onInputOver&&(this.sprite.events.onInputOver=new b.Signal,this.sprite.events.onInputOut=new b.Signal,this.sprite.events.onInputDown=new b.Signal,this.sprite.events.onInputUp=new b.Signal,this.sprite.events.onDragStart=new b.Signal,this.sprite.events.onDragStop=new b.Signal)}return this.sprite.events.onAddedToGroup.add(this.addedToGroup,this),this.sprite.events.onRemovedFromGroup.add(this.removedFromGroup,this),this.sprite},addedToGroup:function(){this._wasEnabled&&!this.enabled&&this.start()},removedFromGroup:function(){this.enabled?(this._wasEnabled=!0,this.stop()):this._wasEnabled=!1},reset:function(){this.enabled=!1;for(var a=0;10>a;a++)this._pointerData[a]={id:a,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1}},stop:function(){this.enabled!==!1&&(this.enabled=!1,this.game.input.interactiveItems.remove(this))},destroy:function(){this.enabled&&(this._setHandCursor&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1),this.enabled=!1,this.game.input.interactiveItems.remove(this),this._pointerData.length=0,this.boundsRect=null,this.boundsSprite=null,this.sprite=null)},validForInput:function(a,b){return 0===this.sprite.scale.x||0===this.sprite.scale.y?!1:this.pixelPerfectClick||this.pixelPerfectOver?!0:this.priorityID>a||this.priorityID===a&&this.sprite._cache[3]b;b++)if(this._pointerData[b].isOver)return!0}return!1},pointerOut:function(a){if(this.enabled){if("undefined"!=typeof a)return this._pointerData[a].isOut;for(var b=0;10>b;b++)if(this._pointerData[b].isOut)return!0}return!1},pointerTimeOver:function(a){return a=a||0,this._pointerData[a].timeOver},pointerTimeOut:function(a){return a=a||0,this._pointerData[a].timeOut},pointerDragged:function(a){return a=a||0,this._pointerData[a].isDragged},checkPointerDown:function(a){return this.enabled&&this.sprite&&this.sprite.parent&&this.sprite.visible&&this.sprite.parent.visible&&this.game.input.hitTest(this.sprite,a,this._tempPoint)?this.pixelPerfectClick?this.checkPixel(this._tempPoint.x,this._tempPoint.y):!0:!1},checkPointerOver:function(a){return this.enabled&&this.sprite&&this.sprite.parent&&this.sprite.visible&&this.sprite.parent.visible&&this.game.input.hitTest(this.sprite,a,this._tempPoint)?this.pixelPerfectOver?this.checkPixel(this._tempPoint.x,this._tempPoint.y):!0:!1},checkPixel:function(a,b,c){if(this.sprite.texture.baseTexture.source){if(this.game.input.hitContext.clearRect(0,0,1,1),null===a&&null===b){this.game.input.getLocalPosition(this.sprite,c,this._tempPoint);var a=this._tempPoint.x,b=this._tempPoint.y}0!==this.sprite.anchor.x&&(a-=-this.sprite.texture.frame.width*this.sprite.anchor.x),0!==this.sprite.anchor.y&&(b-=-this.sprite.texture.frame.height*this.sprite.anchor.y),a+=this.sprite.texture.frame.x,b+=this.sprite.texture.frame.y,this.game.input.hitContext.drawImage(this.sprite.texture.baseTexture.source,a,b,1,1,0,0,1,1);var d=this.game.input.hitContext.getImageData(0,0,1,1);if(d.data[3]>=this.pixelPerfectAlpha)return!0}return!1},update:function(a){return null!==this.sprite&&void 0!==this.sprite.parent?this.enabled&&this.sprite.visible&&this.sprite.parent.visible?this.draggable&&this._draggedPointerID==a.id?this.updateDrag(a):this._pointerData[a.id].isOver===!0?this.checkPointerOver(a)?(this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,!0):(this._pointerOutHandler(a),!1):void 0:(this._pointerOutHandler(a),!1):void 0},_pointerOverHandler:function(a){null!==this.sprite&&this._pointerData[a.id].isOver===!1&&(this._pointerData[a.id].isOver=!0,this._pointerData[a.id].isOut=!1,this._pointerData[a.id].timeOver=this.game.time.now,this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.canvas.style.cursor="pointer",this._setHandCursor=!1),this.sprite.events.onInputOver.dispatch(this.sprite,a))},_pointerOutHandler:function(a){null!==this.sprite&&(this._pointerData[a.id].isOver=!1,this._pointerData[a.id].isOut=!0,this._pointerData[a.id].timeOut=this.game.time.now,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1),this.sprite&&this.sprite.events&&this.sprite.events.onInputOut.dispatch(this.sprite,a))},_touchedHandler:function(a){if(null!==this.sprite){if(this._pointerData[a.id].isDown===!1&&this._pointerData[a.id].isOver===!0){if(this.pixelPerfectClick&&!this.checkPixel(null,null,a))return;this._pointerData[a.id].isDown=!0,this._pointerData[a.id].isUp=!1,this._pointerData[a.id].timeDown=this.game.time.now,this.sprite.events.onInputDown.dispatch(this.sprite,a),this.draggable&&this.isDragged===!1&&this.startDrag(a),this.bringToTop&&this.sprite.bringToTop()}return this.consumePointerEvent}},_releasedHandler:function(a){null!==this.sprite&&this._pointerData[a.id].isDown&&a.isUp&&(this._pointerData[a.id].isDown=!1,this._pointerData[a.id].isUp=!0,this._pointerData[a.id].timeUp=this.game.time.now,this._pointerData[a.id].downDuration=this._pointerData[a.id].timeUp-this._pointerData[a.id].timeDown,this.checkPointerOver(a)?this.sprite.events.onInputUp.dispatch(this.sprite,a,!0):(this.sprite.events.onInputUp.dispatch(this.sprite,a,!1),this.useHandCursor&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1)),this.draggable&&this.isDragged&&this._draggedPointerID==a.id&&this.stopDrag(a))},updateDrag:function(a){return a.isUp?(this.stopDrag(a),!1):(this.sprite.fixedToCamera?(this.allowHorizontalDrag&&(this.sprite.cameraOffset.x=a.x+this._dragPoint.x+this.dragOffset.x),this.allowVerticalDrag&&(this.sprite.cameraOffset.y=a.y+this._dragPoint.y+this.dragOffset.y),this.boundsRect&&this.checkBoundsRect(),this.boundsSprite&&this.checkBoundsSprite(),this.snapOnDrag&&(this.sprite.cameraOffset.x=Math.round((this.sprite.cameraOffset.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.cameraOffset.y=Math.round((this.sprite.cameraOffset.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)):(this.allowHorizontalDrag&&(this.sprite.x=a.x+this._dragPoint.x+this.dragOffset.x),this.allowVerticalDrag&&(this.sprite.y=a.y+this._dragPoint.y+this.dragOffset.y),this.boundsRect&&this.checkBoundsRect(),this.boundsSprite&&this.checkBoundsSprite(),this.snapOnDrag&&(this.sprite.x=Math.round((this.sprite.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.y=Math.round((this.sprite.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)),!0)},justOver:function(a,b){return a=a||0,b=b||500,this._pointerData[a].isOver&&this.overDuration(a)a;a++)this._pointerData[a].isDragged=!1;this.draggable=!1,this.isDragged=!1,this._draggedPointerID=-1},startDrag:function(a){if(this.isDragged=!0,this._draggedPointerID=a.id,this._pointerData[a.id].isDragged=!0,this.sprite.fixedToCamera)this.dragFromCenter?(this.sprite.centerOn(a.x,a.y),this._dragPoint.setTo(this.sprite.cameraOffset.x-a.x,this.sprite.cameraOffset.y-a.y)):this._dragPoint.setTo(this.sprite.cameraOffset.x-a.x,this.sprite.cameraOffset.y-a.y);else if(this.dragFromCenter){var b=this.sprite.getBounds();this.sprite.x=a.x+(this.sprite.x-b.centerX),this.sprite.y=a.y+(this.sprite.y-b.centerY),this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y)}else this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y);this.updateDrag(a),this.bringToTop&&this.sprite.bringToTop(),this.sprite.events.onDragStart.dispatch(this.sprite,a)},stopDrag:function(a){this.isDragged=!1,this._draggedPointerID=-1,this._pointerData[a.id].isDragged=!1,this.snapOnRelease&&(this.sprite.fixedToCamera?(this.sprite.cameraOffset.x=Math.round((this.sprite.cameraOffset.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.cameraOffset.y=Math.round((this.sprite.cameraOffset.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY):(this.sprite.x=Math.round((this.sprite.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.y=Math.round((this.sprite.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)),this.sprite.events.onDragStop.dispatch(this.sprite,a),this.checkPointerOver(a)===!1&&this._pointerOutHandler(a)},setDragLock:function(a,b){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!0),this.allowHorizontalDrag=a,this.allowVerticalDrag=b},enableSnap:function(a,b,c,d,e,f){"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=0),this.snapX=a,this.snapY=b,this.snapOffsetX=e,this.snapOffsetY=f,this.snapOnDrag=c,this.snapOnRelease=d},disableSnap:function(){this.snapOnDrag=!1,this.snapOnRelease=!1},checkBoundsRect:function(){this.sprite.fixedToCamera?(this.sprite.cameraOffset.xthis.boundsRect.right&&(this.sprite.cameraOffset.x=this.boundsRect.right-this.sprite.width),this.sprite.cameraOffset.ythis.boundsRect.bottom&&(this.sprite.cameraOffset.y=this.boundsRect.bottom-this.sprite.height)):(this.sprite.xthis.boundsRect.right&&(this.sprite.x=this.boundsRect.right-this.sprite.width),this.sprite.ythis.boundsRect.bottom&&(this.sprite.y=this.boundsRect.bottom-this.sprite.height))},checkBoundsSprite:function(){this.sprite.fixedToCamera&&this.boundsSprite.fixedToCamera?(this.sprite.cameraOffset.xthis.boundsSprite.camerOffset.x+this.boundsSprite.width&&(this.sprite.cameraOffset.x=this.boundsSprite.camerOffset.x+this.boundsSprite.width-this.sprite.width),this.sprite.cameraOffset.ythis.boundsSprite.camerOffset.y+this.boundsSprite.height&&(this.sprite.cameraOffset.y=this.boundsSprite.camerOffset.y+this.boundsSprite.height-this.sprite.height)):(this.sprite.xthis.boundsSprite.x+this.boundsSprite.width&&(this.sprite.x=this.boundsSprite.x+this.boundsSprite.width-this.sprite.width),this.sprite.ythis.boundsSprite.y+this.boundsSprite.height&&(this.sprite.y=this.boundsSprite.y+this.boundsSprite.height-this.sprite.height))}},b.InputHandler.prototype.constructor=b.InputHandler,b.Events=function(a){this.parent=a,this.onAddedToGroup=new b.Signal,this.onRemovedFromGroup=new b.Signal,this.onKilled=new b.Signal,this.onRevived=new b.Signal,this.onOutOfBounds=new b.Signal,this.onEnterBounds=new b.Signal,this.onInputOver=null,this.onInputOut=null,this.onInputDown=null,this.onInputUp=null,this.onDragStart=null,this.onDragStop=null,this.onAnimationStart=null,this.onAnimationComplete=null,this.onAnimationLoop=null},b.Events.prototype={destroy:function(){this.parent=null,this.onAddedToGroup.dispose(),this.onRemovedFromGroup.dispose(),this.onKilled.dispose(),this.onRevived.dispose(),this.onOutOfBounds.dispose(),this.onInputOver&&(this.onInputOver.dispose(),this.onInputOut.dispose(),this.onInputDown.dispose(),this.onInputUp.dispose(),this.onDragStart.dispose(),this.onDragStop.dispose()),this.onAnimationStart&&(this.onAnimationStart.dispose(),this.onAnimationComplete.dispose(),this.onAnimationLoop.dispose())}},b.Events.prototype.constructor=b.Events,b.GameObjectFactory=function(a){this.game=a,this.world=this.game.world},b.GameObjectFactory.prototype={existing:function(a){return this.world.add(a)},image:function(a,c,d,e,f){return"undefined"==typeof f&&(f=this.world),f.add(new b.Image(this.game,a,c,d,e))},sprite:function(a,b,c,d,e){return"undefined"==typeof e&&(e=this.world),e.create(a,b,c,d)},tween:function(a){return this.game.tweens.create(a)},group:function(a,c,d,e,f){return new b.Group(this.game,a,c,d,e,f)},physicsGroup:function(a,c,d,e){return new b.Group(this.game,c,d,e,!0,a)},spriteBatch:function(a,c,d){return"undefined"==typeof c&&(c="group"),"undefined"==typeof d&&(d=!1),new b.SpriteBatch(this.game,a,c,d)},audio:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},sound:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},tileSprite:function(a,c,d,e,f,g,h){return"undefined"==typeof h&&(h=this.world),h.add(new b.TileSprite(this.game,a,c,d,e,f,g))},text:function(a,c,d,e,f){return"undefined"==typeof f&&(f=this.world),f.add(new b.Text(this.game,a,c,d,e))},button:function(a,c,d,e,f,g,h,i,j,k){return"undefined"==typeof k&&(k=this.world),k.add(new b.Button(this.game,a,c,d,e,f,g,h,i,j))},graphics:function(a,c,d){return"undefined"==typeof d&&(d=this.world),d.add(new b.Graphics(this.game,a,c))},emitter:function(a,c,d){return this.game.particles.add(new b.Particles.Arcade.Emitter(this.game,a,c,d))},retroFont:function(a,c,d,e,f,g,h,i,j){return new b.RetroFont(this.game,a,c,d,e,f,g,h,i,j)},bitmapText:function(a,c,d,e,f,g){return"undefined"==typeof g&&(g=this.world),g.add(new b.BitmapText(this.game,a,c,d,e,f))},tilemap:function(a,c,d,e,f){return new b.Tilemap(this.game,a,c,d,e,f)},renderTexture:function(a,c,d,e){("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid()),"undefined"==typeof e&&(e=!1);var f=new b.RenderTexture(this.game,a,c,d);return e&&this.game.cache.addRenderTexture(d,f),f},bitmapData:function(a,c,d,e){"undefined"==typeof e&&(e=!1),("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid());var f=new b.BitmapData(this.game,d,a,c);return e&&this.game.cache.addBitmapData(d,f),f},filter:function(a){var c=Array.prototype.splice.call(arguments,1),a=new b.Filter[a](this.game);return a.init.apply(a,c),a}},b.GameObjectFactory.prototype.constructor=b.GameObjectFactory,b.GameObjectCreator=function(a){this.game=a,this.world=this.game.world},b.GameObjectCreator.prototype={image:function(a,c,d,e){return new b.Image(this.game,a,c,d,e)},sprite:function(a,c,d,e){return new b.Sprite(this.game,a,c,d,e)},tween:function(a){return new b.Tween(a,this.game)},group:function(a,c,d,e,f){return new b.Group(this.game,null,c,d,e,f)},spriteBatch:function(a,c,d){return"undefined"==typeof c&&(c="group"),"undefined"==typeof d&&(d=!1),new b.SpriteBatch(this.game,a,c,d)},audio:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},sound:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},tileSprite:function(a,c,d,e,f,g){return new b.TileSprite(this.game,a,c,d,e,f,g)},text:function(a,c,d,e){return new b.Text(this.game,a,c,d,e)},button:function(a,c,d,e,f,g,h,i,j){return new b.Button(this.game,a,c,d,e,f,g,h,i,j)},graphics:function(a,c){return new b.Graphics(this.game,a,c)},emitter:function(a,c,d){return new b.Particles.Arcade.Emitter(this.game,a,c,d)},retroFont:function(a,c,d,e,f,g,h,i,j){return new b.RetroFont(this.game,a,c,d,e,f,g,h,i,j)},bitmapText:function(a,c,d,e,f){return new b.BitmapText(this.game,a,c,d,e,f)},tilemap:function(a,c,d,e,f){return new b.Tilemap(this.game,a,c,d,e,f)},renderTexture:function(a,c,d,e){("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid()),"undefined"==typeof e&&(e=!1);var f=new b.RenderTexture(this.game,a,c,d);return e&&this.game.cache.addRenderTexture(d,f),f},bitmapData:function(a,c,d,e){"undefined"==typeof e&&(e=!1),("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid());var f=new b.BitmapData(this.game,d,a,c);return e&&this.game.cache.addBitmapData(d,f),f},filter:function(a){var c=Array.prototype.splice.call(arguments,1),a=new b.Filter[a](this.game);return a.init.apply(a,c),a}},b.GameObjectCreator.prototype.constructor=b.GameObjectCreator,b.BitmapData=function(a,c,d,e){"undefined"==typeof d&&(d=100),"undefined"==typeof e&&(e=100),this.game=a,this.key=c,this.width=d,this.height=e,this.canvas=b.Canvas.create(d,e,"",!0),this.context=this.canvas.getContext("2d"),this.ctx=this.context,this.imageData=this.context.getImageData(0,0,d,e),this.pixels=this.imageData.data.buffer?this.imageData.data.buffer:this.imageData.data,this.baseTexture=new PIXI.BaseTexture(this.canvas),this.texture=new PIXI.Texture(this.baseTexture),this.textureFrame=new b.Frame(0,0,0,d,e,"bitmapData",a.rnd.uuid()),this.type=b.BITMAPDATA,this.dirty=!1 -},b.BitmapData.prototype={add:function(a){if(Array.isArray(a))for(var b=0;b=0&&a<=this.width&&b>=0&&b<=this.height&&(this.pixels[b*this.width+a]=f<<24|e<<16|d<<8|c,this.context.putImageData(this.imageData,0,0),this.dirty=!0)},setPixel:function(a,b,c,d,e){this.setPixel32(a,b,c,d,e,255)},getPixel:function(a,b){return a>=0&&a<=this.width&&b>=0&&b<=this.height?this.data32[b*this.width+a]:void 0},getPixel32:function(a,b){return a>=0&&a<=this.width&&b>=0&&b<=this.height?this.data32[b*this.width+a]:void 0},getPixels:function(a){return this.context.getImageData(a.x,a.y,a.width,a.height)},copyPixels:function(a,b,c,d){"string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,b.x,b.y,b.width,b.height,c,d,b.width,b.height)},draw:function(a,b,c){"string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,0,0,a.width,a.height,b,c,a.width,a.height)},alphaMask:function(a,b){var c=this.context.globalCompositeOperation;"string"==typeof b&&(b=this.game.cache.getImage(b)),b&&this.context.drawImage(b,0,0),this.context.globalCompositeOperation="source-atop","string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,0,0),this.context.globalCompositeOperation=c},render:function(){this.game.renderType===b.WEBGL&&this.dirty&&(PIXI.updateWebGLTexture(this.baseTexture,this.game.renderer.gl),this.dirty=!1)}},b.BitmapData.prototype.constructor=b.BitmapData,b.Sprite=function(a,c,d,e,f){c=c||0,d=d||0,e=e||null,f=f||null,this.game=a,this.name="",this.type=b.SPRITE,this.z=0,this.events=new b.Events(this),this.animations=new b.AnimationManager(this),this.key=e,this._frame=0,this._frameName="",PIXI.Sprite.call(this,PIXI.TextureCache.__default),this.loadTexture(e,f),this.position.set(c,d),this.world=new b.Point(c,d),this.autoCull=!1,this.input=null,this.body=null,this.health=1,this.lifespan=0,this.checkWorldBounds=!1,this.outOfBoundsKill=!1,this.debug=!1,this.cameraOffset=new b.Point,this._cache=[0,0,0,0,1,0,1,0],this._bounds=new b.Rectangle},b.Sprite.prototype=Object.create(PIXI.Sprite.prototype),b.Sprite.prototype.constructor=b.Sprite,b.Sprite.prototype.preUpdate=function(){if(1===this._cache[4]&&this.exists)return this.world.setTo(this.parent.position.x+this.position.x,this.parent.position.y+this.position.y),this.worldTransform.tx=this.world.x,this.worldTransform.ty=this.world.y,this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,this.body&&this.body.preUpdate(),this._cache[4]=0,!1;if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this._cache[3]=-1,!1;if(this.lifespan>0&&(this.lifespan-=this.game.time.elapsed,this.lifespan<=0))return this.kill(),!1;if((this.autoCull||this.checkWorldBounds)&&this._bounds.copyFrom(this.getBounds()),this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this._bounds)),this.checkWorldBounds)if(1===this._cache[5]&&this.game.world.bounds.intersects(this._bounds))this._cache[5]=0,this.events.onEnterBounds.dispatch(this);else if(0===this._cache[5]&&!this.game.world.bounds.intersects(this._bounds)&&(this._cache[5]=1,this.events.onOutOfBounds.dispatch(this),this.outOfBoundsKill))return this.kill(),!1;this.world.setTo(this.game.camera.x+this.worldTransform.tx,this.game.camera.y+this.worldTransform.ty),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++),this.animations.update(),this.body&&this.body.preUpdate();for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Sprite.prototype.update=function(){},b.Sprite.prototype.postUpdate=function(){this.key instanceof b.BitmapData&&this.key.render(),this.exists&&this.body&&this.body.postUpdate(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,c=this.children.length;c>a;a++)this.children[a].postUpdate()},b.Sprite.prototype.loadTexture=function(a,c){return c=c||0,a instanceof b.RenderTexture?(this.key=a.key,void this.setTexture(a)):a instanceof b.BitmapData?(this.key=a,void this.setTexture(a.texture)):a instanceof PIXI.Texture?(this.key=a,void this.setTexture(a)):null===a||"undefined"==typeof a?(this.key="__default",void this.setTexture(PIXI.TextureCache[this.key])):"string"!=typeof a||this.game.cache.checkImageKey(a)?this.game.cache.isSpriteSheet(a)?(this.key=a,this.animations.loadFrameData(this.game.cache.getFrameData(a)),"string"==typeof c?this.frameName=c:this.frame=c,void 0):(this.key=a,void this.setTexture(PIXI.TextureCache[a])):(this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]))},b.Sprite.prototype.crop=function(a){if("undefined"==typeof a||null===a)this.texture.hasOwnProperty("sourceWidth")&&this.texture.setFrame(new b.Rectangle(0,0,this.texture.sourceWidth,this.texture.sourceHeight));else if(this.texture instanceof PIXI.Texture){var c={};b.Utils.extend(!0,c,this.texture),c.sourceWidth=c.width,c.sourceHeight=c.height,c.frame=a,c.width=a.width,c.height=a.height,this.texture=c,this.texture.updateFrame=!0,PIXI.Texture.frameUpdates.push(this.texture)}else this.texture.setFrame(a)},b.Sprite.prototype.revive=function(a){return"undefined"==typeof a&&(a=1),this.alive=!0,this.exists=!0,this.visible=!0,this.health=a,this.events&&this.events.onRevived.dispatch(this),this},b.Sprite.prototype.kill=function(){return this.alive=!1,this.exists=!1,this.visible=!1,this.events&&this.events.onKilled.dispatch(this),this},b.Sprite.prototype.destroy=function(a){if(null!==this.game){"undefined"==typeof a&&(a=!0),this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.input&&this.input.destroy(),this.animations&&this.animations.destroy(),this.body&&this.body.destroy(),this.events&&this.events.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.alive=!1,this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null}},b.Sprite.prototype.damage=function(a){return this.alive&&(this.health-=a,this.health<=0&&this.kill()),this},b.Sprite.prototype.reset=function(a,b,c){return"undefined"==typeof c&&(c=1),this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.health=c,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this},b.Sprite.prototype.bringToTop=function(){return this.parent&&this.parent.bringToTop(this),this},b.Sprite.prototype.play=function(a,b,c,d){return this.animations?this.animations.play(a,b,c,d):void 0},b.Sprite.prototype.overlap=function(a){return b.Rectangle.intersects(this.getBounds(),a.getBounds())},Object.defineProperty(b.Sprite.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.Sprite.prototype,"deltaX",{get:function(){return this.world.x-this._cache[0]}}),Object.defineProperty(b.Sprite.prototype,"deltaY",{get:function(){return this.world.y-this._cache[1]}}),Object.defineProperty(b.Sprite.prototype,"deltaZ",{get:function(){return this.rotation-this._cache[2]}}),Object.defineProperty(b.Sprite.prototype,"inWorld",{get:function(){return this.game.world.bounds.intersects(this.getBounds())}}),Object.defineProperty(b.Sprite.prototype,"inCamera",{get:function(){return this.game.world.camera.screenView.intersects(this.getBounds())}}),Object.defineProperty(b.Sprite.prototype,"frame",{get:function(){return this.animations.frame},set:function(a){this.animations.frame=a}}),Object.defineProperty(b.Sprite.prototype,"frameName",{get:function(){return this.animations.frameName},set:function(a){this.animations.frameName=a}}),Object.defineProperty(b.Sprite.prototype,"renderOrderID",{get:function(){return this._cache[3]}}),Object.defineProperty(b.Sprite.prototype,"inputEnabled",{get:function(){return this.input&&this.input.enabled},set:function(a){a?null===this.input?(this.input=new b.InputHandler(this),this.input.start()):this.input&&!this.input.enabled&&this.input.start():this.input&&this.input.enabled&&this.input.stop()}}),Object.defineProperty(b.Sprite.prototype,"exists",{get:function(){return!!this._cache[6]},set:function(a){a?(this._cache[6]=1,this.body&&this.body.type===b.Physics.P2JS&&this.body.addToWorld(),this.visible=!0):(this._cache[6]=0,this.body&&this.body.type===b.Physics.P2JS&&this.body.removeFromWorld(),this.visible=!1)}}),Object.defineProperty(b.Sprite.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),Object.defineProperty(b.Sprite.prototype,"smoothed",{get:function(){return!this.texture.baseTexture.scaleMode},set:function(a){a?this.texture&&(this.texture.baseTexture.scaleMode=0):this.texture&&(this.texture.baseTexture.scaleMode=1)}}),Object.defineProperty(b.Sprite.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.Sprite.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),b.Image=function(a,c,d,e,f){c=c||0,d=d||0,e=e||null,f=f||null,this.game=a,this.exists=!0,this.name="",this.type=b.IMAGE,this.z=0,this.events=new b.Events(this),this.key=e,this._frame=0,this._frameName="",PIXI.Sprite.call(this,PIXI.TextureCache.__default),this.loadTexture(e,f),this.position.set(c,d),this.world=new b.Point(c,d),this.autoCull=!1,this.input=null,this.cameraOffset=new b.Point,this._cache=[0,0,0,0,1,0,1,0]},b.Image.prototype=Object.create(PIXI.Sprite.prototype),b.Image.prototype.constructor=b.Image,b.Image.prototype.preUpdate=function(){if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this._cache[3]=-1,!1;this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this.getBounds())),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++);for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Image.prototype.update=function(){},b.Image.prototype.postUpdate=function(){this.key instanceof b.BitmapData&&this.key.render(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,c=this.children.length;c>a;a++)this.children[a].postUpdate()},b.Image.prototype.loadTexture=function(a,c){if(c=c||0,a instanceof b.RenderTexture)return this.key=a.key,void this.setTexture(a);if(a instanceof b.BitmapData)return this.key=a,void this.setTexture(a.texture);if(a instanceof PIXI.Texture)return this.key=a,void this.setTexture(a);if(null===a||"undefined"==typeof a)return this.key="__default",void this.setTexture(PIXI.TextureCache[this.key]);if("string"==typeof a&&!this.game.cache.checkImageKey(a))return this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]);if(this.game.cache.isSpriteSheet(a)){this.key=a;var d=this.game.cache.getFrameData(a);return"string"==typeof c?(this._frame=0,this._frameName=c,void this.setTexture(PIXI.TextureCache[d.getFrameByName(c).uuid])):(this._frame=c,this._frameName="",void this.setTexture(PIXI.TextureCache[d.getFrame(c).uuid]))}return this.key=a,void this.setTexture(PIXI.TextureCache[a])},b.Image.prototype.crop=function(a){if("undefined"==typeof a||null===a)this.texture.hasOwnProperty("sourceWidth")&&this.texture.setFrame(new b.Rectangle(0,0,this.texture.sourceWidth,this.texture.sourceHeight));else if(this.texture instanceof PIXI.Texture){var c={};b.Utils.extend(!0,c,this.texture),c.sourceWidth=c.width,c.sourceHeight=c.height,c.frame=a,c.width=a.width,c.height=a.height,this.texture=c,this.texture.updateFrame=!0,PIXI.Texture.frameUpdates.push(this.texture)}else this.texture.setFrame(a)},b.Image.prototype.revive=function(){return this.alive=!0,this.exists=!0,this.visible=!0,this.events&&this.events.onRevived.dispatch(this),this},b.Image.prototype.kill=function(){return this.alive=!1,this.exists=!1,this.visible=!1,this.events&&this.events.onKilled.dispatch(this),this},b.Image.prototype.destroy=function(a){if(null!==this.game){"undefined"==typeof a&&(a=!0),this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.events&&this.events.destroy(),this.input&&this.input.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.alive=!1,this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null}},b.Image.prototype.reset=function(a,b){return this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this},b.Image.prototype.bringToTop=function(){return this.parent&&this.parent.bringToTop(this),this},Object.defineProperty(b.Image.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.Image.prototype,"deltaX",{get:function(){return this.world.x-this._cache[0]}}),Object.defineProperty(b.Image.prototype,"deltaY",{get:function(){return this.world.y-this._cache[1]}}),Object.defineProperty(b.Image.prototype,"deltaZ",{get:function(){return this.rotation-this._cache[2]}}),Object.defineProperty(b.Image.prototype,"inWorld",{get:function(){return this.game.world.bounds.intersects(this.getBounds())}}),Object.defineProperty(b.Image.prototype,"inCamera",{get:function(){return this.game.world.camera.screenView.intersects(this.getBounds())}}),Object.defineProperty(b.Image.prototype,"frame",{get:function(){return this._frame},set:function(a){if(a!==this.frame&&this.game.cache.isSpriteSheet(this.key)){var b=this.game.cache.getFrameData(this.key);b&&aa;a++)this.children[a].preUpdate();return!0},b.TileSprite.prototype.update=function(){},b.TileSprite.prototype.postUpdate=function(){this.exists&&this.body&&this.body.postUpdate(),1===this._cache[7]&&(this.position.x=this.game.camera.view.x+this.cameraOffset.x,this.position.y=this.game.camera.view.y+this.cameraOffset.y);for(var a=0,b=this.children.length;b>a;a++)this.children[a].postUpdate()},b.TileSprite.prototype.autoScroll=function(a,b){this._scroll.set(a,b)},b.TileSprite.prototype.stopScroll=function(){this._scroll.set(0,0)},b.TileSprite.prototype.loadTexture=function(a,c){return c=c||0,a instanceof b.RenderTexture?(this.key=a.key,void this.setTexture(a)):a instanceof b.BitmapData?(this.key=a,void this.setTexture(a.texture)):a instanceof PIXI.Texture?(this.key=a,void this.setTexture(a)):null===a||"undefined"==typeof a?(this.key="__default",void this.setTexture(PIXI.TextureCache[this.key])):"string"!=typeof a||this.game.cache.checkImageKey(a)?this.game.cache.isSpriteSheet(a)?(this.key=a,this.animations.loadFrameData(this.game.cache.getFrameData(a)),"string"==typeof c?this.frameName=c:this.frame=c,void 0):(this.key=a,void this.setTexture(PIXI.TextureCache[a])):(this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]))},b.TileSprite.prototype.destroy=function(a){if(null!==this.game){"undefined"==typeof a&&(a=!0),this.filters&&(this.filters=null),this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.animations.destroy(),this.events.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null}},b.TileSprite.prototype.play=function(a,b,c,d){return this.animations.play(a,b,c,d)},b.TileSprite.prototype.reset=function(a,b){return this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.tilePosition.x=0,this.tilePosition.y=0,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this},Object.defineProperty(b.TileSprite.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.TileSprite.prototype,"frame",{get:function(){return this.animations.frame},set:function(a){a!==this.animations.frame&&(this.animations.frame=a)}}),Object.defineProperty(b.TileSprite.prototype,"frameName",{get:function(){return this.animations.frameName},set:function(a){a!==this.animations.frameName&&(this.animations.frameName=a)}}),Object.defineProperty(b.TileSprite.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),Object.defineProperty(b.TileSprite.prototype,"exists",{get:function(){return!!this._cache[6]},set:function(a){a?(this._cache[6]=1,this.body&&this.body.type===b.Physics.P2JS&&this.body.addToWorld(),this.visible=!0):(this._cache[6]=0,this.body&&this.body.type===b.Physics.P2JS&&(this.body.safeRemove=!0),this.visible=!1)}}),Object.defineProperty(b.TileSprite.prototype,"inputEnabled",{get:function(){return this.input&&this.input.enabled},set:function(a){a?null===this.input?(this.input=new b.InputHandler(this),this.input.start()):this.input&&!this.input.enabled&&this.input.start():this.input&&this.input.enabled&&this.input.stop()}}),Object.defineProperty(b.TileSprite.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.TileSprite.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),b.Text=function(a,c,d,e,f){c=c||0,d=d||0,e=e||" ",f=f||{},e=0===e.length?" ":e.toString(),this.game=a,this.exists=!0,this.name="",this.type=b.TEXT,this.z=0,this.world=new b.Point(c,d),this._text=e,this._font="",this._fontSize=32,this._fontWeight="normal",this._lineSpacing=0,this.events=new b.Events(this),this.input=null,this.cameraOffset=new b.Point,this.setStyle(f),PIXI.Text.call(this,e,this.style),this.position.set(c,d),this._cache=[0,0,0,0,1,0,1,0]},b.Text.prototype=Object.create(PIXI.Text.prototype),b.Text.prototype.constructor=b.Text,b.Text.prototype.preUpdate=function(){if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this.renderOrderID=-1,!1;this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this.getBounds())),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++);for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Text.prototype.update=function(){},b.Text.prototype.postUpdate=function(){1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,b=this.children.length;b>a;a++)this.children[a].postUpdate()},b.Text.prototype.destroy=function(a){if(null!==this.game){"undefined"==typeof a&&(a=!0),this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.texture.destroy(),this.canvas.parentNode?this.canvas.parentNode.removeChild(this.canvas):(this.canvas=null,this.context=null);var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null}},b.Text.prototype.setShadow=function(a,b,c,d){this.style.shadowOffsetX=a||0,this.style.shadowOffsetY=b||0,this.style.shadowColor=c||"rgba(0,0,0,0)",this.style.shadowBlur=d||0,this.dirty=!0},b.Text.prototype.setStyle=function(a){a=a||{},a.font=a.font||"bold 20pt Arial",a.fill=a.fill||"black",a.align=a.align||"left",a.stroke=a.stroke||"black",a.strokeThickness=a.strokeThickness||0,a.wordWrap=a.wordWrap||!1,a.wordWrapWidth=a.wordWrapWidth||100,a.shadowOffsetX=a.shadowOffsetX||0,a.shadowOffsetY=a.shadowOffsetY||0,a.shadowColor=a.shadowColor||"rgba(0,0,0,0)",a.shadowBlur=a.shadowBlur||0,this.style=a,this.dirty=!0},b.Text.prototype.updateText=function(){this.context.font=this.style.font;var a=this.text;this.style.wordWrap&&(a=this.runWordWrap(this.text));for(var b=a.split(/(?:\r\n|\r|\n)/),c=[],d=0,e=0;ee?(g>0&&(b+="\n"),b+=f[g]+" ",e=this.style.wordWrapWidth-h):(e-=i,b+=f[g]+" ")}d?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",b.RetroFont.TEXT_SET2=" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET3="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ",b.RetroFont.TEXT_SET4="ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789",b.RetroFont.TEXT_SET5="ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/() '!?-*:0123456789",b.RetroFont.TEXT_SET6="ABCDEFGHIJKLMNOPQRSTUVWXYZ!?:;0123456789\"(),-.' ",b.RetroFont.TEXT_SET7="AGMSY+:4BHNTZ!;5CIOU.?06DJPV,(17EKQW\")28FLRX-'39",b.RetroFont.TEXT_SET8="0123456789 .ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET9="ABCDEFGHIJKLMNOPQRSTUVWXYZ()-0123456789.:,'\"?!",b.RetroFont.TEXT_SET10="ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET11="ABCDEFGHIJKLMNOPQRSTUVWXYZ.,\"-+!?()':;0123456789",b.RetroFont.prototype.setFixedWidth=function(a,b){"undefined"==typeof b&&(b="left"),this.fixedWidth=a,this.align=b},b.RetroFont.prototype.setText=function(a,b,c,d,e,f){this.multiLine=b||!1,this.customSpacingX=c||0,this.customSpacingY=d||0,this.align=e||"left",this.autoUpperCase=f?!1:!0,a.length>0&&(this.text=a)},b.RetroFont.prototype.resize=function(a,b){if(this.width=a,this.height=b,this.frame.width=this.width,this.frame.height=this.height,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.renderer.type===PIXI.WEBGL_RENDERER){this.projection.x=this.width/2,this.projection.y=-this.height/2;var c=this.renderer.gl;c.bindTexture(c.TEXTURE_2D,this.baseTexture._glTextures[c.id]),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,this.width,this.height,0,c.RGBA,c.UNSIGNED_BYTE,null)}else this.textureBuffer.resize(this.width,this.height);PIXI.Texture.frameUpdates.push(this)},b.RetroFont.prototype.buildRetroFontText=function(){var a=0,c=0;if(this.multiLine){var d=this._text.split("\n");this.fixedWidth>0?this.resize(this.fixedWidth,d.length*(this.characterHeight+this.customSpacingY)-this.customSpacingY):this.resize(this.getLongestLine()*(this.characterWidth+this.customSpacingX),d.length*(this.characterHeight+this.customSpacingY)-this.customSpacingY),this.textureBuffer.clear();for(var e=0;ea&&(a=0),this.pasteLine(d[e],a,c,this.customSpacingX),c+=this.characterHeight+this.customSpacingY}}else{switch(this.fixedWidth>0?this.resize(this.fixedWidth,this.characterHeight):this.resize(this._text.length*(this.characterWidth+this.customSpacingX),this.characterHeight),this.textureBuffer.clear(),this.align){case b.RetroFont.ALIGN_LEFT:a=0;break;case b.RetroFont.ALIGN_RIGHT:a=this.width-this._text.length*(this.characterWidth+this.customSpacingX);break;case b.RetroFont.ALIGN_CENTER:a=this.width/2-this._text.length*(this.characterWidth+this.customSpacingX)/2,a+=this.customSpacingX/2}this.pasteLine(this._text,a,0,this.customSpacingX)}},b.RetroFont.prototype.pasteLine=function(a,c,d,e){for(var f=new b.Point,g=0;g=0&&(this.stamp.frame=this.grabData[a.charCodeAt(g)],f.set(c,d),this.render(this.stamp,f,!1),c+=this.characterWidth+e,c>this.width))break},b.RetroFont.prototype.getLongestLine=function(){var a=0;if(this._text.length>0)for(var b=this._text.split("\n"),c=0;ca&&(a=b[c].length);return a},b.RetroFont.prototype.removeUnsupportedCharacters=function(a){for(var b="",c=0;c=0||!a&&"\n"===d)&&(b=b.concat(d))}return b},Object.defineProperty(b.RetroFont.prototype,"text",{get:function(){return this._text},set:function(a){var b;b=this.autoUpperCase?a.toUpperCase():a,b!==this._text&&(this._text=b,this.removeUnsupportedCharacters(this.multiLine),this.buildRetroFontText())}}),b.Particle=function(a,c,d,e,f){b.Sprite.call(this,a,c,d,e,f),this.autoScale=!1,this.scaleData=null,this._s=0,this.autoAlpha=!1,this.alphaData=null,this._a=0},b.Particle.prototype=Object.create(b.Sprite.prototype),b.Particle.prototype.constructor=b.Particle,b.Particle.prototype.update=function(){this.autoScale&&(this._s--,this._s?this.scale.set(this.scaleData[this._s].x,this.scaleData[this._s].y):this.autoScale=!1),this.autoAlpha&&(this._a--,this._a?this.alpha=this.alphaData[this._a].v:this.autoAlpha=!1)},b.Particle.prototype.onEmit=function(){},b.Particle.prototype.setAlphaData=function(a){this.alphaData=a,this._a=a.length-1,this.alpha=this.alphaData[this._a].v,this.autoAlpha=!0},b.Particle.prototype.setScaleData=function(a){this.scaleData=a,this._s=a.length-1,this.scale.set(this.scaleData[this._s].x,this.scaleData[this._s].y),this.autoScale=!0},b.Particle.prototype.reset=function(a,b,c){return"undefined"==typeof c&&(c=1),this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.health=c,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this.alpha=1,this.scale.set(1),this.autoScale=!1,this.autoAlpha=!1,this},b.Canvas={create:function(a,b,c,d){if("undefined"==typeof d&&(d=!1),a=a||256,b=b||256,d)var e=document.createElement("canvas");else var e=document.createElement(navigator.isCocoonJS?"screencanvas":"canvas");return"string"==typeof c&&""!==c&&(e.id=c),e.width=a,e.height=b,e.style.display="block",e},getOffset:function(a,c){c=c||new b.Point;var d=a.getBoundingClientRect(),e=a.clientTop||document.body.clientTop||0,f=a.clientLeft||document.body.clientLeft||0,g=0,h=0;return"CSS1Compat"===document.compatMode?(g=window.pageYOffset||document.documentElement.scrollTop||a.scrollTop||0,h=window.pageXOffset||document.documentElement.scrollLeft||a.scrollLeft||0):(g=window.pageYOffset||document.body.scrollTop||a.scrollTop||0,h=window.pageXOffset||document.body.scrollLeft||a.scrollLeft||0),c.x=d.left+h-f,c.y=d.top+g-e,c},getAspectRatio:function(a){return a.width/a.height},setBackgroundColor:function(a,b){return b=b||"rgb(0,0,0)",a.style.backgroundColor=b,a},setTouchAction:function(a,b){return b=b||"none",a.style.msTouchAction=b,a.style["ms-touch-action"]=b,a.style["touch-action"]=b,a},setUserSelect:function(a,b){return b=b||"none",a.style["-webkit-touch-callout"]=b,a.style["-webkit-user-select"]=b,a.style["-khtml-user-select"]=b,a.style["-moz-user-select"]=b,a.style["-ms-user-select"]=b,a.style["user-select"]=b,a.style["-webkit-tap-highlight-color"]="rgba(0, 0, 0, 0)",a},addToDOM:function(a,b,c){var d;return"undefined"==typeof c&&(c=!0),b&&("string"==typeof b?d=document.getElementById(b):"object"==typeof b&&1===b.nodeType&&(d=b)),d||(d=document.body),c&&d.style&&(d.style.overflow="hidden"),d.appendChild(a),a},setTransform:function(a,b,c,d,e,f,g){return a.setTransform(d,f,g,e,b,c),a},setSmoothingEnabled:function(a,b){return a.imageSmoothingEnabled=b,a.mozImageSmoothingEnabled=b,a.oImageSmoothingEnabled=b,a.webkitImageSmoothingEnabled=b,a.msImageSmoothingEnabled=b,a},setImageRenderingCrisp:function(a){return a.style["image-rendering"]="optimizeSpeed",a.style["image-rendering"]="crisp-edges",a.style["image-rendering"]="-moz-crisp-edges",a.style["image-rendering"]="-webkit-optimize-contrast",a.style["image-rendering"]="optimize-contrast",a.style.msInterpolationMode="nearest-neighbor",a},setImageRenderingBicubic:function(a){return a.style["image-rendering"]="auto",a.style.msInterpolationMode="bicubic",a}},b.Device=function(a){this.game=a,this.desktop=!1,this.iOS=!1,this.cocoonJS=!1,this.ejecta=!1,this.crosswalk=!1,this.android=!1,this.chromeOS=!1,this.linux=!1,this.macOS=!1,this.windows=!1,this.windowsPhone=!1,this.canvas=!1,this.file=!1,this.fileSystem=!1,this.localStorage=!1,this.webGL=!1,this.worker=!1,this.touch=!1,this.mspointer=!1,this.css3D=!1,this.pointerLock=!1,this.typedArray=!1,this.vibration=!1,this.getUserMedia=!1,this.quirksMode=!1,this.arora=!1,this.chrome=!1,this.epiphany=!1,this.firefox=!1,this.ie=!1,this.ieVersion=0,this.trident=!1,this.tridentVersion=0,this.mobileSafari=!1,this.midori=!1,this.opera=!1,this.safari=!1,this.webApp=!1,this.silk=!1,this.audioData=!1,this.webAudio=!1,this.ogg=!1,this.opus=!1,this.mp3=!1,this.wav=!1,this.m4a=!1,this.webm=!1,this.iPhone=!1,this.iPhone4=!1,this.iPad=!1,this.pixelRatio=0,this.littleEndian=!1,this.fullscreen=!1,this.requestFullscreen="",this.cancelFullscreen="",this.fullscreenKeyboard=!1,this._checkAudio(),this._checkBrowser(),this._checkCSS3D(),this._checkDevice(),this._checkFeatures(),this._checkOS()},b.Device.prototype={_checkOS:function(){var a=navigator.userAgent;/Android/.test(a)?this.android=!0:/CrOS/.test(a)?this.chromeOS=!0:/iP[ao]d|iPhone/i.test(a)?this.iOS=!0:/Linux/.test(a)?this.linux=!0:/Mac OS/.test(a)?this.macOS=!0:/Windows/.test(a)&&(this.windows=!0,/Windows Phone/i.test(a)&&(this.windowsPhone=!0)),(this.windows||this.macOS||this.linux&&this.silk===!1)&&(this.desktop=!0),(this.windowsPhone||/Windows NT/i.test(a)&&/Touch/i.test(a))&&(this.desktop=!1)},_checkFeatures:function(){this.canvas=!!window.CanvasRenderingContext2D||this.cocoonJS;try{this.localStorage=!!localStorage.getItem}catch(a){this.localStorage=!1}this.file=!!(window.File&&window.FileReader&&window.FileList&&window.Blob),this.fileSystem=!!window.requestFileSystem,this.webGL=function(){try{var a=document.createElement("canvas");return!!window.WebGLRenderingContext&&(a.getContext("webgl")||a.getContext("experimental-webgl"))}catch(b){return!1}}(),this.webGL=null===this.webGL||this.webGL===!1?!1:!0,this.worker=!!window.Worker,("ontouchstart"in document.documentElement||window.navigator.maxTouchPoints&&window.navigator.maxTouchPoints>1)&&(this.touch=!0),(window.navigator.msPointerEnabled||window.navigator.pointerEnabled)&&(this.mspointer=!0),this.pointerLock="pointerLockElement"in document||"mozPointerLockElement"in document||"webkitPointerLockElement"in document,this.quirksMode="CSS1Compat"===document.compatMode?!1:!0,this.getUserMedia=!!(navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia)},checkFullScreenSupport:function(){for(var a=["requestFullscreen","requestFullScreen","webkitRequestFullscreen","webkitRequestFullScreen","msRequestFullscreen","msRequestFullScreen","mozRequestFullScreen","mozRequestFullscreen"],b=0;b0,this.typedArray=!0):(this.littleEndian=!1,this.typedArray=!1),navigator.vibrate=navigator.vibrate||navigator.webkitVibrate||navigator.mozVibrate||navigator.msVibrate,navigator.vibrate&&(this.vibration=!0)},_checkCSS3D:function(){var a,b=document.createElement("p"),c={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.insertBefore(b,null);for(var d in c)void 0!==b.style[d]&&(b.style[d]="translate3d(1px,1px,1px)",a=window.getComputedStyle(b).getPropertyValue(c[d]));document.body.removeChild(b),this.css3D=void 0!==a&&a.length>0&&"none"!==a},canPlayAudio:function(a){return"mp3"==a&&this.mp3?!0:"ogg"==a&&(this.ogg||this.opus)?!0:"m4a"==a&&this.m4a?!0:"wav"==a&&this.wav?!0:"webm"==a&&this.webm?!0:!1},isConsoleOpen:function(){return window.console&&window.console.firebug?!0:window.console&&(console.profile(),console.profileEnd(),console.clear&&console.clear(),console.profiles)?console.profiles.length>0:!1}},b.Device.prototype.constructor=b.Device,b.RequestAnimationFrame=function(a,b){"undefined"==typeof b&&(b=!1),this.game=a,this.isRunning=!1,this.forceSetTimeOut=b;for(var c=["ms","moz","webkit","o"],d=0;da},fuzzyGreaterThan:function(a,b,c){return"undefined"==typeof c&&(c=1e-4),a>b-c},fuzzyCeil:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.ceil(a-b)},fuzzyFloor:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.floor(a+b)},average:function(){for(var a=[],b=0;b0?Math.floor(a):Math.ceil(a)},shear:function(a){return a%1},snapTo:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.round(a/b),c+a)},snapToFloor:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.floor(a/b),c+a)},snapToCeil:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.ceil(a/b),c+a)},snapToInArray:function(a,b,c){if("undefined"==typeof c&&(c=!0),c&&b.sort(),a=f-a?f:e},roundTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.round(a*d)/d},floorTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.floor(a*d)/d},ceilTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.ceil(a*d)/d},interpolateFloat:function(a,b,c){return(b-a)*c+a},angleBetween:function(a,b,c,d){return Math.atan2(d-b,c-a)},angleBetweenPoints:function(a,b){return Math.atan2(b.y-a.y,b.x-a.x)},reverseAngle:function(a){return this.normalizeAngle(a+Math.PI,!0)},normalizeAngle:function(a){return a%=2*Math.PI,a>=0?a:a+2*Math.PI},normalizeLatitude:function(a){return Math.max(-90,Math.min(90,a))},normalizeLongitude:function(a){return a%360==180?180:(a%=360,-180>a?a+360:a>180?a-360:a)},nearestAngleBetween:function(a,b,c){"undefined"==typeof c&&(c=!0);var d=c?Math.PI:180;return a=this.normalizeAngle(a,c),b=this.normalizeAngle(b,c),-d/2>a&&b>d/2&&(a+=2*d),-d/2>b&&a>d/2&&(b+=2*d),b-a},interpolateAngles:function(a,b,c,d,e){return"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=null),a=this.normalizeAngle(a,d),b=this.normalizeAngleToAnother(b,a,d),"function"==typeof e?e(c,a,b-a,1):this.interpolateFloat(a,b,c)},chanceRoll:function(a){return"undefined"==typeof a&&(a=50),0>=a?!1:a>=100?!0:100*Math.random()>=a?!1:!0},numberArray:function(a,b){for(var c=[],d=a;b>=d;d++)c.push(d);return c},maxAdd:function(a,b,c){return a+=b,a>c&&(a=c),a},minSub:function(a,b,c){return a-=b,c>a&&(a=c),a},wrap:function(a,b,c){var d=c-b;if(0>=d)return 0;var e=(a-b)%d;return 0>e&&(e+=d),e+b},wrapValue:function(a,b,c){var d;return a=Math.abs(a),b=Math.abs(b),c=Math.abs(c),d=(a+b)%c},randomSign:function(){return Math.random()>.5?1:-1},isOdd:function(a){return 1&a},isEven:function(a){return 1&a?!1:!0},min:function(){if(1===arguments.length&&"object"==typeof arguments[0])var a=arguments[0];else var a=arguments;for(var b=1,c=0,d=a.length;d>b;b++)a[b]b;b++)a[b]>a[c]&&(c=b);return a[c]},minProperty:function(a){if(2===arguments.length&&"object"==typeof arguments[1])var b=arguments[1];else var b=arguments.slice(1);for(var c=1,d=0,e=b.length;e>c;c++)b[c][a]c;c++)b[c][a]>b[d][a]&&(d=c);return b[d][a]},wrapAngle:function(a,b){var c=b?Math.PI/180:1;return this.wrap(a,-180*c,180*c)},angleLimit:function(a,b,c){var d=a;return a>c?d=c:b>a&&(d=b),d},linearInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return 0>b?this.linear(a[0],a[1],d):b>1?this.linear(a[c],a[c-1],c-d):this.linear(a[e],a[e+1>c?c:e+1],d-e)},bezierInterpolation:function(a,b){for(var c=0,d=a.length-1,e=0;d>=e;e++)c+=Math.pow(1-b,d-e)*Math.pow(b,e)*a[e]*this.bernstein(d,e);return c},catmullRomInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return a[0]===a[c]?(0>b&&(e=Math.floor(d=c*(1+b))),this.catmullRom(a[(e-1+c)%c],a[e],a[(e+1)%c],a[(e+2)%c],d-e)):0>b?a[0]-(this.catmullRom(a[0],a[0],a[1],a[1],-d)-a[0]):b>1?a[c]-(this.catmullRom(a[c],a[c],a[c-1],a[c-1],d-c)-a[c]):this.catmullRom(a[e?e-1:0],a[e],a[e+1>c?c:e+1],a[e+2>c?c:e+2],d-e)},linear:function(a,b,c){return(b-a)*c+a},bernstein:function(a,b){return this.factorial(a)/this.factorial(b)/this.factorial(a-b)},catmullRom:function(a,b,c,d,e){var f=.5*(c-a),g=.5*(d-b),h=e*e,i=e*h;return(2*b-2*c+f+g)*i+(-3*b+3*c-2*f-g)*h+f*e+b},difference:function(a,b){return Math.abs(a-b)},getRandom:function(a,b,c){if("undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),null!=a){var d=c;if((0===d||d>a.length-b)&&(d=a.length-b),d>0)return a[b+Math.floor(Math.random()*d)]}return null},removeRandom:function(a,b,c){if("undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),null!=a){var d=c;if((0===d||d>a.length-b)&&(d=a.length-b),d>0){var e=b+Math.floor(Math.random()*d),f=a.splice(e,1);return f[0]}}return null},floor:function(a){var b=0|a;return a>0?b:b!=a?b-1:b},ceil:function(a){var b=0|a;return a>0&&b!=a?b+1:b},sinCosGenerator:function(a,b,c,d){"undefined"==typeof b&&(b=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1);for(var e=b,f=c,g=d*Math.PI/a,h=[],i=[],j=0;a>j;j++)f-=e*g,e+=f*g,h[j]=f,i[j]=e;return{sin:i,cos:h,length:a}},shift:function(a){var b=a.shift();return a.push(b),b},shuffleArray:function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},distance:function(a,b,c,d){var e=a-c,f=b-d;return Math.sqrt(e*e+f*f)},distancePow:function(a,b,c,d,e){return"undefined"==typeof e&&(e=2),Math.sqrt(Math.pow(c-a,e)+Math.pow(d-b,e))},distanceRounded:function(a,c,d,e){return Math.round(b.Math.distance(a,c,d,e))},clamp:function(a,b,c){return b>a?b:a>c?c:a},clampBottom:function(a,b){return b>a?b:a},within:function(a,b,c){return Math.abs(a-b)<=c},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){return b>=a?0:a>=c?1:(a=(a-b)/(c-b),a*a*(3-2*a))},smootherstep:function(a,b,c){return b>=a?0:a>=c?1:(a=(a-b)/(c-b),a*a*a*(a*(6*a-15)+10))},sign:function(a){return 0>a?-1:a>0?1:0},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}()},b.RandomDataGenerator=function(a){"undefined"==typeof a&&(a=[]),this.c=1,this.s0=0,this.s1=0,this.s2=0,this.sow(a)},b.RandomDataGenerator.prototype={rnd:function(){var a=2091639*this.s0+2.3283064365386963e-10*this.c;return this.c=0|a,this.s0=this.s1,this.s1=this.s2,this.s2=a-this.c,this.s2},sow:function(a){"undefined"==typeof a&&(a=[]),this.s0=this.hash(" "),this.s1=this.hash(this.s0),this.s2=this.hash(this.s1),this.c=1;for(var b,c=0;b=a[c++];)this.s0-=this.hash(b),this.s0+=~~(this.s0<0),this.s1-=this.hash(b),this.s1+=~~(this.s1<0),this.s2-=this.hash(b),this.s2+=~~(this.s2<0) -},hash:function(a){var b,c,d;for(d=4022871197,a=a.toString(),c=0;c>>0,b-=d,b*=d,d=b>>>0,b-=d,d+=4294967296*b;return 2.3283064365386963e-10*(d>>>0)},integer:function(){return 4294967296*this.rnd.apply(this)},frac:function(){return this.rnd.apply(this)+1.1102230246251565e-16*(2097152*this.rnd.apply(this)|0)},real:function(){return this.integer()+this.frac()},integerInRange:function(a,b){return Math.round(this.realInRange(a,b))},realInRange:function(a,b){return this.frac()*(b-a)+a},normal:function(){return 1-2*this.frac()},uuid:function(){var a="",b="";for(b=a="";a++<36;b+=~a%5|3*a&4?(15^a?8^this.frac()*(20^a?16:4):4).toString(16):"-");return b},pick:function(a){return a[this.integerInRange(0,a.length-1)]},weightedPick:function(a){return a[~~(Math.pow(this.frac(),2)*(a.length-1))]},timestamp:function(a,b){return this.realInRange(a||9466848e5,b||1577862e6)},angle:function(){return this.integerInRange(-180,180)}},b.RandomDataGenerator.prototype.constructor=b.RandomDataGenerator,b.QuadTree=function(a,b,c,d,e,f,g){this.maxObjects=10,this.maxLevels=4,this.level=0,this.bounds={},this.objects=[],this.nodes=[],this._empty=[],this.reset(a,b,c,d,e,f,g)},b.QuadTree.prototype={reset:function(a,b,c,d,e,f,g){this.maxObjects=e||10,this.maxLevels=f||4,this.level=g||0,this.bounds={x:Math.round(a),y:Math.round(b),width:c,height:d,subWidth:Math.floor(c/2),subHeight:Math.floor(d/2),right:Math.round(a)+Math.floor(c/2),bottom:Math.round(b)+Math.floor(d/2)},this.objects.length=0,this.nodes.length=0},populate:function(a){a.forEach(this.populateHandler,this,!0)},populateHandler:function(a){a.body&&a.exists&&this.insert(a.body)},split:function(){this.level++,this.nodes[0]=new b.QuadTree(this.bounds.right,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[1]=new b.QuadTree(this.bounds.x,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[2]=new b.QuadTree(this.bounds.x,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[3]=new b.QuadTree(this.bounds.right,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level)},insert:function(a){var b,c=0;if(null!=this.nodes[0]&&(b=this.getIndex(a),-1!==b))return void this.nodes[b].insert(a);if(this.objects.push(a),this.objects.length>this.maxObjects&&this.levelthis.bounds.bottom&&(b=2):a.x>this.bounds.right&&(a.ythis.bounds.bottom&&(b=3)),b},retrieve:function(a){if(!a.body)return this._empty;var b=this.objects,c=this.getIndex(a.body);return this.nodes[0]&&(-1!==c?b=b.concat(this.nodes[c].retrieve(a)):(b=b.concat(this.nodes[0].retrieve(a)),b=b.concat(this.nodes[1].retrieve(a)),b=b.concat(this.nodes[2].retrieve(a)),b=b.concat(this.nodes[3].retrieve(a)))),b},clear:function(){this.objects.length=0;for(var a=this.nodes.length;a--;)this.nodes[a].clear(),this.nodes.splice(a,1);this.nodes.length=0}},b.QuadTree.prototype.constructor=b.QuadTree,b.Net=function(a){this.game=a},b.Net.prototype={getHostName:function(){return window.location&&window.location.hostname?window.location.hostname:null},checkDomainName:function(a){return-1!==window.location.hostname.indexOf(a)},updateQueryString:function(a,b,c,d){"undefined"==typeof c&&(c=!1),("undefined"==typeof d||""===d)&&(d=window.location.href);var e="",f=new RegExp("([?|&])"+a+"=.*?(&|#|$)(.*)","gi");if(f.test(d))e="undefined"!=typeof b&&null!==b?d.replace(f,"$1"+a+"="+b+"$2$3"):d.replace(f,"$1$3").replace(/(&|\?)$/,"");else if("undefined"!=typeof b&&null!==b){var g=-1!==d.indexOf("?")?"&":"?",h=d.split("#");d=h[0]+g+a+"="+b,h[1]&&(d+="#"+h[1]),e=d}else e=d;return c?void(window.location.href=e):e},getQueryString:function(a){"undefined"==typeof a&&(a="");var b={},c=location.search.substring(1).split("&");for(var d in c){var e=c[d].split("=");if(e.length>1){if(a&&a==this.decodeURI(e[0]))return this.decodeURI(e[1]);b[this.decodeURI(e[0])]=this.decodeURI(e[1])}}return b},decodeURI:function(a){return decodeURIComponent(a.replace(/\+/g," "))}},b.Net.prototype.constructor=b.Net,b.TweenManager=function(a){this.game=a,this._tweens=[],this._add=[],this.game.onPause.add(this._pauseAll,this),this.game.onResume.add(this._resumeAll,this)},b.TweenManager.prototype={getAll:function(){return this._tweens},removeAll:function(){for(var a=0;aa;)this._tweens[a].update(this.game.time.now)?a++:(this._tweens.splice(a,1),b--);return this._add.length>0&&(this._tweens=this._tweens.concat(this._add),this._add.length=0),!0},isTweening:function(a){return this._tweens.some(function(b){return b._object===a})},_pauseAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a]._pause()},_resumeAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a]._resume()},pauseAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].pause()},resumeAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].resume(!0)}},b.TweenManager.prototype.constructor=b.TweenManager,b.Tween=function(a,c,d){this._object=a,this.game=c,this._manager=d,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._repeat=0,this._yoyo=!1,this._reversed=!1,this._delayTime=0,this._startTime=null,this._easingFunction=b.Easing.Linear.None,this._interpolationFunction=b.Math.linearInterpolation,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onUpdateCallback=null,this._onUpdateCallbackContext=null,this._paused=!1,this._pausedTime=0,this._codePaused=!1,this.pendingDelete=!1,this.onStart=new b.Signal,this.onLoop=new b.Signal,this.onComplete=new b.Signal,this.isRunning=!1},b.Tween.prototype={to:function(a,b,c,d,e,f,g){b=b||1e3,c=c||null,d=d||!1,e=e||0,f=f||0,g=g||!1;var h;return this._parent?(h=this._manager.create(this._object),this._lastChild.chain(h),this._lastChild=h):(h=this,this._parent=this,this._lastChild=this),h._repeat=f,h._duration=b,h._valuesEnd=a,null!==c&&(h._easingFunction=c),e>0&&(h._delayTime=e),h._yoyo=g,d?this.start():this},start:function(){if(null!==this.game&&null!==this._object){this._manager.add(this),this.isRunning=!0,this._onStartCallbackFired=!1,this._startTime=this.game.time.now+this._delayTime;for(var a in this._valuesEnd){if(Array.isArray(this._valuesEnd[a])){if(0===this._valuesEnd[a].length)continue;this._valuesEnd[a]=[this._object[a]].concat(this._valuesEnd[a])}this._valuesStart[a]=this._object[a],Array.isArray(this._valuesStart[a])||(this._valuesStart[a]*=1),this._valuesStartRepeat[a]=this._valuesStart[a]||0}return this}},generateData:function(a,b){if(null===this.game||null===this._object)return null;this._startTime=0;for(var c in this._valuesEnd){if(Array.isArray(this._valuesEnd[c])){if(0===this._valuesEnd[c].length)continue;this._valuesEnd[c]=[this._object[c]].concat(this._valuesEnd[c])}this._valuesStart[c]=this._object[c],Array.isArray(this._valuesStart[c])||(this._valuesStart[c]*=1),this._valuesStartRepeat[c]=this._valuesStart[c]||0}for(var d=0,e=Math.floor(a*(this._duration/1e3)),f=this._duration/e,g=[];e--;){var c,h=(d-this._startTime)/this._duration;h=h>1?1:h;var i=this._easingFunction(h),j={};for(c in this._valuesEnd){var k=this._valuesStart[c]||0,l=this._valuesEnd[c];l instanceof Array?j[c]=this._interpolationFunction(l,i):("string"==typeof l&&(l=k+parseFloat(l,10)),"number"==typeof l&&(j[c]=k+(l-k)*i))}g.push(j),d+=f}if(this._yoyo){var m=g.slice();m.reverse(),g=g.concat(m)}return"undefined"!=typeof b?b=b.concat(g):g},stop:function(){return this.isRunning=!1,this._onUpdateCallback=null,this._manager.remove(this),this},delay:function(a){return this._delayTime=a,this},repeat:function(a){return this._repeat=a,this},yoyo:function(a){return this._yoyo=a,this},easing:function(a){return this._easingFunction=a,this},interpolation:function(a){return this._interpolationFunction=a,this},chain:function(){return this._chainedTweens=arguments,this},loop:function(){return this._lastChild.chain(this),this},onUpdateCallback:function(a,b){return this._onUpdateCallback=a,this._onUpdateCallbackContext=b,this},pause:function(){this._codePaused=!0,this._paused=!0,this._pausedTime=this.game.time.now},_pause:function(){this._codePaused||(this._paused=!0,this._pausedTime=this.game.time.now)},resume:function(){this._paused&&(this._paused=!1,this._codePaused=!1,this._startTime+=this.game.time.now-this._pausedTime)},_resume:function(){this._codePaused||(this._startTime+=this.game.time.pauseDuration,this._paused=!1)},update:function(a){if(this.pendingDelete)return!1;if(this._paused||a1?1:c;var d=this._easingFunction(c);for(b in this._valuesEnd){var e=this._valuesStart[b]||0,f=this._valuesEnd[b];f instanceof Array?this._object[b]=this._interpolationFunction(f,d):("string"==typeof f&&(f=e+parseFloat(f,10)),"number"==typeof f&&(this._object[b]=e+(f-e)*d))}if(null!==this._onUpdateCallback&&this._onUpdateCallback.call(this._onUpdateCallbackContext,this,d),1==c){if(this._repeat>0){isFinite(this._repeat)&&this._repeat--;for(b in this._valuesStartRepeat){if("string"==typeof this._valuesEnd[b]&&(this._valuesStartRepeat[b]=this._valuesStartRepeat[b]+parseFloat(this._valuesEnd[b],10)),this._yoyo){var g=this._valuesStartRepeat[b];this._valuesStartRepeat[b]=this._valuesEnd[b],this._valuesEnd[b]=g,this._reversed=!this._reversed}this._valuesStart[b]=this._valuesStartRepeat[b]}return this._startTime=a+this._delayTime,this.onLoop.dispatch(this._object),!0}this.isRunning=!1,this.onComplete.dispatch(this._object);for(var h=0,i=this._chainedTweens.length;i>h;h++)this._chainedTweens[h].start(a);return!1}return!0}},b.Tween.prototype.constructor=b.Tween,b.Easing={Linear:{None:function(a){return a}},Quadratic:{In:function(a){return a*a},Out:function(a){return a*(2-a)},InOut:function(a){return(a*=2)<1?.5*a*a:-.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a:.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return(a*=2)<1?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a*a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:(a*=2)<1?.5*Math.pow(1024,a-1):.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1-Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return(a*=2)<1?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),-(c*Math.pow(2,10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d)))},Out:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),c*Math.pow(2,-10*a)*Math.sin(2*(a-b)*Math.PI/d)+1)},InOut:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),(a*=2)<1?-.5*c*Math.pow(2,10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d):c*Math.pow(2,-10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d)*.5+1)}},Back:{In:function(a){var b=1.70158;return a*a*((b+1)*a-b)},Out:function(a){var b=1.70158;return--a*a*((b+1)*a+b)+1},InOut:function(a){var b=2.5949095;return(a*=2)<1?.5*a*a*((b+1)*a-b):.5*((a-=2)*a*((b+1)*a+b)+2)}},Bounce:{In:function(a){return 1-b.Easing.Bounce.Out(1-a)},Out:function(a){return 1/2.75>a?7.5625*a*a:2/2.75>a?7.5625*(a-=1.5/2.75)*a+.75:2.5/2.75>a?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},InOut:function(a){return.5>a?.5*b.Easing.Bounce.In(2*a):.5*b.Easing.Bounce.Out(2*a-1)+.5}}},b.Time=function(a){this.game=a,this.time=0,this.now=0,this.elapsed=0,this.pausedTime=0,this.advancedTiming=!1,this.fps=0,this.fpsMin=1e3,this.fpsMax=0,this.msMin=1e3,this.msMax=0,this.physicsElapsed=0,this.deltaCap=0,this.frames=0,this.pauseDuration=0,this.timeToCall=0,this.lastTime=0,this.events=new b.Timer(this.game,!1),this._started=0,this._timeLastSecond=0,this._pauseStarted=0,this._justResumed=!1,this._timers=[],this._len=0,this._i=0},b.Time.prototype={boot:function(){this._started=Date.now(),this.events.start()},create:function(a){"undefined"==typeof a&&(a=!0);var c=new b.Timer(this.game,a);return this._timers.push(c),c},removeAll:function(){for(var a=0;a0&&this.physicsElapsed>this.deltaCap&&(this.physicsElapsed=this.deltaCap),this.advancedTiming&&(this.msMin=this.game.math.min(this.msMin,this.elapsed),this.msMax=this.game.math.max(this.msMax,this.elapsed),this.frames++,this.now>this._timeLastSecond+1e3&&(this.fps=Math.round(1e3*this.frames/(this.now-this._timeLastSecond)),this.fpsMin=this.game.math.min(this.fpsMin,this.fps),this.fpsMax=this.game.math.max(this.fpsMax,this.fps),this._timeLastSecond=this.now,this.frames=0)),this.time=this.now,this.lastTime=a+this.timeToCall,!this.game.paused)for(this.events.update(this.now),this._i=0,this._len=this._timers.length;this._i0&&(this.events.sort(this.sortHandler),this.nextTick=this.events[0].tick)},sortHandler:function(a,b){return a.tickb.tick?1:0},clearPendingEvents:function(){for(this._i=this.events.length;this._i--;)this.events[this._i].pendingDelete&&this.events.splice(this._i,1);this._len=this.events.length,this._i=0},update:function(a){if(this.paused)return!0;if(this._now=a,this._marked=0,this.clearPendingEvents(),this.running&&this._now>=this.nextTick&&this._len>0){for(;this._i=this.events[this._i].tick;)this._newTick=this._now+this.events[this._i].delay-(this._now-this.events[this._i].tick),this._newTick<0&&(this._newTick=this._now+this.events[this._i].delay),this.events[this._i].loop===!0?(this.events[this._i].tick=this._newTick,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)):this.events[this._i].repeatCount>0?(this.events[this._i].repeatCount--,this.events[this._i].tick=this._newTick,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)):(this._marked++,this.events[this._i].pendingDelete=!0,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)),this._i++;this.events.length>this._marked?this.order():(this.expired=!0,this.onComplete.dispatch(this))}return this.expired&&this.autoDestroy?!1:!0},pause:function(){this.running&&!this.expired&&(this._pauseStarted=this.game.time.now,this.paused=!0,this._codePaused=!0)},_pause:function(){this.running&&!this.expired&&(this._pauseStarted=this.game.time.now,this.paused=!0)},resume:function(){if(this.running&&!this.expired){var a=this.game.time.now-this._pauseStarted;this._pauseTotal+=a;for(var b=0;bthis._now?this.nextTick-this._now:0}}),Object.defineProperty(b.Timer.prototype,"length",{get:function(){return this.events.length}}),Object.defineProperty(b.Timer.prototype,"ms",{get:function(){return this._now-this._started-this._pauseTotal}}),Object.defineProperty(b.Timer.prototype,"seconds",{get:function(){return.001*this.ms}}),b.Timer.prototype.constructor=b.Timer,b.TimerEvent=function(a,b,c,d,e,f,g,h){this.timer=a,this.delay=b,this.tick=c,this.repeatCount=d-1,this.loop=e,this.callback=f,this.callbackContext=g,this.args=h,this.pendingDelete=!1},b.TimerEvent.prototype.constructor=b.TimerEvent,b.AnimationManager=function(a){this.sprite=a,this.game=a.game,this.currentFrame=null,this.updateIfVisible=!0,this.isLoaded=!1,this._frameData=null,this._anims={},this._outputFrames=[]},b.AnimationManager.prototype={loadFrameData:function(a){this._frameData=a,this.frame=0,this.isLoaded=!0},add:function(a,c,d,e,f){return null==this._frameData?void console.warn("No FrameData available for Phaser.Animation "+a):(c=c||[],d=d||60,"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=c&&"number"==typeof c[0]?!0:!1),null==this.sprite.events.onAnimationStart&&(this.sprite.events.onAnimationStart=new b.Signal,this.sprite.events.onAnimationComplete=new b.Signal,this.sprite.events.onAnimationLoop=new b.Signal),this._outputFrames.length=0,this._frameData.getFrameIndexes(c,f,this._outputFrames),this._anims[a]=new b.Animation(this.game,this.sprite,a,this._frameData,this._outputFrames,d,e),this.currentAnim=this._anims[a],this.currentFrame=this.currentAnim.currentFrame,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1),this._anims[a])},validateFrames:function(a,b){"undefined"==typeof b&&(b=!0);for(var c=0;cthis._frameData.total)return!1}else if(this._frameData.checkFrameName(a[c])===!1)return!1;return!0},play:function(a,b,c,d){if(this._anims[a]){if(this.currentAnim!==this._anims[a])return this.currentAnim&&this.currentAnim.isPlaying&&this.currentAnim.stop(),this.currentAnim=this._anims[a],this.currentAnim.paused=!1,this.currentAnim.play(b,c,d);if(this.currentAnim.isPlaying===!1)return this.currentAnim.paused=!1,this.currentAnim.play(b,c,d)}},stop:function(a,b){"undefined"==typeof b&&(b=!1),"string"==typeof a?this._anims[a]&&(this.currentAnim=this._anims[a],this.currentAnim.stop(b)):this.currentAnim&&this.currentAnim.stop(b)},update:function(){return this.updateIfVisible&&!this.sprite.visible?!1:this.currentAnim&&this.currentAnim.update()===!0?(this.currentFrame=this.currentAnim.currentFrame,!0):!1},getAnimation:function(a){return"string"==typeof a&&this._anims[a]?this._anims[a]:null},refreshFrame:function(){this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1)},destroy:function(){var a=null;for(var a in this._anims)this._anims.hasOwnProperty(a)&&this._anims[a].destroy();this._anims={},this._frameData=null,this._frameIndex=0,this.currentAnim=null,this.currentFrame=null}},b.AnimationManager.prototype.constructor=b.AnimationManager,Object.defineProperty(b.AnimationManager.prototype,"frameData",{get:function(){return this._frameData}}),Object.defineProperty(b.AnimationManager.prototype,"frameTotal",{get:function(){return this._frameData?this._frameData.total:-1}}),Object.defineProperty(b.AnimationManager.prototype,"paused",{get:function(){return this.currentAnim.isPaused},set:function(a){this.currentAnim.paused=a}}),Object.defineProperty(b.AnimationManager.prototype,"frame",{get:function(){return this.currentFrame?this._frameIndex:void 0},set:function(a){"number"==typeof a&&this._frameData&&null!==this._frameData.getFrame(a)&&(this.currentFrame=this._frameData.getFrame(a),this.currentFrame&&(this._frameIndex=a,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1)))}}),Object.defineProperty(b.AnimationManager.prototype,"frameName",{get:function(){return this.currentFrame?this.currentFrame.name:void 0},set:function(a){"string"==typeof a&&this._frameData&&null!==this._frameData.getFrameByName(a)?(this.currentFrame=this._frameData.getFrameByName(a),this.currentFrame&&(this._frameIndex=this.currentFrame.index,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1))):console.warn("Cannot set frameName: "+a)}}),b.Animation=function(a,c,d,e,f,g,h){this.game=a,this._parent=c,this._frameData=e,this.name=d,this._frames=[],this._frames=this._frames.concat(f),this.delay=1e3/g,this.loop=h,this.loopCount=0,this.killOnComplete=!1,this.isFinished=!1,this.isPlaying=!1,this.isPaused=!1,this._pauseStartTime=0,this._frameIndex=0,this._frameDiff=0,this._frameSkip=1,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.onStart=new b.Signal,this.onComplete=new b.Signal,this.onLoop=new b.Signal,this.game.onPause.add(this.onPause,this),this.game.onResume.add(this.onResume,this)},b.Animation.prototype={play:function(a,b,c){return"number"==typeof a&&(this.delay=1e3/a),"boolean"==typeof b&&(this.loop=b),"undefined"!=typeof c&&(this.killOnComplete=c),this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this.loopCount=0,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]),this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1),this._parent.events.onAnimationStart.dispatch(this._parent,this),this.onStart.dispatch(this._parent,this),this},restart:function(){this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this.loopCount=0,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]),this.onStart.dispatch(this._parent,this)},stop:function(a,b){"undefined"==typeof a&&(a=!1),"undefined"==typeof b&&(b=!1),this.isPlaying=!1,this.isFinished=!0,this.paused=!1,a&&(this.currentFrame=this._frameData.getFrame(this._frames[0])),b&&(this._parent.events.onAnimationComplete.dispatch(this._parent,this),this.onComplete.dispatch(this._parent,this))},onPause:function(){this.isPlaying&&(this._frameDiff=this._timeNextFrame-this.game.time.now)},onResume:function(){this.isPlaying&&(this._timeNextFrame=this.game.time.now+this._frameDiff)},update:function(){return this.isPaused?!1:this.isPlaying===!0&&this.game.time.now>=this._timeNextFrame?(this._frameSkip=1,this._frameDiff=this.game.time.now-this._timeNextFrame,this._timeLastFrame=this.game.time.now,this._frameDiff>this.delay&&(this._frameSkip=Math.floor(this._frameDiff/this.delay),this._frameDiff-=this._frameSkip*this.delay),this._timeNextFrame=this.game.time.now+(this.delay-this._frameDiff),this._frameIndex+=this._frameSkip,this._frameIndex>=this._frames.length?this.loop?(this._frameIndex%=this._frames.length,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&(this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1)),this.loopCount++,this._parent.events.onAnimationLoop.dispatch(this._parent,this),this.onLoop.dispatch(this._parent,this)):this.complete():(this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&(this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1))),!0):!1},destroy:function(){this.game.onPause.remove(this.onPause,this),this.game.onResume.remove(this.onResume,this),this.game=null,this._parent=null,this._frames=null,this._frameData=null,this.currentFrame=null,this.isPlaying=!1,this.onStart.dispose(),this.onLoop.dispose(),this.onComplete.dispose()},complete:function(){this.isPlaying=!1,this.isFinished=!0,this.paused=!1,this._parent.events.onAnimationComplete.dispatch(this._parent,this),this.onComplete.dispatch(this._parent,this),this.killOnComplete&&this._parent.kill()}},b.Animation.prototype.constructor=b.Animation,Object.defineProperty(b.Animation.prototype,"paused",{get:function(){return this.isPaused},set:function(a){this.isPaused=a,a?this._pauseStartTime=this.game.time.now:this.isPlaying&&(this._timeNextFrame=this.game.time.now+this.delay)}}),Object.defineProperty(b.Animation.prototype,"frameTotal",{get:function(){return this._frames.length}}),Object.defineProperty(b.Animation.prototype,"frame",{get:function(){return null!==this.currentFrame?this.currentFrame.index:this._frameIndex},set:function(a){this.currentFrame=this._frameData.getFrame(this._frames[a]),null!==this.currentFrame&&(this._frameIndex=a,this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]))}}),Object.defineProperty(b.Animation.prototype,"speed",{get:function(){return Math.round(1e3/this.delay)},set:function(a){a>=1&&(this.delay=1e3/a)}}),b.Animation.generateFrameNames=function(a,c,d,e,f){"undefined"==typeof e&&(e="");var g=[],h="";if(d>c)for(var i=c;d>=i;i++)h="number"==typeof f?b.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);else for(var i=c;i>=d;i--)h="number"==typeof f?b.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);return g},b.Frame=function(a,c,d,e,f,g,h){this.index=a,this.x=c,this.y=d,this.width=e,this.height=f,this.name=g,this.uuid=h,this.centerX=Math.floor(e/2),this.centerY=Math.floor(f/2),this.distance=b.Math.distance(0,0,e,f),this.rotated=!1,this.rotationDirection="cw",this.trimmed=!1,this.sourceSizeW=e,this.sourceSizeH=f,this.spriteSourceSizeX=0,this.spriteSourceSizeY=0,this.spriteSourceSizeW=0,this.spriteSourceSizeH=0},b.Frame.prototype={setTrim:function(a,b,c,d,e,f,g){this.trimmed=a,a&&(this.width=b,this.height=c,this.sourceSizeW=b,this.sourceSizeH=c,this.centerX=Math.floor(b/2),this.centerY=Math.floor(c/2),this.spriteSourceSizeX=d,this.spriteSourceSizeY=e,this.spriteSourceSizeW=f,this.spriteSourceSizeH=g)},getRect:function(a){return"undefined"==typeof a?a=new b.Rectangle(this.x,this.y,this.width,this.height):a.setTo(this.x,this.y,this.width,this.height),a}},b.Frame.prototype.constructor=b.Frame,b.FrameData=function(){this._frames=[],this._frameNames=[]},b.FrameData.prototype={addFrame:function(a){return a.index=this._frames.length,this._frames.push(a),""!==a.name&&(this._frameNames[a.name]=a.index),a},getFrame:function(a){return a>this._frames.length&&(a=0),this._frames[a]},getFrameByName:function(a){return"number"==typeof this._frameNames[a]?this._frames[this._frameNames[a]]:null},checkFrameName:function(a){return null==this._frameNames[a]?!1:!0},getFrameRange:function(a,b,c){"undefined"==typeof c&&(c=[]);for(var d=a;b>=d;d++)c.push(this._frames[d]);return c},getFrames:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0;dd;d++)c.push(b?this.getFrame(a[d]):this.getFrameByName(a[d]));return c},getFrameIndexes:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0,e=this._frames.length;e>d;d++)c.push(this._frames[d].index);else for(var d=0,e=a.length;e>d;d++)b?c.push(a[d]):this.getFrameByName(a[d])&&c.push(this.getFrameByName(a[d]).index);return c}},b.FrameData.prototype.constructor=b.FrameData,Object.defineProperty(b.FrameData.prototype,"total",{get:function(){return this._frames.length}}),b.AnimationParser={spriteSheet:function(a,c,d,e,f,g,h){var i=a.cache.getImage(c);if(null==i)return null;var j=i.width,k=i.height;0>=d&&(d=Math.floor(-j/Math.min(-1,d))),0>=e&&(e=Math.floor(-k/Math.min(-1,e)));var l=Math.floor((j-g)/(d+h)),m=Math.floor((k-g)/(e+h)),n=l*m;if(-1!==f&&(n=f),0===j||0===k||d>j||e>k||0===n)return console.warn("Phaser.AnimationParser.spriteSheet: width/height zero or width/height < given frameWidth/frameHeight"),null;for(var o=new b.FrameData,p=g,q=g,r=0;n>r;r++){var s=a.rnd.uuid();o.addFrame(new b.Frame(r,p,q,d,e,"",s)),PIXI.TextureCache[s]=new PIXI.Texture(PIXI.BaseTextureCache[c],{x:p,y:q,width:d,height:e}),p+=d+h,p+d>j&&(p=g,q+=e+h)}return o},JSONData:function(a,c,d){if(!c.frames)return console.warn("Phaser.AnimationParser.JSONData: Invalid Texture Atlas JSON given, missing 'frames' array"),void console.log(c);for(var e,f=new b.FrameData,g=c.frames,h=0;h tag");for(var e,f,g,h,i,j,k,l,m,n,o,p,q=new b.FrameData,r=c.getElementsByTagName("SubTexture"),s=0;s0)for(var c=0;c0)for(var c=0;c0)for(var c=0;c0?(this._fileIndex=0,this._progressChunk=100/this._fileList.length,this.loadFile()):(this.progress=100,this.progressFloat=100,this.hasLoaded=!0,this.onLoadComplete.dispatch()))},loadFile:function(){if(!this._fileList[this._fileIndex])return void console.warn("Phaser.Loader loadFile invalid index "+this._fileIndex);var a=this._fileList[this._fileIndex],c=this;switch(this.onFileStart.dispatch(this.progress,a.key),a.type){case"image":case"spritesheet":case"textureatlas":case"bitmapfont":a.data=new Image,a.data.name=a.key,a.data.onload=function(){return c.fileComplete(c._fileIndex)},a.data.onerror=function(){return c.fileError(c._fileIndex)},this.crossOrigin&&(a.data.crossOrigin=this.crossOrigin),a.data.src=this.baseURL+a.url;break;case"audio":a.url=this.getAudioURL(a.url),null!==a.url?this.game.sound.usingWebAudio?(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="arraybuffer",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send()):this.game.sound.usingAudioTag&&(this.game.sound.touchLocked?(a.data=new Audio,a.data.name=a.key,a.data.preload="auto",a.data.src=this.baseURL+a.url,this.fileComplete(this._fileIndex)):(a.data=new Audio,a.data.name=a.key,a.data.onerror=function(){return c.fileError(c._fileIndex)},a.data.preload="auto",a.data.src=this.baseURL+a.url,a.data.addEventListener("canplaythrough",b.GAMES[this.game.id].load.fileComplete(this._fileIndex),!1),a.data.load())):this.fileError(this._fileIndex);break;case"json":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return c.jsonLoadComplete(c._fileIndex)},this._xhr.send();break;case"tilemap":if(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",a.format===b.Tilemap.TILED_JSON)this._xhr.onload=function(){return c.jsonLoadComplete(c._fileIndex)};else{if(a.format!==b.Tilemap.CSV)throw new Error("Phaser.Loader. Invalid Tilemap format: "+a.format);this._xhr.onload=function(){return c.csvLoadComplete(c._fileIndex)}}this._xhr.onerror=function(){return c.dataLoadError(c._fileIndex)},this._xhr.send();break;case"text":case"script":case"physics":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send();break;case"binary":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="arraybuffer",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send()}},getAudioURL:function(a){var b;"string"==typeof a&&(a=[a]);for(var c=0;c100&&(this.progress=100),null!==this.preloadSprite&&(0===this.preloadSprite.direction?(this.preloadSprite.rect.width=Math.floor(this.preloadSprite.width/100*this.progress),this.preloadSprite.sprite.crop(this.preloadSprite.rect)):(this.preloadSprite.rect.height=Math.floor(this.preloadSprite.height/100*this.progress),this.preloadSprite.sprite.crop(this.preloadSprite.rect))),this.onFileComplete.dispatch(this.progress,this._fileList[a].key,b,this.totalLoadedFiles(),this._fileList.length),this.totalQueuedFiles()>0?(this._fileIndex++,this.loadFile()):(this.hasLoaded=!0,this.isLoading=!1,this.removeAll(),this.onLoadComplete.dispatch())},totalLoadedFiles:function(){for(var a=0,b=0;b=this.durationMS&&(this.usingWebAudio?this.loop?(this.onLoop.dispatch(this),""===this.currentMarker?(this.currentTime=0,this.startTime=this.game.time.now):(this.onMarkerComplete.dispatch(this.currentMarker,this),this.play(this.currentMarker,0,this.volume,!0,!0))):this.stop():this.loop?(this.onLoop.dispatch(this),this.play(this.currentMarker,0,this.volume,!0,!0)):this.stop()))},play:function(a,b,c,d,e){if("undefined"==typeof a&&(a=""),"undefined"==typeof e&&(e=!0),this.isPlaying!==!0||e!==!1||this.override!==!1){if(this.isPlaying&&this.override&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.currentMarker=a,""!==a){if(!this.markers[a])return void console.warn("Phaser.Sound.play: audio marker "+a+" doesn't exist");this.position=this.markers[a].start,this.volume=this.markers[a].volume,this.loop=this.markers[a].loop,this.duration=this.markers[a].duration,this.durationMS=this.markers[a].durationMS,"undefined"!=typeof c&&(this.volume=c),"undefined"!=typeof d&&(this.loop=d),this._tempMarker=a,this._tempPosition=this.position,this._tempVolume=this.volume,this._tempLoop=this.loop}else b=b||0,"undefined"==typeof c&&(c=this._volume),"undefined"==typeof d&&(d=this.loop),this.position=b,this.volume=c,this.loop=d,this.duration=0,this.durationMS=0,this._tempMarker=a,this._tempPosition=b,this._tempVolume=c,this._tempLoop=d;this.usingWebAudio?this.game.cache.isSoundDecoded(this.key)?(null==this._buffer&&(this._buffer=this.game.cache.getSoundData(this.key)),this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this._sound.connect(this.externalNode?this.externalNode.input:this.gainNode),this.totalDuration=this._sound.buffer.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this.loop&&""===a&&(this._sound.loop=!0),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,this.position,this.duration):this._sound.start(0,this.position,this.duration),this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):(this.pendingPlayback=!0,this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).isDecoding===!1&&this.game.sound.decode(this.key,this)):this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).locked?(this.game.cache.reloadSound(this.key),this.pendingPlayback=!0):this._sound&&(this.game.device.cocoonJS||4===this._sound.readyState)?(this._sound.play(),this.totalDuration=this._sound.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this._sound.currentTime=this.position,this._sound.muted=this._muted,this._sound.volume=this._muted?0:this._volume,this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):this.pendingPlayback=!0}},restart:function(a,b,c,d){a=a||"",b=b||0,c=c||1,"undefined"==typeof d&&(d=!1),this.play(a,b,c,d,!0)},pause:function(){this.isPlaying&&this._sound&&(this.stop(),this.isPlaying=!1,this.paused=!0,this.pausedPosition=this.currentTime,this.pausedTime=this.game.time.now,this.onPause.dispatch(this))},resume:function(){if(this.paused&&this._sound){if(this.usingWebAudio){var a=this.position+this.pausedPosition/1e3;this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this._sound.connect(this.externalNode?this.externalNode.input:this.gainNode),this.loop&&(this._sound.loop=!0),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,a,this.duration):this._sound.start(0,a,this.duration)}else this._sound.play();this.isPlaying=!0,this.paused=!1,this.startTime+=this.game.time.now-this.pausedTime,this.onResume.dispatch(this)}},stop:function(){this.isPlaying&&this._sound&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.isPlaying=!1; -var a=this.currentMarker;""!==this.currentMarker&&this.onMarkerComplete.dispatch(this.currentMarker,this),this.currentMarker="",this.onStop.dispatch(this,a)},destroy:function(a){"undefined"==typeof a&&(a=!0),this.stop(),a&&this.game.sound.remove(this),this.markers={},this.context=null,this._buffer=null,this.externalNode=null,this.onDecoded.dispose(),this.onPlay.dispose(),this.onPause.dispose(),this.onResume.dispose(),this.onLoop.dispose(),this.onStop.dispose(),this.onMute.dispose(),this.onMarkerComplete.dispose()}},b.Sound.prototype.constructor=b.Sound,Object.defineProperty(b.Sound.prototype,"isDecoding",{get:function(){return this.game.cache.getSound(this.key).isDecoding}}),Object.defineProperty(b.Sound.prototype,"isDecoded",{get:function(){return this.game.cache.isSoundDecoded(this.key)}}),Object.defineProperty(b.Sound.prototype,"mute",{get:function(){return this._muted},set:function(a){a=a||null,a?(this._muted=!0,this.usingWebAudio?(this._muteVolume=this.gainNode.gain.value,this.gainNode.gain.value=0):this.usingAudioTag&&this._sound&&(this._muteVolume=this._sound.volume,this._sound.volume=0)):(this._muted=!1,this.usingWebAudio?this.gainNode.gain.value=this._muteVolume:this.usingAudioTag&&this._sound&&(this._sound.volume=this._muteVolume)),this.onMute.dispatch(this)}}),Object.defineProperty(b.Sound.prototype,"volume",{get:function(){return this._volume},set:function(a){this.usingWebAudio?(this._volume=a,this.gainNode.gain.value=a):this.usingAudioTag&&this._sound&&a>=0&&1>=a&&(this._volume=a,this._sound.volume=a)}}),b.SoundManager=function(a){this.game=a,this.onSoundDecode=new b.Signal,this._codeMuted=!1,this._muted=!1,this._unlockSource=null,this._volume=1,this._sounds=[],this.context=null,this.usingWebAudio=!0,this.usingAudioTag=!1,this.noAudio=!1,this.connectToMaster=!0,this.touchLocked=!1,this.channels=32},b.SoundManager.prototype={boot:function(){if(this.game.device.iOS&&this.game.device.webAudio===!1&&(this.channels=1),this.game.device.iOS||window.PhaserGlobal&&window.PhaserGlobal.fakeiOSTouchLock?(this.game.input.touch.callbackContext=this,this.game.input.touch.touchStartCallback=this.unlock,this.game.input.mouse.callbackContext=this,this.game.input.mouse.mouseDownCallback=this.unlock,this.touchLocked=!0):this.touchLocked=!1,window.PhaserGlobal){if(window.PhaserGlobal.disableAudio===!0)return this.usingWebAudio=!1,void(this.noAudio=!0);if(window.PhaserGlobal.disableWebAudio===!0)return this.usingWebAudio=!1,this.usingAudioTag=!0,void(this.noAudio=!1)}if(window.AudioContext)try{this.context=new window.AudioContext}catch(a){this.context=null,this.usingWebAudio=!1,this.noAudio=!0}else if(window.webkitAudioContext)try{this.context=new window.webkitAudioContext}catch(a){this.context=null,this.usingWebAudio=!1,this.noAudio=!0}window.Audio&&null===this.context&&(this.usingWebAudio=!1,this.usingAudioTag=!0,this.noAudio=!1),null!==this.context&&(this.masterGain="undefined"==typeof this.context.createGain?this.context.createGainNode():this.context.createGain(),this.masterGain.gain.value=1,this.masterGain.connect(this.context.destination))},unlock:function(){if(this.touchLocked!==!1)if(this.game.device.webAudio===!1||window.PhaserGlobal&&window.PhaserGlobal.disableWebAudio===!0)this.touchLocked=!1,this._unlockSource=null,this.game.input.touch.callbackContext=null,this.game.input.touch.touchStartCallback=null,this.game.input.mouse.callbackContext=null,this.game.input.mouse.mouseDownCallback=null;else{var a=this.context.createBuffer(1,1,22050);this._unlockSource=this.context.createBufferSource(),this._unlockSource.buffer=a,this._unlockSource.connect(this.context.destination),this._unlockSource.noteOn(0)}},stopAll:function(){for(var a=0;a255)return b.Color.getColor(255,255,255);if(a>c)return b.Color.getColor(255,255,255);var e=a+Math.round(Math.random()*(c-a)),f=a+Math.round(Math.random()*(c-a)),g=a+Math.round(Math.random()*(c-a));return b.Color.getColor32(d,e,f,g)},getRGB:function(a){return{alpha:a>>>24,red:a>>16&255,green:a>>8&255,blue:255&a}},getWebRGB:function(a){var b=(a>>>24)/255,c=a>>16&255,d=a>>8&255,e=255&a;return"rgba("+c.toString()+","+d.toString()+","+e.toString()+","+b.toString()+")"},getAlpha:function(a){return a>>>24},getAlphaFloat:function(a){return(a>>>24)/255},getRed:function(a){return a>>16&255},getGreen:function(a){return a>>8&255},getBlue:function(a){return 255&a}},b.Physics=function(a,b){b=b||{},this.game=a,this.config=b,this.arcade=null,this.p2=null,this.ninja=null,this.box2d=null,this.chipmunk=null,this.parseConfig()},b.Physics.ARCADE=0,b.Physics.P2JS=1,b.Physics.NINJA=2,b.Physics.BOX2D=3,b.Physics.CHIPMUNK=5,b.Physics.prototype={parseConfig:function(){this.config.hasOwnProperty("arcade")&&this.config.arcade!==!0||!b.Physics.hasOwnProperty("Arcade")||(this.arcade=new b.Physics.Arcade(this.game),this.game.time.deltaCap=.2),this.config.hasOwnProperty("ninja")&&this.config.ninja===!0&&b.Physics.hasOwnProperty("Ninja")&&(this.ninja=new b.Physics.Ninja(this.game)),this.config.hasOwnProperty("p2")&&this.config.p2===!0&&b.Physics.hasOwnProperty("P2")&&(this.p2=new b.Physics.P2(this.game,this.config))},startSystem:function(a){if(a===b.Physics.ARCADE?this.arcade=new b.Physics.Arcade(this.game):a===b.Physics.P2JS&&(this.p2=new b.Physics.P2(this.game,this.config)),a===b.Physics.NINJA)this.ninja=new b.Physics.Ninja(this.game);else{if(a===b.Physics.BOX2D&&null===this.box2d)throw new Error("The Box2D physics system has not been implemented yet.");if(a===b.Physics.CHIPMUNK&&null===this.chipmunk)throw new Error("The Chipmunk physics system has not been implemented yet.")}},enable:function(a,c,d){"undefined"==typeof c&&(c=b.Physics.ARCADE),"undefined"==typeof d&&(d=!1),c===b.Physics.ARCADE?this.arcade.enable(a):c===b.Physics.P2JS&&this.p2?this.p2.enable(a,d):c===b.Physics.NINJA&&this.ninja&&this.ninja.enableAABB(a)},preUpdate:function(){this.p2&&this.p2.preUpdate()},update:function(){this.p2&&this.p2.update()},setBoundsToWorld:function(){this.arcade&&this.arcade.setBoundsToWorld(),this.ninja&&this.ninja.setBoundsToWorld(),this.p2&&this.p2.setBoundsToWorld()},clear:function(){this.p2&&this.p2.clear()},destroy:function(){this.p2&&this.p2.destroy(),this.arcade=null,this.ninja=null,this.p2=null}},b.Physics.prototype.constructor=b.Physics,b.Physics.Arcade=function(a){this.game=a,this.gravity=new b.Point,this.bounds=new b.Rectangle(0,0,a.world.width,a.world.height),this.checkCollision={up:!0,down:!0,left:!0,right:!0},this.maxObjects=10,this.maxLevels=4,this.OVERLAP_BIAS=4,this.TILE_BIAS=16,this.forceX=!1,this.quadTree=new b.QuadTree(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels),this._overlap=0,this._maxOverlap=0,this._velocity1=0,this._velocity2=0,this._newVelocity1=0,this._newVelocity2=0,this._average=0,this._mapData=[],this._result=!1,this._total=0,this._angle=0,this._dx=0,this._dy=0},b.Physics.Arcade.prototype.constructor=b.Physics.Arcade,b.Physics.Arcade.prototype={setBounds:function(a,b,c,d){this.bounds.setTo(a,b,c,d)},setBoundsToWorld:function(){this.bounds.setTo(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height)},enable:function(a,c){"undefined"==typeof c&&(c=!0);var d=1;if(Array.isArray(a))for(d=a.length;d--;)a[d]instanceof b.Group?this.enable(a[d].children,c):(this.enableBody(a[d]),c&&a[d].hasOwnProperty("children")&&a[d].children.length>0&&this.enable(a[d],!0));else a instanceof b.Group?this.enable(a.children,c):(this.enableBody(a),c&&a.hasOwnProperty("children")&&a.children.length>0&&this.enable(a.children,!0))},enableBody:function(a){a.hasOwnProperty("body")&&null===a.body&&(a.body=new b.Physics.Arcade.Body(a))},updateMotion:function(a){this._velocityDelta=this.computeVelocity(0,a,a.angularVelocity,a.angularAcceleration,a.angularDrag,a.maxAngular)-a.angularVelocity,a.angularVelocity+=this._velocityDelta,a.rotation+=a.angularVelocity*this.game.time.physicsElapsed,a.velocity.x=this.computeVelocity(1,a,a.velocity.x,a.acceleration.x,a.drag.x,a.maxVelocity.x),a.velocity.y=this.computeVelocity(2,a,a.velocity.y,a.acceleration.y,a.drag.y,a.maxVelocity.y)},computeVelocity:function(a,b,c,d,e,f){return f=f||1e4,1==a&&b.allowGravity?c+=(this.gravity.x+b.gravity.x)*this.game.time.physicsElapsed:2==a&&b.allowGravity&&(c+=(this.gravity.y+b.gravity.y)*this.game.time.physicsElapsed),d?c+=d*this.game.time.physicsElapsed:e&&(this._drag=e*this.game.time.physicsElapsed,c-this._drag>0?c-=this._drag:c+this._drag<0?c+=this._drag:c=0),c>f?c=f:-f>c&&(c=-f),c},overlap:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!0);else this.collideHandler(a,b,c,d,e,!0);return this._total>0},collide:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!1);else this.collideHandler(a,b,c,d,e,!1);return this._total>0},collideHandler:function(a,c,d,e,f,g){return"undefined"!=typeof c||a.type!==b.GROUP&&a.type!==b.EMITTER?void(a&&c&&a.exists&&c.exists&&(a.type==b.SPRITE||a.type==b.TILESPRITE?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsSprite(a,c,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideSpriteVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideSpriteVsTilemapLayer(a,c,d,e,f):a.type==b.GROUP?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsGroup(c,a,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideGroupVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,c,d,e,f):a.type==b.TILEMAPLAYER?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsTilemapLayer(c,a,d,e,f):(c.type==b.GROUP||c.type==b.EMITTER)&&this.collideGroupVsTilemapLayer(c,a,d,e,f):a.type==b.EMITTER&&(c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsGroup(c,a,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideGroupVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,c,d,e,f)))):void this.collideGroupVsSelf(a,d,e,f,g)},collideSpriteVsSprite:function(a,b,c,d,e,f){return a.body&&b.body?(this.separate(a.body,b.body,d,e,f)&&(c&&c.call(e,a,b),this._total++),!0):!1},collideSpriteVsGroup:function(a,b,c,d,e,f){if(0!==b.length&&a.body){this.quadTree.clear(),this.quadTree.reset(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels),this.quadTree.populate(b),this._potentials=this.quadTree.retrieve(a);for(var g=0,h=this._potentials.length;h>g;g++)this.separate(a.body,this._potentials[g],d,e,f)&&(c&&c.call(e,a,this._potentials[g].sprite),this._total++)}},collideGroupVsSelf:function(a,b,c,d,e){if(0!==a.length)for(var f=a.children.length,g=0;f>g;g++)for(var h=g+1;f>=h;h++)a.children[g]&&a.children[h]&&a.children[g].exists&&a.children[h].exists&&this.collideSpriteVsSprite(a.children[g],a.children[h],b,c,d,e)},collideGroupVsGroup:function(a,b,c,d,e,f){if(0!==a.length&&0!==b.length)for(var g=0,h=a.children.length;h>g;g++)a.children[g].exists&&this.collideSpriteVsGroup(a.children[g],b,c,d,e,f)},collideSpriteVsTilemapLayer:function(a,b,c,d,e){if(a.body&&(this._mapData=b.getTiles(a.body.position.x-a.body.tilePadding.x,a.body.position.y-a.body.tilePadding.y,a.body.width+a.body.tilePadding.x,a.body.height+a.body.tilePadding.y,!1,!1),0!==this._mapData.length))for(var f=0;ff;f++)a.children[f].exists&&this.collideSpriteVsTilemapLayer(a.children[f],b,c,d,e)},separate:function(a,b,c,d,e){return this.intersects(a,b)?c&&c.call(d,a.sprite,b.sprite)===!1?!1:e?!0:(this._result=this.forceX||Math.abs(this.gravity.y+a.gravity.y)=b.right?!1:a.position.y>=b.bottom?!1:!0},separateX:function(a,b,c){return a.immovable&&b.immovable?!1:(this._overlap=0,this.intersects(a,b)&&(this._maxOverlap=a.deltaAbsX()+b.deltaAbsX()+this.OVERLAP_BIAS,0===a.deltaX()&&0===b.deltaX()?(a.embedded=!0,b.embedded=!0):a.deltaX()>b.deltaX()?(this._overlap=a.right-b.x,this._overlap>this._maxOverlap||a.checkCollision.right===!1||b.checkCollision.left===!1?this._overlap=0:(a.touching.none=!1,a.touching.right=!0,b.touching.none=!1,b.touching.left=!0)):a.deltaX()this._maxOverlap||a.checkCollision.left===!1||b.checkCollision.right===!1?this._overlap=0:(a.touching.none=!1,a.touching.left=!0,b.touching.none=!1,b.touching.right=!0)),0!==this._overlap)?(a.overlapX=this._overlap,b.overlapX=this._overlap,c||a.customSeparateX||b.customSeparateX?!0:(this._velocity1=a.velocity.x,this._velocity2=b.velocity.x,a.immovable||b.immovable?a.immovable?b.immovable||(b.x+=this._overlap,b.velocity.x=this._velocity1-this._velocity2*b.bounce.x):(a.x=a.x-this._overlap,a.velocity.x=this._velocity2-this._velocity1*a.bounce.x):(this._overlap*=.5,a.x=a.x-this._overlap,b.x+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.x=this._average+this._newVelocity1*a.bounce.x,b.velocity.x=this._average+this._newVelocity2*b.bounce.x),!0)):!1)},separateY:function(a,b,c){return a.immovable&&b.immovable?!1:(this._overlap=0,this.intersects(a,b)&&(this._maxOverlap=a.deltaAbsY()+b.deltaAbsY()+this.OVERLAP_BIAS,0===a.deltaY()&&0===b.deltaY()?(a.embedded=!0,b.embedded=!0):a.deltaY()>b.deltaY()?(this._overlap=a.bottom-b.y,this._overlap>this._maxOverlap||a.checkCollision.down===!1||b.checkCollision.up===!1?this._overlap=0:(a.touching.none=!1,a.touching.down=!0,b.touching.none=!1,b.touching.up=!0)):a.deltaY()this._maxOverlap||a.checkCollision.up===!1||b.checkCollision.down===!1?this._overlap=0:(a.touching.none=!1,a.touching.up=!0,b.touching.none=!1,b.touching.down=!0)),0!==this._overlap)?(a.overlapY=this._overlap,b.overlapY=this._overlap,c||a.customSeparateY||b.customSeparateY?!0:(this._velocity1=a.velocity.y,this._velocity2=b.velocity.y,a.immovable||b.immovable?a.immovable?b.immovable||(b.y+=this._overlap,b.velocity.y=this._velocity1-this._velocity2*b.bounce.y,a.moves&&(b.x+=a.x-a.prev.x)):(a.y=a.y-this._overlap,a.velocity.y=this._velocity2-this._velocity1*a.bounce.y,b.moves&&(a.x+=b.x-b.prev.x)):(this._overlap*=.5,a.y=a.y-this._overlap,b.y+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.y=this._average+this._newVelocity1*a.bounce.y,b.velocity.y=this._average+this._newVelocity2*b.bounce.y),!0)):!1)},separateTile:function(a,b,c){if(!c.intersects(b.position.x,b.position.y,b.right,b.bottom))return!1;if(c.collisionCallback&&!c.collisionCallback.call(c.collisionCallbackContext,b.sprite,c))return!1;if(c.layer.callbacks[c.index]&&!c.layer.callbacks[c.index].callback.call(c.layer.callbacks[c.index].callbackContext,b.sprite,c))return!1;if(!(c.faceLeft||c.faceRight||c.faceTop||c.faceBottom))return!1;var d=0,e=0,f=0,g=1;if(b.deltaAbsX()>b.deltaAbsY()?f=-1:b.deltaAbsX()f){if((c.faceLeft||c.faceRight)&&(d=this.tileCheckX(b,c),0!==d&&!c.intersects(b.position.x,b.position.y,b.right,b.bottom)))return!0;(c.faceTop||c.faceBottom)&&(e=this.tileCheckY(b,c))}else{if((c.faceTop||c.faceBottom)&&(e=this.tileCheckY(b,c),0!==e&&!c.intersects(b.position.x,b.position.y,b.right,b.bottom)))return!0;(c.faceLeft||c.faceRight)&&(d=this.tileCheckX(b,c))}return 0!==d||0!==e},tileCheckX:function(a,b){var c=0;return a.deltaX()<0&&!a.blocked.left&&b.collideRight&&a.checkCollision.left?b.faceRight&&a.x0&&!a.blocked.right&&b.collideLeft&&a.checkCollision.right&&b.faceLeft&&a.right>b.left&&(c=a.right-b.left,c>this.TILE_BIAS&&(c=0)),0!==c&&this.processTileSeparationX(a,c),c},tileCheckY:function(a,b){var c=0;return a.deltaY()<0&&!a.blocked.up&&b.collideDown&&a.checkCollision.up?b.faceBottom&&a.y0&&!a.blocked.down&&b.collideUp&&a.checkCollision.down&&b.faceTop&&a.bottom>b.top&&(c=a.bottom-b.top,c>this.TILE_BIAS&&(c=0)),0!==c&&this.processTileSeparationY(a,c),c},processTileSeparationX:function(a,b){0>b?a.blocked.left=!0:b>0&&(a.blocked.right=!0),a.position.x-=b,a.velocity.x=0===a.bounce.x?0:-a.velocity.x*a.bounce.x},processTileSeparationY:function(a,b){0>b?a.blocked.up=!0:b>0&&(a.blocked.down=!0),a.position.y-=b,a.velocity.y=0===a.bounce.y?0:-a.velocity.y*a.bounce.y},moveToObject:function(a,b,c,d){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=0),this._angle=Math.atan2(b.y-a.y,b.x-a.x),d>0&&(c=this.distanceBetween(a,b)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*c,a.body.velocity.y=Math.sin(this._angle)*c,this._angle},moveToPointer:function(a,b,c,d){return"undefined"==typeof b&&(b=60),c=c||this.game.input.activePointer,"undefined"==typeof d&&(d=0),this._angle=this.angleToPointer(a,c),d>0&&(b=this.distanceToPointer(a,c)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*b,a.body.velocity.y=Math.sin(this._angle)*b,this._angle},moveToXY:function(a,b,c,d,e){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=0),this._angle=Math.atan2(c-a.y,b-a.x),e>0&&(d=this.distanceToXY(a,b,c)/(e/1e3)),a.body.velocity.x=Math.cos(this._angle)*d,a.body.velocity.y=Math.sin(this._angle)*d,this._angle},velocityFromAngle:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(this.game.math.degToRad(a))*c,Math.sin(this.game.math.degToRad(a))*c)},velocityFromRotation:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(a)*c,Math.sin(a)*c)},accelerationFromRotation:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(a)*c,Math.sin(a)*c)},accelerateToObject:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleBetween(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle -},accelerateToPointer:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof b&&(b=this.game.input.activePointer),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleToPointer(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle},accelerateToXY:function(a,b,c,d,e,f){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=1e3),"undefined"==typeof f&&(f=1e3),this._angle=this.angleToXY(a,b,c),a.body.acceleration.setTo(Math.cos(this._angle)*d,Math.sin(this._angle)*d),a.body.maxVelocity.setTo(e,f),this._angle},distanceBetween:function(a,b){return this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToXY:function(a,b,c){return this._dx=a.x-b,this._dy=a.y-c,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},angleBetween:function(a,b){return this._dx=b.x-a.x,this._dy=b.y-a.y,Math.atan2(this._dy,this._dx)},angleToXY:function(a,b,c){return this._dx=b-a.x,this._dy=c-a.y,Math.atan2(this._dy,this._dx)},angleToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=b.worldX-a.x,this._dy=b.worldY-a.y,Math.atan2(this._dy,this._dx)}},b.Physics.Arcade.Body=function(a){this.sprite=a,this.game=a.game,this.type=b.Physics.ARCADE,this.offset=new b.Point,this.position=new b.Point(a.x,a.y),this.prev=new b.Point(this.position.x,this.position.y),this.allowRotation=!0,this.rotation=a.rotation,this.preRotation=a.rotation,this.sourceWidth=a.texture.frame.width,this.sourceHeight=a.texture.frame.height,this.width=a.width,this.height=a.height,this.halfWidth=Math.abs(a.width/2),this.halfHeight=Math.abs(a.height/2),this.center=new b.Point(a.x+this.halfWidth,a.y+this.halfHeight),this.velocity=new b.Point,this.newVelocity=new b.Point(0,0),this.deltaMax=new b.Point(0,0),this.acceleration=new b.Point,this.drag=new b.Point,this.allowGravity=!0,this.gravity=new b.Point(0,0),this.bounce=new b.Point,this.maxVelocity=new b.Point(1e4,1e4),this.angularVelocity=0,this.angularAcceleration=0,this.angularDrag=0,this.maxAngular=1e3,this.mass=1,this.angle=0,this.speed=0,this.facing=b.NONE,this.immovable=!1,this.moves=!0,this.customSeparateX=!1,this.customSeparateY=!1,this.overlapX=0,this.overlapY=0,this.embedded=!1,this.collideWorldBounds=!1,this.checkCollision={none:!1,any:!0,up:!0,down:!0,left:!0,right:!0},this.touching={none:!0,up:!1,down:!1,left:!1,right:!1},this.wasTouching={none:!0,up:!1,down:!1,left:!1,right:!1},this.blocked={up:!1,down:!1,left:!1,right:!1},this.tilePadding=new b.Point,this.phase=0,this._reset=!0,this._sx=a.scale.x,this._sy=a.scale.y,this._dx=0,this._dy=0},b.Physics.Arcade.Body.prototype={updateBounds:function(){var a=Math.abs(this.sprite.scale.x),b=Math.abs(this.sprite.scale.y);(a!==this._sx||b!==this._sy)&&(this.width=this.sourceWidth*a,this.height=this.sourceHeight*b,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this._sx=a,this._sy=b,this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight),this._reset=!0)},preUpdate:function(){this.phase=1,this.wasTouching.none=this.touching.none,this.wasTouching.up=this.touching.up,this.wasTouching.down=this.touching.down,this.wasTouching.left=this.touching.left,this.wasTouching.right=this.touching.right,this.touching.none=!0,this.touching.up=!1,this.touching.down=!1,this.touching.left=!1,this.touching.right=!1,this.blocked.up=!1,this.blocked.down=!1,this.blocked.left=!1,this.blocked.right=!1,this.embedded=!1,this.updateBounds(),this.position.x=this.sprite.world.x-this.sprite.anchor.x*this.width+this.offset.x,this.position.y=this.sprite.world.y-this.sprite.anchor.y*this.height+this.offset.y,this.rotation=this.sprite.angle,this.preRotation=this.rotation,(this._reset||1===this.sprite._cache[4])&&(this.prev.x=this.position.x,this.prev.y=this.position.y),this.moves&&(this.game.physics.arcade.updateMotion(this),this.newVelocity.set(this.velocity.x*this.game.time.physicsElapsed,this.velocity.y*this.game.time.physicsElapsed),this.position.x+=this.newVelocity.x,this.position.y+=this.newVelocity.y,(this.position.x!==this.prev.x||this.position.y!==this.prev.y)&&(this.speed=Math.sqrt(this.velocity.x*this.velocity.x+this.velocity.y*this.velocity.y),this.angle=Math.atan2(this.velocity.y,this.velocity.x)),this.collideWorldBounds&&this.checkWorldBounds()),this._dx=this.deltaX(),this._dy=this.deltaY(),this._reset=!1},postUpdate:function(){2!==this.phase&&(this.phase=2,this.deltaX()<0?this.facing=b.LEFT:this.deltaX()>0&&(this.facing=b.RIGHT),this.deltaY()<0?this.facing=b.UP:this.deltaY()>0&&(this.facing=b.DOWN),this.moves&&(this._dx=this.deltaX(),this._dy=this.deltaY(),0!==this.deltaMax.x&&0!==this._dx&&(this._dx<0&&this._dx<-this.deltaMax.x?this._dx=-this.deltaMax.x:this._dx>0&&this._dx>this.deltaMax.x&&(this._dx=this.deltaMax.x)),0!==this.deltaMax.y&&0!==this._dy&&(this._dy<0&&this._dy<-this.deltaMax.y?this._dy=-this.deltaMax.y:this._dy>0&&this._dy>this.deltaMax.y&&(this._dy=this.deltaMax.y)),this.sprite.x+=this._dx,this.sprite.y+=this._dy),this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight),this.allowRotation&&(this.sprite.angle+=this.deltaZ()),this.prev.x=this.position.x,this.prev.y=this.position.y)},destroy:function(){this.sprite=null},checkWorldBounds:function(){this.position.xthis.game.physics.arcade.bounds.right&&this.game.physics.arcade.checkCollision.right&&(this.position.x=this.game.physics.arcade.bounds.right-this.width,this.velocity.x*=-this.bounce.x,this.blocked.right=!0),this.position.ythis.game.physics.arcade.bounds.bottom&&this.game.physics.arcade.checkCollision.down&&(this.position.y=this.game.physics.arcade.bounds.bottom-this.height,this.velocity.y*=-this.bounce.y,this.blocked.down=!0)},setSize:function(a,b,c,d){c=c||this.offset.x,d=d||this.offset.y,this.sourceWidth=a,this.sourceHeight=b,this.width=this.sourceWidth*this._sx,this.height=this.sourceHeight*this._sy,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this.offset.setTo(c,d),this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight)},reset:function(a,b){this.velocity.set(0),this.acceleration.set(0),this.angularVelocity=0,this.angularAcceleration=0,this.position.x=a-this.sprite.anchor.x*this.width+this.offset.x,this.position.y=b-this.sprite.anchor.y*this.height+this.offset.y,this.prev.x=this.position.x,this.prev.y=this.position.y,this.rotation=this.sprite.angle,this.preRotation=this.rotation,this._sx=this.sprite.scale.x,this._sy=this.sprite.scale.y,this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight)},hitTest:function(a,c){return b.Rectangle.contains(this,a,c)},onFloor:function(){return this.blocked.down},onWall:function(){return this.blocked.left||this.blocked.right},deltaAbsX:function(){return this.deltaX()>0?this.deltaX():-this.deltaX()},deltaAbsY:function(){return this.deltaY()>0?this.deltaY():-this.deltaY()},deltaX:function(){return this.position.x-this.prev.x},deltaY:function(){return this.position.y-this.prev.y},deltaZ:function(){return this.rotation-this.preRotation}},Object.defineProperty(b.Physics.Arcade.Body.prototype,"bottom",{get:function(){return this.position.y+this.height}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"right",{get:function(){return this.position.x+this.width}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a}}),b.Physics.Arcade.Body.render=function(a,b,c,d){"undefined"==typeof c&&(c=!0),d=d||"rgba(0,255,0,0.4)",c?(a.fillStyle=d,a.fillRect(b.position.x-b.game.camera.x,b.position.y-b.game.camera.y,b.width,b.height)):(a.strokeStyle=d,a.strokeRect(b.position.x-b.game.camera.x,b.position.y-b.game.camera.y,b.width,b.height))},b.Physics.Arcade.Body.renderBodyInfo=function(a,b){a.line("x: "+b.x.toFixed(2),"y: "+b.y.toFixed(2),"width: "+b.width,"height: "+b.height),a.line("velocity x: "+b.velocity.x.toFixed(2),"y: "+b.velocity.y.toFixed(2),"deltaX: "+b._dx.toFixed(2),"deltaY: "+b._dy.toFixed(2)),a.line("acceleration x: "+b.acceleration.x.toFixed(2),"y: "+b.acceleration.y.toFixed(2),"speed: "+b.speed.toFixed(2),"angle: "+b.angle.toFixed(2)),a.line("gravity x: "+b.gravity.x,"y: "+b.gravity.y,"bounce x: "+b.bounce.x.toFixed(2),"y: "+b.bounce.y.toFixed(2)),a.line("touching left: "+b.touching.left,"right: "+b.touching.right,"up: "+b.touching.up,"down: "+b.touching.down),a.line("blocked left: "+b.blocked.left,"right: "+b.blocked.right,"up: "+b.blocked.up,"down: "+b.blocked.down)},b.Physics.Arcade.Body.prototype.constructor=b.Physics.Arcade.Body,b.Particles=function(a){this.game=a,this.emitters={},this.ID=0},b.Particles.prototype={add:function(a){return this.emitters[a.name]=a,a},remove:function(a){delete this.emitters[a.name]},update:function(){for(var a in this.emitters)this.emitters[a].exists&&this.emitters[a].update()}},b.Particles.prototype.constructor=b.Particles,b.Particles.Arcade={},b.Particles.Arcade.Emitter=function(a,c,d,e){this.maxParticles=e||50,b.Group.call(this,a),this.name="emitter"+this.game.particles.ID++,this.type=b.EMITTER,this.width=1,this.height=1,this.minParticleSpeed=new b.Point(-100,-100),this.maxParticleSpeed=new b.Point(100,100),this.minParticleScale=1,this.maxParticleScale=1,this.scaleData=null,this.minRotation=-360,this.maxRotation=360,this.minParticleAlpha=1,this.maxParticleAlpha=1,this.alphaData=null,this.gravity=100,this.particleClass=b.Particle,this.particleDrag=new b.Point,this.angularDrag=0,this.frequency=100,this.lifespan=2e3,this.bounce=new b.Point,this.on=!1,this.particleAnchor=new b.Point(.5,.5),this.blendMode=b.blendModes.NORMAL,this.emitX=c,this.emitY=d,this.autoScale=!1,this.autoAlpha=!1,this.particleBringToTop=!1,this.particleSendToBack=!1,this._minParticleScale=new b.Point(1,1),this._maxParticleScale=new b.Point(1,1),this._quantity=0,this._timer=0,this._counter=0,this._explode=!0,this._frames=null},b.Particles.Arcade.Emitter.prototype=Object.create(b.Group.prototype),b.Particles.Arcade.Emitter.prototype.constructor=b.Particles.Arcade.Emitter,b.Particles.Arcade.Emitter.prototype.update=function(){if(this.on)if(this._explode){this._counter=0;do this.emitParticle(),this._counter++;while(this._counter=this._timer&&(this.emitParticle(),this._counter++,this._quantity>0&&this._counter>=this._quantity&&(this.on=!1),this._timer=this.game.time.now+this.frequency);for(var a=this.children.length;a--;)this.children[a].exists&&this.children[a].update()},b.Particles.Arcade.Emitter.prototype.makeParticles=function(a,b,c,d,e){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=this.maxParticles),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1);var f,g=0,h=a,i=b;for(this._frames=b;c>g;)"object"==typeof a&&(h=this.game.rnd.pick(a)),"object"==typeof b&&(i=this.game.rnd.pick(b)),f=new this.particleClass(this.game,0,0,h,i),this.game.physics.arcade.enable(f,!1),d?(f.body.checkCollision.any=!0,f.body.checkCollision.none=!1):f.body.checkCollision.none=!0,f.body.collideWorldBounds=e,f.exists=!1,f.visible=!1,f.anchor.copyFrom(this.particleAnchor),this.add(f),g++;return this},b.Particles.Arcade.Emitter.prototype.kill=function(){this.on=!1,this.alive=!1,this.exists=!1},b.Particles.Arcade.Emitter.prototype.revive=function(){this.alive=!0,this.exists=!0},b.Particles.Arcade.Emitter.prototype.start=function(a,b,c,d){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=0),("undefined"==typeof c||null===c)&&(c=250),"undefined"==typeof d&&(d=0),this.revive(),this.visible=!0,this.on=!0,this._explode=a,this.lifespan=b,this.frequency=c,a?this._quantity=d:this._quantity+=d,this._counter=0,this._timer=this.game.time.now+c},b.Particles.Arcade.Emitter.prototype.emitParticle=function(){var a=this.getFirstExists(!1);null!==a&&(this.width>1||this.height>1?a.reset(this.game.rnd.integerInRange(this.left,this.right),this.game.rnd.integerInRange(this.top,this.bottom)):a.reset(this.emitX,this.emitY),a.angle=0,a.lifespan=this.lifespan,this.particleBringToTop?this.bringToTop(a):this.particleSendToBack&&this.sendToBack(a),this.autoScale?a.setScaleData(this.scaleData):this.minParticleScale!==this.maxParticleScale?a.scale.set(this.game.rnd.realInRange(this.minParticleScale,this.maxParticleScale)):(this._minParticleScale.x!==this._maxParticleScale.x||this._minParticleScale.y!==this._maxParticleScale.y)&&a.scale.set(this.game.rnd.realInRange(this._minParticleScale.x,this._maxParticleScale.x),this.game.rnd.realInRange(this._minParticleScale.y,this._maxParticleScale.y)),a.frame=Array.isArray("object"===this._frames)?this.game.rnd.pick(this._frames):this._frames,this.autoAlpha?a.setAlphaData(this.alphaData):a.alpha=this.game.rnd.realInRange(this.minParticleAlpha,this.maxParticleAlpha),a.blendMode=this.blendMode,a.body.updateBounds(),a.body.bounce.setTo(this.bounce.x,this.bounce.y),a.body.velocity.x=this.game.rnd.integerInRange(this.minParticleSpeed.x,this.maxParticleSpeed.x),a.body.velocity.y=this.game.rnd.integerInRange(this.minParticleSpeed.y,this.maxParticleSpeed.y),a.body.angularVelocity=this.game.rnd.integerInRange(this.minRotation,this.maxRotation),a.body.gravity.y=this.gravity,a.body.drag.x=this.particleDrag.x,a.body.drag.y=this.particleDrag.y,a.body.angularDrag=this.angularDrag,a.onEmit())},b.Particles.Arcade.Emitter.prototype.setSize=function(a,b){this.width=a,this.height=b},b.Particles.Arcade.Emitter.prototype.setXSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.x=a,this.maxParticleSpeed.x=b},b.Particles.Arcade.Emitter.prototype.setYSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.y=a,this.maxParticleSpeed.y=b},b.Particles.Arcade.Emitter.prototype.setRotation=function(a,b){a=a||0,b=b||0,this.minRotation=a,this.maxRotation=b},b.Particles.Arcade.Emitter.prototype.setAlpha=function(a,c,d,e,f){if("undefined"==typeof a&&(a=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=0),"undefined"==typeof e&&(e=b.Easing.Linear.None),"undefined"==typeof f&&(f=!1),this.minParticleAlpha=a,this.maxParticleAlpha=c,this.autoAlpha=!1,d>0&&a!==c){var g={v:a},h=this.game.make.tween(g).to({v:c},d,e);h.yoyo(f),this.alphaData=h.generateData(60),this.alphaData.reverse(),this.autoAlpha=!0}},b.Particles.Arcade.Emitter.prototype.setScale=function(a,c,d,e,f,g,h){if("undefined"==typeof a&&(a=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1),"undefined"==typeof e&&(e=1),"undefined"==typeof f&&(f=0),"undefined"==typeof g&&(g=b.Easing.Linear.None),"undefined"==typeof h&&(h=!1),this.minParticleScale=1,this.maxParticleScale=1,this._minParticleScale.set(a,d),this._maxParticleScale.set(c,e),this.autoScale=!1,f>0&&a!==c||d!==e){var i={x:a,y:d},j=this.game.make.tween(i).to({x:c,y:e},f,g);j.yoyo(h),this.scaleData=j.generateData(60),this.scaleData.reverse(),this.autoScale=!0}},b.Particles.Arcade.Emitter.prototype.at=function(a){a.center?(this.emitX=a.center.x,this.emitY=a.center.y):(this.emitX=a.world.x+a.anchor.x*a.width,this.emitY=a.world.y+a.anchor.y*a.height)},Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"x",{get:function(){return this.emitX},set:function(a){this.emitX=a}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"y",{get:function(){return this.emitY},set:function(a){this.emitY=a}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"left",{get:function(){return Math.floor(this.x-this.width/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"right",{get:function(){return Math.floor(this.x+this.width/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"top",{get:function(){return Math.floor(this.y-this.height/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"bottom",{get:function(){return Math.floor(this.y+this.height/2)}}),b.Tile=function(a,b,c,d,e,f){this.layer=a,this.index=b,this.x=c,this.y=d,this.worldX=c*e,this.worldY=d*f,this.width=e,this.height=f,this.centerX=Math.abs(e/2),this.centerY=Math.abs(f/2),this.alpha=1,this.properties={},this.scanned=!1,this.faceTop=!1,this.faceBottom=!1,this.faceLeft=!1,this.faceRight=!1,this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.collisionCallback=null,this.collisionCallbackContext=this},b.Tile.prototype={containsPoint:function(a,b){return!(athis.right||b>this.bottom)},intersects:function(a,b,c,d){return c<=this.worldX?!1:d<=this.worldY?!1:a>=this.worldX+this.width?!1:b>=this.worldY+this.height?!1:!0},setCollisionCallback:function(a,b){this.collisionCallback=a,this.collisionCallbackContext=b},destroy:function(){this.collisionCallback=null,this.collisionCallbackContext=null,this.properties=null},setCollision:function(a,b,c,d){this.collideLeft=a,this.collideRight=b,this.collideUp=c,this.collideDown=d},resetCollision:function(){this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.faceTop=!1,this.faceBottom=!1,this.faceLeft=!1,this.faceRight=!1},isInteresting:function(a,b){return a&&b?this.collideLeft||this.collideRight||this.collideUp||this.collideDown||this.faceTop||this.faceBottom||this.faceLeft||this.faceRight||this.collisionCallback:a?this.collideLeft||this.collideRight||this.collideUp||this.collideDown:b?this.faceTop||this.faceBottom||this.faceLeft||this.faceRight:!1},copy:function(a){this.index=a.index,this.alpha=a.alpha,this.properties=a.properties,this.collideUp=a.collideUp,this.collideDown=a.collideDown,this.collideLeft=a.collideLeft,this.collideRight=a.collideRight,this.collisionCallback=a.collisionCallback,this.collisionCallbackContext=a.collisionCallbackContext}},b.Tile.prototype.constructor=b.Tile,Object.defineProperty(b.Tile.prototype,"collides",{get:function(){return this.collideLeft||this.collideRight||this.collideUp||this.collideDown}}),Object.defineProperty(b.Tile.prototype,"canCollide",{get:function(){return this.collideLeft||this.collideRight||this.collideUp||this.collideDown||this.collisionCallback}}),Object.defineProperty(b.Tile.prototype,"left",{get:function(){return this.worldX}}),Object.defineProperty(b.Tile.prototype,"right",{get:function(){return this.worldX+this.width}}),Object.defineProperty(b.Tile.prototype,"top",{get:function(){return this.worldY}}),Object.defineProperty(b.Tile.prototype,"bottom",{get:function(){return this.worldY+this.height}}),b.Tilemap=function(a,c,d,e,f,g){this.game=a,this.key=c;var h=b.TilemapParser.parse(this.game,c,d,e,f,g);null!==h&&(this.width=h.width,this.height=h.height,this.tileWidth=h.tileWidth,this.tileHeight=h.tileHeight,this.orientation=h.orientation,this.version=h.version,this.properties=h.properties,this.widthInPixels=h.widthInPixels,this.heightInPixels=h.heightInPixels,this.layers=h.layers,this.tilesets=h.tilesets,this.tiles=h.tiles,this.objects=h.objects,this.collideIndexes=[],this.collision=h.collision,this.images=h.images,this.currentLayer=0,this.debugMap=[],this._results=[],this._tempA=0,this._tempB=0)},b.Tilemap.CSV=0,b.Tilemap.TILED_JSON=1,b.Tilemap.prototype={create:function(a,b,c,d,e,f){return"undefined"==typeof f&&(f=this.game.world),this.width=b,this.height=c,this.setTileSize(d,e),this.layers.length=0,this.createBlankLayer(a,b,c,d,e,f)},setTileSize:function(a,b){this.tileWidth=a,this.tileHeight=b,this.widthInPixels=this.width*a,this.heightInPixels=this.height*b},addTilesetImage:function(a,c,d,e,f,g,h){if("undefined"==typeof d&&(d=this.tileWidth),"undefined"==typeof e&&(e=this.tileHeight),"undefined"==typeof f&&(f=0),"undefined"==typeof g&&(g=0),"undefined"==typeof h&&(h=0),0===d&&(d=32),0===e&&(e=32),"undefined"==typeof c){if("string"!=typeof a)return null;c=a}if("string"==typeof a&&(a=this.getTilesetIndex(a)),this.tilesets[a])return this.tilesets[a].setImage(this.game.cache.getImage(c)),this.tilesets[a];var i=new b.Tileset(c,h,d,e,f,g,{});i.setImage(this.game.cache.getImage(c)),this.tilesets.push(i);for(var j=this.tilesets.length-1,k=f,l=f,m=0,n=0,o=0,p=h;pl;l++)if(this.objects[a][l].gid===c){k=new i(this.game,this.objects[a][l].x,this.objects[a][l].y,d,e),k.name=this.objects[a][l].name,k.visible=this.objects[a][l].visible,k.autoCull=g,k.exists=f,j&&(k.y-=k.height),h.add(k);for(var n in this.objects[a][l].properties)h.set(k,n,this.objects[a][l].properties[n],!1,!1,0)}},createLayer:function(a,c,d,e){"undefined"==typeof c&&(c=this.game.width),"undefined"==typeof d&&(d=this.game.height),"undefined"==typeof e&&(e=this.game.world);var f=a;return"string"==typeof a&&(f=this.getLayerIndex(a)),null===f||f>this.layers.length?void console.warn("Tilemap.createLayer: Invalid layer ID given: "+f):e.add(new b.TilemapLayer(this.game,this,f,c,d))},createBlankLayer:function(a,c,d,e,f,g){if("undefined"==typeof g&&(g=this.game.world),null!==this.getLayerIndex(a))return void console.warn("Tilemap.createBlankLayer: Layer with matching name already exists");for(var h,i=[],j=0;d>j;j++){h=[];for(var k=0;c>k;k++)h.push(null);i.push(h)}var l={name:a,x:0,y:0,width:c,height:d,widthInPixels:c*e,heightInPixels:d*f,alpha:1,visible:!0,properties:{},indexes:[],callbacks:[],bodies:[],data:i};this.layers.push(l),this.currentLayer=this.layers.length-1;var m=l.widthInPixels,n=l.heightInPixels;m>this.game.width&&(m=this.game.width),n>this.game.height&&(n=this.game.height);var i=new b.TilemapLayer(this.game,this,this.layers.length-1,m,n);return i.name=a,g.add(i)},getIndex:function(a,b){for(var c=0;ce;e++)this.layers[d].callbacks[a[e]]={callback:b,callbackContext:c}},setTileLocationCallback:function(a,b,c,d,e,f,g){if(g=this.getLayer(g),this.copy(a,b,c,d,g),!(this._results.length<2))for(var h=1;hd;d++)this.setCollisionByIndex(a[d],b,c,!1);this.calculateFaces(c)},setCollisionBetween:function(a,b,c,d){if("undefined"==typeof c&&(c=!0),d=this.getLayer(d),!(a>b)){for(var e=a;b>=e;e++)this.setCollisionByIndex(e,c,d,!1);this.calculateFaces(d)}},setCollisionByExclusion:function(a,b,c){"undefined"==typeof b&&(b=!0),c=this.getLayer(c);for(var d=0,e=this.tiles.length;e>d;d++)-1===a.indexOf(d)&&this.setCollisionByIndex(d,b,c,!1);this.calculateFaces(c)},setCollisionByIndex:function(a,b,c,d){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=this.currentLayer),"undefined"==typeof d&&(d=!0),b)this.collideIndexes.push(a);else{var e=this.collideIndexes.indexOf(a);e>-1&&this.collideIndexes.splice(e,1)}for(var f=0;ff;f++)for(var h=0,i=this.layers[a].width;i>h;h++){var j=this.layers[a].data[f][h];j&&(b=this.getTileAbove(a,h,f),c=this.getTileBelow(a,h,f),d=this.getTileLeft(a,h,f),e=this.getTileRight(a,h,f),j.collides&&(j.faceTop=!0,j.faceBottom=!0,j.faceLeft=!0,j.faceRight=!0),b&&b.collides&&(j.faceTop=!1),c&&c.collides&&(j.faceBottom=!1),d&&d.collides&&(j.faceLeft=!1),e&&e.collides&&(j.faceRight=!1))}},getTileAbove:function(a,b,c){return c>0?this.layers[a].data[c-1][b]:null},getTileBelow:function(a,b,c){return c0?this.layers[a].data[c][b-1]:null},getTileRight:function(a,b,c){return b=0&&a=0&&b=0&&c=0&&d-1?this.layers[e].data[d][c].setCollision(!0,!0,!0,!0):this.layers[e].data[d][c].resetCollision(),this.layers[e].dirty=!0,this.calculateFaces(e),this.layers[e].data[d][c]}return null},putTileWorldXY:function(a,b,c,d,e,f){return f=this.getLayer(f),b=this.game.math.snapToFloor(b,d)/d,c=this.game.math.snapToFloor(c,e)/e,this.putTile(a,b,c,f)},getTile:function(a,b,c){return c=this.getLayer(c),a>=0&&a=0&&ba&&(a=0),0>b&&(b=0),c>this.layers[e].width&&(c=this.layers[e].width),d>this.layers[e].height&&(d=this.layers[e].height),this._results.length=0,this._results.push({x:a,y:b,width:c,height:d,layer:e});for(var f=b;b+d>f;f++)for(var g=a;a+c>g;g++)this._results.push(this.layers[e].data[f][g]);return this._results},paste:function(a,b,c,d){if("undefined"==typeof a&&(a=0),"undefined"==typeof b&&(b=0),d=this.getLayer(d),c&&!(c.length<2)){for(var e=c[1].x-a,f=c[1].y-b,g=1;g1?this.debugMap[this.layers[this.currentLayer].data[c][d]]?"background: "+this.debugMap[this.layers[this.currentLayer].data[c][d]]:"background: #ffffff":"background: rgb(0, 0, 0)");a+="\n"}b[0]=a,console.log.apply(console,b)},destroy:function(){this.removeAllLayers(),this.data=[],this.game=null}},b.Tilemap.prototype.constructor=b.Tilemap,b.TilemapLayer=function(a,c,d,e,f){this.game=a,this.map=c,this.index=d,this.layer=c.layers[d],this.canvas=b.Canvas.create(e,f,"",!0),this.context=this.canvas.getContext("2d"),this.baseTexture=new PIXI.BaseTexture(this.canvas),this.texture=new PIXI.Texture(this.baseTexture),this.textureFrame=new b.Frame(0,0,0,e,f,"tilemapLayer",a.rnd.uuid()),b.Image.call(this,this.game,0,0,this.texture,this.textureFrame),this.name="",this.type=b.TILEMAPLAYER,this.fixedToCamera=!0,this.cameraOffset=new b.Point(0,0),this.tileColor="rgb(255, 255, 255)",this.debug=!1,this.debugAlpha=.5,this.debugColor="rgba(0, 255, 0, 1)",this.debugFill=!1,this.debugFillColor="rgba(0, 255, 0, 0.2)",this.debugCallbackColor="rgba(255, 0, 0, 1)",this.scrollFactorX=1,this.scrollFactorY=1,this.dirty=!0,this.rayStepRate=4,this._mc={cw:c.tileWidth,ch:c.tileHeight,ga:1,dx:0,dy:0,dw:0,dh:0,tx:0,ty:0,tw:0,th:0,tl:0,maxX:0,maxY:0,startX:0,startY:0,x:0,y:0,prevX:0,prevY:0},this._results=[],this.updateMax()},b.TilemapLayer.prototype=Object.create(b.Image.prototype),b.TilemapLayer.prototype.constructor=b.TilemapLayer,b.TilemapLayer.prototype.postUpdate=function(){b.Image.prototype.postUpdate.call(this),this.scrollX=this.game.camera.x*this.scrollFactorX,this.scrollY=this.game.camera.y*this.scrollFactorY,this.render(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y)},b.TilemapLayer.prototype.resizeWorld=function(){this.game.world.setBounds(0,0,this.layer.widthInPixels,this.layer.heightInPixels)},b.TilemapLayer.prototype._fixX=function(a){return 0>a&&(a=0),1===this.scrollFactorX?a:this._mc.x+(a-this._mc.x/this.scrollFactorX)},b.TilemapLayer.prototype._unfixX=function(a){return 1===this.scrollFactorX?a:this._mc.x/this.scrollFactorX+(a-this._mc.x) -},b.TilemapLayer.prototype._fixY=function(a){return 0>a&&(a=0),1===this.scrollFactorY?a:this._mc.y+(a-this._mc.y/this.scrollFactorY)},b.TilemapLayer.prototype._unfixY=function(a){return 1===this.scrollFactorY?a:this._mc.y/this.scrollFactorY+(a-this._mc.y)},b.TilemapLayer.prototype.getTileX=function(a){return this.game.math.snapToFloor(this._fixX(a),this.map.tileWidth)/this.map.tileWidth},b.TilemapLayer.prototype.getTileY=function(a){return this.game.math.snapToFloor(this._fixY(a),this.map.tileHeight)/this.map.tileHeight},b.TilemapLayer.prototype.getTileXY=function(a,b,c){return c.x=this.getTileX(a),c.y=this.getTileY(b),c},b.TilemapLayer.prototype.getRayCastTiles=function(a,b,c,d){("undefined"==typeof b||null===b)&&(b=this.rayStepRate),"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1);var e=this.getTiles(a.x,a.y,a.width,a.height,c,d);if(0===e.length)return[];for(var f=a.coordinatesOnLine(b),g=f.length,h=[],i=0;ij;j++)if(e[i].containsPoint(f[j][0],f[j][1])){h.push(e[i]);break}return h},b.TilemapLayer.prototype.getTiles=function(a,b,c,d,e,f){"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=!1),a=this._fixX(a),b=this._fixY(b),c>this.layer.widthInPixels&&(c=this.layer.widthInPixels),d>this.layer.heightInPixels&&(d=this.layer.heightInPixels),this._mc.tx=this.game.math.snapToFloor(a,this._mc.cw)/this._mc.cw,this._mc.ty=this.game.math.snapToFloor(b,this._mc.ch)/this._mc.ch,this._mc.tw=(this.game.math.snapToCeil(c,this._mc.cw)+this._mc.cw)/this._mc.cw,this._mc.th=(this.game.math.snapToCeil(d,this._mc.ch)+this._mc.ch)/this._mc.ch,this._results.length=0;for(var g=this._mc.ty;gthis.layer.width&&(this._mc.maxX=this.layer.width),this._mc.maxY>this.layer.height&&(this._mc.maxY=this.layer.height)),this.dirty=!0},b.TilemapLayer.prototype.render=function(){if(this.layer.dirty&&(this.dirty=!0),this.dirty&&this.visible){this._mc.prevX=this._mc.dx,this._mc.prevY=this._mc.dy,this._mc.dx=-(this._mc.x-this._mc.startX*this.map.tileWidth),this._mc.dy=-(this._mc.y-this._mc.startY*this.map.tileHeight),this._mc.tx=this._mc.dx,this._mc.ty=this._mc.dy,this.context.clearRect(0,0,this.canvas.width,this.canvas.height),this.context.fillStyle=this.tileColor;var a,c;this.debug&&(this.context.globalAlpha=this.debugAlpha);for(var d=this._mc.startY,e=this._mc.startY+this._mc.maxY;e>d;d++){this._column=this.layer.data[d];for(var f=this._mc.startX,g=this._mc.startX+this._mc.maxX;g>f;f++)this._column[f]&&(a=this._column[f],c=this.map.tilesets[this.map.tiles[a.index][2]],this.debug===!1&&a.alpha!==this.context.globalAlpha&&(this.context.globalAlpha=a.alpha),c.draw(this.context,Math.floor(this._mc.tx),Math.floor(this._mc.ty),a.index),a.debug&&(this.context.fillStyle="rgba(0, 255, 0, 0.4)",this.context.fillRect(Math.floor(this._mc.tx),Math.floor(this._mc.ty),this.map.tileWidth,this.map.tileHeight))),this._mc.tx+=this.map.tileWidth;this._mc.tx=this._mc.dx,this._mc.ty+=this.map.tileHeight}return this.debug&&(this.context.globalAlpha=1,this.renderDebug()),this.game.renderType===b.WEBGL&&PIXI.updateWebGLTexture(this.baseTexture,this.game.renderer.gl),this.dirty=!1,this.layer.dirty=!1,!0}},b.TilemapLayer.prototype.renderDebug=function(){this._mc.tx=this._mc.dx,this._mc.ty=this._mc.dy,this.context.strokeStyle=this.debugColor,this.context.fillStyle=this.debugFillColor;for(var a=this._mc.startY,b=this._mc.startY+this._mc.maxY;b>a;a++){this._column=this.layer.data[a];for(var c=this._mc.startX,d=this._mc.startX+this._mc.maxX;d>c;c++){var e=this._column[c];e&&(e.faceTop||e.faceBottom||e.faceLeft||e.faceRight)&&(this._mc.tx=Math.floor(this._mc.tx),this.debugFill&&this.context.fillRect(this._mc.tx,this._mc.ty,this._mc.cw,this._mc.ch),this.context.beginPath(),e.faceTop&&(this.context.moveTo(this._mc.tx,this._mc.ty),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty)),e.faceBottom&&(this.context.moveTo(this._mc.tx,this._mc.ty+this._mc.ch),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty+this._mc.ch)),e.faceLeft&&(this.context.moveTo(this._mc.tx,this._mc.ty),this.context.lineTo(this._mc.tx,this._mc.ty+this._mc.ch)),e.faceRight&&(this.context.moveTo(this._mc.tx+this._mc.cw,this._mc.ty),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty+this._mc.ch)),this.context.stroke()),this._mc.tx+=this.map.tileWidth}this._mc.tx=this._mc.dx,this._mc.ty+=this.map.tileHeight}},Object.defineProperty(b.TilemapLayer.prototype,"scrollX",{get:function(){return this._mc.x},set:function(a){a!==this._mc.x&&a>=0&&this.layer.widthInPixels>this.width&&(this._mc.x=a,this._mc.x>this.layer.widthInPixels-this.width&&(this._mc.x=this.layer.widthInPixels-this.width),this._mc.startX=this.game.math.floor(this._mc.x/this.map.tileWidth),this._mc.startX<0&&(this._mc.startX=0),this._mc.startX+this._mc.maxX>this.layer.width&&(this._mc.startX=this.layer.width-this._mc.maxX),this.dirty=!0)}}),Object.defineProperty(b.TilemapLayer.prototype,"scrollY",{get:function(){return this._mc.y},set:function(a){a!==this._mc.y&&a>=0&&this.layer.heightInPixels>this.height&&(this._mc.y=a,this._mc.y>this.layer.heightInPixels-this.height&&(this._mc.y=this.layer.heightInPixels-this.height),this._mc.startY=this.game.math.floor(this._mc.y/this.map.tileHeight),this._mc.startY<0&&(this._mc.startY=0),this._mc.startY+this._mc.maxY>this.layer.height&&(this._mc.startY=this.layer.height-this._mc.maxY),this.dirty=!0)}}),Object.defineProperty(b.TilemapLayer.prototype,"collisionWidth",{get:function(){return this._mc.cw},set:function(a){this._mc.cw=a,this.dirty=!0}}),Object.defineProperty(b.TilemapLayer.prototype,"collisionHeight",{get:function(){return this._mc.ch},set:function(a){this._mc.ch=a,this.dirty=!0}}),b.TilemapParser={parse:function(a,c,d,e,f,g){if("undefined"==typeof d&&(d=32),"undefined"==typeof e&&(e=32),"undefined"==typeof f&&(f=10),"undefined"==typeof g&&(g=10),"undefined"==typeof c)return this.getEmptyData();if(null===c)return this.getEmptyData(d,e,f,g);var h=a.cache.getTilemapData(c);if(h){if(h.format===b.Tilemap.CSV)return this.parseCSV(c,h.data,d,e);if(!h.format||h.format===b.Tilemap.TILED_JSON)return this.parseTiledJSON(h.data)}else console.warn("Phaser.TilemapParser.parse - No map data found for key "+c)},parseCSV:function(a,c,d,e){var f=this.getEmptyData();c=c.trim();for(var g=[],h=c.split("\n"),i=h.length,j=0,k=0;kj;j++)h.push(a.layers[e].data[j]>0?new b.Tile(f,a.layers[e].data[j],g,i.length,a.tilewidth,a.tileheight):null),g++,g===a.layers[e].width&&(i.push(h),g=0,h=[]);f.data=i,d.push(f)}c.layers=d;for(var l=[],e=0;es;s++)if(a.layers[e].objects[s].gid){var t={gid:a.layers[e].objects[s].gid,name:a.layers[e].objects[s].name,x:a.layers[e].objects[s].x,y:a.layers[e].objects[s].y,visible:a.layers[e].objects[s].visible,properties:a.layers[e].objects[s].properties};q[a.layers[e].name].push(t)}else if(a.layers[e].objects[s].polyline){var t={name:a.layers[e].objects[s].name,x:a.layers[e].objects[s].x,y:a.layers[e].objects[s].y,width:a.layers[e].objects[s].width,height:a.layers[e].objects[s].height,visible:a.layers[e].objects[s].visible,properties:a.layers[e].objects[s].properties};t.polyline=[];for(var u=0;u=c)&&(c=32),("undefined"==typeof d||0>=d)&&(d=32),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=0),this.name=a,this.firstgid=b,this.tileWidth=c,this.tileHeight=d,this.tileMargin=e,this.tileSpacing=f,this.properties=g,this.image=null,this.rows=0,this.columns=0,this.total=0,this.drawCoords=[]},b.Tileset.prototype={draw:function(a,b,c,d){this.image&&this.drawCoords[d]&&a.drawImage(this.image,this.drawCoords[d][0],this.drawCoords[d][1],this.tileWidth,this.tileHeight,b,c,this.tileWidth,this.tileHeight)},setImage:function(a){this.image=a,this.rows=Math.round((a.height-this.tileMargin)/(this.tileHeight+this.tileSpacing)),this.columns=Math.round((a.width-this.tileMargin)/(this.tileWidth+this.tileSpacing)),this.total=this.rows*this.columns,this.drawCoords.length=0;for(var b=this.tileMargin,c=this.tileMargin,d=this.firstgid,e=0;e=c&&a<=c+this.width){var d=this.y;if(b>=d&&b<=d+this.height)return!0}return!1},b.Rectangle.prototype.constructor=b.Rectangle,b.EmptyRectangle=new b.Rectangle(0,0,0,0),b.Polygon=function(a){if(a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var c=[],d=0,e=a.length;e>d;d+=2)c.push(new b.Point(a[d],a[d+1]));a=c}this.points=a},b.Polygon.prototype.clone=function(){for(var a=[],c=0;cb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!c)}return c},b.Polygon.prototype.constructor=b.Polygon,b.Circle=function(a,b,c){this.x=a||0,this.y=b||0,this.radius=c||0},b.Circle.prototype.clone=function(){return new b.Circle(this.x,this.y,this.radius)},b.Circle.prototype.contains=function(a,b){if(this.radius<=0)return!1;var c=this.x-a,d=this.y-b,e=this.radius*this.radius;return c*=c,d*=d,e>=c+d},b.Circle.prototype.constructor=b.Circle,b.Ellipse=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},b.Ellipse.prototype.clone=function(){return new b.Ellipse(this.x,this.y,this.width,this.height)},b.Ellipse.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=(a-this.x)/this.width,d=(b-this.y)/this.height;return c*=c,d*=d,1>=c+d},b.Ellipse.prototype.getBounds=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},b.Ellipse.prototype.constructor=b.Ellipse,b.determineMatrixArrayType=function(){return"undefined"!=typeof Float32Array?Float32Array:Array},b.Matrix2=b.determineMatrixArrayType(),b.Matrix=function(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0},b.Matrix.prototype.fromArray=function(a){this.a=a[0],this.b=a[1],this.c=a[3],this.d=a[4],this.tx=a[2],this.ty=a[5]},b.Matrix.prototype.toArray=function(a){this.array||(this.array=new Float32Array(9));var b=this.array;return a?(this.array[0]=this.a,this.array[1]=this.c,this.array[2]=0,this.array[3]=this.b,this.array[4]=this.d,this.array[5]=0,this.array[6]=this.tx,this.array[7]=this.ty,this.array[8]=1):(this.array[0]=this.a,this.array[1]=this.b,this.array[2]=this.tx,this.array[3]=this.c,this.array[4]=this.d,this.array[5]=this.ty,this.array[6]=0,this.array[7]=0,this.array[8]=1),b},b.identityMatrix=new b.Matrix,b.DisplayObject=function(){this.position=new b.Point,this.scale=new b.Point(1,1),this.pivot=new b.Point(0,0),this.rotation=0,this.alpha=1,this.visible=!0,this.hitArea=null,this.buttonMode=!1,this.renderable=!1,this.parent=null,this.stage=null,this.worldAlpha=1,this._interactive=!1,this.defaultCursor="pointer",this.worldTransform=new b.Matrix,this.color=[],this.dynamic=!0,this._sr=0,this._cr=1,this.filterArea=null,this._bounds=new b.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this._cacheAsBitmap=!1,this._cacheIsDirty=!1},b.DisplayObject.prototype.constructor=b.DisplayObject,b.DisplayObject.prototype.setInteractive=function(a){this.interactive=a},Object.defineProperty(b.DisplayObject.prototype,"interactive",{get:function(){return this._interactive},set:function(a){this._interactive=a,this.stage&&(this.stage.dirty=!0)}}),Object.defineProperty(b.DisplayObject.prototype,"worldVisible",{get:function(){var a=this;do{if(!a.visible)return!1;a=a.parent}while(a);return!0}}),Object.defineProperty(b.DisplayObject.prototype,"mask",{get:function(){return this._mask},set:function(a){this._mask&&(this._mask.isMask=!1),this._mask=a,this._mask&&(this._mask.isMask=!0)}}),Object.defineProperty(b.DisplayObject.prototype,"filters",{get:function(){return this._filters},set:function(a){if(a){for(var b=[],c=0;c=0&&b<=this.children.length))throw new Error(a+" The index "+b+" supplied is out of bounds "+this.children.length);a.parent&&a.parent.removeChild(a),a.parent=this,this.children.splice(b,0,a),this.stage&&a.setStageReference(this.stage)},b.DisplayObjectContainer.prototype.swapChildren=function(a,b){if(a!==b){var c=this.children.indexOf(a),d=this.children.indexOf(b);if(0>c||0>d)throw new Error("swapChildren: Both the supplied DisplayObjects must be a child of the caller.");this.children[c]=b,this.children[d]=a}},b.DisplayObjectContainer.prototype.getChildAt=function(a){if(a>=0&&a0&&d>=e){for(var f=this.children.splice(c,e),g=0;ga;a++)this.children[a].updateTransform()},b.DisplayObjectContainer.prototype.getBounds=function(a){if(0===this.children.length)return b.EmptyRectangle;if(a){var c=this.worldTransform;this.worldTransform=a,this.updateTransform(),this.worldTransform=c}for(var d,e,f,g=1/0,h=1/0,i=-1/0,j=-1/0,k=!1,l=0,m=this.children.length;m>l;l++){var n=this.children[l];n.visible&&(k=!0,d=this.children[l].getBounds(a),g=ge?i:e,j=j>f?j:f)}if(!k)return b.EmptyRectangle;var o=this._bounds;return o.x=g,o.y=h,o.width=i-g,o.height=j-h,o},b.DisplayObjectContainer.prototype.getLocalBounds=function(){var a=this.worldTransform;this.worldTransform=b.identityMatrix;for(var c=0,d=this.children.length;d>c;c++)this.children[c].updateTransform();var e=this.getBounds();return this.worldTransform=a,e},b.DisplayObjectContainer.prototype.setStageReference=function(a){this.stage=a,this._interactive&&(this.stage.dirty=!0);for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d.setStageReference(a)}},b.DisplayObjectContainer.prototype.removeStageReference=function(){for(var a=0,b=this.children.length;b>a;a++){var c=this.children[a];c.removeStageReference()}this._interactive&&(this.stage.dirty=!0),this.stage=null},b.DisplayObjectContainer.prototype._renderWebGL=function(a){if(this.visible&&!(this.alpha<=0)){if(this._cacheAsBitmap)return void this._renderCachedSprite(a);var b,c;if(this._mask||this._filters){for(this._mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a),a.spriteBatch.start()),this._filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);a.spriteBatch.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),a.spriteBatch.start()}else for(b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},b.DisplayObjectContainer.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){if(this._cacheAsBitmap)return void this._renderCachedSprite(a);this._mask&&a.maskManager.pushMask(this._mask,a.context);for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},b.Sprite=function(a){b.DisplayObjectContainer.call(this),this.anchor=new b.Point,this.texture=a,this._width=0,this._height=0,this.tint=16777215,this.blendMode=b.blendModes.NORMAL,a.baseTexture.hasLoaded?this.onTextureUpdate():(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},b.Sprite.prototype=Object.create(b.DisplayObjectContainer.prototype),b.Sprite.prototype.constructor=b.Sprite,Object.defineProperty(b.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(a){this.scale.x=a/this.texture.frame.width,this._width=a}}),Object.defineProperty(b.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(a){this.scale.y=a/this.texture.frame.height,this._height=a}}),b.Sprite.prototype.setTexture=function(a){this.texture.baseTexture!==a.baseTexture?(this.textureChange=!0,this.texture=a):this.texture=a,this.cachedTint=16777215,this.updateFrame=!0},b.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},b.Sprite.prototype.getBounds=function(a){var b=this.texture.frame.width,c=this.texture.frame.height,d=b*(1-this.anchor.x),e=b*-this.anchor.x,f=c*(1-this.anchor.y),g=c*-this.anchor.y,h=a||this.worldTransform,i=h.a,j=h.c,k=h.b,l=h.d,m=h.tx,n=h.ty,o=i*e+k*g+m,p=l*g+j*e+n,q=i*d+k*g+m,r=l*g+j*d+n,s=i*d+k*f+m,t=l*f+j*d+n,u=i*e+k*f+m,v=l*f+j*e+n,w=-1/0,x=-1/0,y=1/0,z=1/0;y=y>o?o:y,y=y>q?q:y,y=y>s?s:y,y=y>u?u:y,z=z>p?p:z,z=z>r?r:z,z=z>t?t:z,z=z>v?v:z,w=o>w?o:w,w=q>w?q:w,w=s>w?s:w,w=u>w?u:w,x=p>x?p:x,x=r>x?r:x,x=t>x?t:x,x=v>x?v:x;var A=this._bounds;return A.x=y,A.width=w-y,A.y=z,A.height=x-z,this._currentBounds=A,A},b.Sprite.prototype._renderWebGL=function(a){if(this.visible&&!(this.alpha<=0)){var b,c;if(this._mask||this._filters){var d=a.spriteBatch;for(this._mask&&(d.stop(),a.maskManager.pushMask(this.mask,a),d.start()),this._filters&&(d.flush(),a.filterManager.pushFilter(this._filterBlock)),d.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);d.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),d.start()}else for(a.spriteBatch.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},b.Sprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){var c=this.texture.frame,d=a.context,e=this.texture;if(this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,d.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),this._mask&&a.maskManager.pushMask(this._mask,a.context),c&&c.width&&c.height&&e.baseTexture.source){d.globalAlpha=this.worldAlpha;var f=this.worldTransform;if(a.roundPixels?d.setTransform(f.a,f.c,f.b,f.d,0|f.tx,0|f.ty):d.setTransform(f.a,f.c,f.b,f.d,f.tx,f.ty),a.smoothProperty&&a.scaleMode!==this.texture.baseTexture.scaleMode&&(a.scaleMode=this.texture.baseTexture.scaleMode,d[a.smoothProperty]=a.scaleMode===b.scaleModes.LINEAR),16777215!==this.tint){if(this.cachedTint!==this.tint){if(!e.baseTexture.hasLoaded)return;this.cachedTint=this.tint,this.tintedTexture=b.CanvasTinter.getTintedTexture(this,this.tint)}d.drawImage(this.tintedTexture,0,0,c.width,c.height,this.anchor.x*-c.width,this.anchor.y*-c.height,c.width,c.height)}else if(e.trim){var g=e.trim;d.drawImage(this.texture.baseTexture.source,c.x,c.y,c.width,c.height,g.x-this.anchor.x*g.width,g.y-this.anchor.y*g.height,c.width,c.height)}else d.drawImage(this.texture.baseTexture.source,c.x,c.y,c.width,c.height,this.anchor.x*-c.width,this.anchor.y*-c.height,c.width,c.height)}for(var h=0,i=this.children.length;i>h;h++){var j=this.children[h];j._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},b.Sprite.fromFrame=function(a){var c=b.TextureCache[a];if(!c)throw new Error('The frameId "'+a+'" does not exist in the texture cache'+this);return new b.Sprite(c)},b.Sprite.fromImage=function(a,c,d){var e=b.Texture.fromImage(a,c,d);return new b.Sprite(e)},b.SpriteBatch=function(a){b.DisplayObjectContainer.call(this),this.textureThing=a,this.ready=!1},b.SpriteBatch.prototype=Object.create(b.DisplayObjectContainer.prototype),b.SpriteBatch.constructor=b.SpriteBatch,b.SpriteBatch.prototype.initWebGL=function(a){this.fastSpriteBatch=new b.WebGLFastSpriteBatch(a),this.ready=!0},b.SpriteBatch.prototype.updateTransform=function(){b.DisplayObject.prototype.updateTransform.call(this)},b.SpriteBatch.prototype._renderWebGL=function(a){!this.visible||this.alpha<=0||!this.children.length||(this.ready||this.initWebGL(a.gl),a.spriteBatch.stop(),a.shaderManager.activateShader(a.shaderManager.fastShader),this.fastSpriteBatch.begin(this,a),this.fastSpriteBatch.render(this),a.shaderManager.activateShader(a.shaderManager.defaultShader),a.spriteBatch.start())},b.SpriteBatch.prototype._renderCanvas=function(a){var c=a.context;c.globalAlpha=this.worldAlpha,b.DisplayObject.prototype.updateTransform.call(this);for(var d=this.worldTransform,e=!0,f=0;fe?(g>0&&(b+="\n"),b+=f[g],e=this.style.wordWrapWidth-h):(e-=i,b+=" "+f[g])}d=2?parseInt(c[c.length-2],10):b.BitmapText.fonts[this.fontName].size,this.dirty=!0,this.tint=a.tint},b.BitmapText.prototype.updateText=function(){for(var a=b.BitmapText.fonts[this.fontName],c=new b.Point,d=null,e=[],f=0,g=[],h=0,i=this.fontSize/a.size,j=0;j=j;j++){var n=0;"right"===this.style.align?n=f-g[j]:"center"===this.style.align&&(n=(f-g[j])/2),m.push(n)}var o=this.children.length,p=e.length,q=this.tint||16777215;for(j=0;p>j;j++){var r=o>j?this.children[j]:this._pool.pop();r?r.setTexture(e[j].texture):r=new b.Sprite(e[j].texture),r.position.x=(e[j].position.x+m[e[j].line])*i,r.position.y=e[j].position.y*i,r.scale.x=r.scale.y=i,r.tint=q,r.parent||this.addChild(r)}for(;this.children.length>p;){var s=this.getChildAt(this.children.length-1);this._pool.push(s),this.removeChild(s)}this.textWidth=f*i,this.textHeight=(c.y+a.lineHeight)*i},b.BitmapText.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.dirty=!1),b.DisplayObjectContainer.prototype.updateTransform.call(this)},b.BitmapText.fonts={},b.Stage=function(a){b.DisplayObjectContainer.call(this),this.worldTransform=new b.Matrix,this.interactive=!0,this.interactionManager=new b.InteractionManager(this),this.dirty=!0,this.stage=this,this.stage.hitArea=new b.Rectangle(0,0,1e5,1e5),this.setBackgroundColor(a)},b.Stage.prototype=Object.create(b.DisplayObjectContainer.prototype),b.Stage.prototype.constructor=b.Stage,b.Stage.prototype.setInteractionDelegate=function(a){this.interactionManager.setTargetDomElement(a)},b.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var a=0,b=this.children.length;b>a;a++)this.children[a].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},b.Stage.prototype.setBackgroundColor=function(a){this.backgroundColor=a||0,this.backgroundColorSplit=b.hex2rgb(this.backgroundColor);var c=this.backgroundColor.toString(16);c="000000".substr(0,6-c.length)+c,this.backgroundColorString="#"+c},b.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global};for(var c=0,d=["ms","moz","webkit","o"],e=0;e>16&255)/255,(a>>8&255)/255,(255&a)/255]},b.rgb2hex=function(a){return(255*a[0]<<16)+(255*a[1]<<8)+255*a[2]},"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),b.AjaxRequest=function(){var a=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new window.XMLHttpRequest:!1;for(var b=0;b0&&0===(a&a-1))return a;for(var b=1;a>b;)b<<=1;return b},b.EventTarget=function(){var a={};this.addEventListener=this.on=function(b,c){void 0===a[b]&&(a[b]=[]),-1===a[b].indexOf(c)&&a[b].push(c)},this.dispatchEvent=this.emit=function(b){if(a[b.type]&&a[b.type].length)for(var c=0,d=a[b.type].length;d>c;c++)a[b.type][c](b)},this.removeEventListener=this.off=function(b,c){var d=a[b].indexOf(c);-1!==d&&a[b].splice(d,1)},this.removeAllEventListeners=function(b){var c=a[b];c&&(c.length=0)}},b.PolyK={},b.PolyK.Triangulate=function(a){var c=!0,d=a.length>>1;if(3>d)return[];for(var e=[],f=[],g=0;d>g;g++)f.push(g);g=0;for(var h=d;h>3;){var i=f[(g+0)%h],j=f[(g+1)%h],k=f[(g+2)%h],l=a[2*i],m=a[2*i+1],n=a[2*j],o=a[2*j+1],p=a[2*k],q=a[2*k+1],r=!1;if(b.PolyK._convex(l,m,n,o,p,q,c)){r=!0;for(var s=0;h>s;s++){var t=f[s];if(t!==i&&t!==j&&t!==k&&b.PolyK._PointInTriangle(a[2*t],a[2*t+1],l,m,n,o,p,q)){r=!1;break}}}if(r)e.push(i,j,k),f.splice((g+1)%h,1),h--,g=0;else if(g++>3*h){if(!c)return window.console.log("PIXI Warning: shape too complex to fill"),[];for(e=[],f=[],g=0;d>g;g++)f.push(g);g=0,h=d,c=!1}}return e.push(f[0],f[1],f[2]),e},b.PolyK._PointInTriangle=function(a,b,c,d,e,f,g,h){var i=g-c,j=h-d,k=e-c,l=f-d,m=a-c,n=b-d,o=i*i+j*j,p=i*k+j*l,q=i*m+j*n,r=k*k+l*l,s=k*m+l*n,t=1/(o*r-p*p),u=(r*q-p*s)*t,v=(o*s-p*q)*t;return u>=0&&v>=0&&1>u+v},b.PolyK._convex=function(a,b,c,d,e,f,g){return(b-d)*(e-c)+(c-a)*(f-d)>=0===g},b.initDefaultShaders=function(){},b.CompileVertexShader=function(a,c){return b._CompileShader(a,c,a.VERTEX_SHADER)},b.CompileFragmentShader=function(a,c){return b._CompileShader(a,c,a.FRAGMENT_SHADER)},b._CompileShader=function(a,b,c){var d=b.join("\n"),e=a.createShader(c);return a.shaderSource(e,d),a.compileShader(e),a.getShaderParameter(e,a.COMPILE_STATUS)?e:(window.console.log(a.getShaderInfoLog(e)),null)},b.compileProgram=function(a,c,d){var e=b.CompileFragmentShader(a,d),f=b.CompileVertexShader(a,c),g=a.createProgram();return a.attachShader(g,f),a.attachShader(g,e),a.linkProgram(g),a.getProgramParameter(g,a.LINK_STATUS)||window.console.log("Could not initialise shaders"),g},b.PixiShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"],this.textureCount=0,this.attributes=[],this.init()},b.PixiShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc||b.PixiShader.defaultVertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.dimensions=a.getUniformLocation(c,"dimensions"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.colorAttribute=a.getAttribLocation(c,"aColor"),-1===this.colorAttribute&&(this.colorAttribute=2),this.attributes=[this.aVertexPosition,this.aTextureCoord,this.colorAttribute];for(var d in this.uniforms)this.uniforms[d].uniformLocation=a.getUniformLocation(c,d);this.initUniforms(),this.program=c},b.PixiShader.prototype.initUniforms=function(){this.textureCount=1;var a,b=this.gl;for(var c in this.uniforms){a=this.uniforms[c];var d=a.type;"sampler2D"===d?(a._init=!1,null!==a.value&&this.initSampler2D(a)):"mat2"===d||"mat3"===d||"mat4"===d?(a.glMatrix=!0,a.glValueLength=1,"mat2"===d?a.glFunc=b.uniformMatrix2fv:"mat3"===d?a.glFunc=b.uniformMatrix3fv:"mat4"===d&&(a.glFunc=b.uniformMatrix4fv)):(a.glFunc=b["uniform"+d],a.glValueLength="2f"===d||"2i"===d?2:"3f"===d||"3i"===d?3:"4f"===d||"4i"===d?4:1)}},b.PixiShader.prototype.initSampler2D=function(a){if(a.value&&a.value.baseTexture&&a.value.baseTexture.hasLoaded){var b=this.gl;if(b.activeTexture(b["TEXTURE"+this.textureCount]),b.bindTexture(b.TEXTURE_2D,a.value.baseTexture._glTextures[b.id]),a.textureData){var c=a.textureData,d=c.magFilter?c.magFilter:b.LINEAR,e=c.minFilter?c.minFilter:b.LINEAR,f=c.wrapS?c.wrapS:b.CLAMP_TO_EDGE,g=c.wrapT?c.wrapT:b.CLAMP_TO_EDGE,h=c.luminance?b.LUMINANCE:b.RGBA;if(c.repeat&&(f=b.REPEAT,g=b.REPEAT),b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL,!!c.flipY),c.width){var i=c.width?c.width:512,j=c.height?c.height:2,k=c.border?c.border:0;b.texImage2D(b.TEXTURE_2D,0,h,i,j,k,h,b.UNSIGNED_BYTE,null)}else b.texImage2D(b.TEXTURE_2D,0,h,b.RGBA,b.UNSIGNED_BYTE,a.value.baseTexture.source);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,d),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,e),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,f),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,g)}b.uniform1i(a.uniformLocation,this.textureCount),a._init=!0,this.textureCount++}},b.PixiShader.prototype.syncUniforms=function(){this.textureCount=1;var a,c=this.gl;for(var d in this.uniforms)a=this.uniforms[d],1===a.glValueLength?a.glMatrix===!0?a.glFunc.call(c,a.uniformLocation,a.transpose,a.value):a.glFunc.call(c,a.uniformLocation,a.value):2===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y):3===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y,a.value.z):4===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y,a.value.z,a.value.w):"sampler2D"===a.type&&(a._init?(c.activeTexture(c["TEXTURE"+this.textureCount]),c.bindTexture(c.TEXTURE_2D,a.value.baseTexture._glTextures[c.id]||b.createWebGLTexture(a.value.baseTexture,c)),c.uniform1i(a.uniformLocation,this.textureCount),this.textureCount++):this.initSampler2D(a)) +},b.PixiShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attributes=null},b.PixiShader.defaultVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec2 aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","varying vec2 vTextureCoord;","varying vec4 vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {"," gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vec3 color = mod(vec3(aColor.y/65536.0, aColor.y/256.0, aColor.y), 256.0) / 256.0;"," vColor = vec4(color * aColor.x, aColor.x);","}"],b.PixiFastShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform mat3 uMatrix;","varying vec2 vTextureCoord;","varying float vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {"," vec2 v;"," vec2 sv = aVertexPosition * aScale;"," v.x = (sv.x) * cos(aRotation) - (sv.y) * sin(aRotation);"," v.y = (sv.x) * sin(aRotation) + (sv.y) * cos(aRotation);"," v = ( uMatrix * vec3(v + aPositionCoord , 1.0) ).xy ;"," gl_Position = vec4( ( v / projectionVector) + center , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"],this.textureCount=0,this.init()},b.PixiFastShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.dimensions=a.getUniformLocation(c,"dimensions"),this.uMatrix=a.getUniformLocation(c,"uMatrix"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aPositionCoord=a.getAttribLocation(c,"aPositionCoord"),this.aScale=a.getAttribLocation(c,"aScale"),this.aRotation=a.getAttribLocation(c,"aRotation"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.colorAttribute=a.getAttribLocation(c,"aColor"),-1===this.colorAttribute&&(this.colorAttribute=2),this.attributes=[this.aVertexPosition,this.aPositionCoord,this.aScale,this.aRotation,this.aTextureCoord,this.colorAttribute],this.program=c},b.PixiFastShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attributes=null},b.StripShader=function(){this.program=null,this.fragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform float alpha;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));"," gl_FragColor = gl_FragColor * alpha;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","varying vec2 vTextureCoord;","uniform vec2 offsetVector;","varying float vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition, 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / projectionVector.y + 1.0 , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"]},b.StripShader.prototype.init=function(){var a=b.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.colorAttribute=a.getAttribLocation(c,"aColor"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.translationMatrix=a.getUniformLocation(c,"translationMatrix"),this.alpha=a.getUniformLocation(c,"alpha"),this.program=c},b.PrimitiveShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision mediump float;","varying vec4 vColor;","void main(void) {"," gl_FragColor = vColor;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform float alpha;","uniform vec3 tint;","varying vec4 vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"],this.init()},b.PrimitiveShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.tintColor=a.getUniformLocation(c,"tint"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.colorAttribute=a.getAttribLocation(c,"aColor"),this.attributes=[this.aVertexPosition,this.colorAttribute],this.translationMatrix=a.getUniformLocation(c,"translationMatrix"),this.alpha=a.getUniformLocation(c,"alpha"),this.program=c},b.PrimitiveShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attribute=null},b.WebGLGraphics=function(){},b.WebGLGraphics.renderGraphics=function(a,c){var d=c.gl,e=c.projection,f=c.offset,g=c.shaderManager.primitiveShader;a._webGL[d.id]||(a._webGL[d.id]={points:[],indices:[],lastIndex:0,buffer:d.createBuffer(),indexBuffer:d.createBuffer()});var h=a._webGL[d.id];a.dirty&&(a.dirty=!1,a.clearDirty&&(a.clearDirty=!1,h.lastIndex=0,h.points=[],h.indices=[]),b.WebGLGraphics.updateGraphics(a,d)),c.shaderManager.activatePrimitiveShader(),d.blendFunc(d.ONE,d.ONE_MINUS_SRC_ALPHA),d.uniformMatrix3fv(g.translationMatrix,!1,a.worldTransform.toArray(!0)),d.uniform2f(g.projectionVector,e.x,-e.y),d.uniform2f(g.offsetVector,-f.x,-f.y),d.uniform3fv(g.tintColor,b.hex2rgb(a.tint)),d.uniform1f(g.alpha,a.worldAlpha),d.bindBuffer(d.ARRAY_BUFFER,h.buffer),d.vertexAttribPointer(g.aVertexPosition,2,d.FLOAT,!1,24,0),d.vertexAttribPointer(g.colorAttribute,4,d.FLOAT,!1,24,8),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,h.indexBuffer),d.drawElements(d.TRIANGLE_STRIP,h.indices.length,d.UNSIGNED_SHORT,0),c.shaderManager.deactivatePrimitiveShader()},b.WebGLGraphics.updateGraphics=function(a,c){for(var d=a._webGL[c.id],e=d.lastIndex;e3&&b.WebGLGraphics.buildPoly(f,d),f.lineWidth>0&&b.WebGLGraphics.buildLine(f,d)):f.type===b.Graphics.RECT?b.WebGLGraphics.buildRectangle(f,d):(f.type===b.Graphics.CIRC||f.type===b.Graphics.ELIP)&&b.WebGLGraphics.buildCircle(f,d)}d.lastIndex=a.graphicsData.length,d.glPoints=new Float32Array(d.points),c.bindBuffer(c.ARRAY_BUFFER,d.buffer),c.bufferData(c.ARRAY_BUFFER,d.glPoints,c.STATIC_DRAW),d.glIndicies=new Uint16Array(d.indices),c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,d.indexBuffer),c.bufferData(c.ELEMENT_ARRAY_BUFFER,d.glIndicies,c.STATIC_DRAW)},b.WebGLGraphics.buildRectangle=function(a,c){var d=a.points,e=d[0],f=d[1],g=d[2],h=d[3];if(a.fill){var i=b.hex2rgb(a.fillColor),j=a.fillAlpha,k=i[0]*j,l=i[1]*j,m=i[2]*j,n=c.points,o=c.indices,p=n.length/6;n.push(e,f),n.push(k,l,m,j),n.push(e+g,f),n.push(k,l,m,j),n.push(e,f+h),n.push(k,l,m,j),n.push(e+g,f+h),n.push(k,l,m,j),o.push(p,p,p+1,p+2,p+3,p+3)}if(a.lineWidth){var q=a.points;a.points=[e,f,e+g,f,e+g,f+h,e,f+h,e,f],b.WebGLGraphics.buildLine(a,c),a.points=q}},b.WebGLGraphics.buildCircle=function(a,c){var d=a.points,e=d[0],f=d[1],g=d[2],h=d[3],i=40,j=2*Math.PI/i,k=0;if(a.fill){var l=b.hex2rgb(a.fillColor),m=a.fillAlpha,n=l[0]*m,o=l[1]*m,p=l[2]*m,q=c.points,r=c.indices,s=q.length/6;for(r.push(s),k=0;i+1>k;k++)q.push(e,f,n,o,p,m),q.push(e+Math.sin(j*k)*g,f+Math.cos(j*k)*h,n,o,p,m),r.push(s++,s++);r.push(s-1)}if(a.lineWidth){var t=a.points;for(a.points=[],k=0;i+1>k;k++)a.points.push(e+Math.sin(j*k)*g,f+Math.cos(j*k)*h);b.WebGLGraphics.buildLine(a,c),a.points=t}},b.WebGLGraphics.buildLine=function(a,c){var d=0,e=a.points;if(0!==e.length){if(a.lineWidth%2)for(d=0;dd;d++)l=e[2*(d-1)],m=e[2*(d-1)+1],n=e[2*d],o=e[2*d+1],p=e[2*(d+1)],q=e[2*(d+1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,t=-(o-q),u=n-p,F=Math.sqrt(t*t+u*u),t/=F,u/=F,t*=L,u*=L,x=-s+m-(-s+o),y=-r+n-(-r+l),z=(-r+l)*(-s+o)-(-r+n)*(-s+m),A=-u+q-(-u+o),B=-t+n-(-t+p),C=(-t+p)*(-u+o)-(-t+n)*(-u+q),D=x*B-A*y,Math.abs(D)<.1?(D+=10.1,G.push(n-r,o-s,O,P,Q,N),G.push(n+r,o+s,O,P,Q,N)):(j=(y*C-B*z)/D,k=(A*z-x*C)/D,E=(j-n)*(j-n)+(k-o)+(k-o),E>19600?(v=r-t,w=s-u,F=Math.sqrt(v*v+w*w),v/=F,w/=F,v*=L,w*=L,G.push(n-v,o-w),G.push(O,P,Q,N),G.push(n+v,o+w),G.push(O,P,Q,N),G.push(n-v,o-w),G.push(O,P,Q,N),J++):(G.push(j,k),G.push(O,P,Q,N),G.push(n-(j-n),o-(k-o)),G.push(O,P,Q,N)));for(l=e[2*(I-2)],m=e[2*(I-2)+1],n=e[2*(I-1)],o=e[2*(I-1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,G.push(n-r,o-s),G.push(O,P,Q,N),G.push(n+r,o+s),G.push(O,P,Q,N),H.push(K),d=0;J>d;d++)H.push(K++);H.push(K-1)}},b.WebGLGraphics.buildPoly=function(a,c){var d=a.points;if(!(d.length<6)){var e=c.points,f=c.indices,g=d.length/2,h=b.hex2rgb(a.fillColor),i=a.fillAlpha,j=h[0]*i,k=h[1]*i,l=h[2]*i,m=b.PolyK.Triangulate(d),n=e.length/6,o=0;for(o=0;oo;o++)e.push(d[2*o],d[2*o+1],j,k,l,i)}},b.glContexts=[],b.WebGLRenderer=function(a,c,d,e,f){b.defaultRenderer||(b.defaultRenderer=this),this.type=b.WEBGL_RENDERER,this.transparent=!!e,this.width=a||800,this.height=c||600,this.view=d||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height,this.contextLost=this.handleContextLost.bind(this),this.contextRestoredLost=this.handleContextRestored.bind(this),this.view.addEventListener("webglcontextlost",this.contextLost,!1),this.view.addEventListener("webglcontextrestored",this.contextRestoredLost,!1),this.options={alpha:this.transparent,antialias:!!f,premultipliedAlpha:!!e,stencil:!0};try{this.gl=this.view.getContext("experimental-webgl",this.options)}catch(g){try{this.gl=this.view.getContext("webgl",this.options)}catch(h){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}var i=this.gl;this.glContextId=i.id=b.WebGLRenderer.glContextId++,b.glContexts[this.glContextId]=i,b.blendModesWebGL||(b.blendModesWebGL=[],b.blendModesWebGL[b.blendModes.NORMAL]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.ADD]=[i.SRC_ALPHA,i.DST_ALPHA],b.blendModesWebGL[b.blendModes.MULTIPLY]=[i.DST_COLOR,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SCREEN]=[i.SRC_ALPHA,i.ONE],b.blendModesWebGL[b.blendModes.OVERLAY]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.DARKEN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.LIGHTEN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR_DODGE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR_BURN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.HARD_LIGHT]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SOFT_LIGHT]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.DIFFERENCE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.EXCLUSION]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.HUE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SATURATION]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.LUMINOSITY]=[i.ONE,i.ONE_MINUS_SRC_ALPHA]),this.projection=new b.Point,this.projection.x=this.width/2,this.projection.y=-this.height/2,this.offset=new b.Point(0,0),this.resize(this.width,this.height),this.contextLost=!1,this.shaderManager=new b.WebGLShaderManager(i),this.spriteBatch=new b.WebGLSpriteBatch(i),this.maskManager=new b.WebGLMaskManager(i),this.filterManager=new b.WebGLFilterManager(i,this.transparent),this.renderSession={},this.renderSession.gl=this.gl,this.renderSession.drawCount=0,this.renderSession.shaderManager=this.shaderManager,this.renderSession.maskManager=this.maskManager,this.renderSession.filterManager=this.filterManager,this.renderSession.spriteBatch=this.spriteBatch,this.renderSession.renderer=this,i.useProgram(this.shaderManager.defaultShader.program),i.disable(i.DEPTH_TEST),i.disable(i.CULL_FACE),i.enable(i.BLEND),i.colorMask(!0,!0,!0,this.transparent)},b.WebGLRenderer.prototype.constructor=b.WebGLRenderer,b.WebGLRenderer.prototype.render=function(a){if(!this.contextLost){this.__stage!==a&&(a.interactive&&a.interactionManager.removeEvents(),this.__stage=a),b.WebGLRenderer.updateTextures(),a.updateTransform(),a._interactive&&(a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this)));var c=this.gl;c.viewport(0,0,this.width,this.height),c.bindFramebuffer(c.FRAMEBUFFER,null),this.transparent?c.clearColor(0,0,0,0):c.clearColor(a.backgroundColorSplit[0],a.backgroundColorSplit[1],a.backgroundColorSplit[2],1),c.clear(c.COLOR_BUFFER_BIT),this.renderDisplayObject(a,this.projection),a.interactive?a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this)):a._interactiveEventsAdded&&(a._interactiveEventsAdded=!1,a.interactionManager.setTarget(this))}},b.WebGLRenderer.prototype.renderDisplayObject=function(a,b,c){this.renderSession.drawCount=0,this.renderSession.currentBlendMode=9999,this.renderSession.projection=b,this.renderSession.offset=this.offset,this.spriteBatch.begin(this.renderSession),this.filterManager.begin(this.renderSession,c),a._renderWebGL(this.renderSession),this.spriteBatch.end()},b.WebGLRenderer.updateTextures=function(){var a=0;for(a=0;a=0;c--){var d=a._glTextures[c],e=b.glContexts[c];e&&d&&e.deleteTexture(d)}a._glTextures.length=0},b.WebGLRenderer.updateTextureFrame=function(a){a.updateFrame=!1,a._updateWebGLuvs()},b.WebGLRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b,this.gl.viewport(0,0,this.width,this.height),this.projection.x=this.width/2,this.projection.y=-this.height/2},b.createWebGLTexture=function(a,c){return a.hasLoaded&&(a._glTextures[c.id]=c.createTexture(),c.bindTexture(c.TEXTURE_2D,a._glTextures[c.id]),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,a.source),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),a._powerOf2?(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.REPEAT),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.REPEAT)):(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE)),c.bindTexture(c.TEXTURE_2D,null)),a._glTextures[c.id]},b.updateWebGLTexture=function(a,c){a._glTextures[c.id]&&(c.bindTexture(c.TEXTURE_2D,a._glTextures[c.id]),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,a.source),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),a._powerOf2?(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.REPEAT),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.REPEAT)):(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE)),c.bindTexture(c.TEXTURE_2D,null))},b.WebGLRenderer.prototype.handleContextLost=function(a){a.preventDefault(),this.contextLost=!0},b.WebGLRenderer.prototype.handleContextRestored=function(){try{this.gl=this.view.getContext("experimental-webgl",this.options)}catch(a){try{this.gl=this.view.getContext("webgl",this.options)}catch(c){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}var d=this.gl;d.id=b.WebGLRenderer.glContextId++,this.shaderManager.setContext(d),this.spriteBatch.setContext(d),this.maskManager.setContext(d),this.filterManager.setContext(d),this.renderSession.gl=this.gl,d.disable(d.DEPTH_TEST),d.disable(d.CULL_FACE),d.enable(d.BLEND),d.colorMask(!0,!0,!0,this.transparent),this.gl.viewport(0,0,this.width,this.height);for(var e in b.TextureCache){var f=b.TextureCache[e].baseTexture;f._glTextures=[]}this.contextLost=!1},b.WebGLRenderer.prototype.destroy=function(){this.view.removeEventListener("webglcontextlost",this.contextLost),this.view.removeEventListener("webglcontextrestored",this.contextRestoredLost),b.glContexts[this.glContextId]=null,this.projection=null,this.offset=null,this.shaderManager.destroy(),this.spriteBatch.destroy(),this.maskManager.destroy(),this.filterManager.destroy(),this.shaderManager=null,this.spriteBatch=null,this.maskManager=null,this.filterManager=null,this.gl=null,this.renderSession=null},b.WebGLRenderer.glContextId=0,b.WebGLMaskManager=function(a){this.maskStack=[],this.maskPosition=0,this.setContext(a)},b.WebGLMaskManager.prototype.setContext=function(a){this.gl=a},b.WebGLMaskManager.prototype.pushMask=function(a,c){var d=this.gl;0===this.maskStack.length&&(d.enable(d.STENCIL_TEST),d.stencilFunc(d.ALWAYS,1,1)),this.maskStack.push(a),d.colorMask(!1,!1,!1,!1),d.stencilOp(d.KEEP,d.KEEP,d.INCR),b.WebGLGraphics.renderGraphics(a,c),d.colorMask(!0,!0,!0,!0),d.stencilFunc(d.NOTEQUAL,0,this.maskStack.length),d.stencilOp(d.KEEP,d.KEEP,d.KEEP)},b.WebGLMaskManager.prototype.popMask=function(a){var c=this.gl,d=this.maskStack.pop();d&&(c.colorMask(!1,!1,!1,!1),c.stencilOp(c.KEEP,c.KEEP,c.DECR),b.WebGLGraphics.renderGraphics(d,a),c.colorMask(!0,!0,!0,!0),c.stencilFunc(c.NOTEQUAL,0,this.maskStack.length),c.stencilOp(c.KEEP,c.KEEP,c.KEEP)),0===this.maskStack.length&&c.disable(c.STENCIL_TEST)},b.WebGLMaskManager.prototype.destroy=function(){this.maskStack=null,this.gl=null},b.WebGLShaderManager=function(a){this.maxAttibs=10,this.attribState=[],this.tempAttribState=[];for(var b=0;bd;d+=6,e+=4)this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3;this.drawing=!1,this.currentBatchSize=0,this.currentBaseTexture=null,this.setContext(a)},b.WebGLSpriteBatch.prototype.setContext=function(a){this.gl=a,this.vertexBuffer=a.createBuffer(),this.indexBuffer=a.createBuffer(),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,this.vertices,a.DYNAMIC_DRAW),this.currentBlendMode=99999},b.WebGLSpriteBatch.prototype.begin=function(a){this.renderSession=a,this.shader=this.renderSession.shaderManager.defaultShader,this.start()},b.WebGLSpriteBatch.prototype.end=function(){this.flush()},b.WebGLSpriteBatch.prototype.render=function(a){var b=a.texture;(b.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=b.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode);var c=a._uvs||a.texture._uvs;if(c){var d,e,f,g,h=a.worldAlpha,i=a.tint,j=this.vertices,k=a.anchor.x,l=a.anchor.y;if(a.texture.trim){var m=a.texture.trim;e=m.x-k*m.width,d=e+b.frame.width,g=m.y-l*m.height,f=g+b.frame.height}else d=b.frame.width*(1-k),e=b.frame.width*-k,f=b.frame.height*(1-l),g=b.frame.height*-l;var n=4*this.currentBatchSize*this.vertSize,o=a.worldTransform,p=o.a,q=o.c,r=o.b,s=o.d,t=o.tx,u=o.ty;j[n++]=p*e+r*g+t,j[n++]=s*g+q*e+u,j[n++]=c.x0,j[n++]=c.y0,j[n++]=h,j[n++]=i,j[n++]=p*d+r*g+t,j[n++]=s*g+q*d+u,j[n++]=c.x1,j[n++]=c.y1,j[n++]=h,j[n++]=i,j[n++]=p*d+r*f+t,j[n++]=s*f+q*d+u,j[n++]=c.x2,j[n++]=c.y2,j[n++]=h,j[n++]=i,j[n++]=p*e+r*f+t,j[n++]=s*f+q*e+u,j[n++]=c.x3,j[n++]=c.y3,j[n++]=h,j[n++]=i,this.currentBatchSize++}},b.WebGLSpriteBatch.prototype.renderTilingSprite=function(a){var c=a.tilingTexture;(c.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=c.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode),a._uvs||(a._uvs=new b.TextureUvs);var d=a._uvs;a.tilePosition.x%=c.baseTexture.width*a.tileScaleOffset.x,a.tilePosition.y%=c.baseTexture.height*a.tileScaleOffset.y;var e=a.tilePosition.x/(c.baseTexture.width*a.tileScaleOffset.x),f=a.tilePosition.y/(c.baseTexture.height*a.tileScaleOffset.y),g=a.width/c.baseTexture.width/(a.tileScale.x*a.tileScaleOffset.x),h=a.height/c.baseTexture.height/(a.tileScale.y*a.tileScaleOffset.y);d.x0=0-e,d.y0=0-f,d.x1=1*g-e,d.y1=0-f,d.x2=1*g-e,d.y2=1*h-f,d.x3=0-e,d.y3=1*h-f;var i=a.worldAlpha,j=a.tint,k=this.vertices,l=a.width,m=a.height,n=a.anchor.x,o=a.anchor.y,p=l*(1-n),q=l*-n,r=m*(1-o),s=m*-o,t=4*this.currentBatchSize*this.vertSize,u=a.worldTransform,v=u.a,w=u.c,x=u.b,y=u.d,z=u.tx,A=u.ty;k[t++]=v*q+x*s+z,k[t++]=y*s+w*q+A,k[t++]=d.x0,k[t++]=d.y0,k[t++]=i,k[t++]=j,k[t++]=v*p+x*s+z,k[t++]=y*s+w*p+A,k[t++]=d.x1,k[t++]=d.y1,k[t++]=i,k[t++]=j,k[t++]=v*p+x*r+z,k[t++]=y*r+w*p+A,k[t++]=d.x2,k[t++]=d.y2,k[t++]=i,k[t++]=j,k[t++]=v*q+x*r+z,k[t++]=y*r+w*q+A,k[t++]=d.x3,k[t++]=d.y3,k[t++]=i,k[t++]=j,this.currentBatchSize++},b.WebGLSpriteBatch.prototype.flush=function(){if(0!==this.currentBatchSize){var a=this.gl;if(a.bindTexture(a.TEXTURE_2D,this.currentBaseTexture._glTextures[a.id]||b.createWebGLTexture(this.currentBaseTexture,a)),this.currentBatchSize>.5*this.size)a.bufferSubData(a.ARRAY_BUFFER,0,this.vertices);else{var c=this.vertices.subarray(0,4*this.currentBatchSize*this.vertSize);a.bufferSubData(a.ARRAY_BUFFER,0,c)}a.drawElements(a.TRIANGLES,6*this.currentBatchSize,a.UNSIGNED_SHORT,0),this.currentBatchSize=0,this.renderSession.drawCount++}},b.WebGLSpriteBatch.prototype.stop=function(){this.flush()},b.WebGLSpriteBatch.prototype.start=function(){var a=this.gl;a.activeTexture(a.TEXTURE0),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var c=this.renderSession.projection;a.uniform2f(this.shader.projectionVector,c.x,c.y);var d=4*this.vertSize;a.vertexAttribPointer(this.shader.aVertexPosition,2,a.FLOAT,!1,d,0),a.vertexAttribPointer(this.shader.aTextureCoord,2,a.FLOAT,!1,d,8),a.vertexAttribPointer(this.shader.colorAttribute,2,a.FLOAT,!1,d,16),this.currentBlendMode!==b.blendModes.NORMAL&&this.setBlendMode(b.blendModes.NORMAL)},b.WebGLSpriteBatch.prototype.setBlendMode=function(a){this.flush(),this.currentBlendMode=a;var c=b.blendModesWebGL[this.currentBlendMode];this.gl.blendFunc(c[0],c[1])},b.WebGLSpriteBatch.prototype.destroy=function(){this.vertices=null,this.indices=null,this.gl.deleteBuffer(this.vertexBuffer),this.gl.deleteBuffer(this.indexBuffer),this.currentBaseTexture=null,this.gl=null},b.WebGLFastSpriteBatch=function(a){this.vertSize=10,this.maxSize=6e3,this.size=this.maxSize;var b=4*this.size*this.vertSize,c=6*this.maxSize;this.vertices=new Float32Array(b),this.indices=new Uint16Array(c),this.vertexBuffer=null,this.indexBuffer=null,this.lastIndexCount=0;for(var d=0,e=0;c>d;d+=6,e+=4)this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3;this.drawing=!1,this.currentBatchSize=0,this.currentBaseTexture=null,this.currentBlendMode=0,this.renderSession=null,this.shader=null,this.matrix=null,this.setContext(a)},b.WebGLFastSpriteBatch.prototype.setContext=function(a){this.gl=a,this.vertexBuffer=a.createBuffer(),this.indexBuffer=a.createBuffer(),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,this.vertices,a.DYNAMIC_DRAW),this.currentBlendMode=99999},b.WebGLFastSpriteBatch.prototype.begin=function(a,b){this.renderSession=b,this.shader=this.renderSession.shaderManager.fastShader,this.matrix=a.worldTransform.toArray(!0),this.start()},b.WebGLFastSpriteBatch.prototype.end=function(){this.flush()},b.WebGLFastSpriteBatch.prototype.render=function(a){var b=a.children,c=b[0];if(c.texture._uvs){this.currentBaseTexture=c.texture.baseTexture,c.blendMode!==this.currentBlendMode&&this.setBlendMode(c.blendMode);for(var d=0,e=b.length;e>d;d++)this.renderSprite(b[d]);this.flush()}},b.WebGLFastSpriteBatch.prototype.renderSprite=function(a){if(a.visible&&(a.texture.baseTexture===this.currentBaseTexture||(this.flush(),this.currentBaseTexture=a.texture.baseTexture,a.texture._uvs))){var b,c,d,e,f,g,h,i,j=this.vertices;if(b=a.texture._uvs,c=a.texture.frame.width,d=a.texture.frame.height,a.texture.trim){var k=a.texture.trim;f=k.x-a.anchor.x*k.width,e=f+a.texture.frame.width,h=k.y-a.anchor.y*k.height,g=h+a.texture.frame.height}else e=a.texture.frame.width*(1-a.anchor.x),f=a.texture.frame.width*-a.anchor.x,g=a.texture.frame.height*(1-a.anchor.y),h=a.texture.frame.height*-a.anchor.y;i=4*this.currentBatchSize*this.vertSize,j[i++]=f,j[i++]=h,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x0,j[i++]=b.y1,j[i++]=a.alpha,j[i++]=e,j[i++]=h,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x1,j[i++]=b.y1,j[i++]=a.alpha,j[i++]=e,j[i++]=g,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x2,j[i++]=b.y2,j[i++]=a.alpha,j[i++]=f,j[i++]=g,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x3,j[i++]=b.y3,j[i++]=a.alpha,this.currentBatchSize++,this.currentBatchSize>=this.size&&this.flush()}},b.WebGLFastSpriteBatch.prototype.flush=function(){if(0!==this.currentBatchSize){var a=this.gl;if(this.currentBaseTexture._glTextures[a.id]||b.createWebGLTexture(this.currentBaseTexture,a),a.bindTexture(a.TEXTURE_2D,this.currentBaseTexture._glTextures[a.id]),this.currentBatchSize>.5*this.size)a.bufferSubData(a.ARRAY_BUFFER,0,this.vertices);else{var c=this.vertices.subarray(0,4*this.currentBatchSize*this.vertSize);a.bufferSubData(a.ARRAY_BUFFER,0,c)}a.drawElements(a.TRIANGLES,6*this.currentBatchSize,a.UNSIGNED_SHORT,0),this.currentBatchSize=0,this.renderSession.drawCount++}},b.WebGLFastSpriteBatch.prototype.stop=function(){this.flush()},b.WebGLFastSpriteBatch.prototype.start=function(){var a=this.gl;a.activeTexture(a.TEXTURE0),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var c=this.renderSession.projection;a.uniform2f(this.shader.projectionVector,c.x,c.y),a.uniformMatrix3fv(this.shader.uMatrix,!1,this.matrix);var d=4*this.vertSize;a.vertexAttribPointer(this.shader.aVertexPosition,2,a.FLOAT,!1,d,0),a.vertexAttribPointer(this.shader.aPositionCoord,2,a.FLOAT,!1,d,8),a.vertexAttribPointer(this.shader.aScale,2,a.FLOAT,!1,d,16),a.vertexAttribPointer(this.shader.aRotation,1,a.FLOAT,!1,d,24),a.vertexAttribPointer(this.shader.aTextureCoord,2,a.FLOAT,!1,d,28),a.vertexAttribPointer(this.shader.colorAttribute,1,a.FLOAT,!1,d,36),this.currentBlendMode!==b.blendModes.NORMAL&&this.setBlendMode(b.blendModes.NORMAL)},b.WebGLFastSpriteBatch.prototype.setBlendMode=function(a){this.flush(),this.currentBlendMode=a;var c=b.blendModesWebGL[this.currentBlendMode];this.gl.blendFunc(c[0],c[1])},b.WebGLFilterManager=function(a,b){this.transparent=b,this.filterStack=[],this.offsetX=0,this.offsetY=0,this.setContext(a)},b.WebGLFilterManager.prototype.setContext=function(a){this.gl=a,this.texturePool=[],this.initShaderBuffers()},b.WebGLFilterManager.prototype.begin=function(a,b){this.renderSession=a,this.defaultShader=a.shaderManager.defaultShader;var c=this.renderSession.projection;this.width=2*c.x,this.height=2*-c.y,this.buffer=b},b.WebGLFilterManager.prototype.pushFilter=function(a){var c=this.gl,d=this.renderSession.projection,e=this.renderSession.offset;a._filterArea=a.target.filterArea||a.target.getBounds(),this.filterStack.push(a);var f=a.filterPasses[0];this.offsetX+=a._filterArea.x,this.offsetY+=a._filterArea.y;var g=this.texturePool.pop();g?g.resize(this.width,this.height):g=new b.FilterTexture(this.gl,this.width,this.height),c.bindTexture(c.TEXTURE_2D,g.texture);var h=a._filterArea,i=f.padding;h.x-=i,h.y-=i,h.width+=2*i,h.height+=2*i,h.x<0&&(h.x=0),h.width>this.width&&(h.width=this.width),h.y<0&&(h.y=0),h.height>this.height&&(h.height=this.height),c.bindFramebuffer(c.FRAMEBUFFER,g.frameBuffer),c.viewport(0,0,h.width,h.height),d.x=h.width/2,d.y=-h.height/2,e.x=-h.x,e.y=-h.y,c.uniform2f(this.defaultShader.projectionVector,h.width/2,-h.height/2),c.uniform2f(this.defaultShader.offsetVector,-h.x,-h.y),c.colorMask(!0,!0,!0,!0),c.clearColor(0,0,0,0),c.clear(c.COLOR_BUFFER_BIT),a._glFilterTexture=g},b.WebGLFilterManager.prototype.popFilter=function(){var a=this.gl,c=this.filterStack.pop(),d=c._filterArea,e=c._glFilterTexture,f=this.renderSession.projection,g=this.renderSession.offset;if(c.filterPasses.length>1){a.viewport(0,0,d.width,d.height),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),this.vertexArray[0]=0,this.vertexArray[1]=d.height,this.vertexArray[2]=d.width,this.vertexArray[3]=d.height,this.vertexArray[4]=0,this.vertexArray[5]=0,this.vertexArray[6]=d.width,this.vertexArray[7]=0,a.bufferSubData(a.ARRAY_BUFFER,0,this.vertexArray),a.bindBuffer(a.ARRAY_BUFFER,this.uvBuffer),this.uvArray[2]=d.width/this.width,this.uvArray[5]=d.height/this.height,this.uvArray[6]=d.width/this.width,this.uvArray[7]=d.height/this.height,a.bufferSubData(a.ARRAY_BUFFER,0,this.uvArray); +var h=e,i=this.texturePool.pop();i||(i=new b.FilterTexture(this.gl,this.width,this.height)),i.resize(this.width,this.height),a.bindFramebuffer(a.FRAMEBUFFER,i.frameBuffer),a.clear(a.COLOR_BUFFER_BIT),a.disable(a.BLEND);for(var j=0;j0&&(b.Texture.frameUpdates.length=0)},b.CanvasRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b},b.CanvasRenderer.prototype.renderDisplayObject=function(a,b){this.renderSession.context=b||this.context,a._renderCanvas(this.renderSession)},b.CanvasRenderer.prototype.renderStripFlat=function(a){var b=this.context,c=a.verticies,d=c.length/2;this.count++,b.beginPath();for(var e=1;d-2>e;e++){var f=2*e,g=c[f],h=c[f+2],i=c[f+4],j=c[f+1],k=c[f+3],l=c[f+5];b.moveTo(g,j),b.lineTo(h,k),b.lineTo(i,l)}b.fillStyle="#FF0000",b.fill(),b.closePath()},b.CanvasRenderer.prototype.renderStrip=function(a){var b=this.context,c=a.verticies,d=a.uvs,e=c.length/2;this.count++;for(var f=1;e-2>f;f++){var g=2*f,h=c[g],i=c[g+2],j=c[g+4],k=c[g+1],l=c[g+3],m=c[g+5],n=d[g]*a.texture.width,o=d[g+2]*a.texture.width,p=d[g+4]*a.texture.width,q=d[g+1]*a.texture.height,r=d[g+3]*a.texture.height,s=d[g+5]*a.texture.height;b.save(),b.beginPath(),b.moveTo(h,k),b.lineTo(i,l),b.lineTo(j,m),b.closePath(),b.clip();var t=n*r+q*p+o*s-r*p-q*o-n*s,u=h*r+q*j+i*s-r*j-q*i-h*s,v=n*i+h*p+o*j-i*p-h*o-n*j,w=n*r*j+q*i*p+h*o*s-h*r*p-q*o*j-n*i*s,x=k*r+q*m+l*s-r*m-q*l-k*s,y=n*l+k*p+o*m-l*p-k*o-n*m,z=n*r*m+q*l*p+k*o*s-k*r*p-q*o*m-n*l*s;b.transform(u/t,x/t,v/t,y/t,w/t,z/t),b.drawImage(a.texture.baseTexture.source,0,0),b.restore()}},b.CanvasBuffer=function(a,b){this.width=a,this.height=b,this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=a,this.canvas.height=b},b.CanvasBuffer.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},b.CanvasBuffer.prototype.resize=function(a,b){this.width=this.canvas.width=a,this.height=this.canvas.height=b},b.CanvasGraphics=function(){},b.CanvasGraphics.renderGraphics=function(a,c){for(var d=a.worldAlpha,e="",f=0;f1&&(d=1,window.console.log("Pixi.js warning: masks in canvas can only mask using the first path in the graphics object"));for(var e=0;1>e;e++){var f=a.graphicsData[e],g=f.points;if(f.type===b.Graphics.POLY){c.beginPath(),c.moveTo(g[0],g[1]);for(var h=1;hd;d++)this.children[d]._renderWebGL(a);a.spriteBatch.stop()}this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),a.drawCount++,a.spriteBatch.start()}},b.Graphics.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha&&this.isMask!==!0){var c=a.context,d=this.worldTransform;this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,c.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),c.setTransform(d.a,d.c,d.b,d.d,d.tx,d.ty),b.CanvasGraphics.renderGraphics(this,c);for(var e=0,f=this.children.length;f>e;e++)this.children[e]._renderCanvas(a)}},b.Graphics.prototype.getBounds=function(a){this.bounds||this.updateBounds();var b=this.bounds.x,c=this.bounds.width+this.bounds.x,d=this.bounds.y,e=this.bounds.height+this.bounds.y,f=a||this.worldTransform,g=f.a,h=f.c,i=f.b,j=f.d,k=f.tx,l=f.ty,m=g*c+i*e+k,n=j*e+h*c+l,o=g*b+i*e+k,p=j*e+h*b+l,q=g*b+i*d+k,r=j*d+h*b+l,s=g*c+i*d+k,t=j*d+h*c+l,u=m,v=n,w=m,x=n;w=w>o?o:w,w=w>q?q:w,w=w>s?s:w,x=x>p?p:x,x=x>r?r:x,x=x>t?t:x,u=o>u?o:u,u=q>u?q:u,u=s>u?s:u,v=p>v?p:v,v=r>v?r:v,v=t>v?t:v;var y=this._bounds;return y.x=w,y.width=u-w,y.y=x,y.height=v-x,y},b.Graphics.prototype.updateBounds=function(){for(var a,c,d,e,f,g=1/0,h=-1/0,i=1/0,j=-1/0,k=0;kc?c:g,h=c+e>h?c+e:h,i=i>d?c:i,j=d+f>j?d+f:j;else if(m===b.Graphics.CIRC||m===b.Graphics.ELIP)c=a[0],d=a[1],e=a[2]+n/2,f=a[3]+n/2,g=g>c-e?c-e:g,h=c+e>h?c+e:h,i=i>d-f?d-f:i,j=d+f>j?d+f:j;else for(var o=0;oc-n?c-n:g,h=c+n>h?c+n:h,i=i>d-n?d-n:i,j=d+n>j?d+n:j}var p=this.boundsPadding;this.bounds=new b.Rectangle(g-p,i-p,h-g+2*p,j-i+2*p)},b.Graphics.prototype._generateCachedSprite=function(){var a=this.getLocalBounds();if(this._cachedSprite)this._cachedSprite.buffer.resize(a.width,a.height);else{var c=new b.CanvasBuffer(a.width,a.height),d=b.Texture.fromCanvas(c.canvas);this._cachedSprite=new b.Sprite(d),this._cachedSprite.buffer=c,this._cachedSprite.worldTransform=this.worldTransform}this._cachedSprite.anchor.x=-(a.x/a.width),this._cachedSprite.anchor.y=-(a.y/a.height),this._cachedSprite.buffer.context.translate(-a.x,-a.y),b.CanvasGraphics.renderGraphics(this,this._cachedSprite.buffer.context),this._cachedSprite.alpha=this.alpha},b.Graphics.prototype.destroyCachedSprite=function(){this._cachedSprite.texture.destroy(!0),this._cachedSprite=null},b.Graphics.POLY=0,b.Graphics.RECT=1,b.Graphics.CIRC=2,b.Graphics.ELIP=3,b.TilingSprite=function(a,c,d){b.Sprite.call(this,a),this.width=c||100,this.height=d||100,this.tileScale=new b.Point(1,1),this.tileScaleOffset=new b.Point(1,1),this.tilePosition=new b.Point(0,0),this.renderable=!0,this.tint=16777215,this.blendMode=b.blendModes.NORMAL},b.TilingSprite.prototype=Object.create(b.Sprite.prototype),b.TilingSprite.prototype.constructor=b.TilingSprite,Object.defineProperty(b.TilingSprite.prototype,"width",{get:function(){return this._width},set:function(a){this._width=a}}),Object.defineProperty(b.TilingSprite.prototype,"height",{get:function(){return this._height},set:function(a){this._height=a}}),b.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},b.TilingSprite.prototype.setTexture=function(a){this.texture!==a&&(this.texture=a,this.refreshTexture=!0,this.cachedTint=16777215)},b.TilingSprite.prototype._renderWebGL=function(a){if(this.visible!==!1&&0!==this.alpha){var c,d;for(this.mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a),a.spriteBatch.start()),this.filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),!this.tilingTexture||this.refreshTexture?(this.generateTilingTexture(!0),this.tilingTexture&&this.tilingTexture.needsUpdate&&(b.updateWebGLTexture(this.tilingTexture.baseTexture,a.gl),this.tilingTexture.needsUpdate=!1)):a.spriteBatch.renderTilingSprite(this),c=0,d=this.children.length;d>c;c++)this.children[c]._renderWebGL(a);a.spriteBatch.stop(),this.filters&&a.filterManager.popFilter(),this.mask&&a.maskManager.popMask(a),a.spriteBatch.start()}},b.TilingSprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){var c=a.context;this._mask&&a.maskManager.pushMask(this._mask,c),c.globalAlpha=this.worldAlpha;var d=this.worldTransform;if(c.setTransform(d.a,d.c,d.b,d.d,d.tx,d.ty),!this.__tilePattern||this.refreshTexture){if(this.generateTilingTexture(!1),!this.tilingTexture)return;this.__tilePattern=c.createPattern(this.tilingTexture.baseTexture.source,"repeat")}this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,c.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),c.beginPath();var e=this.tilePosition,f=this.tileScale;e.x%=this.tilingTexture.baseTexture.width,e.y%=this.tilingTexture.baseTexture.height,c.scale(f.x,f.y),c.translate(e.x,e.y),c.fillStyle=this.__tilePattern,c.fillRect(-e.x+this.anchor.x*-this._width,-e.y+this.anchor.y*-this._height,this._width/f.x,this._height/f.y),c.scale(1/f.x,1/f.y),c.translate(-e.x,-e.y),c.closePath(),this._mask&&a.maskManager.popMask(a.context)}},b.TilingSprite.prototype.getBounds=function(){var a=this._width,b=this._height,c=a*(1-this.anchor.x),d=a*-this.anchor.x,e=b*(1-this.anchor.y),f=b*-this.anchor.y,g=this.worldTransform,h=g.a,i=g.c,j=g.b,k=g.d,l=g.tx,m=g.ty,n=h*d+j*f+l,o=k*f+i*d+m,p=h*c+j*f+l,q=k*f+i*c+m,r=h*c+j*e+l,s=k*e+i*c+m,t=h*d+j*e+l,u=k*e+i*d+m,v=-1/0,w=-1/0,x=1/0,y=1/0;x=x>n?n:x,x=x>p?p:x,x=x>r?r:x,x=x>t?t:x,y=y>o?o:y,y=y>q?q:y,y=y>s?s:y,y=y>u?u:y,v=n>v?n:v,v=p>v?p:v,v=r>v?r:v,v=t>v?t:v,w=o>w?o:w,w=q>w?q:w,w=s>w?s:w,w=u>w?u:w;var z=this._bounds;return z.x=x,z.width=v-x,z.y=y,z.height=w-y,this._currentBounds=z,z},b.TilingSprite.prototype.generateTilingTexture=function(a){var c=this.texture;if(c.baseTexture.hasLoaded){var d,e,f=c.baseTexture,g=c.frame,h=g.width!==f.width||g.height!==f.height,i=!1;if(a?(d=b.getNextPowerOfTwo(g.width),e=b.getNextPowerOfTwo(g.height),g.width!==d&&g.height!==e&&(i=!0)):h&&(d=g.width,e=g.height,i=!0),i){var j;this.tilingTexture&&this.tilingTexture.isTiling?(j=this.tilingTexture.canvasBuffer,j.resize(d,e),this.tilingTexture.baseTexture.width=d,this.tilingTexture.baseTexture.height=e,this.tilingTexture.needsUpdate=!0):(j=new b.CanvasBuffer(d,e),this.tilingTexture=b.Texture.fromCanvas(j.canvas),this.tilingTexture.canvasBuffer=j,this.tilingTexture.isTiling=!0),j.context.drawImage(c.baseTexture.source,g.x,g.y,g.width,g.height,0,0,d,e),this.tileScaleOffset.x=g.width/d,this.tileScaleOffset.y=g.height/e}else this.tilingTexture&&this.tilingTexture.isTiling&&this.tilingTexture.destroy(!0),this.tileScaleOffset.x=1,this.tileScaleOffset.y=1,this.tilingTexture=c;this.refreshTexture=!1,this.tilingTexture.baseTexture._powerOf2=!0}},b.BaseTextureCache={},b.texturesToUpdate=[],b.texturesToDestroy=[],b.BaseTextureCacheIdGenerator=0,b.BaseTexture=function(a,c){if(b.EventTarget.call(this),this.width=100,this.height=100,this.scaleMode=c||b.scaleModes.DEFAULT,this.hasLoaded=!1,this.source=a,this.id=b.BaseTextureCacheIdGenerator++,this._glTextures=[],a){if((this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,b.texturesToUpdate.push(this);else{var d=this;this.source.onload=function(){d.hasLoaded=!0,d.width=d.source.width,d.height=d.source.height,b.texturesToUpdate.push(d),d.dispatchEvent({type:"loaded",content:d})}}this.imageUrl=null,this._powerOf2=!1}},b.BaseTexture.prototype.constructor=b.BaseTexture,b.BaseTexture.prototype.destroy=function(){this.imageUrl&&(delete b.BaseTextureCache[this.imageUrl],this.imageUrl=null,this.source.src=null),this.source=null,b.texturesToDestroy.push(this)},b.BaseTexture.prototype.updateSourceImage=function(a){this.hasLoaded=!1,this.source.src=null,this.source.src=a},b.BaseTexture.fromImage=function(a,c,d){var e=b.BaseTextureCache[a];if(void 0===c&&-1===a.indexOf("data:")&&(c=!0),!e){var f=new Image;c&&(f.crossOrigin=""),f.src=a,e=new b.BaseTexture(f,d),e.imageUrl=a,b.BaseTextureCache[a]=e}return e},b.BaseTexture.fromCanvas=function(a,c){a._pixiId||(a._pixiId="canvas_"+b.TextureCacheIdGenerator++);var d=b.BaseTextureCache[a._pixiId];return d||(d=new b.BaseTexture(a,c),b.BaseTextureCache[a._pixiId]=d),d},b.TextureCache={},b.FrameCache={},b.TextureCacheIdGenerator=0,b.Texture=function(a,c){if(b.EventTarget.call(this),c||(this.noFrame=!0,c=new b.Rectangle(0,0,1,1)),a instanceof b.Texture&&(a=a.baseTexture),this.baseTexture=a,this.frame=c,this.trim=null,this.scope=this,this._uvs=null,a.hasLoaded)this.noFrame&&(c=new b.Rectangle(0,0,a.width,a.height)),this.setFrame(c);else{var d=this;a.addEventListener("loaded",function(){d.onBaseTextureLoaded()})}},b.Texture.prototype.constructor=b.Texture,b.Texture.prototype.onBaseTextureLoaded=function(){var a=this.baseTexture;a.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new b.Rectangle(0,0,a.width,a.height)),this.setFrame(this.frame),this.scope.dispatchEvent({type:"update",content:this})},b.Texture.prototype.destroy=function(a){a&&this.baseTexture.destroy()},b.Texture.prototype.setFrame=function(a){if(this.frame=a,this.width=a.width,this.height=a.height,a.x+a.width>this.baseTexture.width||a.y+a.height>this.baseTexture.height)throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,b.Texture.frameUpdates.push(this)},b.Texture.prototype._updateWebGLuvs=function(){this._uvs||(this._uvs=new b.TextureUvs);var a=this.frame,c=this.baseTexture.width,d=this.baseTexture.height;this._uvs.x0=a.x/c,this._uvs.y0=a.y/d,this._uvs.x1=(a.x+a.width)/c,this._uvs.y1=a.y/d,this._uvs.x2=(a.x+a.width)/c,this._uvs.y2=(a.y+a.height)/d,this._uvs.x3=a.x/c,this._uvs.y3=(a.y+a.height)/d},b.Texture.fromImage=function(a,c,d){var e=b.TextureCache[a];return e||(e=new b.Texture(b.BaseTexture.fromImage(a,c,d)),b.TextureCache[a]=e),e},b.Texture.fromFrame=function(a){var c=b.TextureCache[a];if(!c)throw new Error('The frameId "'+a+'" does not exist in the texture cache ');return c},b.Texture.fromCanvas=function(a,c){var d=b.BaseTexture.fromCanvas(a,c);return new b.Texture(d)},b.Texture.addTextureToCache=function(a,c){b.TextureCache[c]=a},b.Texture.removeTextureFromCache=function(a){var c=b.TextureCache[a];return delete b.TextureCache[a],delete b.BaseTextureCache[a],c},b.Texture.frameUpdates=[],b.TextureUvs=function(){this.x0=0,this.y0=0,this.x1=0,this.y1=0,this.x2=0,this.y2=0,this.x3=0,this.y4=0},b.RenderTexture=function(a,c,d,e){if(b.EventTarget.call(this),this.width=a||100,this.height=c||100,this.frame=new b.Rectangle(0,0,this.width,this.height),this.baseTexture=new b.BaseTexture,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.baseTexture._glTextures=[],this.baseTexture.scaleMode=e||b.scaleModes.DEFAULT,this.baseTexture.hasLoaded=!0,this.renderer=d||b.defaultRenderer,this.renderer.type===b.WEBGL_RENDERER){var f=this.renderer.gl;this.textureBuffer=new b.FilterTexture(f,this.width,this.height,this.baseTexture.scaleMode),this.baseTexture._glTextures[f.id]=this.textureBuffer.texture,this.render=this.renderWebGL,this.projection=new b.Point(this.width/2,-this.height/2)}else this.render=this.renderCanvas,this.textureBuffer=new b.CanvasBuffer(this.width,this.height),this.baseTexture.source=this.textureBuffer.canvas;b.Texture.frameUpdates.push(this)},b.RenderTexture.prototype=Object.create(b.Texture.prototype),b.RenderTexture.prototype.constructor=b.RenderTexture,b.RenderTexture.prototype.resize=function(a,c){if(this.width=a,this.height=c,this.frame.width=this.width,this.frame.height=this.height,this.renderer.type===b.WEBGL_RENDERER){this.projection.x=this.width/2,this.projection.y=-this.height/2;var d=this.renderer.gl;d.bindTexture(d.TEXTURE_2D,this.baseTexture._glTextures[d.id]),d.texImage2D(d.TEXTURE_2D,0,d.RGBA,this.width,this.height,0,d.RGBA,d.UNSIGNED_BYTE,null)}else this.textureBuffer.resize(this.width,this.height);b.Texture.frameUpdates.push(this)},b.RenderTexture.prototype.renderWebGL=function(a,c,d){var e=this.renderer.gl; +e.colorMask(!0,!0,!0,!0),e.viewport(0,0,this.width,this.height),e.bindFramebuffer(e.FRAMEBUFFER,this.textureBuffer.frameBuffer),d&&this.textureBuffer.clear();var f=a.children,g=a.worldTransform;a.worldTransform=b.RenderTexture.tempMatrix,a.worldTransform.d=-1,a.worldTransform.ty=-2*this.projection.y,c&&(a.worldTransform.tx=c.x,a.worldTransform.ty-=c.y);for(var h=0,i=f.length;i>h;h++)f[h].updateTransform();b.WebGLRenderer.updateTextures(),this.renderer.renderDisplayObject(a,this.projection,this.textureBuffer.frameBuffer),a.worldTransform=g},b.RenderTexture.prototype.renderCanvas=function(a,c,d){var e=a.children,f=a.worldTransform;a.worldTransform=b.RenderTexture.tempMatrix,c&&(a.worldTransform.tx=c.x,a.worldTransform.ty=c.y);for(var g=0,h=e.length;h>g;g++)e[g].updateTransform();d&&this.textureBuffer.clear();var i=this.textureBuffer.context;this.renderer.renderDisplayObject(a,i),i.setTransform(1,0,0,1,0,0),a.worldTransform=f},b.RenderTexture.tempMatrix=new b.Matrix,"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=b),exports.PIXI=b):"undefined"!=typeof define&&define.amd?define("PIXI",function(){return a.PIXI=b}()):a.PIXI=b}).call(this),function(){var a=this,b=b||{VERSION:"2.0.4",GAMES:[],AUTO:0,CANVAS:1,WEBGL:2,HEADLESS:3,NONE:0,LEFT:1,RIGHT:2,UP:3,DOWN:4,SPRITE:0,BUTTON:1,IMAGE:2,GRAPHICS:3,TEXT:4,TILESPRITE:5,BITMAPTEXT:6,GROUP:7,RENDERTEXTURE:8,TILEMAP:9,TILEMAPLAYER:10,EMITTER:11,POLYGON:12,BITMAPDATA:13,CANVAS_FILTER:14,WEBGL_FILTER:15,ELLIPSE:16,SPRITEBATCH:17,RETROFONT:18,blendModes:{NORMAL:0,ADD:1,MULTIPLY:2,SCREEN:3,OVERLAY:4,DARKEN:5,LIGHTEN:6,COLOR_DODGE:7,COLOR_BURN:8,HARD_LIGHT:9,SOFT_LIGHT:10,DIFFERENCE:11,EXCLUSION:12,HUE:13,SATURATION:14,COLOR:15,LUMINOSITY:16},scaleModes:{DEFAULT:0,LINEAR:0,NEAREST:1}};if(PIXI.InteractionManager=function(){},b.Utils={parseDimension:function(a,b){var c=0,d=0;return"string"==typeof a?"%"===a.substr(-1)?(c=parseInt(a,10)/100,d=0===b?window.innerWidth*c:window.innerHeight*c):d=parseInt(a,10):d=a,d},shuffle:function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},pad:function(a,b,c,d){if("undefined"==typeof b)var b=0;if("undefined"==typeof c)var c=" ";if("undefined"==typeof d)var d=3;var e=0;if(b+1>=a.length)switch(d){case 1:a=new Array(b+1-a.length).join(c)+a;break;case 3:var f=Math.ceil((e=b-a.length)/2),g=e-f;a=new Array(g+1).join(c)+a+new Array(f+1).join(c);break;default:a+=new Array(b+1-a.length).join(c)}return a},isPlainObject:function(a){if("object"!=typeof a||a.nodeType||a===a.window)return!1;try{if(a.constructor&&!{}.hasOwnProperty.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},extend:function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for("boolean"==typeof h&&(k=h,h=arguments[1]||{},i=2),j===i&&(h=this,--i);j>i;i++)if(null!=(a=arguments[i]))for(c in a)d=h[c],e=a[c],h!==e&&(k&&e&&(b.Utils.isPlainObject(e)||(f=Array.isArray(e)))?(f?(f=!1,g=d&&Array.isArray(d)?d:[]):g=d&&b.Utils.isPlainObject(d)?d:{},h[c]=b.Utils.extend(k,g,e)):void 0!==e&&(h[c]=e));return h}},"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),Array.isArray||(Array.isArray=function(a){return"[object Array]"==Object.prototype.toString.call(a)}),Array.prototype.forEach||(Array.prototype.forEach=function(a){"use strict";if(void 0===this||null===this)throw new TypeError;var b=Object(this),c=b.length>>>0;if("function"!=typeof a)throw new TypeError;for(var d=arguments.length>=2?arguments[1]:void 0,e=0;c>e;e++)e in b&&a.call(d,b[e],e,b)}),"function"!=typeof window.Uint32Array){var c=function(a){var b=new Array;window[a]=function(a){if("number"==typeof a){Array.call(this,a),this.length=a;for(var b=0;b0?.5*c:0},b.Circle.prototype={circumference:function(){return 2*Math.PI*this._radius},setTo:function(a,b,c){return this.x=a,this.y=b,this._diameter=c,this._radius=.5*c,this},copyFrom:function(a){return this.setTo(a.x,a.y,a.diameter)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.diameter=this._diameter,a},distance:function(a,c){return"undefined"==typeof c&&(c=!1),c?b.Math.distanceRounded(this.x,this.y,a.x,a.y):b.Math.distance(this.x,this.y,a.x,a.y)},clone:function(a){return"undefined"==typeof a?a=new b.Circle(this.x,this.y,this.diameter):a.setTo(this.x,this.y,this.diameter),a},contains:function(a,c){return b.Circle.contains(this,a,c)},circumferencePoint:function(a,c,d){return b.Circle.circumferencePoint(this,a,c,d)},offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},toString:function(){return"[{Phaser.Circle (x="+this.x+" y="+this.y+" diameter="+this.diameter+" radius="+this.radius+")}]"}},b.Circle.prototype.constructor=b.Circle,Object.defineProperty(b.Circle.prototype,"diameter",{get:function(){return this._diameter},set:function(a){a>0&&(this._diameter=a,this._radius=.5*a)}}),Object.defineProperty(b.Circle.prototype,"radius",{get:function(){return this._radius},set:function(a){a>0&&(this._radius=a,this._diameter=2*a)}}),Object.defineProperty(b.Circle.prototype,"left",{get:function(){return this.x-this._radius},set:function(a){a>this.x?(this._radius=0,this._diameter=0):this.radius=this.x-a}}),Object.defineProperty(b.Circle.prototype,"right",{get:function(){return this.x+this._radius},set:function(a){athis.y?(this._radius=0,this._diameter=0):this.radius=this.y-a}}),Object.defineProperty(b.Circle.prototype,"bottom",{get:function(){return this.y+this._radius},set:function(a){a0?Math.PI*this._radius*this._radius:0}}),Object.defineProperty(b.Circle.prototype,"empty",{get:function(){return 0===this._diameter},set:function(a){a===!0&&this.setTo(0,0,0)}}),b.Circle.contains=function(a,b,c){if(a.radius>0&&b>=a.left&&b<=a.right&&c>=a.top&&c<=a.bottom){var d=(a.x-b)*(a.x-b),e=(a.y-c)*(a.y-c);return d+e<=a.radius*a.radius}return!1},b.Circle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.diameter==b.diameter},b.Circle.intersects=function(a,c){return b.Math.distance(a.x,a.y,c.x,c.y)<=a.radius+c.radius},b.Circle.circumferencePoint=function(a,c,d,e){return"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=new b.Point),d===!0&&(c=b.Math.degToRad(c)),e.x=a.x+a.radius*Math.cos(c),e.y=a.y+a.radius*Math.sin(c),e},b.Circle.intersectsRectangle=function(a,b){var c=Math.abs(a.x-b.x-b.halfWidth),d=b.halfWidth+a.radius;if(c>d)return!1;var e=Math.abs(a.y-b.y-b.halfHeight),f=b.halfHeight+a.radius;if(e>f)return!1;if(c<=b.halfWidth||e<=b.halfHeight)return!0;var g=c-b.halfWidth,h=e-b.halfHeight,i=g*g,j=h*h,k=a.radius*a.radius;return k>=i+j},PIXI.Circle=b.Circle,b.Point=function(a,b){a=a||0,b=b||0,this.x=a,this.y=b},b.Point.prototype={copyFrom:function(a){return this.setTo(a.x,a.y)},invert:function(){return this.setTo(this.y,this.x)},setTo:function(a,b){return this.x=a||0,this.y=b||(0!==b?this.x:0),this},set:function(a,b){return this.x=a||0,this.y=b||(0!==b?this.x:0),this},add:function(a,b){return this.x+=a,this.y+=b,this},subtract:function(a,b){return this.x-=a,this.y-=b,this},multiply:function(a,b){return this.x*=a,this.y*=b,this},divide:function(a,b){return this.x/=a,this.y/=b,this},clampX:function(a,c){return this.x=b.Math.clamp(this.x,a,c),this},clampY:function(a,c){return this.y=b.Math.clamp(this.y,a,c),this},clamp:function(a,c){return this.x=b.Math.clamp(this.x,a,c),this.y=b.Math.clamp(this.y,a,c),this},clone:function(a){return"undefined"==typeof a?a=new b.Point(this.x,this.y):a.setTo(this.x,this.y),a},copyTo:function(a){return a.x=this.x,a.y=this.y,a},distance:function(a,c){return b.Point.distance(this,a,c)},equals:function(a){return a.x===this.x&&a.y===this.y},angle:function(a){return Math.atan2(this.x*a.y-this.y*a.x,this.x*a.x+this.y*a.y)},angleSq:function(a){return this.subtract(a).angle(a.subtract(this))},rotate:function(a,c,d,e,f){return b.Point.rotate(this,a,c,d,e,f)},getMagnitude:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},getMagnitudeSq:function(){return this.x*this.x+this.y*this.y},setMagnitude:function(a){return this.normalize().multiply(a,a)},normalize:function(){if(!this.isZero()){var a=this.getMagnitude();this.x/=a,this.y/=a}return this},isZero:function(){return 0===this.x&&0===this.y},dot:function(a){return this.x*a.x+this.y*a.y},cross:function(a){return this.x*a.y-this.y*a.x},perp:function(){return this.setTo(-this.y,this.x)},rperp:function(){return this.setTo(this.y,-this.x)},normalRightHand:function(){return this.setTo(-1*this.y,this.x)},toString:function(){return"[{Point (x="+this.x+" y="+this.y+")}]"}},b.Point.prototype.constructor=b.Point,b.Point.add=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x+c.x,d.y=a.y+c.y,d},b.Point.subtract=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x-c.x,d.y=a.y-c.y,d},b.Point.multiply=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x*c.x,d.y=a.y*c.y,d},b.Point.divide=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x/c.x,d.y=a.y/c.y,d},b.Point.equals=function(a,b){return a.x===b.x&&a.y===b.y},b.Point.angle=function(a,b){return Math.atan2(a.x*b.y-a.y*b.x,a.x*b.x+a.y*b.y)},b.Point.angleSq=function(a,b){return a.subtract(b).angle(b.subtract(a))},b.Point.negative=function(a,c){return"undefined"==typeof c&&(c=new b.Point),c.setTo(-a.x,-a.y)},b.Point.multiplyAdd=function(a,c,d,e){return"undefined"==typeof e&&(e=new b.Point),e.setTo(a.x+c.x*d,a.y+c.y*d)},b.Point.interpolate=function(a,c,d,e){return"undefined"==typeof e&&(e=new b.Point),e.setTo(a.x+(c.x-a.x)*d,a.y+(c.y-a.y)*d)},b.Point.perp=function(a,c){return"undefined"==typeof c&&(c=new b.Point),c.setTo(-a.y,a.x)},b.Point.rperp=function(a,c){return"undefined"==typeof c&&(c=new b.Point),c.setTo(a.y,-a.x)},b.Point.distance=function(a,c,d){return"undefined"==typeof d&&(d=!1),d?b.Math.distanceRounded(a.x,a.y,c.x,c.y):b.Math.distance(a.x,a.y,c.x,c.y)},b.Point.project=function(a,c,d){"undefined"==typeof d&&(d=new b.Point);var e=a.dot(c)/c.getMagnitudeSq();return 0!==e&&d.setTo(e*c.x,e*c.y),d},b.Point.projectUnit=function(a,c,d){"undefined"==typeof d&&(d=new b.Point);var e=a.dot(c);return 0!==e&&d.setTo(e*c.x,e*c.y),d},b.Point.normalRightHand=function(a,c){return"undefined"==typeof c&&(c=new b.Point),c.setTo(-1*a.y,a.x)},b.Point.normalize=function(a,c){"undefined"==typeof c&&(c=new b.Point);var d=a.getMagnitude();return 0!==d&&c.setTo(a.x/d,a.y/d),c},b.Point.rotate=function(a,c,d,e,f,g){return f=f||!1,g=g||null,f&&(e=b.Math.degToRad(e)),null===g&&(g=Math.sqrt((c-a.x)*(c-a.x)+(d-a.y)*(d-a.y))),a.setTo(c+g*Math.cos(e),d+g*Math.sin(e))},b.Point.centroid=function(a,c){if("undefined"==typeof c&&(c=new b.Point),"[object Array]"!==Object.prototype.toString.call(a))throw new Error("Phaser.Point. Parameter 'points' must be an array");var d=a.length;if(1>d)throw new Error("Phaser.Point. Parameter 'points' array must not be empty");if(1===d)return c.copyFrom(a[0]),c;for(var e=0;d>e;e++)b.Point.add(c,a[e],c);return c.divide(d,d),c},PIXI.Point=b.Point,b.Rectangle=function(a,b,c,d){a=a||0,b=b||0,c=c||0,d=d||0,this.x=a,this.y=b,this.width=c,this.height=d},b.Rectangle.prototype={offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},setTo:function(a,b,c,d){return this.x=a,this.y=b,this.width=c,this.height=d,this},floor:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y)},floorAll:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.width=Math.floor(this.width),this.height=Math.floor(this.height)},copyFrom:function(a){return this.setTo(a.x,a.y,a.width,a.height)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.width=this.width,a.height=this.height,a},inflate:function(a,c){return b.Rectangle.inflate(this,a,c)},size:function(a){return b.Rectangle.size(this,a)},clone:function(a){return b.Rectangle.clone(this,a)},contains:function(a,c){return b.Rectangle.contains(this,a,c)},containsRect:function(a){return b.Rectangle.containsRect(this,a)},equals:function(a){return b.Rectangle.equals(this,a)},intersection:function(a,c){return b.Rectangle.intersection(this,a,c)},intersects:function(a,c){return b.Rectangle.intersects(this,a,c)},intersectsRaw:function(a,c,d,e,f){return b.Rectangle.intersectsRaw(this,a,c,d,e,f)},union:function(a,c){return b.Rectangle.union(this,a,c)},toString:function(){return"[{Rectangle (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+" empty="+this.empty+")}]"}},Object.defineProperty(b.Rectangle.prototype,"halfWidth",{get:function(){return Math.round(this.width/2)}}),Object.defineProperty(b.Rectangle.prototype,"halfHeight",{get:function(){return Math.round(this.height/2)}}),Object.defineProperty(b.Rectangle.prototype,"bottom",{get:function(){return this.y+this.height},set:function(a){this.height=a<=this.y?0:this.y-a}}),Object.defineProperty(b.Rectangle.prototype,"bottomRight",{get:function(){return new b.Point(this.right,this.bottom)},set:function(a){this.right=a.x,this.bottom=a.y}}),Object.defineProperty(b.Rectangle.prototype,"left",{get:function(){return this.x},set:function(a){this.width=a>=this.right?0:this.right-a,this.x=a}}),Object.defineProperty(b.Rectangle.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=a<=this.x?0:this.x+a}}),Object.defineProperty(b.Rectangle.prototype,"volume",{get:function(){return this.width*this.height}}),Object.defineProperty(b.Rectangle.prototype,"perimeter",{get:function(){return 2*this.width+2*this.height}}),Object.defineProperty(b.Rectangle.prototype,"centerX",{get:function(){return this.x+this.halfWidth},set:function(a){this.x=a-this.halfWidth}}),Object.defineProperty(b.Rectangle.prototype,"centerY",{get:function(){return this.y+this.halfHeight},set:function(a){this.y=a-this.halfHeight}}),Object.defineProperty(b.Rectangle.prototype,"top",{get:function(){return this.y},set:function(a){a>=this.bottom?(this.height=0,this.y=a):this.height=this.bottom-a}}),Object.defineProperty(b.Rectangle.prototype,"topLeft",{get:function(){return new b.Point(this.x,this.y)},set:function(a){this.x=a.x,this.y=a.y}}),Object.defineProperty(b.Rectangle.prototype,"empty",{get:function(){return!this.width||!this.height},set:function(a){a===!0&&this.setTo(0,0,0,0)}}),b.Rectangle.prototype.constructor=b.Rectangle,b.Rectangle.inflate=function(a,b,c){return a.x-=b,a.width+=2*b,a.y-=c,a.height+=2*c,a},b.Rectangle.inflatePoint=function(a,c){return b.Rectangle.inflate(a,c.x,c.y)},b.Rectangle.size=function(a,c){return"undefined"==typeof c?c=new b.Point(a.width,a.height):c.setTo(a.width,a.height),c},b.Rectangle.clone=function(a,c){return"undefined"==typeof c?c=new b.Rectangle(a.x,a.y,a.width,a.height):c.setTo(a.x,a.y,a.width,a.height),c},b.Rectangle.contains=function(a,b,c){return a.width<=0||a.height<=0?!1:b>=a.x&&b<=a.right&&c>=a.y&&c<=a.bottom},b.Rectangle.containsRaw=function(a,b,c,d,e,f){return e>=a&&a+c>=e&&f>=b&&b+d>=f},b.Rectangle.containsPoint=function(a,c){return b.Rectangle.contains(a,c.x,c.y)},b.Rectangle.containsRect=function(a,b){return a.volume>b.volume?!1:a.x>=b.x&&a.y>=b.y&&a.right<=b.right&&a.bottom<=b.bottom},b.Rectangle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.width==b.width&&a.height==b.height},b.Rectangle.intersection=function(a,c,d){return"undefined"==typeof d&&(d=new b.Rectangle),b.Rectangle.intersects(a,c)&&(d.x=Math.max(a.x,c.x),d.y=Math.max(a.y,c.y),d.width=Math.min(a.right,c.right)-d.x,d.height=Math.min(a.bottom,c.bottom)-d.y),d},b.Rectangle.intersects=function(a,b){return a.width<=0||a.height<=0||b.width<=0||b.height<=0?!1:!(a.rightb.right||a.y>b.bottom)},b.Rectangle.intersectsRaw=function(a,b,c,d,e,f){return"undefined"==typeof f&&(f=0),!(b>a.right+f||ca.bottom+f||e=c&&d>=a&&b>=e&&f>=b},coordinatesOnLine:function(a,b){"undefined"==typeof a&&(a=1),"undefined"==typeof b&&(b=[]);var c=Math.round(this.start.x),d=Math.round(this.start.y),e=Math.round(this.end.x),f=Math.round(this.end.y),g=Math.abs(e-c),h=Math.abs(f-d),i=e>c?1:-1,j=f>d?1:-1,k=g-h;b.push([c,d]);for(var l=1;c!=e||d!=f;){var m=k<<1;m>-h&&(k-=h,c+=i),g>m&&(k+=g,d+=j),l%a===0&&b.push([c,d]),l++}return b}},Object.defineProperty(b.Line.prototype,"length",{get:function(){return Math.sqrt((this.end.x-this.start.x)*(this.end.x-this.start.x)+(this.end.y-this.start.y)*(this.end.y-this.start.y))}}),Object.defineProperty(b.Line.prototype,"angle",{get:function(){return Math.atan2(this.end.y-this.start.y,this.end.x-this.start.x)}}),Object.defineProperty(b.Line.prototype,"slope",{get:function(){return(this.end.y-this.start.y)/(this.end.x-this.start.x)}}),Object.defineProperty(b.Line.prototype,"perpSlope",{get:function(){return-((this.end.x-this.start.x)/(this.end.y-this.start.y))}}),Object.defineProperty(b.Line.prototype,"x",{get:function(){return Math.min(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"y",{get:function(){return Math.min(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"left",{get:function(){return Math.min(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"right",{get:function(){return Math.max(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"top",{get:function(){return Math.min(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"bottom",{get:function(){return Math.max(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"width",{get:function(){return Math.abs(this.start.x-this.end.x)}}),Object.defineProperty(b.Line.prototype,"height",{get:function(){return Math.abs(this.start.y-this.end.y)}}),b.Line.intersectsPoints=function(a,c,d,e,f,g){"undefined"==typeof f&&(f=!0),"undefined"==typeof g&&(g=new b.Point);var h=c.y-a.y,i=e.y-d.y,j=a.x-c.x,k=d.x-e.x,l=c.x*a.y-a.x*c.y,m=e.x*d.y-d.x*e.y,n=h*k-i*j;if(0===n)return null;if(g.x=(j*m-k*l)/n,g.y=(i*l-h*m)/n,f){if(Math.pow(g.x-c.x+(g.y-c.y),2)>Math.pow(a.x-c.x+(a.y-c.y),2))return null;if(Math.pow(g.x-a.x+(g.y-a.y),2)>Math.pow(a.x-c.x+(a.y-c.y),2))return null;if(Math.pow(g.x-e.x+(g.y-e.y),2)>Math.pow(d.x-e.x+(d.y-e.y),2))return null;if(Math.pow(g.x-d.x+(g.y-d.y),2)>Math.pow(d.x-e.x+(d.y-e.y),2))return null}return g},b.Line.intersects=function(a,c,d,e){return b.Line.intersectsPoints(a.start,a.end,c.start,c.end,d,e)},b.Ellipse=function(a,c,d,e){this.type=b.ELLIPSE,a=a||0,c=c||0,d=d||0,e=e||0,this.x=a,this.y=c,this.width=d,this.height=e},b.Ellipse.prototype={setTo:function(a,b,c,d){return this.x=a,this.y=b,this.width=c,this.height=d,this},copyFrom:function(a){return this.setTo(a.x,a.y,a.width,a.height)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.width=this.width,a.height=this.height,a},clone:function(a){return"undefined"==typeof a?a=new b.Ellipse(this.x,this.y,this.width,this.height):a.setTo(this.x,this.y,this.width,this.height),a},contains:function(a,c){return b.Ellipse.contains(this,a,c)},toString:function(){return"[{Phaser.Ellipse (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+")}]"}},b.Ellipse.prototype.constructor=b.Ellipse,Object.defineProperty(b.Ellipse.prototype,"left",{get:function(){return this.x},set:function(a){this.x=a}}),Object.defineProperty(b.Ellipse.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=ad+e},b.Ellipse.prototype.getBounds=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Ellipse=b.Ellipse,b.Polygon=function(a){if(this.type=b.POLYGON,a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var c=[],d=0,e=a.length;e>d;d+=2)c.push(new b.Point(a[d],a[d+1]));a=c}this.points=a},b.Polygon.prototype={clone:function(){for(var a=[],c=0;cb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!c)}return c}},b.Polygon.prototype.constructor=b.Polygon,PIXI.Polygon=b.Polygon,b.Camera=function(a,c,d,e,f,g){this.game=a,this.world=a.world,this.id=0,this.view=new b.Rectangle(d,e,f,g),this.screenView=new b.Rectangle(d,e,f,g),this.bounds=new b.Rectangle(d,e,f,g),this.deadzone=null,this.visible=!0,this.atLimit={x:!1,y:!1},this.target=null,this._edge=0,this.displayObject=null,this.scale=null},b.Camera.FOLLOW_LOCKON=0,b.Camera.FOLLOW_PLATFORMER=1,b.Camera.FOLLOW_TOPDOWN=2,b.Camera.FOLLOW_TOPDOWN_TIGHT=3,b.Camera.prototype={follow:function(a,c){"undefined"==typeof c&&(c=b.Camera.FOLLOW_LOCKON),this.target=a;var d;switch(c){case b.Camera.FOLLOW_PLATFORMER:var e=this.width/8,f=this.height/3;this.deadzone=new b.Rectangle((this.width-e)/2,(this.height-f)/2-.25*f,e,f);break;case b.Camera.FOLLOW_TOPDOWN:d=Math.max(this.width,this.height)/4,this.deadzone=new b.Rectangle((this.width-d)/2,(this.height-d)/2,d,d);break;case b.Camera.FOLLOW_TOPDOWN_TIGHT:d=Math.max(this.width,this.height)/8,this.deadzone=new b.Rectangle((this.width-d)/2,(this.height-d)/2,d,d);break;case b.Camera.FOLLOW_LOCKON:this.deadzone=null;break;default:this.deadzone=null}},unfollow:function(){this.target=null},focusOn:function(a){this.setPosition(Math.round(a.x-this.view.halfWidth),Math.round(a.y-this.view.halfHeight))},focusOnXY:function(a,b){this.setPosition(Math.round(a-this.view.halfWidth),Math.round(b-this.view.halfHeight))},update:function(){this.target&&this.updateTarget(),this.bounds&&this.checkBounds(),this.displayObject.position.x=-this.view.x,this.displayObject.position.y=-this.view.y},updateTarget:function(){this.deadzone?(this._edge=this.target.x-this.deadzone.x,this.view.x>this._edge&&(this.view.x=this._edge),this._edge=this.target.x+this.target.width-this.deadzone.x-this.deadzone.width,this.view.xthis._edge&&(this.view.y=this._edge),this._edge=this.target.y+this.target.height-this.deadzone.y-this.deadzone.height,this.view.y=this.bounds.right&&(this.atLimit.x=!0,this.view.x=this.bounds.right-this.width),this.view.y<=this.bounds.top&&(this.atLimit.y=!0,this.view.y=this.bounds.top),this.view.bottom>=this.bounds.bottom&&(this.atLimit.y=!0,this.view.y=this.bounds.bottom-this.height),this.view.floor()},setPosition:function(a,b){this.view.x=a,this.view.y=b,this.bounds&&this.checkBounds()},setSize:function(a,b){this.view.width=a,this.view.height=b},reset:function(){this.target=null,this.view.x=0,this.view.y=0}},b.Camera.prototype.constructor=b.Camera,Object.defineProperty(b.Camera.prototype,"x",{get:function(){return this.view.x},set:function(a){this.view.x=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(b.Camera.prototype,"y",{get:function(){return this.view.y},set:function(a){this.view.y=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(b.Camera.prototype,"width",{get:function(){return this.view.width},set:function(a){this.view.width=a}}),Object.defineProperty(b.Camera.prototype,"height",{get:function(){return this.view.height},set:function(a){this.view.height=a}}),b.State=function(){this.game=null,this.add=null,this.make=null,this.camera=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.sound=null,this.scale=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.particles=null,this.physics=null,this.rnd=null},b.State.prototype={preload:function(){},loadUpdate:function(){},loadRender:function(){},create:function(){},update:function(){},render:function(){},paused:function(){},pauseUpdate:function(){},shutdown:function(){}},b.State.prototype.constructor=b.State,b.StateManager=function(a,b){this.game=a,this.states={},this._pendingState=null,"undefined"!=typeof b&&null!==b&&(this._pendingState=b),this._clearWorld=!1,this._clearCache=!1,this._created=!1,this._args=[],this.current="",this.onInitCallback=null,this.onPreloadCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPreRenderCallback=null,this.onLoadUpdateCallback=null,this.onLoadRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onPauseUpdateCallback=null,this.onShutDownCallback=null},b.StateManager.prototype={boot:function(){this.game.onPause.add(this.pause,this),this.game.onResume.add(this.resume,this),this.game.load.onLoadComplete.add(this.loadComplete,this),null!==this._pendingState&&("string"==typeof this._pendingState?this.start(this._pendingState,!1,!1):this.add("default",this._pendingState,!0))},add:function(a,c,d){"undefined"==typeof d&&(d=!1);var e;return c instanceof b.State?e=c:"object"==typeof c?(e=c,e.game=this.game):"function"==typeof c&&(e=new c(this.game)),this.states[a]=e,d&&(this.game.isBooted?this.start(a):this._pendingState=a),e},remove:function(a){this.current===a&&(this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onPauseUpdateCallback=null),delete this.states[a]},start:function(a,b,c){"undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=!1),this.checkState(a)&&(this._pendingState=a,this._clearWorld=b,this._clearCache=c,arguments.length>3&&(this._args=Array.prototype.splice.call(arguments,3)))},restart:function(a,b){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!1),this._pendingState=this.current,this._clearWorld=a,this._clearCache=b,arguments.length>2&&(this._args=Array.prototype.splice.call(arguments,2))},dummy:function(){},preUpdate:function(){this._pendingState&&this.game.isBooted&&(this.current&&(this.onShutDownCallback.call(this.callbackContext,this.game),this.game.tweens.removeAll(),this.game.camera.reset(),this.game.input.reset(!0),this.game.physics.clear(),this.game.time.removeAll(),this._clearWorld&&(this.game.world.shutdown(),this._clearCache===!0&&this.game.cache.destroy())),this.setCurrentState(this._pendingState),this.onPreloadCallback?(this.game.load.reset(),this.onPreloadCallback.call(this.callbackContext,this.game),0===this.game.load.totalQueuedFiles()?this.loadComplete():this.game.load.start()):this.loadComplete(),this.current===this._pendingState&&(this._pendingState=null))},checkState:function(a){if(this.states[a]){var b=!1;return this.states[a].preload&&(b=!0),this.states[a].create&&(b=!0),this.states[a].update&&(b=!0),this.states[a].render&&(b=!0),b===!1?(console.warn("Invalid Phaser State object given. Must contain at least a one of the required functions: preload, create, update or render"),!1):!0}return console.warn("Phaser.StateManager - No state found with the key: "+a),!1},link:function(a){this.states[a].game=this.game,this.states[a].add=this.game.add,this.states[a].make=this.game.make,this.states[a].camera=this.game.camera,this.states[a].cache=this.game.cache,this.states[a].input=this.game.input,this.states[a].load=this.game.load,this.states[a].math=this.game.math,this.states[a].sound=this.game.sound,this.states[a].scale=this.game.scale,this.states[a].state=this,this.states[a].stage=this.game.stage,this.states[a].time=this.game.time,this.states[a].tweens=this.game.tweens,this.states[a].world=this.game.world,this.states[a].particles=this.game.particles,this.states[a].rnd=this.game.rnd,this.states[a].physics=this.game.physics},setCurrentState:function(a){this.callbackContext=this.states[a],this.link(a),this.onInitCallback=this.states[a].init||this.dummy,this.onPreloadCallback=this.states[a].preload||null,this.onLoadRenderCallback=this.states[a].loadRender||null,this.onLoadUpdateCallback=this.states[a].loadUpdate||null,this.onCreateCallback=this.states[a].create||null,this.onUpdateCallback=this.states[a].update||null,this.onPreRenderCallback=this.states[a].preRender||null,this.onRenderCallback=this.states[a].render||null,this.onPausedCallback=this.states[a].paused||null,this.onResumedCallback=this.states[a].resumed||null,this.onPauseUpdateCallback=this.states[a].pauseUpdate||null,this.onShutDownCallback=this.states[a].shutdown||this.dummy,this.current=a,this._created=!1,this.onInitCallback.apply(this.callbackContext,this._args),this._args=[]},getCurrentState:function(){return this.states[this.current]},loadComplete:function(){this._created===!1&&this.onCreateCallback?(this._created=!0,this.onCreateCallback.call(this.callbackContext,this.game)):this._created=!0},pause:function(){this._created&&this.onPausedCallback&&this.onPausedCallback.call(this.callbackContext,this.game)},resume:function(){this._created&&this.onResumedCallback&&this.onResumedCallback.call(this.callbackContext,this.game)},update:function(){this._created&&this.onUpdateCallback?this.onUpdateCallback.call(this.callbackContext,this.game):this.onLoadUpdateCallback&&this.onLoadUpdateCallback.call(this.callbackContext,this.game)},pauseUpdate:function(){this._created&&this.onPauseUpdateCallback?this.onPauseUpdateCallback.call(this.callbackContext,this.game):this.onLoadUpdateCallback&&this.onLoadUpdateCallback.call(this.callbackContext,this.game) +},preRender:function(){this.onPreRenderCallback&&this.onPreRenderCallback.call(this.callbackContext,this.game)},render:function(){this._created&&this.onRenderCallback?(this.game.renderType===b.CANVAS&&(this.game.context.save(),this.game.context.setTransform(1,0,0,1,0,0)),this.onRenderCallback.call(this.callbackContext,this.game),this.game.renderType===b.CANVAS&&this.game.context.restore()):this.onLoadRenderCallback&&this.onLoadRenderCallback.call(this.callbackContext,this.game)},destroy:function(){this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onPauseUpdateCallback=null,this.game=null,this.states={},this._pendingState=null}},b.StateManager.prototype.constructor=b.StateManager,b.LinkedList=function(){this.next=null,this.prev=null,this.first=null,this.last=null,this.total=0},b.LinkedList.prototype={add:function(a){return 0===this.total&&null===this.first&&null===this.last?(this.first=a,this.last=a,this.next=a,a.prev=this,this.total++,a):(this.last.next=a,a.prev=this.last,this.last=a,this.total++,a)},reset:function(){this.first=null,this.last=null,this.next=null,this.prev=null,this.total=0},remove:function(a){return 1===this.total?(this.reset(),void(a.next=a.prev=null)):(a===this.first?this.first=this.first.next:a===this.last&&(this.last=this.last.prev),a.prev&&(a.prev.next=a.next),a.next&&(a.next.prev=a.prev),a.next=a.prev=null,null===this.first&&(this.last=null),void this.total--)},callAll:function(a){if(this.first&&this.last){var b=this.first;do b&&b[a]&&b[a].call(b),b=b.next;while(b!=this.last.next)}}},b.LinkedList.prototype.constructor=b.LinkedList,b.ArrayList=function(){this.total=0,this.position=0,this.list=[]},b.ArrayList.prototype={add:function(a){return this.exists(a)||(this.list.push(a),this.total++),a},getIndex:function(a){return this.list.indexOf(a)},exists:function(a){return this.list.indexOf(a)>-1},reset:function(){this.list.length=0,this.total=0},remove:function(a){var b=this.list.indexOf(a);return b>-1?(this.list.splice(b,1),this.total--,a):void 0},callAll:function(a){for(var b=Array.prototype.splice.call(arguments,1),c=this.list.length;c--;)this.list[c]&&this.list[c][a]&&this.list[c][a].apply(this.list[c],b)}},Object.defineProperty(b.ArrayList.prototype,"first",{get:function(){return this.position=0,this.total>0?this.list[0]:null}}),Object.defineProperty(b.ArrayList.prototype,"next",{get:function(){return this.position0&&(this.uniforms.mouse.x=a.x.toFixed(2)),a.y>0&&(this.uniforms.mouse.y=a.y.toFixed(2))),this.uniforms.time.value=this.game.time.totalElapsedSeconds()},destroy:function(){this.game=null}},b.Filter.prototype.constructor=b.Filter,Object.defineProperty(b.Filter.prototype,"width",{get:function(){return this.uniforms.resolution.value.x},set:function(a){this.uniforms.resolution.value.x=a}}),Object.defineProperty(b.Filter.prototype,"height",{get:function(){return this.uniforms.resolution.value.y},set:function(a){this.uniforms.resolution.value.y=a}}),b.Plugin=function(a,b){"undefined"==typeof b&&(b=null),this.game=a,this.parent=b,this.active=!1,this.visible=!1,this.hasPreUpdate=!1,this.hasUpdate=!1,this.hasPostUpdate=!1,this.hasRender=!1,this.hasPostRender=!1},b.Plugin.prototype={preUpdate:function(){},update:function(){},render:function(){},postRender:function(){},destroy:function(){this.game=null,this.parent=null,this.active=!1,this.visible=!1}},b.Plugin.prototype.constructor=b.Plugin,b.PluginManager=function(a){this.game=a,this.plugins=[],this._len=0,this._i=0},b.PluginManager.prototype={add:function(a){var b=!1;return"function"==typeof a?a=new a(this.game,this._parent):(a.game=this.game,a.parent=this),"function"==typeof a.preUpdate&&(a.hasPreUpdate=!0,b=!0),"function"==typeof a.update&&(a.hasUpdate=!0,b=!0),"function"==typeof a.postUpdate&&(a.hasPostUpdate=!0,b=!0),"function"==typeof a.render&&(a.hasRender=!0,b=!0),"function"==typeof a.postRender&&(a.hasPostRender=!0,b=!0),b?((a.hasPreUpdate||a.hasUpdate||a.hasPostUpdate)&&(a.active=!0),(a.hasRender||a.hasPostRender)&&(a.visible=!0),this._len=this.plugins.push(a),"function"==typeof a.init&&a.init(),a):null},remove:function(a){for(this._i=this._len;this._i--;)if(this.plugins[this._i]===a)return a.destroy(),this.plugins.splice(this._i,1),void this._len--},removeAll:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].destroy();this.plugins.length=0,this._len=0},preUpdate:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasPreUpdate&&this.plugins[this._i].preUpdate()},update:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasUpdate&&this.plugins[this._i].update()},postUpdate:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasPostUpdate&&this.plugins[this._i].postUpdate()},render:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].visible&&this.plugins[this._i].hasRender&&this.plugins[this._i].render()},postRender:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].visible&&this.plugins[this._i].hasPostRender&&this.plugins[this._i].postRender()},destroy:function(){this.removeAll(),this.game=null}},b.PluginManager.prototype.constructor=b.PluginManager,b.Stage=function(a,c,d){this.game=a,this.offset=new b.Point,PIXI.Stage.call(this,0,!1),this.name="_stage_root",this.interactive=!1,this.disableVisibilityChange=!1,this.checkOffsetInterval=2500,this.exists=!0,this.currentRenderOrderID=0,this._hiddenVar="hidden",this._nextOffsetCheck=0,this._backgroundColor=0,a.config?this.parseConfig(a.config):(this.game.canvas=b.Canvas.create(c,d),this.game.canvas.style["-webkit-full-screen"]="width: 100%; height: 100%")},b.Stage.prototype=Object.create(PIXI.Stage.prototype),b.Stage.prototype.constructor=b.Stage,b.Stage.prototype.preUpdate=function(){this.currentRenderOrderID=0;for(var a=this.children.length,b=0;a>b;b++)this.children[b].preUpdate()},b.Stage.prototype.update=function(){for(var a=this.children.length;a--;)this.children[a].update()},b.Stage.prototype.postUpdate=function(){if(this.game.world.camera.target){this.game.world.camera.target.postUpdate(),this.game.world.camera.update();for(var a=this.children.length;a--;)this.children[a]!==this.game.world.camera.target&&this.children[a].postUpdate()}else{this.game.world.camera.update();for(var a=this.children.length;a--;)this.children[a].postUpdate()}this.checkOffsetInterval!==!1&&this.game.time.now>this._nextOffsetCheck&&(b.Canvas.getOffset(this.game.canvas,this.offset),this._nextOffsetCheck=this.game.time.now+this.checkOffsetInterval)},b.Stage.prototype.parseConfig=function(a){this.game.canvas=a.canvasID?b.Canvas.create(this.game.width,this.game.height,a.canvasID):b.Canvas.create(this.game.width,this.game.height),a.canvasStyle?this.game.canvas.stlye=a.canvasStyle:this.game.canvas.style["-webkit-full-screen"]="width: 100%; height: 100%",a.checkOffsetInterval&&(this.checkOffsetInterval=a.checkOffsetInterval),a.disableVisibilityChange&&(this.disableVisibilityChange=a.disableVisibilityChange),a.fullScreenScaleMode&&(this.fullScreenScaleMode=a.fullScreenScaleMode),a.scaleMode&&(this.scaleMode=a.scaleMode),a.backgroundColor&&(this.backgroundColor=a.backgroundColor)},b.Stage.prototype.boot=function(){b.Canvas.getOffset(this.game.canvas,this.offset),this.bounds=new b.Rectangle(this.offset.x,this.offset.y,this.game.width,this.game.height);var a=this;this._onChange=function(b){return a.visibilityChange(b)},b.Canvas.setUserSelect(this.game.canvas,"none"),b.Canvas.setTouchAction(this.game.canvas,"none"),this.checkVisibility()},b.Stage.prototype.checkVisibility=function(){this._hiddenVar=void 0!==document.webkitHidden?"webkitvisibilitychange":void 0!==document.mozHidden?"mozvisibilitychange":void 0!==document.msHidden?"msvisibilitychange":void 0!==document.hidden?"visibilitychange":null,this._hiddenVar&&document.addEventListener(this._hiddenVar,this._onChange,!1),window.onpagehide=this._onChange,window.onpageshow=this._onChange,window.onblur=this._onChange,window.onfocus=this._onChange},b.Stage.prototype.visibilityChange=function(a){return this.disableVisibilityChange?void 0:"pagehide"===a.type||"blur"===a.type||"pageshow"===a.type||"focus"===a.type?void("pagehide"===a.type||"blur"===a.type?this.game.focusLoss(a):("pageshow"===a.type||"focus"===a.type)&&this.game.focusGain(a)):void(document.hidden||document.mozHidden||document.msHidden||document.webkitHidden?this.game.gamePaused(a):this.game.gameResumed(a))},b.Stage.prototype.setBackgroundColor=function(a){this._backgroundColor=a||0,this.backgroundColorSplit=PIXI.hex2rgb(this.backgroundColor);var b=this._backgroundColor.toString(16);b="000000".substr(0,6-b.length)+b,this.backgroundColorString="#"+b},Object.defineProperty(b.Stage.prototype,"backgroundColor",{get:function(){return this._backgroundColor},set:function(a){this._backgroundColor=a,this.game.transparent===!1&&("string"==typeof a&&(a=b.Color.hexToRGB(a)),this.setBackgroundColor(a))}}),Object.defineProperty(b.Stage.prototype,"smoothed",{get:function(){return!PIXI.scaleModes.LINEAR},set:function(a){PIXI.scaleModes.LINEAR=a?0:1}}),b.Group=function(a,c,d,e,f,g){"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=!1),"undefined"==typeof g&&(g=b.Physics.ARCADE),this.game=a,"undefined"==typeof c&&(c=a.world),this.name=d||"group",PIXI.DisplayObjectContainer.call(this),e?this.game.stage.addChild(this):c&&c.addChild(this),this.z=0,this.type=b.GROUP,this.alive=!0,this.exists=!0,this.classType=b.Sprite,this.scale=new b.Point(1,1),this.cursor=null,this.cameraOffset=new b.Point,this.enableBody=f,this.enableBodyDebug=!1,this.physicsBodyType=g,this._sortProperty="z",this._cache=[0,0,0,0,1,0,1,0,0,0]},b.Group.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),b.Group.prototype.constructor=b.Group,b.Group.RETURN_NONE=0,b.Group.RETURN_TOTAL=1,b.Group.RETURN_CHILD=2,b.Group.SORT_ASCENDING=-1,b.Group.SORT_DESCENDING=1,b.Group.prototype.add=function(a){return a.parent!==this&&(this.enableBody&&this.game.physics.enable(a,this.physicsBodyType),this.addChild(a),a.z=this.children.length,a.events&&a.events.onAddedToGroup.dispatch(a,this),null===this.cursor&&(this.cursor=a)),a},b.Group.prototype.addAt=function(a,b){return a.parent!==this&&(this.enableBody&&this.game.physics.enable(a,this.physicsBodyType),this.addChildAt(a,b),this.updateZ(),a.events&&a.events.onAddedToGroup.dispatch(a,this),null===this.cursor&&(this.cursor=a)),a},b.Group.prototype.getAt=function(a){return 0>a||a>=this.children.length?-1:this.getChildAt(a)},b.Group.prototype.create=function(a,b,c,d,e){"undefined"==typeof e&&(e=!0);var f=new this.classType(this.game,a,b,c,d);return this.enableBody&&this.game.physics.enable(f,this.physicsBodyType),f.exists=e,f.visible=e,f.alive=e,this.addChild(f),f.z=this.children.length,f.events&&f.events.onAddedToGroup.dispatch(f,this),null===this.cursor&&(this.cursor=f),f},b.Group.prototype.createMultiple=function(a,b,c,d){"undefined"==typeof d&&(d=!1);for(var e=0;a>e;e++)this.create(0,0,b,c,d)},b.Group.prototype.updateZ=function(){for(var a=this.children.length;a--;)this.children[a].z=a},b.Group.prototype.resetCursor=function(a){return"undefined"==typeof a&&(a=0),a>this.children.length-1&&(a=0),this.cursor?(this._cache[8]=a,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.next=function(){return this.cursor?(this._cache[8]>=this.children.length-1?this._cache[8]=0:this._cache[8]++,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.previous=function(){return this.cursor?(0===this._cache[8]?this._cache[8]=this.children.length-1:this._cache[8]--,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.swap=function(a,b){var c=this.swapChildren(a,b);return c&&this.updateZ(),c},b.Group.prototype.bringToTop=function(a){return a.parent===this&&this.getIndex(a)0&&(this.remove(a),this.addAt(a,0)),a},b.Group.prototype.moveUp=function(a){if(a.parent===this&&this.getIndex(a)0){var b=this.getIndex(a),c=this.getAt(b-1);c&&this.swap(a,c)}return a},b.Group.prototype.xy=function(a,b,c){return 0>a||a>this.children.length?-1:(this.getChildAt(a).x=b,void(this.getChildAt(a).y=c))},b.Group.prototype.reverse=function(){this.children.reverse(),this.updateZ()},b.Group.prototype.getIndex=function(a){return this.children.indexOf(a)},b.Group.prototype.replace=function(a,c){var d=this.getIndex(a);if(-1!==d){void 0!==c.parent&&(c.events.onRemovedFromGroup.dispatch(c,this),c.parent.removeChild(c),c.parent instanceof b.Group&&c.parent.updateZ());var e=a;return this.remove(e),this.addAt(c,d),e}},b.Group.prototype.setProperty=function(a,b,c,d){d=d||0;var e=b.length;1===e&&a.hasOwnProperty(b[0])?0===d?a[b[0]]=c:1==d?a[b[0]]+=c:2==d?a[b[0]]-=c:3==d?a[b[0]]*=c:4==d&&(a[b[0]]/=c):2===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])?0===d?a[b[0]][b[1]]=c:1==d?a[b[0]][b[1]]+=c:2==d?a[b[0]][b[1]]-=c:3==d?a[b[0]][b[1]]*=c:4==d&&(a[b[0]][b[1]]/=c):3===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])&&a[b[0]][b[1]].hasOwnProperty(b[2])?0===d?a[b[0]][b[1]][b[2]]=c:1==d?a[b[0]][b[1]][b[2]]+=c:2==d?a[b[0]][b[1]][b[2]]-=c:3==d?a[b[0]][b[1]][b[2]]*=c:4==d&&(a[b[0]][b[1]][b[2]]/=c):4===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])&&a[b[0]][b[1]].hasOwnProperty(b[2])&&a[b[0]][b[1]][b[2]].hasOwnProperty(b[3])&&(0===d?a[b[0]][b[1]][b[2]][b[3]]=c:1==d?a[b[0]][b[1]][b[2]][b[3]]+=c:2==d?a[b[0]][b[1]][b[2]][b[3]]-=c:3==d?a[b[0]][b[1]][b[2]][b[3]]*=c:4==d&&(a[b[0]][b[1]][b[2]][b[3]]/=c))},b.Group.prototype.set=function(a,b,c,d,e,f){b=b.split("."),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1),(d===!1||d&&a.alive)&&(e===!1||e&&a.visible)&&this.setProperty(a,b,c,f)},b.Group.prototype.setAll=function(a,b,c,d,e){a=a.split("."),"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1),e=e||0;for(var f=0,g=this.children.length;g>f;f++)(!c||c&&this.children[f].alive)&&(!d||d&&this.children[f].visible)&&this.setProperty(this.children[f],a,b,e)},b.Group.prototype.setAllChildren=function(a,c,d,e,f){"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1),f=f||0;for(var g=0,h=this.children.length;h>g;g++)(!d||d&&this.children[g].alive)&&(!e||e&&this.children[g].visible)&&(this.children[g]instanceof b.Group?this.children[g].setAllChildren(a,c,d,e,f):this.setProperty(this.children[g],a.split("."),c,f))},b.Group.prototype.addAll=function(a,b,c,d){this.setAll(a,b,c,d,1)},b.Group.prototype.subAll=function(a,b,c,d){this.setAll(a,b,c,d,2)},b.Group.prototype.multiplyAll=function(a,b,c,d){this.setAll(a,b,c,d,3)},b.Group.prototype.divideAll=function(a,b,c,d){this.setAll(a,b,c,d,4)},b.Group.prototype.callAllExists=function(a,b){for(var c=Array.prototype.splice.call(arguments,2),d=0,e=this.children.length;e>d;d++)this.children[d].exists===b&&this.children[d][a]&&this.children[d][a].apply(this.children[d],c)},b.Group.prototype.callbackFromArray=function(a,b,c){if(1==c){if(a[b[0]])return a[b[0]]}else if(2==c){if(a[b[0]][b[1]])return a[b[0]][b[1]]}else if(3==c){if(a[b[0]][b[1]][b[2]])return a[b[0]][b[1]][b[2]]}else if(4==c){if(a[b[0]][b[1]][b[2]][b[3]])return a[b[0]][b[1]][b[2]][b[3]]}else if(a[b])return a[b];return!1},b.Group.prototype.callAll=function(a,b){if("undefined"!=typeof a){a=a.split(".");var c=a.length;if("undefined"==typeof b||null===b||""===b)b=null;else if("string"==typeof b){b=b.split(".");var d=b.length}for(var e=Array.prototype.splice.call(arguments,2),f=null,g=null,h=0,i=this.children.length;i>h;h++)f=this.callbackFromArray(this.children[h],a,c),b&&f?(g=this.callbackFromArray(this.children[h],b,d),f&&f.apply(g,e)):f&&f.apply(this.children[h],e)}},b.Group.prototype.preUpdate=function(){if(!this.exists||!this.parent.exists)return this.renderOrderID=-1,!1;for(var a=this.children.length;a--;)this.children[a].preUpdate();return!0},b.Group.prototype.update=function(){for(var a=this.children.length;a--;)this.children[a].update()},b.Group.prototype.postUpdate=function(){1===this._cache[7]&&(this.x=this.game.camera.view.x+this.cameraOffset.x,this.y=this.game.camera.view.y+this.cameraOffset.y);for(var a=this.children.length;a--;)this.children[a].postUpdate()},b.Group.prototype.forEach=function(a,b,c){"undefined"==typeof c&&(c=!1);var d=Array.prototype.splice.call(arguments,3);d.unshift(null);for(var e=0,f=this.children.length;f>e;e++)(!c||c&&this.children[e].exists)&&(d[0]=this.children[e],a.apply(b,d))},b.Group.prototype.forEachExists=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("exists",!0,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.forEachAlive=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("alive",!0,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.forEachDead=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("alive",!1,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.sort=function(a,c){this.children.length<2||("undefined"==typeof a&&(a="z"),"undefined"==typeof c&&(c=b.Group.SORT_ASCENDING),this._sortProperty=a,this.children.sort(c===b.Group.SORT_ASCENDING?this.ascendingSortHandler.bind(this):this.descendingSortHandler.bind(this)),this.updateZ())},b.Group.prototype.customSort=function(a,b){this.children.length<2||(this.children.sort(a.bind(b)),this.updateZ())},b.Group.prototype.ascendingSortHandler=function(a,b){return a[this._sortProperty]b[this._sortProperty]?1:a.zb[this._sortProperty]?-1:0},b.Group.prototype.iterate=function(a,c,d,e,f,g){if(d===b.Group.RETURN_TOTAL&&0===this.children.length)return 0;"undefined"==typeof e&&(e=!1);for(var h=0,i=0,j=this.children.length;j>i;i++)if(this.children[i][a]===c&&(h++,e&&(g[0]=this.children[i],e.apply(f,g)),d===b.Group.RETURN_CHILD))return this.children[i];return d===b.Group.RETURN_TOTAL?h:d===b.Group.RETURN_CHILD?null:void 0},b.Group.prototype.getFirstExists=function(a){return"boolean"!=typeof a&&(a=!0),this.iterate("exists",a,b.Group.RETURN_CHILD)},b.Group.prototype.getFirstAlive=function(){return this.iterate("alive",!0,b.Group.RETURN_CHILD)},b.Group.prototype.getFirstDead=function(){return this.iterate("alive",!1,b.Group.RETURN_CHILD)},b.Group.prototype.getTop=function(){return this.children.length>0?this.children[this.children.length-1]:void 0},b.Group.prototype.getBottom=function(){return this.children.length>0?this.children[0]:void 0},b.Group.prototype.countLiving=function(){return this.iterate("alive",!0,b.Group.RETURN_TOTAL)},b.Group.prototype.countDead=function(){return this.iterate("alive",!1,b.Group.RETURN_TOTAL)},b.Group.prototype.getRandom=function(a,b){return 0===this.children.length?null:(a=a||0,b=b||this.children.length,this.game.math.getRandom(this.children,a,b))},b.Group.prototype.remove=function(a,b){if("undefined"==typeof b&&(b=!1),0===this.children.length||-1===this.children.indexOf(a))return!1;a.events&&!a.destroyPhase&&a.events.onRemovedFromGroup.dispatch(a,this);var c=this.removeChild(a);return this.updateZ(),this.cursor===a&&this.next(),b&&c&&c.destroy(!0),!0},b.Group.prototype.removeAll=function(a){if("undefined"==typeof a&&(a=!1),0!==this.children.length){do{this.children[0].events&&this.children[0].events.onRemovedFromGroup.dispatch(this.children[0],this);var b=this.removeChild(this.children[0]);a&&b&&b.destroy(!0)}while(this.children.length>0);this.cursor=null}},b.Group.prototype.removeBetween=function(a,b,c){if("undefined"==typeof b&&(b=this.children.length),"undefined"==typeof c&&(c=!1),0!==this.children.length){if(a>b||0>a||b>this.children.length)return!1;for(var d=b;d>=a;){this.children[d].events&&this.children[d].events.onRemovedFromGroup.dispatch(this.children[d],this);var e=this.removeChild(this.children[d]);c&&e&&e.destroy(!0),this.cursor===this.children[d]&&(this.cursor=null),d--}this.updateZ()}},b.Group.prototype.destroy=function(a,b){null!==this.game&&("undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!1),this.removeAll(a),this.cursor=null,b||(this.parent&&this.parent.removeChild(this),this.game=null,this.exists=!1))},Object.defineProperty(b.Group.prototype,"total",{get:function(){return this.iterate("exists",!0,b.Group.RETURN_TOTAL)}}),Object.defineProperty(b.Group.prototype,"length",{get:function(){return this.children.length}}),Object.defineProperty(b.Group.prototype,"angle",{get:function(){return b.Math.radToDeg(this.rotation)},set:function(a){this.rotation=b.Math.degToRad(a)}}),Object.defineProperty(b.Group.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),b.World=function(a){b.Group.call(this,a,null,"__world",!1),this.bounds=new b.Rectangle(0,0,a.width,a.height),this.camera=null},b.World.prototype=Object.create(b.Group.prototype),b.World.prototype.constructor=b.World,b.World.prototype.boot=function(){this.camera=new b.Camera(this.game,0,0,0,this.game.width,this.game.height),this.camera.displayObject=this,this.camera.scale=this.scale,this.game.camera=this.camera,this.game.stage.addChild(this)},b.World.prototype.setBounds=function(a,b,c,d){cthis.bounds.right&&(a.x=this.bounds.left),a._currentBounds.bottomthis.bounds.bottom&&(a.y=this.bounds.top)):(a.x+bthis.bounds.right&&(a.x=this.bounds.left-b),a.y+bthis.bounds.bottom&&(a.y=this.bounds.top-b))},Object.defineProperty(b.World.prototype,"width",{get:function(){return this.bounds.width},set:function(a){this.bounds.width=a}}),Object.defineProperty(b.World.prototype,"height",{get:function(){return this.bounds.height},set:function(a){this.bounds.height=a}}),Object.defineProperty(b.World.prototype,"centerX",{get:function(){return this.bounds.halfWidth}}),Object.defineProperty(b.World.prototype,"centerY",{get:function(){return this.bounds.halfHeight}}),Object.defineProperty(b.World.prototype,"randomX",{get:function(){return this.bounds.x<0?this.game.rnd.integerInRange(this.bounds.x,this.bounds.width-Math.abs(this.bounds.x)):this.game.rnd.integerInRange(this.bounds.x,this.bounds.width)}}),Object.defineProperty(b.World.prototype,"randomY",{get:function(){return this.bounds.y<0?this.game.rnd.integerInRange(this.bounds.y,this.bounds.height-Math.abs(this.bounds.y)):this.game.rnd.integerInRange(this.bounds.y,this.bounds.height)}}),b.ScaleManager=function(a,c,d){this.game=a,this.width=c,this.height=d,this.minWidth=null,this.maxWidth=null,this.minHeight=null,this.maxHeight=null,this.forceLandscape=!1,this.forcePortrait=!1,this.incorrectOrientation=!1,this.pageAlignHorizontally=!1,this.pageAlignVertically=!1,this.maxIterations=5,this.orientationSprite=null,this.enterLandscape=new b.Signal,this.enterPortrait=new b.Signal,this.enterIncorrectOrientation=new b.Signal,this.leaveIncorrectOrientation=new b.Signal,this.hasResized=new b.Signal,this.fullScreenTarget=this.game.canvas,this.enterFullScreen=new b.Signal,this.leaveFullScreen=new b.Signal,this.orientation=0,window.orientation?this.orientation=window.orientation:window.outerWidth>window.outerHeight&&(this.orientation=90),this.scaleFactor=new b.Point(1,1),this.scaleFactorInversed=new b.Point(1,1),this.margin=new b.Point(0,0),this.aspectRatio=0,this.sourceAspectRatio=c/d,this.event=null,this.scaleMode=b.ScaleManager.NO_SCALE,this.fullScreenScaleMode=b.ScaleManager.NO_SCALE,this._startHeight=0,this._width=0,this._height=0;var e=this;window.addEventListener("orientationchange",function(a){return e.checkOrientation(a)},!1),window.addEventListener("resize",function(a){return e.checkResize(a)},!1),document.addEventListener("webkitfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("mozfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("fullscreenchange",function(a){return e.fullScreenChange(a)},!1)},b.ScaleManager.EXACT_FIT=0,b.ScaleManager.NO_SCALE=1,b.ScaleManager.SHOW_ALL=2,b.ScaleManager.prototype={startFullScreen:function(a){!this.isFullScreen&&this.game.device.fullscreen&&("undefined"!=typeof a&&this.game.renderType===b.CANVAS&&(this.game.stage.smoothed=a),this._width=this.width,this._height=this.height,this.game.device.fullscreenKeyboard?this.fullScreenTarget[this.game.device.requestFullscreen](Element.ALLOW_KEYBOARD_INPUT):this.fullScreenTarget[this.game.device.requestFullscreen]())},stopFullScreen:function(){this.fullScreenTarget[this.game.device.cancelFullscreen]()},fullScreenChange:function(a){this.event=a,this.isFullScreen?(this.fullScreenScaleMode===b.ScaleManager.EXACT_FIT?(this.fullScreenTarget.style.width="100%",this.fullScreenTarget.style.height="100%",this.width=window.outerWidth,this.height=window.outerHeight,this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height,this.checkResize()):this.fullScreenScaleMode===b.ScaleManager.SHOW_ALL&&(this.setShowAll(),this.refresh()),this.enterFullScreen.dispatch(this.width,this.height)):(this.fullScreenTarget.style.width=this.game.width+"px",this.fullScreenTarget.style.height=this.game.height+"px",this.width=this._width,this.height=this._height,this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height,this.leaveFullScreen.dispatch(this.width,this.height))},forceOrientation:function(a,c,d){"undefined"==typeof c&&(c=!1),this.forceLandscape=a,this.forcePortrait=c,"undefined"!=typeof d&&((null===d||this.game.cache.checkImageKey(d)===!1)&&(d="__default"),this.orientationSprite=new b.Image(this.game,this.game.width/2,this.game.height/2,PIXI.TextureCache[d]),this.orientationSprite.anchor.set(.5),this.checkOrientationState(),this.incorrectOrientation?(this.orientationSprite.visible=!0,this.game.world.visible=!1):(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.game.stage.addChild(this.orientationSprite))},checkOrientationState:function(){this.incorrectOrientation?(this.forceLandscape&&window.innerWidth>window.innerHeight||this.forcePortrait&&window.innerHeight>window.innerWidth)&&(this.incorrectOrientation=!1,this.leaveIncorrectOrientation.dispatch(),this.orientationSprite&&(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.scaleMode!==b.ScaleManager.NO_SCALE&&this.refresh()):(this.forceLandscape&&window.innerWidthwindow.outerHeight?90:0,this.isLandscape?this.enterLandscape.dispatch(this.orientation,!0,!1):this.enterPortrait.dispatch(this.orientation,!1,!0),this.scaleMode!==b.ScaleManager.NO_SCALE&&this.refresh(),this.checkOrientationState() +},refresh:function(){if(this.game.device.iPad||this.game.device.webApp||this.game.device.desktop||(this.game.device.android&&!this.game.device.chrome?window.scrollTo(0,1):window.scrollTo(0,0)),null===this._check&&this.maxIterations>0){this._iterations=this.maxIterations;var a=this;this._check=window.setInterval(function(){return a.setScreenSize()},10),this.setScreenSize()}},setScreenSize:function(a){"undefined"==typeof a&&(a=!1),this.game.device.iPad||this.game.device.webApp||this.game.device.desktop||(this.game.device.android&&!this.game.device.chrome?window.scrollTo(0,1):window.scrollTo(0,0)),this._iterations--,(a||window.innerHeight>this._startHeight||this._iterations<0)&&(document.documentElement.style.minHeight=window.innerHeight+"px",this.incorrectOrientation?this.setMaximum():this.isFullScreen?this.fullScreenScaleMode===b.ScaleManager.EXACT_FIT?this.setExactFit():this.fullScreenScaleMode===b.ScaleManager.SHOW_ALL&&this.setShowAll():this.scaleMode===b.ScaleManager.EXACT_FIT?this.setExactFit():this.scaleMode===b.ScaleManager.SHOW_ALL&&this.setShowAll(),this.setSize(),clearInterval(this._check),this._check=null)},setSize:function(){this.incorrectOrientation||(this.maxWidth&&this.width>this.maxWidth&&(this.width=this.maxWidth),this.maxHeight&&this.height>this.maxHeight&&(this.height=this.maxHeight),this.minWidth&&this.widththis.maxWidth?this.maxWidth:a,this.height=this.maxHeight&&b>this.maxHeight?this.maxHeight:b}},b.ScaleManager.prototype.constructor=b.ScaleManager,Object.defineProperty(b.ScaleManager.prototype,"isFullScreen",{get:function(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement}}),Object.defineProperty(b.ScaleManager.prototype,"isPortrait",{get:function(){return 0===this.orientation||180===this.orientation}}),Object.defineProperty(b.ScaleManager.prototype,"isLandscape",{get:function(){return 90===this.orientation||-90===this.orientation}}),b.Game=function(a,c,d,e,f,g,h,i){this.id=b.GAMES.push(this)-1,this.config=null,this.physicsConfig=i,this.parent="",this.width=800,this.height=600,this.transparent=!1,this.antialias=!0,this.renderer=null,this.renderType=b.AUTO,this.state=null,this.isBooted=!1,this.isRunning=!1,this.raf=null,this.add=null,this.make=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.net=null,this.scale=null,this.sound=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.physics=null,this.rnd=null,this.device=null,this.camera=null,this.canvas=null,this.context=null,this.debug=null,this.particles=null,this.stepping=!1,this.pendingStep=!1,this.stepCount=0,this.onPause=null,this.onResume=null,this.onBlur=null,this.onFocus=null,this._paused=!1,this._codePaused=!1,1===arguments.length&&"object"==typeof arguments[0]?this.parseConfig(arguments[0]):("undefined"!=typeof a&&(this.width=a),"undefined"!=typeof c&&(this.height=c),"undefined"!=typeof d&&(this.renderer=d,this.renderType=d),"undefined"!=typeof e&&(this.parent=e),"undefined"!=typeof g&&(this.transparent=g),"undefined"!=typeof h&&(this.antialias=h),this.rnd=new b.RandomDataGenerator([(Date.now()*Math.random()).toString()]),this.state=new b.StateManager(this,f));var j=this;return this._onBoot=function(){return j.boot()},"complete"===document.readyState||"interactive"===document.readyState?window.setTimeout(this._onBoot,0):(document.addEventListener("DOMContentLoaded",this._onBoot,!1),window.addEventListener("load",this._onBoot,!1)),this},b.Game.prototype={parseConfig:function(a){this.config=a,a.width&&(this.width=b.Utils.parseDimension(a.width,0)),a.height&&(this.height=b.Utils.parseDimension(a.height,1)),a.renderer&&(this.renderer=a.renderer,this.renderType=a.renderer),a.parent&&(this.parent=a.parent),a.transparent&&(this.transparent=a.transparent),a.antialias&&(this.antialias=a.antialias),a.physicsConfig&&(this.physicsConfig=a.physicsConfig);var c=[(Date.now()*Math.random()).toString()];a.seed&&(c=a.seed),this.rnd=new b.RandomDataGenerator(c);var d=null;a.state&&(d=a.state),this.state=new b.StateManager(this,d)},boot:function(){this.isBooted||(document.body?(document.removeEventListener("DOMContentLoaded",this._onBoot),window.removeEventListener("load",this._onBoot),this.onPause=new b.Signal,this.onResume=new b.Signal,this.onBlur=new b.Signal,this.onFocus=new b.Signal,this.isBooted=!0,this.device=new b.Device(this),this.math=b.Math,this.stage=new b.Stage(this,this.width,this.height),this.scale=new b.ScaleManager(this,this.width,this.height),this.setUpRenderer(),this.device.checkFullScreenSupport(),this.world=new b.World(this),this.add=new b.GameObjectFactory(this),this.make=new b.GameObjectCreator(this),this.cache=new b.Cache(this),this.load=new b.Loader(this),this.time=new b.Time(this),this.tweens=new b.TweenManager(this),this.input=new b.Input(this),this.sound=new b.SoundManager(this),this.physics=new b.Physics(this,this.physicsConfig),this.particles=new b.Particles(this),this.plugins=new b.PluginManager(this),this.net=new b.Net(this),this.debug=new b.Utils.Debug(this),this.scratch=new b.BitmapData(this,"__root",1024,1024),this.time.boot(),this.stage.boot(),this.world.boot(),this.input.boot(),this.sound.boot(),this.state.boot(),this.debug.boot(),this.showDebugHeader(),this.isRunning=!0,this.raf=this.config&&this.config.forceSetTimeOut?new b.RequestAnimationFrame(this,this.config.forceSetTimeOut):new b.RequestAnimationFrame(this,!1),this.raf.start()):window.setTimeout(this._onBoot,20))},showDebugHeader:function(){var a=b.VERSION,c="Canvas",d="HTML Audio",e=1;if(this.renderType===b.WEBGL?(c="WebGL",e++):this.renderType==b.HEADLESS&&(c="Headless"),this.device.webAudio&&(d="WebAudio",e++),this.device.chrome){for(var f=["%c %c %c Phaser v"+a+" - "+c+" - "+d+" %c %c http://phaser.io %c %c ♥%c♥%c♥ ","background: #0cf300","background: #00bc17","color: #ffffff; background: #00711f;","background: #00bc17","background: #0cf300","background: #00bc17"],g=0;3>g;g++)f.push(e>g?"color: #ff2424; background: #fff":"color: #959595; background: #fff");console.log.apply(console,f)}else window.console&&console.log("Phaser v"+a+" - Renderer: "+c+" - Audio: "+d+" - http://phaser.io")},setUpRenderer:function(){if(this.device.trident&&(this.renderType=b.CANVAS),this.renderType===b.HEADLESS||this.renderType===b.CANVAS||this.renderType===b.AUTO&&this.device.webGL===!1){if(!this.device.canvas)throw new Error("Phaser.Game - cannot create Canvas or WebGL context, aborting.");this.renderType===b.AUTO&&(this.renderType=b.CANVAS),this.renderer=new PIXI.CanvasRenderer(this.width,this.height,this.canvas,this.transparent),this.context=this.renderer.context}else this.renderType=b.WEBGL,this.renderer=new PIXI.WebGLRenderer(this.width,this.height,this.canvas,this.transparent,this.antialias),this.context=null;this.renderType!==b.HEADLESS&&(this.stage.smoothed=this.antialias,b.Canvas.addToDOM(this.canvas,this.parent,!0),b.Canvas.setTouchAction(this.canvas))},update:function(a){this.time.update(a),this._paused||this.pendingStep?(this.state.pauseUpdate(),this.debug.preUpdate()):(this.stepping&&(this.pendingStep=!0),this.debug.preUpdate(),this.physics.preUpdate(),this.state.preUpdate(),this.plugins.preUpdate(),this.stage.preUpdate(),this.state.update(),this.stage.update(),this.tweens.update(),this.sound.update(),this.input.update(),this.physics.update(),this.particles.update(),this.plugins.update(),this.stage.postUpdate(),this.plugins.postUpdate()),this.renderType!=b.HEADLESS&&(this.renderer.render(this.stage),this.plugins.render(),this.state.render(),this.plugins.postRender())},enableStep:function(){this.stepping=!0,this.pendingStep=!1,this.stepCount=0},disableStep:function(){this.stepping=!1,this.pendingStep=!1},step:function(){this.pendingStep=!1,this.stepCount++},destroy:function(){this.raf.stop(),this.input.destroy(),this.state.destroy(),this.physics.destroy(),this.state=null,this.cache=null,this.input=null,this.load=null,this.sound=null,this.stage=null,this.time=null,this.world=null,this.isBooted=!1},gamePaused:function(a){this._paused||(this._paused=!0,this.time.gamePaused(),this.sound.setMute(),this.onPause.dispatch(a))},gameResumed:function(a){this._paused&&!this._codePaused&&(this._paused=!1,this.time.gameResumed(),this.input.reset(),this.sound.unsetMute(),this.onResume.dispatch(a))},focusLoss:function(a){this.onBlur.dispatch(a),this.gamePaused(a)},focusGain:function(a){this.onFocus.dispatch(a),this.gameResumed(a)}},b.Game.prototype.constructor=b.Game,Object.defineProperty(b.Game.prototype,"paused",{get:function(){return this._paused},set:function(a){a===!0?this._paused===!1&&(this._paused=!0,this._codePaused=!0,this.sound.setMute(),this.time.gamePaused(),this.onPause.dispatch(this)):this._paused&&(this._paused=!1,this._codePaused=!1,this.input.reset(),this.sound.unsetMute(),this.time.gameResumed(),this.onResume.dispatch(this))}}),b.Input=function(a){this.game=a,this.hitCanvas=null,this.hitContext=null,this.moveCallback=null,this.moveCallbackContext=this,this.pollRate=0,this.disabled=!1,this.multiInputOverride=b.Input.MOUSE_TOUCH_COMBINE,this.position=null,this.speed=null,this.circle=null,this.scale=null,this.maxPointers=10,this.currentPointers=0,this.tapRate=200,this.doubleTapRate=300,this.holdRate=2e3,this.justPressedRate=200,this.justReleasedRate=200,this.recordPointerHistory=!1,this.recordRate=100,this.recordLimit=100,this.pointer1=null,this.pointer2=null,this.pointer3=null,this.pointer4=null,this.pointer5=null,this.pointer6=null,this.pointer7=null,this.pointer8=null,this.pointer9=null,this.pointer10=null,this.activePointer=null,this.mousePointer=null,this.mouse=null,this.keyboard=null,this.touch=null,this.mspointer=null,this.gamepad=null,this.resetLocked=!1,this.onDown=null,this.onUp=null,this.onTap=null,this.onHold=null,this.interactiveItems=new b.ArrayList,this._localPoint=new b.Point,this._pollCounter=0,this._oldPosition=null,this._x=0,this._y=0},b.Input.MOUSE_OVERRIDES_TOUCH=0,b.Input.TOUCH_OVERRIDES_MOUSE=1,b.Input.MOUSE_TOUCH_COMBINE=2,b.Input.prototype={boot:function(){this.mousePointer=new b.Pointer(this.game,0),this.pointer1=new b.Pointer(this.game,1),this.pointer2=new b.Pointer(this.game,2),this.mouse=new b.Mouse(this.game),this.keyboard=new b.Keyboard(this.game),this.touch=new b.Touch(this.game),this.mspointer=new b.MSPointer(this.game),this.gamepad=new b.Gamepad(this.game),this.onDown=new b.Signal,this.onUp=new b.Signal,this.onTap=new b.Signal,this.onHold=new b.Signal,this.scale=new b.Point(1,1),this.speed=new b.Point,this.position=new b.Point,this._oldPosition=new b.Point,this.circle=new b.Circle(0,0,44),this.activePointer=this.mousePointer,this.currentPointers=0,this.hitCanvas=document.createElement("canvas"),this.hitCanvas.width=1,this.hitCanvas.height=1,this.hitContext=this.hitCanvas.getContext("2d"),this.mouse.start(),this.keyboard.start(),this.touch.start(),this.mspointer.start(),this.mousePointer.active=!0},destroy:function(){this.mouse.stop(),this.keyboard.stop(),this.touch.stop(),this.mspointer.stop(),this.gamepad.stop(),this.moveCallback=null},setMoveCallback:function(a,b){this.moveCallback=a,this.moveCallbackContext=b},addPointer:function(){for(var a=0,c=10;c>0;c--)null===this["pointer"+c]&&(a=c);return 0===a?(console.warn("You can only have 10 Pointer objects"),null):(this["pointer"+a]=new b.Pointer(this.game,a),this["pointer"+a])},update:function(){return this.keyboard.update(),this.pollRate>0&&this._pollCounter=c;c++)this["pointer"+c]&&this["pointer"+c].reset();this.currentPointers=0,"none"!==this.game.canvas.style.cursor&&(this.game.canvas.style.cursor="inherit"),a&&(this.onDown.dispose(),this.onUp.dispose(),this.onTap.dispose(),this.onHold.dispose(),this.onDown=new b.Signal,this.onUp=new b.Signal,this.onTap=new b.Signal,this.onHold=new b.Signal),this._pollCounter=0}},resetSpeed:function(a,b){this._oldPosition.setTo(a,b),this.speed.setTo(0,0)},startPointer:function(a){if(this.maxPointers<10&&this.totalActivePointers==this.maxPointers)return null;if(this.pointer1.active===!1)return this.pointer1.start(a);if(this.pointer2.active===!1)return this.pointer2.start(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active===!1)return this["pointer"+b].start(a);return null},updatePointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.move(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.move(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].move(a);return null},stopPointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.stop(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.stop(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].stop(a);return null},getPointer:function(a){if(a=a||!1,this.pointer1.active==a)return this.pointer1;if(this.pointer2.active==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active==a)return this["pointer"+b];return null},getPointerFromIdentifier:function(a){if(this.pointer1.identifier==a)return this.pointer1;if(this.pointer2.identifier==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].identifier==a)return this["pointer"+b];return null},getLocalPosition:function(a,c,d){"undefined"==typeof d&&(d=new b.Point);var e=a.worldTransform,f=1/(e.a*e.d+e.b*-e.c);return d.setTo(e.d*f*c.x+-e.b*f*c.y+(e.ty*e.b-e.tx*e.d)*f,e.a*f*c.y+-e.c*f*c.x+(-e.ty*e.a+e.tx*e.c)*f)},hitTest:function(a,c,d){if(!a.worldVisible)return!1;if(this.getLocalPosition(a,c,this._localPoint),d.copyFrom(this._localPoint),a.hitArea&&a.hitArea.contains)return a.hitArea.contains(this._localPoint.x,this._localPoint.y)?!0:!1;if(a instanceof b.TileSprite){var e=a.width,f=a.height,g=-e*a.anchor.x;if(this._localPoint.x>g&&this._localPoint.xh&&this._localPoint.yg&&this._localPoint.xh&&this._localPoint.yi;i++)if(this.hitTest(a.children[i],c,d))return!0;return!1}},b.Input.prototype.constructor=b.Input,Object.defineProperty(b.Input.prototype,"x",{get:function(){return this._x},set:function(a){this._x=Math.floor(a)}}),Object.defineProperty(b.Input.prototype,"y",{get:function(){return this._y},set:function(a){this._y=Math.floor(a)}}),Object.defineProperty(b.Input.prototype,"pollLocked",{get:function(){return this.pollRate>0&&this._pollCounter=a;a++)this["pointer"+a]&&this["pointer"+a].active&&this.currentPointers++;return this.currentPointers}}),Object.defineProperty(b.Input.prototype,"worldX",{get:function(){return this.game.camera.view.x+this.x}}),Object.defineProperty(b.Input.prototype,"worldY",{get:function(){return this.game.camera.view.y+this.y}}),b.Key=function(a,c){this.game=a,this.enabled=!0,this.event=null,this.isDown=!1,this.isUp=!0,this.altKey=!1,this.ctrlKey=!1,this.shiftKey=!1,this.timeDown=0,this.duration=0,this.timeUp=-2500,this.repeats=0,this.keyCode=c,this.onDown=new b.Signal,this.onHoldCallback=null,this.onHoldContext=null,this.onUp=new b.Signal},b.Key.prototype={update:function(){this.enabled&&this.isDown&&(this.duration=this.game.time.now-this.timeDown,this.repeats++,this.onHoldCallback&&this.onHoldCallback.call(this.onHoldContext,this))},processKeyDown:function(a){this.enabled&&(this.event=a,this.isDown||(this.altKey=a.altKey,this.ctrlKey=a.ctrlKey,this.shiftKey=a.shiftKey,this.isDown=!0,this.isUp=!1,this.timeDown=this.game.time.now,this.duration=0,this.repeats=0,this.onDown.dispatch(this)))},processKeyUp:function(a){this.enabled&&(this.event=a,this.isUp||(this.isDown=!1,this.isUp=!0,this.timeUp=this.game.time.now,this.duration=this.game.time.now-this.timeDown,this.onUp.dispatch(this)))},reset:function(a){"undefined"==typeof a&&(a=!0),this.isDown=!1,this.isUp=!0,this.timeUp=this.game.time.now,this.duration=this.game.time.now-this.timeDown,this.enabled=!0,a&&(this.onDown.removeAll(),this.onUp.removeAll(),this.onHoldCallback=null,this.onHoldContext=null)},justPressed:function(a){return"undefined"==typeof a&&(a=2500),this.isDown&&this.duration=this.game.input.holdRate&&((this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&this.game.input.onHold.dispatch(this),this._holdSent=!0),this.game.input.recordPointerHistory&&this.game.time.now>=this._nextDrop&&(this._nextDrop=this.game.time.now+this.game.input.recordRate,this._history.push({x:this.position.x,y:this.position.y}),this._history.length>this.game.input.recordLimit&&this._history.shift()))},move:function(a,c){if(!this.game.input.pollLocked){if("undefined"==typeof c&&(c=!1),"undefined"!=typeof a.button&&(this.button=a.button),this.clientX=a.clientX,this.clientY=a.clientY,this.pageX=a.pageX,this.pageY=a.pageY,this.screenX=a.screenX,this.screenY=a.screenY,this.x=(this.pageX-this.game.stage.offset.x)*this.game.input.scale.x,this.y=(this.pageY-this.game.stage.offset.y)*this.game.input.scale.y,this.position.setTo(this.x,this.y),this.circle.x=this.x,this.circle.y=this.y,(this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.activePointer=this,this.game.input.x=this.x,this.game.input.y=this.y,this.game.input.position.setTo(this.game.input.x,this.game.input.y),this.game.input.circle.x=this.game.input.x,this.game.input.circle.y=this.game.input.y),this.game.paused)return this; +if(this.game.input.moveCallback&&this.game.input.moveCallback.call(this.game.input.moveCallbackContext,this,this.x,this.y),null!==this.targetObject&&this.targetObject.isDragged===!0)return this.targetObject.update(this)===!1&&(this.targetObject=null),this;if(this._highestRenderOrderID=Number.MAX_SAFE_INTEGER,this._highestRenderObject=null,this._highestInputPriorityID=-1,this.game.input.interactiveItems.total>0){var d=this.game.input.interactiveItems.first;do d&&d.validForInput(this._highestInputPriorityID,this._highestRenderOrderID)&&(!c&&d.checkPointerOver(this)||c&&d.checkPointerDown(this))&&(this._highestRenderOrderID=d.sprite._cache[3],this._highestInputPriorityID=d.priorityID,this._highestRenderObject=d),d=this.game.input.interactiveItems.next;while(null!==d)}return null===this._highestRenderObject?this.targetObject&&(this.targetObject._pointerOutHandler(this),this.targetObject=null):null===this.targetObject?(this.targetObject=this._highestRenderObject,this._highestRenderObject._pointerOverHandler(this)):this.targetObject===this._highestRenderObject?this._highestRenderObject.update(this)===!1&&(this.targetObject=null):(this.targetObject._pointerOutHandler(this),this.targetObject=this._highestRenderObject,this.targetObject._pointerOverHandler(this)),this}},leave:function(a){this.withinGame=!1,this.move(a,!1)},stop:function(a){return this._stateReset?void a.preventDefault():(this.timeUp=this.game.time.now,(this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.onUp.dispatch(this,a),this.duration>=0&&this.duration<=this.game.input.tapRate&&(this.timeUp-this.previousTapTime0&&(this.active=!1),this.withinGame=!1,this.isDown=!1,this.isUp=!0,this.positionUp.setTo(this.x,this.y),this.isMouse===!1&&this.game.input.currentPointers--,this.game.input.interactiveItems.callAll("_releasedHandler",this),this.targetObject=null,this)},justPressed:function(a){return a=a||this.game.input.justPressedRate,this.isDown===!0&&this.timeDown+a>this.game.time.now},justReleased:function(a){return a=a||this.game.input.justReleasedRate,this.isUp===!0&&this.timeUp+a>this.game.time.now},reset:function(){this.isMouse===!1&&(this.active=!1),this.identifier=null,this.isDown=!1,this.isUp=!0,this.totalTouches=0,this._holdSent=!1,this._history.length=0,this._stateReset=!0,this.targetObject&&this.targetObject._releasedHandler(this),this.targetObject=null}},b.Pointer.prototype.constructor=b.Pointer,Object.defineProperty(b.Pointer.prototype,"duration",{get:function(){return this.isUp?-1:this.game.time.now-this.timeDown}}),Object.defineProperty(b.Pointer.prototype,"worldX",{get:function(){return this.game.world.camera.x+this.x}}),Object.defineProperty(b.Pointer.prototype,"worldY",{get:function(){return this.game.world.camera.y+this.y}}),b.Touch=function(a){this.game=a,this.disabled=!1,this.callbackContext=this.game,this.touchStartCallback=null,this.touchMoveCallback=null,this.touchEndCallback=null,this.touchEnterCallback=null,this.touchLeaveCallback=null,this.touchCancelCallback=null,this.preventDefault=!0,this.event=null,this._onTouchStart=null,this._onTouchMove=null,this._onTouchEnd=null,this._onTouchEnter=null,this._onTouchLeave=null,this._onTouchCancel=null,this._onTouchMove=null},b.Touch.prototype={start:function(){if(null===this._onTouchStart){var a=this;this.game.device.touch&&(this._onTouchStart=function(b){return a.onTouchStart(b)},this._onTouchMove=function(b){return a.onTouchMove(b)},this._onTouchEnd=function(b){return a.onTouchEnd(b)},this._onTouchEnter=function(b){return a.onTouchEnter(b)},this._onTouchLeave=function(b){return a.onTouchLeave(b)},this._onTouchCancel=function(b){return a.onTouchCancel(b)},this.game.canvas.addEventListener("touchstart",this._onTouchStart,!1),this.game.canvas.addEventListener("touchmove",this._onTouchMove,!1),this.game.canvas.addEventListener("touchend",this._onTouchEnd,!1),this.game.canvas.addEventListener("touchenter",this._onTouchEnter,!1),this.game.canvas.addEventListener("touchleave",this._onTouchLeave,!1),this.game.canvas.addEventListener("touchcancel",this._onTouchCancel,!1))}},consumeDocumentTouches:function(){this._documentTouchMove=function(a){a.preventDefault()},document.addEventListener("touchmove",this._documentTouchMove,!1)},onTouchStart:function(a){if(this.event=a,this.touchStartCallback&&this.touchStartCallback.call(this.callbackContext,a),!this.game.input.disabled&&!this.disabled){this.preventDefault&&a.preventDefault();for(var b=0;b0&&e>this.deadZone||0>e&&e<-this.deadZone?{axis:d,value:e}:{axis:d,value:0})}this._prevTimestamp=this._rawPad.timestamp}},connect:function(a){var b=!this._connected;this._index=a.index,this._connected=!0,this._rawPad=a,this._rawButtons=a.buttons,this._axes=a.axes,b&&this._padParent.onConnectCallback&&this._padParent.onConnectCallback.call(this._padParent.callbackContext,this._index),b&&this.onConnectCallback&&this.onConnectCallback.call(this.callbackContext)},disconnect:function(){var a=this._connected;this._connected=!1,this._rawPad=void 0,this._rawButtons=[],this._buttons=[];var b=this._index;this._index=null,a&&this._padParent.onDisconnectCallback&&this._padParent.onDisconnectCallback.call(this._padParent.callbackContext,b),a&&this.onDisconnectCallback&&this.onDisconnectCallback.call(this.callbackContext)},processAxisChange:function(a){this.game.input.disabled||this.game.input.gamepad.disabled||this._axes[a.axis]!==a.value&&(this._axes[a.axis]=a.value,this._padParent.onAxisCallback&&this._padParent.onAxisCallback.call(this._padParent.callbackContext,a,this._index),this.onAxisCallback&&this.onAxisCallback.call(this.callbackContext,a))},processButtonDown:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onDownCallback&&this._padParent.onDownCallback.call(this._padParent.callbackContext,a,b,this._index),this.onDownCallback&&this.onDownCallback.call(this.callbackContext,a,b),this._buttons[a]&&this._buttons[a].isDown?this._buttons[a].duration=this.game.time.now-this._buttons[a].timeDown:this._buttons[a]?(this._buttons[a].isDown=!0,this._buttons[a].timeDown=this.game.time.now,this._buttons[a].duration=0,this._buttons[a].value=b):this._buttons[a]={isDown:!0,timeDown:this.game.time.now,timeUp:0,duration:0,value:b},this._hotkeys[a]&&this._hotkeys[a].processButtonDown(b))},processButtonUp:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onUpCallback&&this._padParent.onUpCallback.call(this._padParent.callbackContext,a,b,this._index),this.onUpCallback&&this.onUpCallback.call(this.callbackContext,a,b),this._hotkeys[a]&&this._hotkeys[a].processButtonUp(b),this._buttons[a]?(this._buttons[a].isDown=!1,this._buttons[a].timeUp=this.game.time.now,this._buttons[a].value=b):this._buttons[a]={isDown:!1,timeDown:this.game.time.now,timeUp:this.game.time.now,duration:0,value:b})},processButtonFloat:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onFloatCallback&&this._padParent.onFloatCallback.call(this._padParent.callbackContext,a,b,this._index),this.onFloatCallback&&this.onFloatCallback.call(this.callbackContext,a,b),this._buttons[a]?this._buttons[a].value=b:this._buttons[a]={value:b},this._hotkeys[a]&&this._hotkeys[a].processButtonFloat(b))},axis:function(a){return this._axes[a]?this._axes[a]:!1},isDown:function(a){return this._buttons[a]?this._buttons[a].isDown:!1},justReleased:function(a,b){return"undefined"==typeof b&&(b=250),this._buttons[a]&&this._buttons[a].isDown===!1&&this.game.time.now-this._buttons[a].timeUpd;d++)this._pointerData[d]={id:d,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1};this.snapOffset=new b.Point,this.enabled=!0,this._wasEnabled=!0,this.sprite.events&&null===this.sprite.events.onInputOver&&(this.sprite.events.onInputOver=new b.Signal,this.sprite.events.onInputOut=new b.Signal,this.sprite.events.onInputDown=new b.Signal,this.sprite.events.onInputUp=new b.Signal,this.sprite.events.onDragStart=new b.Signal,this.sprite.events.onDragStop=new b.Signal)}return this.sprite.events.onAddedToGroup.add(this.addedToGroup,this),this.sprite.events.onRemovedFromGroup.add(this.removedFromGroup,this),this.sprite},addedToGroup:function(){this._wasEnabled&&!this.enabled&&this.start()},removedFromGroup:function(){this.enabled?(this._wasEnabled=!0,this.stop()):this._wasEnabled=!1},reset:function(){this.enabled=!1;for(var a=0;10>a;a++)this._pointerData[a]={id:a,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1}},stop:function(){this.enabled!==!1&&(this.enabled=!1,this.game.input.interactiveItems.remove(this))},destroy:function(){this.sprite&&(this._setHandCursor&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1),this.enabled=!1,this.game.input.interactiveItems.remove(this),this._pointerData.length=0,this.boundsRect=null,this.boundsSprite=null,this.sprite=null)},validForInput:function(a,b){return 0===this.sprite.scale.x||0===this.sprite.scale.y?!1:this.pixelPerfectClick||this.pixelPerfectOver?!0:this.priorityID>a||this.priorityID===a&&this.sprite._cache[3]b;b++)if(this._pointerData[b].isOver)return!0}return!1},pointerOut:function(a){if(this.enabled){if("undefined"!=typeof a)return this._pointerData[a].isOut;for(var b=0;10>b;b++)if(this._pointerData[b].isOut)return!0}return!1},pointerTimeOver:function(a){return a=a||0,this._pointerData[a].timeOver},pointerTimeOut:function(a){return a=a||0,this._pointerData[a].timeOut},pointerDragged:function(a){return a=a||0,this._pointerData[a].isDragged},checkPointerDown:function(a){return this.enabled&&this.sprite&&this.sprite.parent&&this.sprite.visible&&this.sprite.parent.visible&&this.game.input.hitTest(this.sprite,a,this._tempPoint)?this.pixelPerfectClick?this.checkPixel(this._tempPoint.x,this._tempPoint.y):!0:!1},checkPointerOver:function(a){return this.enabled&&this.sprite&&this.sprite.parent&&this.sprite.visible&&this.sprite.parent.visible&&this.game.input.hitTest(this.sprite,a,this._tempPoint)?this.pixelPerfectOver?this.checkPixel(this._tempPoint.x,this._tempPoint.y):!0:!1},checkPixel:function(a,b,c){if(this.sprite.texture.baseTexture.source){if(this.game.input.hitContext.clearRect(0,0,1,1),null===a&&null===b){this.game.input.getLocalPosition(this.sprite,c,this._tempPoint);var a=this._tempPoint.x,b=this._tempPoint.y}0!==this.sprite.anchor.x&&(a-=-this.sprite.texture.frame.width*this.sprite.anchor.x),0!==this.sprite.anchor.y&&(b-=-this.sprite.texture.frame.height*this.sprite.anchor.y),a+=this.sprite.texture.frame.x,b+=this.sprite.texture.frame.y,this.game.input.hitContext.drawImage(this.sprite.texture.baseTexture.source,a,b,1,1,0,0,1,1);var d=this.game.input.hitContext.getImageData(0,0,1,1);if(d.data[3]>=this.pixelPerfectAlpha)return!0}return!1},update:function(a){return null!==this.sprite&&void 0!==this.sprite.parent?this.enabled&&this.sprite.visible&&this.sprite.parent.visible?this.draggable&&this._draggedPointerID==a.id?this.updateDrag(a):this._pointerData[a.id].isOver===!0?this.checkPointerOver(a)?(this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,!0):(this._pointerOutHandler(a),!1):void 0:(this._pointerOutHandler(a),!1):void 0},_pointerOverHandler:function(a){null!==this.sprite&&this._pointerData[a.id].isOver===!1&&(this._pointerData[a.id].isOver=!0,this._pointerData[a.id].isOut=!1,this._pointerData[a.id].timeOver=this.game.time.now,this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.canvas.style.cursor="pointer",this._setHandCursor=!0),this.sprite&&this.sprite.events&&this.sprite.events.onInputOver.dispatch(this.sprite,a))},_pointerOutHandler:function(a){null!==this.sprite&&(this._pointerData[a.id].isOver=!1,this._pointerData[a.id].isOut=!0,this._pointerData[a.id].timeOut=this.game.time.now,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1),this.sprite&&this.sprite.events&&this.sprite.events.onInputOut.dispatch(this.sprite,a))},_touchedHandler:function(a){if(null!==this.sprite){if(this._pointerData[a.id].isDown===!1&&this._pointerData[a.id].isOver===!0){if(this.pixelPerfectClick&&!this.checkPixel(null,null,a))return;this._pointerData[a.id].isDown=!0,this._pointerData[a.id].isUp=!1,this._pointerData[a.id].timeDown=this.game.time.now,this.sprite&&this.sprite.events&&this.sprite.events.onInputDown.dispatch(this.sprite,a),this.draggable&&this.isDragged===!1&&this.startDrag(a),this.bringToTop&&this.sprite.bringToTop()}return this.consumePointerEvent}},_releasedHandler:function(a){null!==this.sprite&&this._pointerData[a.id].isDown&&a.isUp&&(this._pointerData[a.id].isDown=!1,this._pointerData[a.id].isUp=!0,this._pointerData[a.id].timeUp=this.game.time.now,this._pointerData[a.id].downDuration=this._pointerData[a.id].timeUp-this._pointerData[a.id].timeDown,this.checkPointerOver(a)?this.sprite&&this.sprite.events&&this.sprite.events.onInputUp.dispatch(this.sprite,a,!0):(this.sprite&&this.sprite.events&&this.sprite.events.onInputUp.dispatch(this.sprite,a,!1),this.useHandCursor&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1)),this.draggable&&this.isDragged&&this._draggedPointerID==a.id&&this.stopDrag(a))},updateDrag:function(a){return a.isUp?(this.stopDrag(a),!1):(this.sprite.fixedToCamera?(this.allowHorizontalDrag&&(this.sprite.cameraOffset.x=a.x+this._dragPoint.x+this.dragOffset.x),this.allowVerticalDrag&&(this.sprite.cameraOffset.y=a.y+this._dragPoint.y+this.dragOffset.y),this.boundsRect&&this.checkBoundsRect(),this.boundsSprite&&this.checkBoundsSprite(),this.snapOnDrag&&(this.sprite.cameraOffset.x=Math.round((this.sprite.cameraOffset.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.cameraOffset.y=Math.round((this.sprite.cameraOffset.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)):(this.allowHorizontalDrag&&(this.sprite.x=a.x+this._dragPoint.x+this.dragOffset.x),this.allowVerticalDrag&&(this.sprite.y=a.y+this._dragPoint.y+this.dragOffset.y),this.boundsRect&&this.checkBoundsRect(),this.boundsSprite&&this.checkBoundsSprite(),this.snapOnDrag&&(this.sprite.x=Math.round((this.sprite.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.y=Math.round((this.sprite.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)),!0)},justOver:function(a,b){return a=a||0,b=b||500,this._pointerData[a].isOver&&this.overDuration(a)a;a++)this._pointerData[a].isDragged=!1;this.draggable=!1,this.isDragged=!1,this._draggedPointerID=-1},startDrag:function(a){if(this.isDragged=!0,this._draggedPointerID=a.id,this._pointerData[a.id].isDragged=!0,this.sprite.fixedToCamera)this.dragFromCenter?(this.sprite.centerOn(a.x,a.y),this._dragPoint.setTo(this.sprite.cameraOffset.x-a.x,this.sprite.cameraOffset.y-a.y)):this._dragPoint.setTo(this.sprite.cameraOffset.x-a.x,this.sprite.cameraOffset.y-a.y);else if(this.dragFromCenter){var b=this.sprite.getBounds();this.sprite.x=a.x+(this.sprite.x-b.centerX),this.sprite.y=a.y+(this.sprite.y-b.centerY),this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y)}else this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y);this.updateDrag(a),this.bringToTop&&this.sprite.bringToTop(),this.sprite.events.onDragStart.dispatch(this.sprite,a)},stopDrag:function(a){this.isDragged=!1,this._draggedPointerID=-1,this._pointerData[a.id].isDragged=!1,this.snapOnRelease&&(this.sprite.fixedToCamera?(this.sprite.cameraOffset.x=Math.round((this.sprite.cameraOffset.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.cameraOffset.y=Math.round((this.sprite.cameraOffset.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY):(this.sprite.x=Math.round((this.sprite.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.y=Math.round((this.sprite.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)),this.sprite.events.onDragStop.dispatch(this.sprite,a),this.checkPointerOver(a)===!1&&this._pointerOutHandler(a)},setDragLock:function(a,b){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!0),this.allowHorizontalDrag=a,this.allowVerticalDrag=b},enableSnap:function(a,b,c,d,e,f){"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=0),this.snapX=a,this.snapY=b,this.snapOffsetX=e,this.snapOffsetY=f,this.snapOnDrag=c,this.snapOnRelease=d},disableSnap:function(){this.snapOnDrag=!1,this.snapOnRelease=!1},checkBoundsRect:function(){this.sprite.fixedToCamera?(this.sprite.cameraOffset.xthis.boundsRect.right&&(this.sprite.cameraOffset.x=this.boundsRect.right-this.sprite.width),this.sprite.cameraOffset.ythis.boundsRect.bottom&&(this.sprite.cameraOffset.y=this.boundsRect.bottom-this.sprite.height)):(this.sprite.xthis.boundsRect.right&&(this.sprite.x=this.boundsRect.right-this.sprite.width),this.sprite.ythis.boundsRect.bottom&&(this.sprite.y=this.boundsRect.bottom-this.sprite.height))},checkBoundsSprite:function(){this.sprite.fixedToCamera&&this.boundsSprite.fixedToCamera?(this.sprite.cameraOffset.xthis.boundsSprite.camerOffset.x+this.boundsSprite.width&&(this.sprite.cameraOffset.x=this.boundsSprite.camerOffset.x+this.boundsSprite.width-this.sprite.width),this.sprite.cameraOffset.ythis.boundsSprite.camerOffset.y+this.boundsSprite.height&&(this.sprite.cameraOffset.y=this.boundsSprite.camerOffset.y+this.boundsSprite.height-this.sprite.height)):(this.sprite.xthis.boundsSprite.x+this.boundsSprite.width&&(this.sprite.x=this.boundsSprite.x+this.boundsSprite.width-this.sprite.width),this.sprite.ythis.boundsSprite.y+this.boundsSprite.height&&(this.sprite.y=this.boundsSprite.y+this.boundsSprite.height-this.sprite.height))}},b.InputHandler.prototype.constructor=b.InputHandler,b.Events=function(a){this.parent=a,this.onAddedToGroup=new b.Signal,this.onRemovedFromGroup=new b.Signal,this.onKilled=new b.Signal,this.onRevived=new b.Signal,this.onOutOfBounds=new b.Signal,this.onEnterBounds=new b.Signal,this.onInputOver=null,this.onInputOut=null,this.onInputDown=null,this.onInputUp=null,this.onDragStart=null,this.onDragStop=null,this.onAnimationStart=null,this.onAnimationComplete=null,this.onAnimationLoop=null +},b.Events.prototype={destroy:function(){this.parent=null,this.onAddedToGroup.dispose(),this.onRemovedFromGroup.dispose(),this.onKilled.dispose(),this.onRevived.dispose(),this.onOutOfBounds.dispose(),this.onInputOver&&(this.onInputOver.dispose(),this.onInputOut.dispose(),this.onInputDown.dispose(),this.onInputUp.dispose(),this.onDragStart.dispose(),this.onDragStop.dispose()),this.onAnimationStart&&(this.onAnimationStart.dispose(),this.onAnimationComplete.dispose(),this.onAnimationLoop.dispose())}},b.Events.prototype.constructor=b.Events,b.GameObjectFactory=function(a){this.game=a,this.world=this.game.world},b.GameObjectFactory.prototype={existing:function(a){return this.world.add(a)},image:function(a,c,d,e,f){return"undefined"==typeof f&&(f=this.world),f.add(new b.Image(this.game,a,c,d,e))},sprite:function(a,b,c,d,e){return"undefined"==typeof e&&(e=this.world),e.create(a,b,c,d)},tween:function(a){return this.game.tweens.create(a)},group:function(a,c,d,e,f){return new b.Group(this.game,a,c,d,e,f)},physicsGroup:function(a,c,d,e){return new b.Group(this.game,c,d,e,!0,a)},spriteBatch:function(a,c,d){return"undefined"==typeof c&&(c="group"),"undefined"==typeof d&&(d=!1),new b.SpriteBatch(this.game,a,c,d)},audio:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},sound:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},tileSprite:function(a,c,d,e,f,g,h){return"undefined"==typeof h&&(h=this.world),h.add(new b.TileSprite(this.game,a,c,d,e,f,g))},text:function(a,c,d,e,f){return"undefined"==typeof f&&(f=this.world),f.add(new b.Text(this.game,a,c,d,e))},button:function(a,c,d,e,f,g,h,i,j,k){return"undefined"==typeof k&&(k=this.world),k.add(new b.Button(this.game,a,c,d,e,f,g,h,i,j))},graphics:function(a,c,d){return"undefined"==typeof d&&(d=this.world),d.add(new b.Graphics(this.game,a,c))},emitter:function(a,c,d){return this.game.particles.add(new b.Particles.Arcade.Emitter(this.game,a,c,d))},retroFont:function(a,c,d,e,f,g,h,i,j){return new b.RetroFont(this.game,a,c,d,e,f,g,h,i,j)},bitmapText:function(a,c,d,e,f,g){return"undefined"==typeof g&&(g=this.world),g.add(new b.BitmapText(this.game,a,c,d,e,f))},tilemap:function(a,c,d,e,f){return new b.Tilemap(this.game,a,c,d,e,f)},renderTexture:function(a,c,d,e){("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid()),"undefined"==typeof e&&(e=!1);var f=new b.RenderTexture(this.game,a,c,d);return e&&this.game.cache.addRenderTexture(d,f),f},bitmapData:function(a,c,d,e){"undefined"==typeof e&&(e=!1),("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid());var f=new b.BitmapData(this.game,d,a,c);return e&&this.game.cache.addBitmapData(d,f),f},filter:function(a){var c=Array.prototype.splice.call(arguments,1),a=new b.Filter[a](this.game);return a.init.apply(a,c),a}},b.GameObjectFactory.prototype.constructor=b.GameObjectFactory,b.GameObjectCreator=function(a){this.game=a,this.world=this.game.world},b.GameObjectCreator.prototype={image:function(a,c,d,e){return new b.Image(this.game,a,c,d,e)},sprite:function(a,c,d,e){return new b.Sprite(this.game,a,c,d,e)},tween:function(a){return new b.Tween(a,this.game)},group:function(a,c,d,e,f){return new b.Group(this.game,null,c,d,e,f)},spriteBatch:function(a,c,d){return"undefined"==typeof c&&(c="group"),"undefined"==typeof d&&(d=!1),new b.SpriteBatch(this.game,a,c,d)},audio:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},sound:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},tileSprite:function(a,c,d,e,f,g){return new b.TileSprite(this.game,a,c,d,e,f,g)},text:function(a,c,d,e){return new b.Text(this.game,a,c,d,e)},button:function(a,c,d,e,f,g,h,i,j){return new b.Button(this.game,a,c,d,e,f,g,h,i,j)},graphics:function(a,c){return new b.Graphics(this.game,a,c)},emitter:function(a,c,d){return new b.Particles.Arcade.Emitter(this.game,a,c,d)},retroFont:function(a,c,d,e,f,g,h,i,j){return new b.RetroFont(this.game,a,c,d,e,f,g,h,i,j)},bitmapText:function(a,c,d,e,f){return new b.BitmapText(this.game,a,c,d,e,f)},tilemap:function(a,c,d,e,f){return new b.Tilemap(this.game,a,c,d,e,f)},renderTexture:function(a,c,d,e){("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid()),"undefined"==typeof e&&(e=!1);var f=new b.RenderTexture(this.game,a,c,d);return e&&this.game.cache.addRenderTexture(d,f),f},bitmapData:function(a,c,d,e){"undefined"==typeof e&&(e=!1),("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid());var f=new b.BitmapData(this.game,d,a,c);return e&&this.game.cache.addBitmapData(d,f),f},filter:function(a){var c=Array.prototype.splice.call(arguments,1),a=new b.Filter[a](this.game);return a.init.apply(a,c),a}},b.GameObjectCreator.prototype.constructor=b.GameObjectCreator,b.BitmapData=function(a,c,d,e){"undefined"==typeof d&&(d=100),"undefined"==typeof e&&(e=100),this.game=a,this.key=c,this.width=d,this.height=e,this.canvas=b.Canvas.create(d,e,"",!0),this.context=this.canvas.getContext("2d"),this.ctx=this.context,this.imageData=this.context.getImageData(0,0,d,e),this.data=this.imageData.data,this.pixels=null,this.imageData.data.buffer?(this.buffer=this.imageData.data.buffer,this.pixels=new Uint32Array(this.buffer)):window.ArrayBuffer?(this.buffer=new ArrayBuffer(this.imageData.data.length),this.pixels=new Uint32Array(this.buffer)):this.pixels=this.imageData.data,this.baseTexture=new PIXI.BaseTexture(this.canvas),this.texture=new PIXI.Texture(this.baseTexture),this.textureFrame=new b.Frame(0,0,0,d,e,"bitmapData",a.rnd.uuid()),this.type=b.BITMAPDATA,this.disableTextureUpload=!1,this.dirty=!1,this.cls=this.clear,this.update=this.refreshBuffer,this._tempR=0,this._tempG=0,this._tempB=0},b.BitmapData.prototype={add:function(a){if(Array.isArray(a))for(var b=0;bm;m++)for(var n=d;h>n;n++)b.Color.unpackPixel(this.getPixel32(n,m),j),k=a.call(c,j,n,m),k!==!1&&null!==k&&(this.setPixel32(n,m,k.r,k.g,k.b,k.a,!1),l=!0);l&&(this.context.putImageData(this.imageData,0,0),this.dirty=!0)},processPixel:function(a,b,c,d,e,f){"undefined"==typeof c&&(c=0),"undefined"==typeof d&&(d=0),"undefined"==typeof e&&(e=this.width),"undefined"==typeof f&&(f=this.height);for(var g=c+e,h=d+f,i=0,j=0,k=!1,l=d;h>l;l++)for(var m=c;g>m;m++)i=this.getPixel32(m,l),j=a.call(b,i,m,l),j!==i&&(this.pixels[l*this.width+m]=j,k=!0);k&&(this.context.putImageData(this.imageData,0,0),this.dirty=!0)},replaceRGB:function(a,c,d,e,f,g,h,i,j){var k=0,l=0,m=this.width,n=this.height,o=b.Color.packPixel(a,c,d,e);void 0!==j&&j instanceof b.Rectangle&&(k=j.x,l=j.y,m=j.width,n=j.height);for(var p=0;n>p;p++)for(var q=0;m>q;q++)this.getPixel32(k+q,l+p)===o&&this.setPixel32(k+q,l+p,f,g,h,i,!1);this.context.putImageData(this.imageData,0,0),this.dirty=!0},setHSL:function(a,c,d,e){if(("undefined"==typeof a||null===a)&&(a=!1),("undefined"==typeof c||null===c)&&(c=!1),("undefined"==typeof d||null===d)&&(d=!1),a||c||d){"undefined"==typeof e&&(e=new b.Rectangle(0,0,this.width,this.height));for(var f=b.Color.createColor(),g=e.y;g=0&&a<=this.width&&c>=0&&c<=this.height&&(this.pixels[c*this.width+a]=b.Device.LITTLE_ENDIAN?g<<24|f<<16|e<<8|d:d<<24|e<<16|f<<8|g,h&&(this.context.putImageData(this.imageData,0,0),this.dirty=!0))},setPixel:function(a,b,c,d,e,f){this.setPixel32(a,b,c,d,e,255,f)},getPixel:function(a,c,d){d||(d=b.Color.createColor());var e=~~(a+c*this.width);return e*=4,this.data[e]&&(d.r=this.data[e],d.g=this.data[++e],d.b=this.data[++e],d.a=this.data[++e]),d},getPixel32:function(a,b){return a>=0&&a<=this.width&&b>=0&&b<=this.height?this.pixels[b*this.width+a]:void 0},getPixelRGB:function(a,c,d,e,f){return b.Color.unpackPixel(this.getPixel32(a,c),d,e,f)},getPixels:function(a){return this.context.getImageData(a.x,a.y,a.width,a.height)},copyPixels:function(a,b,c,d){"string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,b.x,b.y,b.width,b.height,c,d,b.width,b.height),this.dirty=!0},draw:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),"string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,0,0,a.width,a.height,b,c,a.width,a.height),this.dirty=!0},drawSprite:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0);var d=a.texture.frame;this.context.drawImage(a.texture.baseTexture.source,d.x,d.y,d.width,d.height,b,c,d.width,d.height),this.dirty=!0},alphaMask:function(a,b){var c=this.context.globalCompositeOperation;"string"==typeof b&&(b=this.game.cache.getImage(b)),b&&this.context.drawImage(b,0,0),this.context.globalCompositeOperation="source-atop","string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,0,0),this.context.globalCompositeOperation=c,this.dirty=!0},extract:function(a,b,c,d,e){return"undefined"==typeof e&&(e=255),this.processPixelRGB(function(f,g,h){return f.r===b&&f.g===c&&f.b===d&&a.setPixel32(g,h,b,c,d,e,!1),!1},this),a.context.putImageData(a.imageData,0,0),a.dirty=!0,a},circle:function(a,b,c,d){"undefined"!=typeof d&&(this.context.fillStyle=d),this.context.beginPath(),this.context.arc(a,b,c,0,2*Math.PI,!1),this.context.closePath(),this.context.fill()},render:function(){!this.disableTextureUpload&&this.game.renderType===b.WEBGL&&this.dirty&&(PIXI.updateWebGLTexture(this.baseTexture,this.game.renderer.gl),this.dirty=!1)}},b.BitmapData.prototype.constructor=b.BitmapData,b.Sprite=function(a,c,d,e,f){c=c||0,d=d||0,e=e||null,f=f||null,this.game=a,this.name="",this.type=b.SPRITE,this.z=0,this.events=new b.Events(this),this.animations=new b.AnimationManager(this),this.key=e,this._frame=0,this._frameName="",PIXI.Sprite.call(this,PIXI.TextureCache.__default),this.loadTexture(e,f),this.position.set(c,d),this.world=new b.Point(c,d),this.autoCull=!1,this.input=null,this.body=null,this.health=1,this.lifespan=0,this.checkWorldBounds=!1,this.outOfBoundsKill=!1,this.debug=!1,this.cameraOffset=new b.Point,this._cache=[0,0,0,0,1,0,1,0,0],this._bounds=new b.Rectangle},b.Sprite.prototype=Object.create(PIXI.Sprite.prototype),b.Sprite.prototype.constructor=b.Sprite,b.Sprite.prototype.preUpdate=function(){if(1===this._cache[4]&&this.exists)return this.world.setTo(this.parent.position.x+this.position.x,this.parent.position.y+this.position.y),this.worldTransform.tx=this.world.x,this.worldTransform.ty=this.world.y,this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,this.body&&this.body.preUpdate(),this._cache[4]=0,!1;if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this._cache[3]=-1,!1;if(this.lifespan>0&&(this.lifespan-=this.game.time.elapsed,this.lifespan<=0))return this.kill(),!1;if((this.autoCull||this.checkWorldBounds)&&this._bounds.copyFrom(this.getBounds()),this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this._bounds)),this.checkWorldBounds)if(1===this._cache[5]&&this.game.world.bounds.intersects(this._bounds))this._cache[5]=0,this.events.onEnterBounds.dispatch(this);else if(0===this._cache[5]&&!this.game.world.bounds.intersects(this._bounds)&&(this._cache[5]=1,this.events.onOutOfBounds.dispatch(this),this.outOfBoundsKill))return this.kill(),!1;this.world.setTo(this.game.camera.x+this.worldTransform.tx,this.game.camera.y+this.worldTransform.ty),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++),this.animations.update(),this.body&&this.body.preUpdate();for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Sprite.prototype.update=function(){},b.Sprite.prototype.postUpdate=function(){this.key instanceof b.BitmapData&&this.key.render(),this.exists&&this.body&&this.body.postUpdate(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,c=this.children.length;c>a;a++)this.children[a].postUpdate()},b.Sprite.prototype.loadTexture=function(a,c){return c=c||0,a instanceof b.RenderTexture?(this.key=a.key,void this.setTexture(a)):a instanceof b.BitmapData?(this.key=a,void this.setTexture(a.texture)):a instanceof PIXI.Texture?(this.key=a,void this.setTexture(a)):null===a||"undefined"==typeof a?(this.key="__default",void this.setTexture(PIXI.TextureCache[this.key])):"string"!=typeof a||this.game.cache.checkImageKey(a)?this.game.cache.isSpriteSheet(a)?(this.key=a,this.animations.loadFrameData(this.game.cache.getFrameData(a)),"string"==typeof c?this.frameName=c:this.frame=c,void 0):(this.key=a,void this.setTexture(PIXI.TextureCache[a])):(this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]))},b.Sprite.prototype.crop=function(a){if("undefined"==typeof a||null===a)this.texture.hasOwnProperty("sourceWidth")&&this.texture.setFrame(new b.Rectangle(0,0,this.texture.sourceWidth,this.texture.sourceHeight));else if(this.texture instanceof PIXI.Texture){var c={};b.Utils.extend(!0,c,this.texture),c.sourceWidth=c.width,c.sourceHeight=c.height,c.frame=a,c.width=a.width,c.height=a.height,this.texture=c,this.texture.updateFrame=!0,PIXI.Texture.frameUpdates.push(this.texture)}else this.texture.setFrame(a)},b.Sprite.prototype.revive=function(a){return"undefined"==typeof a&&(a=1),this.alive=!0,this.exists=!0,this.visible=!0,this.health=a,this.events&&this.events.onRevived.dispatch(this),this},b.Sprite.prototype.kill=function(){return this.alive=!1,this.exists=!1,this.visible=!1,this.events&&this.events.onKilled.dispatch(this),this},b.Sprite.prototype.destroy=function(a){if(null!==this.game&&1!==this._cache[8]){"undefined"==typeof a&&(a=!0),this._cache[8]=1,this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.input&&this.input.destroy(),this.animations&&this.animations.destroy(),this.body&&this.body.destroy(),this.events&&this.events.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.alive=!1,this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null,this._cache[8]=0}},b.Sprite.prototype.damage=function(a){return this.alive&&(this.health-=a,this.health<=0&&this.kill()),this},b.Sprite.prototype.reset=function(a,b,c){return"undefined"==typeof c&&(c=1),this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.health=c,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this},b.Sprite.prototype.bringToTop=function(){return this.parent&&this.parent.bringToTop(this),this},b.Sprite.prototype.play=function(a,b,c,d){return this.animations?this.animations.play(a,b,c,d):void 0},b.Sprite.prototype.overlap=function(a){return b.Rectangle.intersects(this.getBounds(),a.getBounds())},Object.defineProperty(b.Sprite.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.Sprite.prototype,"deltaX",{get:function(){return this.world.x-this._cache[0]}}),Object.defineProperty(b.Sprite.prototype,"deltaY",{get:function(){return this.world.y-this._cache[1]}}),Object.defineProperty(b.Sprite.prototype,"deltaZ",{get:function(){return this.rotation-this._cache[2]}}),Object.defineProperty(b.Sprite.prototype,"inWorld",{get:function(){return this.game.world.bounds.intersects(this.getBounds())}}),Object.defineProperty(b.Sprite.prototype,"inCamera",{get:function(){return this.game.world.camera.screenView.intersects(this.getBounds())}}),Object.defineProperty(b.Sprite.prototype,"frame",{get:function(){return this.animations.frame},set:function(a){this.animations.frame=a}}),Object.defineProperty(b.Sprite.prototype,"frameName",{get:function(){return this.animations.frameName},set:function(a){this.animations.frameName=a}}),Object.defineProperty(b.Sprite.prototype,"renderOrderID",{get:function(){return this._cache[3]}}),Object.defineProperty(b.Sprite.prototype,"inputEnabled",{get:function(){return this.input&&this.input.enabled},set:function(a){a?null===this.input?(this.input=new b.InputHandler(this),this.input.start()):this.input&&!this.input.enabled&&this.input.start():this.input&&this.input.enabled&&this.input.stop()}}),Object.defineProperty(b.Sprite.prototype,"exists",{get:function(){return!!this._cache[6]},set:function(a){a?(this._cache[6]=1,this.body&&this.body.type===b.Physics.P2JS&&this.body.addToWorld(),this.visible=!0):(this._cache[6]=0,this.body&&this.body.type===b.Physics.P2JS&&this.body.removeFromWorld(),this.visible=!1)}}),Object.defineProperty(b.Sprite.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),Object.defineProperty(b.Sprite.prototype,"smoothed",{get:function(){return!this.texture.baseTexture.scaleMode},set:function(a){a?this.texture&&(this.texture.baseTexture.scaleMode=0):this.texture&&(this.texture.baseTexture.scaleMode=1)}}),Object.defineProperty(b.Sprite.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.Sprite.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.Sprite.prototype,"destroyPhase",{get:function(){return!!this._cache[8]}}),b.Image=function(a,c,d,e,f){c=c||0,d=d||0,e=e||null,f=f||null,this.game=a,this.exists=!0,this.name="",this.type=b.IMAGE,this.z=0,this.events=new b.Events(this),this.key=e,this._frame=0,this._frameName="",PIXI.Sprite.call(this,PIXI.TextureCache.__default),this.loadTexture(e,f),this.position.set(c,d),this.world=new b.Point(c,d),this.autoCull=!1,this.input=null,this.cameraOffset=new b.Point,this._cache=[0,0,0,0,1,0,1,0,0]},b.Image.prototype=Object.create(PIXI.Sprite.prototype),b.Image.prototype.constructor=b.Image,b.Image.prototype.preUpdate=function(){if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this._cache[3]=-1,!1;this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this.getBounds())),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++);for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Image.prototype.update=function(){},b.Image.prototype.postUpdate=function(){this.key instanceof b.BitmapData&&this.key.render(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,c=this.children.length;c>a;a++)this.children[a].postUpdate()},b.Image.prototype.loadTexture=function(a,c){if(c=c||0,a instanceof b.RenderTexture)return this.key=a.key,void this.setTexture(a);if(a instanceof b.BitmapData)return this.key=a,void this.setTexture(a.texture);if(a instanceof PIXI.Texture)return this.key=a,void this.setTexture(a);if(null===a||"undefined"==typeof a)return this.key="__default",void this.setTexture(PIXI.TextureCache[this.key]);if("string"==typeof a&&!this.game.cache.checkImageKey(a))return this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]);if(this.game.cache.isSpriteSheet(a)){this.key=a;var d=this.game.cache.getFrameData(a);return"string"==typeof c?(this._frame=0,this._frameName=c,void this.setTexture(PIXI.TextureCache[d.getFrameByName(c).uuid])):(this._frame=c,this._frameName="",void this.setTexture(PIXI.TextureCache[d.getFrame(c).uuid]))}return this.key=a,void this.setTexture(PIXI.TextureCache[a])},b.Image.prototype.crop=function(a){if("undefined"==typeof a||null===a)this.texture.hasOwnProperty("sourceWidth")&&this.texture.setFrame(new b.Rectangle(0,0,this.texture.sourceWidth,this.texture.sourceHeight));else if(this.texture instanceof PIXI.Texture){var c={};b.Utils.extend(!0,c,this.texture),c.sourceWidth=c.width,c.sourceHeight=c.height,c.frame=a,c.width=a.width,c.height=a.height,this.texture=c,this.texture.updateFrame=!0,PIXI.Texture.frameUpdates.push(this.texture)}else this.texture.setFrame(a)},b.Image.prototype.revive=function(){return this.alive=!0,this.exists=!0,this.visible=!0,this.events&&this.events.onRevived.dispatch(this),this},b.Image.prototype.kill=function(){return this.alive=!1,this.exists=!1,this.visible=!1,this.events&&this.events.onKilled.dispatch(this),this},b.Image.prototype.destroy=function(a){if(null!==this.game&&!this.destroyPhase){"undefined"==typeof a&&(a=!0),this._cache[8]=1,this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.events&&this.events.destroy(),this.input&&this.input.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.alive=!1,this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null,this._cache[8]=0}},b.Image.prototype.reset=function(a,b){return this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this},b.Image.prototype.bringToTop=function(){return this.parent&&this.parent.bringToTop(this),this},Object.defineProperty(b.Image.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.Image.prototype,"deltaX",{get:function(){return this.world.x-this._cache[0]}}),Object.defineProperty(b.Image.prototype,"deltaY",{get:function(){return this.world.y-this._cache[1]}}),Object.defineProperty(b.Image.prototype,"deltaZ",{get:function(){return this.rotation-this._cache[2]}}),Object.defineProperty(b.Image.prototype,"inWorld",{get:function(){return this.game.world.bounds.intersects(this.getBounds())}}),Object.defineProperty(b.Image.prototype,"inCamera",{get:function(){return this.game.world.camera.screenView.intersects(this.getBounds())}}),Object.defineProperty(b.Image.prototype,"frame",{get:function(){return this._frame},set:function(a){if(a!==this.frame&&this.game.cache.isSpriteSheet(this.key)){var b=this.game.cache.getFrameData(this.key);b&&aa;a++)this.children[a].preUpdate();return!0},b.TileSprite.prototype.update=function(){},b.TileSprite.prototype.postUpdate=function(){this.exists&&this.body&&this.body.postUpdate(),1===this._cache[7]&&(this.position.x=this.game.camera.view.x+this.cameraOffset.x,this.position.y=this.game.camera.view.y+this.cameraOffset.y);for(var a=0,b=this.children.length;b>a;a++)this.children[a].postUpdate()},b.TileSprite.prototype.autoScroll=function(a,b){this._scroll.set(a,b)},b.TileSprite.prototype.stopScroll=function(){this._scroll.set(0,0)},b.TileSprite.prototype.loadTexture=function(a,c){return c=c||0,a instanceof b.RenderTexture?(this.key=a.key,void this.setTexture(a)):a instanceof b.BitmapData?(this.key=a,void this.setTexture(a.texture)):a instanceof PIXI.Texture?(this.key=a,void this.setTexture(a)):null===a||"undefined"==typeof a?(this.key="__default",void this.setTexture(PIXI.TextureCache[this.key])):"string"!=typeof a||this.game.cache.checkImageKey(a)?this.game.cache.isSpriteSheet(a)?(this.key=a,this.animations.loadFrameData(this.game.cache.getFrameData(a)),"string"==typeof c?this.frameName=c:this.frame=c,void 0):(this.key=a,void this.setTexture(PIXI.TextureCache[a])):(this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]))},b.TileSprite.prototype.destroy=function(a){if(null!==this.game&&!this.destroyPhase){"undefined"==typeof a&&(a=!0),this._cache[8]=1,this.filters&&(this.filters=null),this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.animations.destroy(),this.events.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null,this._cache[8]=0}},b.TileSprite.prototype.play=function(a,b,c,d){return this.animations.play(a,b,c,d)},b.TileSprite.prototype.reset=function(a,b){return this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.tilePosition.x=0,this.tilePosition.y=0,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this},Object.defineProperty(b.TileSprite.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.TileSprite.prototype,"frame",{get:function(){return this.animations.frame},set:function(a){a!==this.animations.frame&&(this.animations.frame=a)}}),Object.defineProperty(b.TileSprite.prototype,"frameName",{get:function(){return this.animations.frameName},set:function(a){a!==this.animations.frameName&&(this.animations.frameName=a)}}),Object.defineProperty(b.TileSprite.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),Object.defineProperty(b.TileSprite.prototype,"exists",{get:function(){return!!this._cache[6]},set:function(a){a?(this._cache[6]=1,this.body&&this.body.type===b.Physics.P2JS&&this.body.addToWorld(),this.visible=!0):(this._cache[6]=0,this.body&&this.body.type===b.Physics.P2JS&&(this.body.safeRemove=!0),this.visible=!1)}}),Object.defineProperty(b.TileSprite.prototype,"inputEnabled",{get:function(){return this.input&&this.input.enabled},set:function(a){a?null===this.input?(this.input=new b.InputHandler(this),this.input.start()):this.input&&!this.input.enabled&&this.input.start():this.input&&this.input.enabled&&this.input.stop()}}),Object.defineProperty(b.TileSprite.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.TileSprite.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.TileSprite.prototype,"destroyPhase",{get:function(){return!!this._cache[8] +}}),b.Text=function(a,c,d,e,f){c=c||0,d=d||0,e=e||" ",f=f||{},e=0===e.length?" ":e.toString(),this.game=a,this.exists=!0,this.name="",this.type=b.TEXT,this.z=0,this.world=new b.Point(c,d),this._text=e,this._font="",this._fontSize=32,this._fontWeight="normal",this._lineSpacing=0,this.events=new b.Events(this),this.input=null,this.cameraOffset=new b.Point,this.setStyle(f),PIXI.Text.call(this,e,this.style),this.position.set(c,d),this._cache=[0,0,0,0,1,0,1,0,0]},b.Text.prototype=Object.create(PIXI.Text.prototype),b.Text.prototype.constructor=b.Text,b.Text.prototype.preUpdate=function(){if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this.renderOrderID=-1,!1;this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this.getBounds())),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++);for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Text.prototype.update=function(){},b.Text.prototype.postUpdate=function(){1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,b=this.children.length;b>a;a++)this.children[a].postUpdate()},b.Text.prototype.destroy=function(a){if(null!==this.game&&!this.destroyPhase){"undefined"==typeof a&&(a=!0),this._cache[8]=1,this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.texture.destroy(),this.canvas.parentNode?this.canvas.parentNode.removeChild(this.canvas):(this.canvas=null,this.context=null);var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null,this._cache[8]=0}},b.Text.prototype.setShadow=function(a,b,c,d){this.style.shadowOffsetX=a||0,this.style.shadowOffsetY=b||0,this.style.shadowColor=c||"rgba(0,0,0,0)",this.style.shadowBlur=d||0,this.dirty=!0},b.Text.prototype.setStyle=function(a){a=a||{},a.font=a.font||"bold 20pt Arial",a.fill=a.fill||"black",a.align=a.align||"left",a.stroke=a.stroke||"black",a.strokeThickness=a.strokeThickness||0,a.wordWrap=a.wordWrap||!1,a.wordWrapWidth=a.wordWrapWidth||100,a.shadowOffsetX=a.shadowOffsetX||0,a.shadowOffsetY=a.shadowOffsetY||0,a.shadowColor=a.shadowColor||"rgba(0,0,0,0)",a.shadowBlur=a.shadowBlur||0,this.style=a,this.dirty=!0},b.Text.prototype.updateText=function(){this.context.font=this.style.font;var a=this.text;this.style.wordWrap&&(a=this.runWordWrap(this.text));for(var b=a.split(/(?:\r\n|\r|\n)/),c=[],d=0,e=0;ee?(g>0&&(b+="\n"),b+=f[g]+" ",e=this.style.wordWrapWidth-h):(e-=i,b+=f[g]+" ")}d?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",b.RetroFont.TEXT_SET2=" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET3="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ",b.RetroFont.TEXT_SET4="ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789",b.RetroFont.TEXT_SET5="ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/() '!?-*:0123456789",b.RetroFont.TEXT_SET6="ABCDEFGHIJKLMNOPQRSTUVWXYZ!?:;0123456789\"(),-.' ",b.RetroFont.TEXT_SET7="AGMSY+:4BHNTZ!;5CIOU.?06DJPV,(17EKQW\")28FLRX-'39",b.RetroFont.TEXT_SET8="0123456789 .ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET9="ABCDEFGHIJKLMNOPQRSTUVWXYZ()-0123456789.:,'\"?!",b.RetroFont.TEXT_SET10="ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET11="ABCDEFGHIJKLMNOPQRSTUVWXYZ.,\"-+!?()':;0123456789",b.RetroFont.prototype.setFixedWidth=function(a,b){"undefined"==typeof b&&(b="left"),this.fixedWidth=a,this.align=b},b.RetroFont.prototype.setText=function(a,b,c,d,e,f){this.multiLine=b||!1,this.customSpacingX=c||0,this.customSpacingY=d||0,this.align=e||"left",this.autoUpperCase=f?!1:!0,a.length>0&&(this.text=a)},b.RetroFont.prototype.resize=function(a,b){if(this.width=a,this.height=b,this.frame.width=this.width,this.frame.height=this.height,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.renderer.type===PIXI.WEBGL_RENDERER){this.projection.x=this.width/2,this.projection.y=-this.height/2;var c=this.renderer.gl;c.bindTexture(c.TEXTURE_2D,this.baseTexture._glTextures[c.id]),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,this.width,this.height,0,c.RGBA,c.UNSIGNED_BYTE,null)}else this.textureBuffer.resize(this.width,this.height);PIXI.Texture.frameUpdates.push(this)},b.RetroFont.prototype.buildRetroFontText=function(){var a=0,c=0;if(this.multiLine){var d=this._text.split("\n");this.fixedWidth>0?this.resize(this.fixedWidth,d.length*(this.characterHeight+this.customSpacingY)-this.customSpacingY):this.resize(this.getLongestLine()*(this.characterWidth+this.customSpacingX),d.length*(this.characterHeight+this.customSpacingY)-this.customSpacingY),this.textureBuffer.clear();for(var e=0;ea&&(a=0),this.pasteLine(d[e],a,c,this.customSpacingX),c+=this.characterHeight+this.customSpacingY}}else{switch(this.fixedWidth>0?this.resize(this.fixedWidth,this.characterHeight):this.resize(this._text.length*(this.characterWidth+this.customSpacingX),this.characterHeight),this.textureBuffer.clear(),this.align){case b.RetroFont.ALIGN_LEFT:a=0;break;case b.RetroFont.ALIGN_RIGHT:a=this.width-this._text.length*(this.characterWidth+this.customSpacingX);break;case b.RetroFont.ALIGN_CENTER:a=this.width/2-this._text.length*(this.characterWidth+this.customSpacingX)/2,a+=this.customSpacingX/2}this.pasteLine(this._text,a,0,this.customSpacingX)}},b.RetroFont.prototype.pasteLine=function(a,c,d,e){for(var f=new b.Point,g=0;g=0&&(this.stamp.frame=this.grabData[a.charCodeAt(g)],f.set(c,d),this.render(this.stamp,f,!1),c+=this.characterWidth+e,c>this.width))break},b.RetroFont.prototype.getLongestLine=function(){var a=0;if(this._text.length>0)for(var b=this._text.split("\n"),c=0;ca&&(a=b[c].length);return a},b.RetroFont.prototype.removeUnsupportedCharacters=function(a){for(var b="",c=0;c=0||!a&&"\n"===d)&&(b=b.concat(d))}return b},Object.defineProperty(b.RetroFont.prototype,"text",{get:function(){return this._text},set:function(a){var b;b=this.autoUpperCase?a.toUpperCase():a,b!==this._text&&(this._text=b,this.removeUnsupportedCharacters(this.multiLine),this.buildRetroFontText())}}),b.Particle=function(a,c,d,e,f){b.Sprite.call(this,a,c,d,e,f),this.autoScale=!1,this.scaleData=null,this._s=0,this.autoAlpha=!1,this.alphaData=null,this._a=0},b.Particle.prototype=Object.create(b.Sprite.prototype),b.Particle.prototype.constructor=b.Particle,b.Particle.prototype.update=function(){this.autoScale&&(this._s--,this._s?this.scale.set(this.scaleData[this._s].x,this.scaleData[this._s].y):this.autoScale=!1),this.autoAlpha&&(this._a--,this._a?this.alpha=this.alphaData[this._a].v:this.autoAlpha=!1)},b.Particle.prototype.onEmit=function(){},b.Particle.prototype.setAlphaData=function(a){this.alphaData=a,this._a=a.length-1,this.alpha=this.alphaData[this._a].v,this.autoAlpha=!0},b.Particle.prototype.setScaleData=function(a){this.scaleData=a,this._s=a.length-1,this.scale.set(this.scaleData[this._s].x,this.scaleData[this._s].y),this.autoScale=!0},b.Particle.prototype.reset=function(a,b,c){return"undefined"==typeof c&&(c=1),this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.health=c,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this.alpha=1,this.scale.set(1),this.autoScale=!1,this.autoAlpha=!1,this},b.Canvas={create:function(a,b,c,d){if("undefined"==typeof d&&(d=!1),a=a||256,b=b||256,d)var e=document.createElement("canvas");else var e=document.createElement(navigator.isCocoonJS?"screencanvas":"canvas");return"string"==typeof c&&""!==c&&(e.id=c),e.width=a,e.height=b,e.style.display="block",e},getOffset:function(a,c){c=c||new b.Point;var d=a.getBoundingClientRect(),e=a.clientTop||document.body.clientTop||0,f=a.clientLeft||document.body.clientLeft||0,g=0,h=0;return"CSS1Compat"===document.compatMode?(g=window.pageYOffset||document.documentElement.scrollTop||a.scrollTop||0,h=window.pageXOffset||document.documentElement.scrollLeft||a.scrollLeft||0):(g=window.pageYOffset||document.body.scrollTop||a.scrollTop||0,h=window.pageXOffset||document.body.scrollLeft||a.scrollLeft||0),c.x=d.left+h-f,c.y=d.top+g-e,c},getAspectRatio:function(a){return a.width/a.height},setBackgroundColor:function(a,b){return b=b||"rgb(0,0,0)",a.style.backgroundColor=b,a},setTouchAction:function(a,b){return b=b||"none",a.style.msTouchAction=b,a.style["ms-touch-action"]=b,a.style["touch-action"]=b,a},setUserSelect:function(a,b){return b=b||"none",a.style["-webkit-touch-callout"]=b,a.style["-webkit-user-select"]=b,a.style["-khtml-user-select"]=b,a.style["-moz-user-select"]=b,a.style["-ms-user-select"]=b,a.style["user-select"]=b,a.style["-webkit-tap-highlight-color"]="rgba(0, 0, 0, 0)",a},addToDOM:function(a,b,c){var d;return"undefined"==typeof c&&(c=!0),b&&("string"==typeof b?d=document.getElementById(b):"object"==typeof b&&1===b.nodeType&&(d=b)),d||(d=document.body),c&&d.style&&(d.style.overflow="hidden"),d.appendChild(a),a},setTransform:function(a,b,c,d,e,f,g){return a.setTransform(d,f,g,e,b,c),a},setSmoothingEnabled:function(a,b){return a.imageSmoothingEnabled=b,a.mozImageSmoothingEnabled=b,a.oImageSmoothingEnabled=b,a.webkitImageSmoothingEnabled=b,a.msImageSmoothingEnabled=b,a},setImageRenderingCrisp:function(a){return a.style["image-rendering"]="optimizeSpeed",a.style["image-rendering"]="crisp-edges",a.style["image-rendering"]="-moz-crisp-edges",a.style["image-rendering"]="-webkit-optimize-contrast",a.style["image-rendering"]="optimize-contrast",a.style.msInterpolationMode="nearest-neighbor",a},setImageRenderingBicubic:function(a){return a.style["image-rendering"]="auto",a.style.msInterpolationMode="bicubic",a}},b.Device=function(a){this.game=a,this.desktop=!1,this.iOS=!1,this.cocoonJS=!1,this.ejecta=!1,this.crosswalk=!1,this.android=!1,this.chromeOS=!1,this.linux=!1,this.macOS=!1,this.windows=!1,this.windowsPhone=!1,this.canvas=!1,this.file=!1,this.fileSystem=!1,this.localStorage=!1,this.webGL=!1,this.worker=!1,this.touch=!1,this.mspointer=!1,this.css3D=!1,this.pointerLock=!1,this.typedArray=!1,this.vibration=!1,this.getUserMedia=!1,this.quirksMode=!1,this.arora=!1,this.chrome=!1,this.epiphany=!1,this.firefox=!1,this.ie=!1,this.ieVersion=0,this.trident=!1,this.tridentVersion=0,this.mobileSafari=!1,this.midori=!1,this.opera=!1,this.safari=!1,this.webApp=!1,this.silk=!1,this.audioData=!1,this.webAudio=!1,this.ogg=!1,this.opus=!1,this.mp3=!1,this.wav=!1,this.m4a=!1,this.webm=!1,this.iPhone=!1,this.iPhone4=!1,this.iPad=!1,this.pixelRatio=0,this.littleEndian=!1,this.support32bit=!1,this.fullscreen=!1,this.requestFullscreen="",this.cancelFullscreen="",this.fullscreenKeyboard=!1,this._checkAudio(),this._checkBrowser(),this._checkCSS3D(),this._checkDevice(),this._checkFeatures(),this._checkOS()},b.Device.LITTLE_ENDIAN=!1,b.Device.prototype={_checkOS:function(){var a=navigator.userAgent;/Android/.test(a)?this.android=!0:/CrOS/.test(a)?this.chromeOS=!0:/iP[ao]d|iPhone/i.test(a)?this.iOS=!0:/Linux/.test(a)?this.linux=!0:/Mac OS/.test(a)?this.macOS=!0:/Windows/.test(a)&&(this.windows=!0,/Windows Phone/i.test(a)&&(this.windowsPhone=!0)),(this.windows||this.macOS||this.linux&&this.silk===!1)&&(this.desktop=!0),(this.windowsPhone||/Windows NT/i.test(a)&&/Touch/i.test(a))&&(this.desktop=!1)},_checkFeatures:function(){this.canvas=!!window.CanvasRenderingContext2D||this.cocoonJS;try{this.localStorage=!!localStorage.getItem}catch(a){this.localStorage=!1}this.file=!!(window.File&&window.FileReader&&window.FileList&&window.Blob),this.fileSystem=!!window.requestFileSystem,this.webGL=function(){try{var a=document.createElement("canvas");return!!window.WebGLRenderingContext&&(a.getContext("webgl")||a.getContext("experimental-webgl"))}catch(b){return!1}}(),this.webGL=null===this.webGL||this.webGL===!1?!1:!0,this.worker=!!window.Worker,("ontouchstart"in document.documentElement||window.navigator.maxTouchPoints&&window.navigator.maxTouchPoints>1)&&(this.touch=!0),(window.navigator.msPointerEnabled||window.navigator.pointerEnabled)&&(this.mspointer=!0),this.pointerLock="pointerLockElement"in document||"mozPointerLockElement"in document||"webkitPointerLockElement"in document,this.quirksMode="CSS1Compat"===document.compatMode?!1:!0,this.getUserMedia=!!(navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia)},checkFullScreenSupport:function(){for(var a=["requestFullscreen","requestFullScreen","webkitRequestFullscreen","webkitRequestFullScreen","msRequestFullscreen","msRequestFullScreen","mozRequestFullScreen","mozRequestFullscreen"],b=0;b0&&"none"!==a},canPlayAudio:function(a){return"mp3"==a&&this.mp3?!0:"ogg"==a&&(this.ogg||this.opus)?!0:"m4a"==a&&this.m4a?!0:"wav"==a&&this.wav?!0:"webm"==a&&this.webm?!0:!1},isConsoleOpen:function(){return window.console&&window.console.firebug?!0:window.console&&(console.profile(),console.profileEnd(),console.clear&&console.clear(),console.profiles)?console.profiles.length>0:!1}},b.Device.prototype.constructor=b.Device,b.RequestAnimationFrame=function(a,b){"undefined"==typeof b&&(b=!1),this.game=a,this.isRunning=!1,this.forceSetTimeOut=b;for(var c=["ms","moz","webkit","o"],d=0;da},fuzzyGreaterThan:function(a,b,c){return"undefined"==typeof c&&(c=1e-4),a>b-c},fuzzyCeil:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.ceil(a-b)},fuzzyFloor:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.floor(a+b)},average:function(){for(var a=[],b=0;b0?Math.floor(a):Math.ceil(a)},shear:function(a){return a%1},snapTo:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.round(a/b),c+a)},snapToFloor:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.floor(a/b),c+a)},snapToCeil:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.ceil(a/b),c+a)},snapToInArray:function(a,b,c){if("undefined"==typeof c&&(c=!0),c&&b.sort(),a=f-a?f:e},roundTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.round(a*d)/d},floorTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.floor(a*d)/d},ceilTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.ceil(a*d)/d},interpolateFloat:function(a,b,c){return(b-a)*c+a},angleBetween:function(a,b,c,d){return Math.atan2(d-b,c-a)},angleBetweenPoints:function(a,b){return Math.atan2(b.y-a.y,b.x-a.x)},reverseAngle:function(a){return this.normalizeAngle(a+Math.PI,!0)},normalizeAngle:function(a){return a%=2*Math.PI,a>=0?a:a+2*Math.PI},normalizeLatitude:function(a){return Math.max(-90,Math.min(90,a))},normalizeLongitude:function(a){return a%360==180?180:(a%=360,-180>a?a+360:a>180?a-360:a)},nearestAngleBetween:function(a,b,c){"undefined"==typeof c&&(c=!0);var d=c?Math.PI:180;return a=this.normalizeAngle(a,c),b=this.normalizeAngle(b,c),-d/2>a&&b>d/2&&(a+=2*d),-d/2>b&&a>d/2&&(b+=2*d),b-a},interpolateAngles:function(a,b,c,d,e){return"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=null),a=this.normalizeAngle(a,d),b=this.normalizeAngleToAnother(b,a,d),"function"==typeof e?e(c,a,b-a,1):this.interpolateFloat(a,b,c)},chanceRoll:function(a){return"undefined"==typeof a&&(a=50),0>=a?!1:a>=100?!0:100*Math.random()>=a?!1:!0},numberArray:function(a,b){for(var c=[],d=a;b>=d;d++)c.push(d);return c},maxAdd:function(a,b,c){return a+=b,a>c&&(a=c),a},minSub:function(a,b,c){return a-=b,c>a&&(a=c),a},wrap:function(a,b,c){var d=c-b;if(0>=d)return 0;var e=(a-b)%d;return 0>e&&(e+=d),e+b},wrapValue:function(a,b,c){var d;return a=Math.abs(a),b=Math.abs(b),c=Math.abs(c),d=(a+b)%c},limitValue:function(a,b,c){return b>a?b:a>c?c:a},randomSign:function(){return Math.random()>.5?1:-1},isOdd:function(a){return 1&a},isEven:function(a){return 1&a?!1:!0},min:function(){if(1===arguments.length&&"object"==typeof arguments[0])var a=arguments[0];else var a=arguments;for(var b=1,c=0,d=a.length;d>b;b++)a[b]b;b++)a[b]>a[c]&&(c=b);return a[c]},minProperty:function(a){if(2===arguments.length&&"object"==typeof arguments[1])var b=arguments[1];else var b=arguments.slice(1);for(var c=1,d=0,e=b.length;e>c;c++)b[c][a]c;c++)b[c][a]>b[d][a]&&(d=c);return b[d][a]},wrapAngle:function(a,b){var c=b?Math.PI/180:1;return this.wrap(a,-180*c,180*c)},angleLimit:function(a,b,c){var d=a;return a>c?d=c:b>a&&(d=b),d},linearInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return 0>b?this.linear(a[0],a[1],d):b>1?this.linear(a[c],a[c-1],c-d):this.linear(a[e],a[e+1>c?c:e+1],d-e)},bezierInterpolation:function(a,b){for(var c=0,d=a.length-1,e=0;d>=e;e++)c+=Math.pow(1-b,d-e)*Math.pow(b,e)*a[e]*this.bernstein(d,e);return c},catmullRomInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return a[0]===a[c]?(0>b&&(e=Math.floor(d=c*(1+b))),this.catmullRom(a[(e-1+c)%c],a[e],a[(e+1)%c],a[(e+2)%c],d-e)):0>b?a[0]-(this.catmullRom(a[0],a[0],a[1],a[1],-d)-a[0]):b>1?a[c]-(this.catmullRom(a[c],a[c],a[c-1],a[c-1],d-c)-a[c]):this.catmullRom(a[e?e-1:0],a[e],a[e+1>c?c:e+1],a[e+2>c?c:e+2],d-e)},linear:function(a,b,c){return(b-a)*c+a},bernstein:function(a,b){return this.factorial(a)/this.factorial(b)/this.factorial(a-b)},catmullRom:function(a,b,c,d,e){var f=.5*(c-a),g=.5*(d-b),h=e*e,i=e*h;return(2*b-2*c+f+g)*i+(-3*b+3*c-2*f-g)*h+f*e+b},difference:function(a,b){return Math.abs(a-b)},getRandom:function(a,b,c){if("undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),null!=a){var d=c;if((0===d||d>a.length-b)&&(d=a.length-b),d>0)return a[b+Math.floor(Math.random()*d)]}return null},removeRandom:function(a,b,c){if("undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),null!=a){var d=c;if((0===d||d>a.length-b)&&(d=a.length-b),d>0){var e=b+Math.floor(Math.random()*d),f=a.splice(e,1);return f[0]}}return null},floor:function(a){var b=0|a;return a>0?b:b!=a?b-1:b},ceil:function(a){var b=0|a;return a>0&&b!=a?b+1:b},sinCosGenerator:function(a,b,c,d){"undefined"==typeof b&&(b=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1);for(var e=b,f=c,g=d*Math.PI/a,h=[],i=[],j=0;a>j;j++)f-=e*g,e+=f*g,h[j]=f,i[j]=e;return{sin:i,cos:h,length:a}},shift:function(a){var b=a.shift();return a.push(b),b},shuffleArray:function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},distance:function(a,b,c,d){var e=a-c,f=b-d;return Math.sqrt(e*e+f*f)},distancePow:function(a,b,c,d,e){return"undefined"==typeof e&&(e=2),Math.sqrt(Math.pow(c-a,e)+Math.pow(d-b,e))},distanceRounded:function(a,c,d,e){return Math.round(b.Math.distance(a,c,d,e))},clamp:function(a,b,c){return b>a?b:a>c?c:a},clampBottom:function(a,b){return b>a?b:a},within:function(a,b,c){return Math.abs(a-b)<=c},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){return a=Math.max(0,Math.min(1,(a-b)/(c-b))),a*a*(3-2*a)},smootherstep:function(a,b,c){return a=Math.max(0,Math.min(1,(a-b)/(c-b))),a*a*a*(a*(6*a-15)+10)},sign:function(a){return 0>a?-1:a>0?1:0},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}()},b.RandomDataGenerator=function(a){"undefined"==typeof a&&(a=[]),this.c=1,this.s0=0,this.s1=0,this.s2=0,this.sow(a)},b.RandomDataGenerator.prototype={rnd:function(){var a=2091639*this.s0+2.3283064365386963e-10*this.c;return this.c=0|a,this.s0=this.s1,this.s1=this.s2,this.s2=a-this.c,this.s2},sow:function(a){"undefined"==typeof a&&(a=[]),this.s0=this.hash(" "),this.s1=this.hash(this.s0),this.s2=this.hash(this.s1),this.c=1;for(var b,c=0;b=a[c++];)this.s0-=this.hash(b),this.s0+=~~(this.s0<0),this.s1-=this.hash(b),this.s1+=~~(this.s1<0),this.s2-=this.hash(b),this.s2+=~~(this.s2<0)},hash:function(a){var b,c,d;for(d=4022871197,a=a.toString(),c=0;c>>0,b-=d,b*=d,d=b>>>0,b-=d,d+=4294967296*b;return 2.3283064365386963e-10*(d>>>0)},integer:function(){return 4294967296*this.rnd.apply(this)},frac:function(){return this.rnd.apply(this)+1.1102230246251565e-16*(2097152*this.rnd.apply(this)|0)},real:function(){return this.integer()+this.frac()},integerInRange:function(a,b){return Math.floor(this.realInRange(0,b-a+1))+a},realInRange:function(a,b){return this.frac()*(b-a)+a},normal:function(){return 1-2*this.frac()},uuid:function(){var a="",b="";for(b=a="";a++<36;b+=~a%5|3*a&4?(15^a?8^this.frac()*(20^a?16:4):4).toString(16):"-");return b},pick:function(a){return a[this.integerInRange(0,a.length-1)]},weightedPick:function(a){return a[~~(Math.pow(this.frac(),2)*(a.length-1))]},timestamp:function(a,b){return this.realInRange(a||9466848e5,b||1577862e6)},angle:function(){return this.integerInRange(-180,180)}},b.RandomDataGenerator.prototype.constructor=b.RandomDataGenerator,b.QuadTree=function(a,b,c,d,e,f,g){this.maxObjects=10,this.maxLevels=4,this.level=0,this.bounds={},this.objects=[],this.nodes=[],this._empty=[],this.reset(a,b,c,d,e,f,g)},b.QuadTree.prototype={reset:function(a,b,c,d,e,f,g){this.maxObjects=e||10,this.maxLevels=f||4,this.level=g||0,this.bounds={x:Math.round(a),y:Math.round(b),width:c,height:d,subWidth:Math.floor(c/2),subHeight:Math.floor(d/2),right:Math.round(a)+Math.floor(c/2),bottom:Math.round(b)+Math.floor(d/2)},this.objects.length=0,this.nodes.length=0},populate:function(a){a.forEach(this.populateHandler,this,!0)},populateHandler:function(a){a.body&&a.exists&&this.insert(a.body)},split:function(){this.level++,this.nodes[0]=new b.QuadTree(this.bounds.right,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[1]=new b.QuadTree(this.bounds.x,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[2]=new b.QuadTree(this.bounds.x,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[3]=new b.QuadTree(this.bounds.right,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level)},insert:function(a){var b,c=0;if(null!=this.nodes[0]&&(b=this.getIndex(a),-1!==b))return void this.nodes[b].insert(a);if(this.objects.push(a),this.objects.length>this.maxObjects&&this.levelthis.bounds.bottom&&(b=2):a.x>this.bounds.right&&(a.ythis.bounds.bottom&&(b=3)),b},retrieve:function(a){if(!a.body)return this._empty;var b=this.objects,c=this.getIndex(a.body);return this.nodes[0]&&(-1!==c?b=b.concat(this.nodes[c].retrieve(a)):(b=b.concat(this.nodes[0].retrieve(a)),b=b.concat(this.nodes[1].retrieve(a)),b=b.concat(this.nodes[2].retrieve(a)),b=b.concat(this.nodes[3].retrieve(a)))),b},clear:function(){this.objects.length=0;for(var a=this.nodes.length;a--;)this.nodes[a].clear(),this.nodes.splice(a,1);this.nodes.length=0}},b.QuadTree.prototype.constructor=b.QuadTree,b.Net=function(a){this.game=a},b.Net.prototype={getHostName:function(){return window.location&&window.location.hostname?window.location.hostname:null},checkDomainName:function(a){return-1!==window.location.hostname.indexOf(a)},updateQueryString:function(a,b,c,d){"undefined"==typeof c&&(c=!1),("undefined"==typeof d||""===d)&&(d=window.location.href);var e="",f=new RegExp("([?|&])"+a+"=.*?(&|#|$)(.*)","gi");if(f.test(d))e="undefined"!=typeof b&&null!==b?d.replace(f,"$1"+a+"="+b+"$2$3"):d.replace(f,"$1$3").replace(/(&|\?)$/,"");else if("undefined"!=typeof b&&null!==b){var g=-1!==d.indexOf("?")?"&":"?",h=d.split("#");d=h[0]+g+a+"="+b,h[1]&&(d+="#"+h[1]),e=d}else e=d;return c?void(window.location.href=e):e},getQueryString:function(a){"undefined"==typeof a&&(a="");var b={},c=location.search.substring(1).split("&");for(var d in c){var e=c[d].split("=");if(e.length>1){if(a&&a==this.decodeURI(e[0]))return this.decodeURI(e[1]);b[this.decodeURI(e[0])]=this.decodeURI(e[1])}}return b},decodeURI:function(a){return decodeURIComponent(a.replace(/\+/g," "))}},b.Net.prototype.constructor=b.Net,b.TweenManager=function(a){this.game=a,this._tweens=[],this._add=[],this.game.onPause.add(this._pauseAll,this),this.game.onResume.add(this._resumeAll,this)},b.TweenManager.prototype={getAll:function(){return this._tweens},removeAll:function(){for(var a=0;aa;)this._tweens[a].update(this.game.time.now)?a++:(this._tweens.splice(a,1),b--);return this._add.length>0&&(this._tweens=this._tweens.concat(this._add),this._add.length=0),!0},isTweening:function(a){return this._tweens.some(function(b){return b._object===a})},_pauseAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a]._pause()},_resumeAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a]._resume()},pauseAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].pause()},resumeAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].resume(!0)}},b.TweenManager.prototype.constructor=b.TweenManager,b.Tween=function(a,c,d){this._object=a,this.game=c,this._manager=d,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._repeat=0,this._yoyo=!1,this._reversed=!1,this._delayTime=0,this._startTime=null,this._easingFunction=b.Easing.Linear.None,this._interpolationFunction=b.Math.linearInterpolation,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onUpdateCallback=null,this._onUpdateCallbackContext=null,this._paused=!1,this._pausedTime=0,this._codePaused=!1,this.pendingDelete=!1,this.onStart=new b.Signal,this.onLoop=new b.Signal,this.onComplete=new b.Signal,this.isRunning=!1},b.Tween.prototype={to:function(a,b,c,d,e,f,g){b=b||1e3,c=c||null,d=d||!1,e=e||0,f=f||0,g=g||!1,g&&0===f&&(f=1);var h;return this._parent?(h=this._manager.create(this._object),this._lastChild.chain(h),this._lastChild=h):(h=this,this._parent=this,this._lastChild=this),h._repeat=f,h._duration=b,h._valuesEnd=a,null!==c&&(h._easingFunction=c),e>0&&(h._delayTime=e),h._yoyo=g,d?this.start():this},start:function(){if(null!==this.game&&null!==this._object){this._manager.add(this),this.isRunning=!0,this._onStartCallbackFired=!1,this._startTime=this.game.time.now+this._delayTime;for(var a in this._valuesEnd){if(Array.isArray(this._valuesEnd[a])){if(0===this._valuesEnd[a].length)continue;this._valuesEnd[a]=[this._object[a]].concat(this._valuesEnd[a])}this._valuesStart[a]=this._object[a],Array.isArray(this._valuesStart[a])||(this._valuesStart[a]*=1),this._valuesStartRepeat[a]=this._valuesStart[a]||0}return this}},generateData:function(a,b){if(null===this.game||null===this._object)return null;this._startTime=0;for(var c in this._valuesEnd){if(Array.isArray(this._valuesEnd[c])){if(0===this._valuesEnd[c].length)continue;this._valuesEnd[c]=[this._object[c]].concat(this._valuesEnd[c])}this._valuesStart[c]=this._object[c],Array.isArray(this._valuesStart[c])||(this._valuesStart[c]*=1),this._valuesStartRepeat[c]=this._valuesStart[c]||0}for(var d=0,e=Math.floor(a*(this._duration/1e3)),f=this._duration/e,g=[];e--;){var c,h=(d-this._startTime)/this._duration;h=h>1?1:h;var i=this._easingFunction(h),j={};for(c in this._valuesEnd){var k=this._valuesStart[c]||0,l=this._valuesEnd[c];l instanceof Array?j[c]=this._interpolationFunction(l,i):("string"==typeof l&&(l=k+parseFloat(l,10)),"number"==typeof l&&(j[c]=k+(l-k)*i))}g.push(j),d+=f}if(this._yoyo){var m=g.slice();m.reverse(),g=g.concat(m)}return"undefined"!=typeof b?b=b.concat(g):g},stop:function(){return this.isRunning=!1,this._onUpdateCallback=null,this._manager.remove(this),this},delay:function(a){return this._delayTime=a,this},repeat:function(a){return this._repeat=a,this},yoyo:function(a){return this._yoyo=a,a&&0===this._repeat&&(this._repeat=1),this},easing:function(a){return this._easingFunction=a,this},interpolation:function(a){return this._interpolationFunction=a,this},chain:function(){return this._chainedTweens=arguments,this},loop:function(){return this._lastChild.chain(this),this},onUpdateCallback:function(a,b){return this._onUpdateCallback=a,this._onUpdateCallbackContext=b,this},pause:function(){this._codePaused=!0,this._paused=!0,this._pausedTime=this.game.time.now},_pause:function(){this._codePaused||(this._paused=!0,this._pausedTime=this.game.time.now)},resume:function(){this._paused&&(this._paused=!1,this._codePaused=!1,this._startTime+=this.game.time.now-this._pausedTime)},_resume:function(){this._codePaused||(this._startTime+=this.game.time.pauseDuration,this._paused=!1)},update:function(a){if(this.pendingDelete)return!1;if(this._paused||a1?1:c;var d=this._easingFunction(c);for(b in this._valuesEnd){var e=this._valuesStart[b]||0,f=this._valuesEnd[b];f instanceof Array?this._object[b]=this._interpolationFunction(f,d):("string"==typeof f&&(f=e+parseFloat(f,10)),"number"==typeof f&&(this._object[b]=e+(f-e)*d))}if(null!==this._onUpdateCallback&&this._onUpdateCallback.call(this._onUpdateCallbackContext,this,d),1==c){if(this._repeat>0){isFinite(this._repeat)&&this._repeat--;for(b in this._valuesStartRepeat){if("string"==typeof this._valuesEnd[b]&&(this._valuesStartRepeat[b]=this._valuesStartRepeat[b]+parseFloat(this._valuesEnd[b],10)),this._yoyo){var g=this._valuesStartRepeat[b];this._valuesStartRepeat[b]=this._valuesEnd[b],this._valuesEnd[b]=g,this._reversed=!this._reversed}this._valuesStart[b]=this._valuesStartRepeat[b]}return this._startTime=a+this._delayTime,this.onLoop.dispatch(this._object),!0}this.isRunning=!1,this.onComplete.dispatch(this._object);for(var h=0,i=this._chainedTweens.length;i>h;h++)this._chainedTweens[h].start(a);return!1}return!0}},b.Tween.prototype.constructor=b.Tween,b.Easing={Linear:{None:function(a){return a}},Quadratic:{In:function(a){return a*a},Out:function(a){return a*(2-a)},InOut:function(a){return(a*=2)<1?.5*a*a:-.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a:.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return(a*=2)<1?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a*a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:(a*=2)<1?.5*Math.pow(1024,a-1):.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1-Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return(a*=2)<1?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),-(c*Math.pow(2,10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d)))},Out:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),c*Math.pow(2,-10*a)*Math.sin(2*(a-b)*Math.PI/d)+1)},InOut:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),(a*=2)<1?-.5*c*Math.pow(2,10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d):c*Math.pow(2,-10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d)*.5+1)}},Back:{In:function(a){var b=1.70158;return a*a*((b+1)*a-b)},Out:function(a){var b=1.70158;return--a*a*((b+1)*a+b)+1},InOut:function(a){var b=2.5949095;return(a*=2)<1?.5*a*a*((b+1)*a-b):.5*((a-=2)*a*((b+1)*a+b)+2)}},Bounce:{In:function(a){return 1-b.Easing.Bounce.Out(1-a)},Out:function(a){return 1/2.75>a?7.5625*a*a:2/2.75>a?7.5625*(a-=1.5/2.75)*a+.75:2.5/2.75>a?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},InOut:function(a){return.5>a?.5*b.Easing.Bounce.In(2*a):.5*b.Easing.Bounce.Out(2*a-1)+.5}}},b.Time=function(a){this.game=a,this.time=0,this.now=0,this.elapsed=0,this.pausedTime=0,this.advancedTiming=!1,this.fps=0,this.fpsMin=1e3,this.fpsMax=0,this.msMin=1e3,this.msMax=0,this.physicsElapsed=0,this.deltaCap=0,this.timeCap=1e3,this.frames=0,this.pauseDuration=0,this.timeToCall=0,this.lastTime=0,this.events=new b.Timer(this.game,!1),this._started=0,this._timeLastSecond=0,this._pauseStarted=0,this._justResumed=!1,this._timers=[],this._len=0,this._i=0},b.Time.prototype={boot:function(){this._started=Date.now(),this.events.start()},create:function(a){"undefined"==typeof a&&(a=!0);var c=new b.Timer(this.game,a);return this._timers.push(c),c},removeAll:function(){for(var a=0;athis.timeCap&&(this.elapsed=1/60),this.physicsElapsed=this.elapsed/1e3||1/60,this.deltaCap>0&&this.physicsElapsed>this.deltaCap&&(this.physicsElapsed=this.deltaCap),this.advancedTiming&&(this.msMin=this.game.math.min(this.msMin,this.elapsed),this.msMax=this.game.math.max(this.msMax,this.elapsed),this.frames++,this.now>this._timeLastSecond+1e3&&(this.fps=Math.round(1e3*this.frames/(this.now-this._timeLastSecond)),this.fpsMin=this.game.math.min(this.fpsMin,this.fps),this.fpsMax=this.game.math.max(this.fpsMax,this.fps),this._timeLastSecond=this.now,this.frames=0)),this.time=this.now,this.lastTime=a+this.timeToCall,!this.game.paused)for(this.events.update(this.now),this._i=0,this._len=this._timers.length;this._i0&&(this.events.sort(this.sortHandler),this.nextTick=this.events[0].tick)},sortHandler:function(a,b){return a.tickb.tick?1:0},clearPendingEvents:function(){for(this._i=this.events.length;this._i--;)this.events[this._i].pendingDelete&&this.events.splice(this._i,1);this._len=this.events.length,this._i=0},update:function(a){if(this.paused)return!0;if(this.elapsed=a-this._now,this._now=a,this.elapsed>this.timeCap&&this.adjustEvents(a-this.elapsed),this._marked=0,this.clearPendingEvents(),this.running&&this._now>=this.nextTick&&this._len>0){for(;this._i=this.events[this._i].tick;)this._newTick=this._now+this.events[this._i].delay-(this._now-this.events[this._i].tick),this._newTick<0&&(this._newTick=this._now+this.events[this._i].delay),this.events[this._i].loop===!0?(this.events[this._i].tick=this._newTick,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)):this.events[this._i].repeatCount>0?(this.events[this._i].repeatCount--,this.events[this._i].tick=this._newTick,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)):(this._marked++,this.events[this._i].pendingDelete=!0,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)),this._i++;this.events.length>this._marked?this.order():(this.expired=!0,this.onComplete.dispatch(this))}return this.expired&&this.autoDestroy?!1:!0},pause:function(){this.paused||(this._pauseStarted=this.game.time.now,this.paused=!0,this._codePaused=!0)},_pause:function(){this.paused||(this._pauseStarted=this.game.time.now,this.paused=!0)},adjustEvents:function(a){for(var b=0;bc&&(c=0),this.events[b].tick=this._now+c}var d=this.nextTick-a;this.nextTick=0>d?this._now:this._now+d},resume:function(){this.paused&&(this._pauseTotal+=this.game.time.pauseDuration,this._now=this.game.time.now,this.adjustEvents(this._pauseStarted),this.paused=!1,this._codePaused=!1)},_resume:function(){this._codePaused||this.resume()},removeAll:function(){this.onComplete.removeAll(),this.events.length=0,this._len=0,this._i=0},destroy:function(){this.onComplete.removeAll(),this.running=!1,this.events=[],this._len=0,this._i=0}},Object.defineProperty(b.Timer.prototype,"next",{get:function(){return this.nextTick}}),Object.defineProperty(b.Timer.prototype,"duration",{get:function(){return this.running&&this.nextTick>this._now?this.nextTick-this._now:0}}),Object.defineProperty(b.Timer.prototype,"length",{get:function(){return this.events.length}}),Object.defineProperty(b.Timer.prototype,"ms",{get:function(){return this._now-this._started-this._pauseTotal}}),Object.defineProperty(b.Timer.prototype,"seconds",{get:function(){return.001*this.ms}}),b.Timer.prototype.constructor=b.Timer,b.TimerEvent=function(a,b,c,d,e,f,g,h){this.timer=a,this.delay=b,this.tick=c,this.repeatCount=d-1,this.loop=e,this.callback=f,this.callbackContext=g,this.args=h,this.pendingDelete=!1},b.TimerEvent.prototype.constructor=b.TimerEvent,b.AnimationManager=function(a){this.sprite=a,this.game=a.game,this.currentFrame=null,this.currentAnim=null,this.updateIfVisible=!0,this.isLoaded=!1,this._frameData=null,this._anims={},this._outputFrames=[]},b.AnimationManager.prototype={loadFrameData:function(a){this._frameData=a,this.frame=0,this.isLoaded=!0},add:function(a,c,d,e,f){return null==this._frameData?void console.warn("No FrameData available for Phaser.Animation "+a):(c=c||[],d=d||60,"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=c&&"number"==typeof c[0]?!0:!1),null==this.sprite.events.onAnimationStart&&(this.sprite.events.onAnimationStart=new b.Signal,this.sprite.events.onAnimationComplete=new b.Signal,this.sprite.events.onAnimationLoop=new b.Signal),this._outputFrames.length=0,this._frameData.getFrameIndexes(c,f,this._outputFrames),this._anims[a]=new b.Animation(this.game,this.sprite,a,this._frameData,this._outputFrames,d,e),this.currentAnim=this._anims[a],this.currentFrame=this.currentAnim.currentFrame,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1),this._anims[a]) +},validateFrames:function(a,b){"undefined"==typeof b&&(b=!0);for(var c=0;cthis._frameData.total)return!1}else if(this._frameData.checkFrameName(a[c])===!1)return!1;return!0},play:function(a,b,c,d){if(this._anims[a]){if(this.currentAnim!==this._anims[a])return this.currentAnim&&this.currentAnim.isPlaying&&this.currentAnim.stop(),this.currentAnim=this._anims[a],this.currentAnim.paused=!1,this.currentAnim.play(b,c,d);if(this.currentAnim.isPlaying===!1)return this.currentAnim.paused=!1,this.currentAnim.play(b,c,d)}},stop:function(a,b){"undefined"==typeof b&&(b=!1),"string"==typeof a?this._anims[a]&&(this.currentAnim=this._anims[a],this.currentAnim.stop(b)):this.currentAnim&&this.currentAnim.stop(b)},update:function(){return this.updateIfVisible&&!this.sprite.visible?!1:this.currentAnim&&this.currentAnim.update()===!0?(this.currentFrame=this.currentAnim.currentFrame,!0):!1},getAnimation:function(a){return"string"==typeof a&&this._anims[a]?this._anims[a]:null},refreshFrame:function(){this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1)},destroy:function(){var a=null;for(var a in this._anims)this._anims.hasOwnProperty(a)&&this._anims[a].destroy();this._anims={},this._frameData=null,this._frameIndex=0,this.currentAnim=null,this.currentFrame=null}},b.AnimationManager.prototype.constructor=b.AnimationManager,Object.defineProperty(b.AnimationManager.prototype,"frameData",{get:function(){return this._frameData}}),Object.defineProperty(b.AnimationManager.prototype,"frameTotal",{get:function(){return this._frameData?this._frameData.total:-1}}),Object.defineProperty(b.AnimationManager.prototype,"paused",{get:function(){return this.currentAnim.isPaused},set:function(a){this.currentAnim.paused=a}}),Object.defineProperty(b.AnimationManager.prototype,"frame",{get:function(){return this.currentFrame?this._frameIndex:void 0},set:function(a){"number"==typeof a&&this._frameData&&null!==this._frameData.getFrame(a)&&(this.currentFrame=this._frameData.getFrame(a),this.currentFrame&&(this._frameIndex=a,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1)))}}),Object.defineProperty(b.AnimationManager.prototype,"frameName",{get:function(){return this.currentFrame?this.currentFrame.name:void 0},set:function(a){"string"==typeof a&&this._frameData&&null!==this._frameData.getFrameByName(a)?(this.currentFrame=this._frameData.getFrameByName(a),this.currentFrame&&(this._frameIndex=this.currentFrame.index,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1))):console.warn("Cannot set frameName: "+a)}}),b.Animation=function(a,c,d,e,f,g,h){this.game=a,this._parent=c,this._frameData=e,this.name=d,this._frames=[],this._frames=this._frames.concat(f),this.delay=1e3/g,this.loop=h,this.loopCount=0,this.killOnComplete=!1,this.isFinished=!1,this.isPlaying=!1,this.isPaused=!1,this._pauseStartTime=0,this._frameIndex=0,this._frameDiff=0,this._frameSkip=1,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.onStart=new b.Signal,this.onComplete=new b.Signal,this.onLoop=new b.Signal,this.game.onPause.add(this.onPause,this),this.game.onResume.add(this.onResume,this)},b.Animation.prototype={play:function(a,b,c){return"number"==typeof a&&(this.delay=1e3/a),"boolean"==typeof b&&(this.loop=b),"undefined"!=typeof c&&(this.killOnComplete=c),this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this.loopCount=0,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]),this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1),this._parent.events.onAnimationStart.dispatch(this._parent,this),this.onStart.dispatch(this._parent,this),this},restart:function(){this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this.loopCount=0,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]),this.onStart.dispatch(this._parent,this)},setFrame:function(a,b){var c;if("undefined"==typeof b&&(b=!1),"string"==typeof a)for(var d=0;d=this._timeNextFrame?(this._frameSkip=1,this._frameDiff=this.game.time.now-this._timeNextFrame,this._timeLastFrame=this.game.time.now,this._frameDiff>this.delay&&(this._frameSkip=Math.floor(this._frameDiff/this.delay),this._frameDiff-=this._frameSkip*this.delay),this._timeNextFrame=this.game.time.now+(this.delay-this._frameDiff),this._frameIndex+=this._frameSkip,this._frameIndex>=this._frames.length?this.loop?(this._frameIndex%=this._frames.length,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&(this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1)),this.loopCount++,this._parent.events.onAnimationLoop.dispatch(this._parent,this),this.onLoop.dispatch(this._parent,this)):this.complete():(this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&(this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1))),!0):!1},destroy:function(){this.game.onPause.remove(this.onPause,this),this.game.onResume.remove(this.onResume,this),this.game=null,this._parent=null,this._frames=null,this._frameData=null,this.currentFrame=null,this.isPlaying=!1,this.onStart.dispose(),this.onLoop.dispose(),this.onComplete.dispose()},complete:function(){this.isPlaying=!1,this.isFinished=!0,this.paused=!1,this._parent.events.onAnimationComplete.dispatch(this._parent,this),this.onComplete.dispatch(this._parent,this),this.killOnComplete&&this._parent.kill()}},b.Animation.prototype.constructor=b.Animation,Object.defineProperty(b.Animation.prototype,"paused",{get:function(){return this.isPaused},set:function(a){this.isPaused=a,a?this._pauseStartTime=this.game.time.now:this.isPlaying&&(this._timeNextFrame=this.game.time.now+this.delay)}}),Object.defineProperty(b.Animation.prototype,"frameTotal",{get:function(){return this._frames.length}}),Object.defineProperty(b.Animation.prototype,"frame",{get:function(){return null!==this.currentFrame?this.currentFrame.index:this._frameIndex},set:function(a){this.currentFrame=this._frameData.getFrame(this._frames[a]),null!==this.currentFrame&&(this._frameIndex=a,this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]))}}),Object.defineProperty(b.Animation.prototype,"speed",{get:function(){return Math.round(1e3/this.delay)},set:function(a){a>=1&&(this.delay=1e3/a)}}),b.Animation.generateFrameNames=function(a,c,d,e,f){"undefined"==typeof e&&(e="");var g=[],h="";if(d>c)for(var i=c;d>=i;i++)h="number"==typeof f?b.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);else for(var i=c;i>=d;i--)h="number"==typeof f?b.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);return g},b.Frame=function(a,c,d,e,f,g,h){this.index=a,this.x=c,this.y=d,this.width=e,this.height=f,this.name=g,this.uuid=h,this.centerX=Math.floor(e/2),this.centerY=Math.floor(f/2),this.distance=b.Math.distance(0,0,e,f),this.rotated=!1,this.rotationDirection="cw",this.trimmed=!1,this.sourceSizeW=e,this.sourceSizeH=f,this.spriteSourceSizeX=0,this.spriteSourceSizeY=0,this.spriteSourceSizeW=0,this.spriteSourceSizeH=0},b.Frame.prototype={setTrim:function(a,b,c,d,e,f,g){this.trimmed=a,a&&(this.width=b,this.height=c,this.sourceSizeW=b,this.sourceSizeH=c,this.centerX=Math.floor(b/2),this.centerY=Math.floor(c/2),this.spriteSourceSizeX=d,this.spriteSourceSizeY=e,this.spriteSourceSizeW=f,this.spriteSourceSizeH=g)},getRect:function(a){return"undefined"==typeof a?a=new b.Rectangle(this.x,this.y,this.width,this.height):a.setTo(this.x,this.y,this.width,this.height),a}},b.Frame.prototype.constructor=b.Frame,b.FrameData=function(){this._frames=[],this._frameNames=[]},b.FrameData.prototype={addFrame:function(a){return a.index=this._frames.length,this._frames.push(a),""!==a.name&&(this._frameNames[a.name]=a.index),a},getFrame:function(a){return a>this._frames.length&&(a=0),this._frames[a]},getFrameByName:function(a){return"number"==typeof this._frameNames[a]?this._frames[this._frameNames[a]]:null},checkFrameName:function(a){return null==this._frameNames[a]?!1:!0},getFrameRange:function(a,b,c){"undefined"==typeof c&&(c=[]);for(var d=a;b>=d;d++)c.push(this._frames[d]);return c},getFrames:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0;dd;d++)c.push(b?this.getFrame(a[d]):this.getFrameByName(a[d]));return c},getFrameIndexes:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0,e=this._frames.length;e>d;d++)c.push(this._frames[d].index);else for(var d=0,e=a.length;e>d;d++)b?c.push(a[d]):this.getFrameByName(a[d])&&c.push(this.getFrameByName(a[d]).index);return c}},b.FrameData.prototype.constructor=b.FrameData,Object.defineProperty(b.FrameData.prototype,"total",{get:function(){return this._frames.length}}),b.AnimationParser={spriteSheet:function(a,c,d,e,f,g,h){var i=a.cache.getImage(c);if(null==i)return null;var j=i.width,k=i.height;0>=d&&(d=Math.floor(-j/Math.min(-1,d))),0>=e&&(e=Math.floor(-k/Math.min(-1,e)));var l=Math.floor((j-g)/(d+h)),m=Math.floor((k-g)/(e+h)),n=l*m;if(-1!==f&&(n=f),0===j||0===k||d>j||e>k||0===n)return console.warn("Phaser.AnimationParser.spriteSheet: width/height zero or width/height < given frameWidth/frameHeight"),null;for(var o=new b.FrameData,p=g,q=g,r=0;n>r;r++){var s=a.rnd.uuid();o.addFrame(new b.Frame(r,p,q,d,e,"",s)),PIXI.TextureCache[s]=new PIXI.Texture(PIXI.BaseTextureCache[c],{x:p,y:q,width:d,height:e}),p+=d+h,p+d>j&&(p=g,q+=e+h)}return o},JSONData:function(a,c,d){if(!c.frames)return console.warn("Phaser.AnimationParser.JSONData: Invalid Texture Atlas JSON given, missing 'frames' array"),void console.log(c);for(var e,f=new b.FrameData,g=c.frames,h=0;h tag");for(var e,f,g,h,i,j,k,l,m,n,o,p,q=new b.FrameData,r=c.getElementsByTagName("SubTexture"),s=0;s0)for(var c=0;c0)for(var c=0;c0)for(var c=0;c0?(this._fileIndex=0,this._progressChunk=100/this._fileList.length,this.loadFile()):(this.progress=100,this.progressFloat=100,this.hasLoaded=!0,this.onLoadComplete.dispatch()))},loadFile:function(){if(!this._fileList[this._fileIndex])return void console.warn("Phaser.Loader loadFile invalid index "+this._fileIndex);var a=this._fileList[this._fileIndex],c=this;switch(this.onFileStart.dispatch(this.progress,a.key),a.type){case"image":case"spritesheet":case"textureatlas":case"bitmapfont":a.data=new Image,a.data.name=a.key,a.data.onload=function(){return c.fileComplete(c._fileIndex)},a.data.onerror=function(){return c.fileError(c._fileIndex)},this.crossOrigin&&(a.data.crossOrigin=this.crossOrigin),a.data.src=this.baseURL+a.url;break;case"audio":a.url=this.getAudioURL(a.url),null!==a.url?this.game.sound.usingWebAudio?(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="arraybuffer",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send()):this.game.sound.usingAudioTag&&(this.game.sound.touchLocked?(a.data=new Audio,a.data.name=a.key,a.data.preload="auto",a.data.src=this.baseURL+a.url,this.fileComplete(this._fileIndex)):(a.data=new Audio,a.data.name=a.key,a.data.onerror=function(){return c.fileError(c._fileIndex)},a.data.preload="auto",a.data.src=this.baseURL+a.url,a.data.addEventListener("canplaythrough",b.GAMES[this.game.id].load.fileComplete(this._fileIndex),!1),a.data.load())):this.fileError(this._fileIndex);break;case"json":window.XDomainRequest?(this._ajax=new window.XDomainRequest,this._ajax.timeout=3e3,this._ajax.onerror=function(){return c.dataLoadError(c._fileIndex)},this._ajax.ontimeout=function(){return c.dataLoadError(c._fileIndex)},this._ajax.onprogress=function(){},this._ajax.onload=function(){return c.jsonLoadComplete(c._fileIndex)},this._ajax.open("GET",this.baseURL+a.url,!0),this._ajax.send()):(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return c.jsonLoadComplete(c._fileIndex)},this._xhr.onerror=function(){return c.dataLoadError(c._fileIndex)},this._xhr.send());break;case"tilemap":if(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",a.format===b.Tilemap.TILED_JSON)this._xhr.onload=function(){return c.jsonLoadComplete(c._fileIndex)};else{if(a.format!==b.Tilemap.CSV)throw new Error("Phaser.Loader. Invalid Tilemap format: "+a.format);this._xhr.onload=function(){return c.csvLoadComplete(c._fileIndex)}}this._xhr.onerror=function(){return c.dataLoadError(c._fileIndex)},this._xhr.send();break;case"text":case"script":case"physics":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send();break;case"binary":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="arraybuffer",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send()}},getAudioURL:function(a){var b;"string"==typeof a&&(a=[a]);for(var c=0;c100&&(this.progress=100),null!==this.preloadSprite&&(0===this.preloadSprite.direction?(this.preloadSprite.rect.width=Math.floor(this.preloadSprite.width/100*this.progress),this.preloadSprite.sprite.crop(this.preloadSprite.rect)):(this.preloadSprite.rect.height=Math.floor(this.preloadSprite.height/100*this.progress),this.preloadSprite.sprite.crop(this.preloadSprite.rect))),this.onFileComplete.dispatch(this.progress,this._fileList[a].key,b,this.totalLoadedFiles(),this._fileList.length),this.totalQueuedFiles()>0?(this._fileIndex++,this.loadFile()):(this.hasLoaded=!0,this.isLoading=!1,this.removeAll(),this.onLoadComplete.dispatch())},totalLoadedFiles:function(){for(var a=0,b=0;b=this.durationMS&&(this.usingWebAudio?this.loop?(this.onLoop.dispatch(this),""===this.currentMarker?(this.currentTime=0,this.startTime=this.game.time.now):(this.onMarkerComplete.dispatch(this.currentMarker,this),this.play(this.currentMarker,0,this.volume,!0,!0))):this.stop():this.loop?(this.onLoop.dispatch(this),this.play(this.currentMarker,0,this.volume,!0,!0)):this.stop()))},play:function(a,b,c,d,e){if("undefined"==typeof a&&(a=""),"undefined"==typeof e&&(e=!0),this.isPlaying!==!0||e!==!1||this.override!==!1){if(this.isPlaying&&this.override&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.currentMarker=a,""!==a){if(!this.markers[a])return void console.warn("Phaser.Sound.play: audio marker "+a+" doesn't exist");this.position=this.markers[a].start,this.volume=this.markers[a].volume,this.loop=this.markers[a].loop,this.duration=this.markers[a].duration,this.durationMS=this.markers[a].durationMS,"undefined"!=typeof c&&(this.volume=c),"undefined"!=typeof d&&(this.loop=d),this._tempMarker=a,this._tempPosition=this.position,this._tempVolume=this.volume,this._tempLoop=this.loop}else b=b||0,"undefined"==typeof c&&(c=this._volume),"undefined"==typeof d&&(d=this.loop),this.position=b,this.volume=c,this.loop=d,this.duration=0,this.durationMS=0,this._tempMarker=a,this._tempPosition=b,this._tempVolume=c,this._tempLoop=d;this.usingWebAudio?this.game.cache.isSoundDecoded(this.key)?(null==this._buffer&&(this._buffer=this.game.cache.getSoundData(this.key)),this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this._sound.connect(this.externalNode?this.externalNode.input:this.gainNode),this.totalDuration=this._sound.buffer.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this.loop&&""===a&&(this._sound.loop=!0),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,this.position,this.duration):this._sound.start(0,this.position,this.duration),this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):(this.pendingPlayback=!0,this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).isDecoding===!1&&this.game.sound.decode(this.key,this)):this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).locked?(this.game.cache.reloadSound(this.key),this.pendingPlayback=!0):this._sound&&(this.game.device.cocoonJS||4===this._sound.readyState)?(this._sound.play(),this.totalDuration=this._sound.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this._sound.currentTime=this.position,this._sound.muted=this._muted,this._sound.volume=this._muted?0:this._volume,this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):this.pendingPlayback=!0}},restart:function(a,b,c,d){a=a||"",b=b||0,c=c||1,"undefined"==typeof d&&(d=!1),this.play(a,b,c,d,!0)},pause:function(){this.isPlaying&&this._sound&&(this.stop(),this.isPlaying=!1,this.paused=!0,this.pausedPosition=this.currentTime,this.pausedTime=this.game.time.now,this.onPause.dispatch(this))},resume:function(){if(this.paused&&this._sound){if(this.usingWebAudio){var a=this.position+this.pausedPosition/1e3;this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this._sound.connect(this.externalNode?this.externalNode.input:this.gainNode),this.loop&&(this._sound.loop=!0),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,a,this.duration):this._sound.start(0,a,this.duration)}else this._sound.play();this.isPlaying=!0,this.paused=!1,this.startTime+=this.game.time.now-this.pausedTime,this.onResume.dispatch(this)}},stop:function(){this.isPlaying&&this._sound&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.isPlaying=!1;var a=this.currentMarker;""!==this.currentMarker&&this.onMarkerComplete.dispatch(this.currentMarker,this),this.currentMarker="",this.onStop.dispatch(this,a)},destroy:function(a){"undefined"==typeof a&&(a=!0),this.stop(),a&&this.game.sound.remove(this),this.markers={},this.context=null,this._buffer=null,this.externalNode=null,this.onDecoded.dispose(),this.onPlay.dispose(),this.onPause.dispose(),this.onResume.dispose(),this.onLoop.dispose(),this.onStop.dispose(),this.onMute.dispose(),this.onMarkerComplete.dispose()}},b.Sound.prototype.constructor=b.Sound,Object.defineProperty(b.Sound.prototype,"isDecoding",{get:function(){return this.game.cache.getSound(this.key).isDecoding}}),Object.defineProperty(b.Sound.prototype,"isDecoded",{get:function(){return this.game.cache.isSoundDecoded(this.key)}}),Object.defineProperty(b.Sound.prototype,"mute",{get:function(){return this._muted||this.game.sound.mute},set:function(a){a=a||null,a?(this._muted=!0,this.usingWebAudio?(this._muteVolume=this.gainNode.gain.value,this.gainNode.gain.value=0):this.usingAudioTag&&this._sound&&(this._muteVolume=this._sound.volume,this._sound.volume=0)):(this._muted=!1,this.usingWebAudio?this.gainNode.gain.value=this._muteVolume:this.usingAudioTag&&this._sound&&(this._sound.volume=this._muteVolume)),this.onMute.dispatch(this)}}),Object.defineProperty(b.Sound.prototype,"volume",{get:function(){return this._volume},set:function(a){this.usingWebAudio?(this._volume=a,this.gainNode.gain.value=a):this.usingAudioTag&&this._sound&&a>=0&&1>=a&&(this._volume=a,this._sound.volume=a)}}),b.SoundManager=function(a){this.game=a,this.onSoundDecode=new b.Signal,this._codeMuted=!1,this._muted=!1,this._unlockSource=null,this._volume=1,this._sounds=[],this.context=null,this.usingWebAudio=!0,this.usingAudioTag=!1,this.noAudio=!1,this.connectToMaster=!0,this.touchLocked=!1,this.channels=32},b.SoundManager.prototype={boot:function(){if(this.game.device.iOS&&this.game.device.webAudio===!1&&(this.channels=1),this.game.device.iOS||window.PhaserGlobal&&window.PhaserGlobal.fakeiOSTouchLock?(this.game.input.touch.callbackContext=this,this.game.input.touch.touchStartCallback=this.unlock,this.game.input.mouse.callbackContext=this,this.game.input.mouse.mouseDownCallback=this.unlock,this.touchLocked=!0):this.touchLocked=!1,window.PhaserGlobal){if(window.PhaserGlobal.disableAudio===!0)return this.usingWebAudio=!1,void(this.noAudio=!0);if(window.PhaserGlobal.disableWebAudio===!0)return this.usingWebAudio=!1,this.usingAudioTag=!0,void(this.noAudio=!1)}if(window.AudioContext)try{this.context=new window.AudioContext}catch(a){this.context=null,this.usingWebAudio=!1,this.noAudio=!0}else if(window.webkitAudioContext)try{this.context=new window.webkitAudioContext}catch(a){this.context=null,this.usingWebAudio=!1,this.noAudio=!0}window.Audio&&null===this.context&&(this.usingWebAudio=!1,this.usingAudioTag=!0,this.noAudio=!1),null!==this.context&&(this.masterGain="undefined"==typeof this.context.createGain?this.context.createGainNode():this.context.createGain(),this.masterGain.gain.value=1,this.masterGain.connect(this.context.destination))},unlock:function(){if(this.touchLocked!==!1)if(this.game.device.webAudio===!1||window.PhaserGlobal&&window.PhaserGlobal.disableWebAudio===!0)this.touchLocked=!1,this._unlockSource=null,this.game.input.touch.callbackContext=null,this.game.input.touch.touchStartCallback=null,this.game.input.mouse.callbackContext=null,this.game.input.mouse.mouseDownCallback=null;else{var a=this.context.createBuffer(1,1,22050);this._unlockSource=this.context.createBufferSource(),this._unlockSource.buffer=a,this._unlockSource.connect(this.context.destination),this._unlockSource.noteOn(0)}},stopAll:function(){for(var a=0;a>>24,c.b=(16711680&a)>>>16,c.g=(65280&a)>>>8,c.r=255&a):(c.r=(4278190080&a)>>>24,c.g=(16711680&a)>>>16,c.b=(65280&a)>>>8,c.a=255&a),c.color=a,c.rgba="rgba("+c.r+","+c.g+","+c.b+","+c.a/255+")",d&&b.Color.RGBtoHSL(c.r,c.g,c.b,c),e&&b.Color.RGBtoHSV(c.r,c.g,c.b,c),c},fromRGBA:function(a,c){return c||(c=b.Color.createColor()),c.r=(4278190080&a)>>>24,c.g=(16711680&a)>>>16,c.b=(65280&a)>>>8,c.a=255&a,c.rgba="rgba("+c.r+","+c.g+","+c.b+","+c.a+")",c},toRGBA:function(a,b,c,d){return a<<24|b<<16|c<<8|d},RGBtoHSL:function(a,c,d,e){e||(e=b.Color.createColor(a,c,d,1)),a/=255,c/=255,d/=255;var f=Math.min(a,c,d),g=Math.max(a,c,d);if(e.h=0,e.s=0,e.l=(g+f)/2,g!==f){var h=g-f;e.s=e.l>.5?h/(2-g-f):h/(g+f),g===a?e.h=(c-d)/h+(d>c?6:0):g===c?e.h=(d-a)/h+2:g===d&&(e.h=(a-c)/h+4),e.h/=6}return e},HSLtoRGB:function(a,c,d,e){if(e?(e.r=d,e.g=d,e.b=d):e=b.Color.createColor(d,d,d),0!==c){var f=.5>d?d*(1+c):d+c-d*c,g=2*d-f;e.r=b.Color.hueToColor(g,f,a+1/3),e.g=b.Color.hueToColor(g,f,a),e.b=b.Color.hueToColor(g,f,a-1/3)}return e.r=Math.floor(255*e.r|0),e.g=Math.floor(255*e.g|0),e.b=Math.floor(255*e.b|0),b.Color.updateColor(e),e},RGBtoHSV:function(a,c,d,e){e||(e=b.Color.createColor(a,c,d,255)),a/=255,c/=255,d/=255;var f=Math.min(a,c,d),g=Math.max(a,c,d),h=g-f;return e.h=0,e.s=0===g?0:h/g,e.v=g,g!==f&&(g===a?e.h=(c-d)/h+(d>c?6:0):g===c?e.h=(d-a)/h+2:g===d&&(e.h=(a-c)/h+4),e.h/=6),e},HSVtoRGB:function(a,c,d,e){"undefined"==typeof e&&(e=b.Color.createColor(0,0,0,1,a,c,0,d));var f,g,h,i=Math.floor(6*a),j=6*a-i,k=d*(1-c),l=d*(1-j*c),m=d*(1-(1-j)*c);switch(i%6){case 0:f=d,g=m,h=k;break;case 1:f=l,g=d,h=k;break;case 2:f=k,g=d,h=m;break;case 3:f=k,g=l,h=d;break;case 4:f=m,g=k,h=d;break;case 5:f=d,g=k,h=l}return e.r=Math.floor(255*f),e.g=Math.floor(255*g),e.b=Math.floor(255*h),b.Color.updateColor(e),e},hueToColor:function(a,b,c){return 0>c&&(c+=1),c>1&&(c-=1),1/6>c?a+6*(b-a)*c:.5>c?b:2/3>c?a+(b-a)*(2/3-c)*6:a},createColor:function(a,b,c,d,e,f,g,h){var i={r:a||0,g:b||0,b:c||0,a:d||1,h:e||0,s:f||0,l:g||0,v:h||0,color:0};return i.rgba="rgba("+i.r+","+i.g+","+i.b+","+i.a+")",i},updateColor:function(a){return a.rgba="rgba("+a.r+","+a.g+","+a.b+","+a.a+")",a},getColor32:function(a,b,c,d){return a<<24|b<<16|c<<8|d},getColor:function(a,b,c){return a<<16|b<<8|c},RGBtoString:function(a,c,d,e,f){return"undefined"==typeof e&&(e=255),"undefined"==typeof f&&(f="#"),"#"===f?"#"+((1<<24)+(a<<16)+(c<<8)+d).toString(16).slice(1):"0x"+b.Color.componentToHex(e)+b.Color.componentToHex(a)+b.Color.componentToHex(c)+b.Color.componentToHex(d)},hexToRGB:function(a){var c=b.Color.hexToColor(a);return c?b.Color.getColor32(c.a,c.r,c.g,c.b):void 0},hexToColor:function(a,c){c||(c=b.Color.createColor());var d=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;a=a.replace(d,function(a,b,c,d){return b+b+c+c+d+d});var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a);return e&&(c.r=parseInt(e[1],16),c.g=parseInt(e[2],16),c.b=parseInt(e[3],16)),c},componentToHex:function(a){var b=a.toString(16);return 1==b.length?"0"+b:b},HSVColorWheel:function(a,c){"undefined"==typeof a&&(a=1),"undefined"==typeof c&&(c=1);for(var d=[],e=0;359>=e;e++)d.push(b.Color.HSVtoRGB(e/359,a,c));return d},HSLColorWheel:function(a,c){"undefined"==typeof a&&(a=.5),"undefined"==typeof c&&(c=.5);for(var d=[],e=0;359>=e;e++)d.push(b.Color.HSLtoRGB(e/359,a,c));return d},interpolateColor:function(a,c,d,e,f){"undefined"==typeof f&&(f=255);var g=b.Color.getRGB(a),h=b.Color.getRGB(c),i=(h.red-g.red)*e/d+g.red,j=(h.green-g.green)*e/d+g.green,k=(h.blue-g.blue)*e/d+g.blue;return b.Color.getColor32(f,i,j,k)},interpolateColorWithRGB:function(a,c,d,e,f,g){var h=b.Color.getRGB(a),i=(c-h.red)*g/f+h.red,j=(d-h.green)*g/f+h.green,k=(e-h.blue)*g/f+h.blue;return b.Color.getColor(i,j,k)},interpolateRGB:function(a,c,d,e,f,g,h,i){var j=(e-a)*i/h+a,k=(f-c)*i/h+c,l=(g-d)*i/h+d;return b.Color.getColor(j,k,l)},getRandomColor:function(a,c,d){if("undefined"==typeof a&&(a=0),"undefined"==typeof c&&(c=255),"undefined"==typeof d&&(d=255),c>255||a>c)return b.Color.getColor(255,255,255);var e=a+Math.round(Math.random()*(c-a)),f=a+Math.round(Math.random()*(c-a)),g=a+Math.round(Math.random()*(c-a));return b.Color.getColor32(d,e,f,g)},getRGB:function(a){return{alpha:a>>>24,red:a>>16&255,green:a>>8&255,blue:255&a} +},getWebRGB:function(a){var b=(a>>>24)/255,c=a>>16&255,d=a>>8&255,e=255&a;return"rgba("+c.toString()+","+d.toString()+","+e.toString()+","+b.toString()+")"},getAlpha:function(a){return a>>>24},getAlphaFloat:function(a){return(a>>>24)/255},getRed:function(a){return a>>16&255},getGreen:function(a){return a>>8&255},getBlue:function(a){return 255&a},getColorInfo:function(a){var c=b.Color.getRGB(a),d=b.Color.RGBtoHexstring(a)+"\n";return d=d.concat("Alpha: "+c.alpha+" Red: "+c.red+" Green: "+c.green+" Blue: "+c.blue)+"\n"},RGBtoHexstring:function(a){var c=b.Color.getRGB(a);return"0x"+b.Color.colorToHexstring(c.alpha)+b.Color.colorToHexstring(c.red)+b.Color.colorToHexstring(c.green)+b.Color.colorToHexstring(c.blue)},RGBtoWebstring:function(a){var c=b.Color.getRGB(a);return"#"+b.Color.colorToHexstring(c.red)+b.Color.colorToHexstring(c.green)+b.Color.colorToHexstring(c.blue)},colorToHexstring:function(a){var b="0123456789ABCDEF",c=a%16,d=(a-c)/16,e=b.charAt(d)+b.charAt(c);return e}},b.Physics=function(a,b){b=b||{},this.game=a,this.config=b,this.arcade=null,this.p2=null,this.ninja=null,this.box2d=null,this.chipmunk=null,this.parseConfig()},b.Physics.ARCADE=0,b.Physics.P2JS=1,b.Physics.NINJA=2,b.Physics.BOX2D=3,b.Physics.CHIPMUNK=5,b.Physics.prototype={parseConfig:function(){this.config.hasOwnProperty("arcade")&&this.config.arcade!==!0||!b.Physics.hasOwnProperty("Arcade")||(this.arcade=new b.Physics.Arcade(this.game),this.game.time.deltaCap=.2),this.config.hasOwnProperty("ninja")&&this.config.ninja===!0&&b.Physics.hasOwnProperty("Ninja")&&(this.ninja=new b.Physics.Ninja(this.game)),this.config.hasOwnProperty("p2")&&this.config.p2===!0&&b.Physics.hasOwnProperty("P2")&&(this.p2=new b.Physics.P2(this.game,this.config))},startSystem:function(a){if(a===b.Physics.ARCADE?this.arcade=new b.Physics.Arcade(this.game):a===b.Physics.P2JS&&(this.p2=new b.Physics.P2(this.game,this.config)),a===b.Physics.NINJA)this.ninja=new b.Physics.Ninja(this.game);else{if(a===b.Physics.BOX2D&&null===this.box2d)throw new Error("The Box2D physics system has not been implemented yet.");if(a===b.Physics.CHIPMUNK&&null===this.chipmunk)throw new Error("The Chipmunk physics system has not been implemented yet.")}},enable:function(a,c,d){"undefined"==typeof c&&(c=b.Physics.ARCADE),"undefined"==typeof d&&(d=!1),c===b.Physics.ARCADE?this.arcade.enable(a):c===b.Physics.P2JS&&this.p2?this.p2.enable(a,d):c===b.Physics.NINJA&&this.ninja&&this.ninja.enableAABB(a)},preUpdate:function(){this.p2&&this.p2.preUpdate()},update:function(){this.p2&&this.p2.update()},setBoundsToWorld:function(){this.arcade&&this.arcade.setBoundsToWorld(),this.ninja&&this.ninja.setBoundsToWorld(),this.p2&&this.p2.setBoundsToWorld()},clear:function(){this.p2&&this.p2.clear()},destroy:function(){this.p2&&this.p2.destroy(),this.arcade=null,this.ninja=null,this.p2=null}},b.Physics.prototype.constructor=b.Physics,b.Physics.Arcade=function(a){this.game=a,this.gravity=new b.Point,this.bounds=new b.Rectangle(0,0,a.world.width,a.world.height),this.checkCollision={up:!0,down:!0,left:!0,right:!0},this.maxObjects=10,this.maxLevels=4,this.OVERLAP_BIAS=4,this.TILE_BIAS=16,this.forceX=!1,this.quadTree=new b.QuadTree(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels),this._overlap=0,this._maxOverlap=0,this._velocity1=0,this._velocity2=0,this._newVelocity1=0,this._newVelocity2=0,this._average=0,this._mapData=[],this._result=!1,this._total=0,this._angle=0,this._dx=0,this._dy=0},b.Physics.Arcade.prototype.constructor=b.Physics.Arcade,b.Physics.Arcade.prototype={setBounds:function(a,b,c,d){this.bounds.setTo(a,b,c,d)},setBoundsToWorld:function(){this.bounds.setTo(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height)},enable:function(a,c){"undefined"==typeof c&&(c=!0);var d=1;if(Array.isArray(a))for(d=a.length;d--;)a[d]instanceof b.Group?this.enable(a[d].children,c):(this.enableBody(a[d]),c&&a[d].hasOwnProperty("children")&&a[d].children.length>0&&this.enable(a[d],!0));else a instanceof b.Group?this.enable(a.children,c):(this.enableBody(a),c&&a.hasOwnProperty("children")&&a.children.length>0&&this.enable(a.children,!0))},enableBody:function(a){a.hasOwnProperty("body")&&null===a.body&&(a.body=new b.Physics.Arcade.Body(a))},updateMotion:function(a){this._velocityDelta=this.computeVelocity(0,a,a.angularVelocity,a.angularAcceleration,a.angularDrag,a.maxAngular)-a.angularVelocity,a.angularVelocity+=this._velocityDelta,a.rotation+=a.angularVelocity*this.game.time.physicsElapsed,a.velocity.x=this.computeVelocity(1,a,a.velocity.x,a.acceleration.x,a.drag.x,a.maxVelocity.x),a.velocity.y=this.computeVelocity(2,a,a.velocity.y,a.acceleration.y,a.drag.y,a.maxVelocity.y)},computeVelocity:function(a,b,c,d,e,f){return f=f||1e4,1==a&&b.allowGravity?c+=(this.gravity.x+b.gravity.x)*this.game.time.physicsElapsed:2==a&&b.allowGravity&&(c+=(this.gravity.y+b.gravity.y)*this.game.time.physicsElapsed),d?c+=d*this.game.time.physicsElapsed:e&&(this._drag=e*this.game.time.physicsElapsed,c-this._drag>0?c-=this._drag:c+this._drag<0?c+=this._drag:c=0),c>f?c=f:-f>c&&(c=-f),c},overlap:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!0);else this.collideHandler(a,b,c,d,e,!0);return this._total>0},collide:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!1);else this.collideHandler(a,b,c,d,e,!1);return this._total>0},collideHandler:function(a,c,d,e,f,g){return"undefined"!=typeof c||a.type!==b.GROUP&&a.type!==b.EMITTER?void(a&&c&&a.exists&&c.exists&&(a.type==b.SPRITE||a.type==b.TILESPRITE?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsSprite(a,c,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideSpriteVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideSpriteVsTilemapLayer(a,c,d,e,f):a.type==b.GROUP?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsGroup(c,a,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideGroupVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,c,d,e,f):a.type==b.TILEMAPLAYER?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsTilemapLayer(c,a,d,e,f):(c.type==b.GROUP||c.type==b.EMITTER)&&this.collideGroupVsTilemapLayer(c,a,d,e,f):a.type==b.EMITTER&&(c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsGroup(c,a,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideGroupVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,c,d,e,f)))):void this.collideGroupVsSelf(a,d,e,f,g)},collideSpriteVsSprite:function(a,b,c,d,e,f){return a.body&&b.body?(this.separate(a.body,b.body,d,e,f)&&(c&&c.call(e,a,b),this._total++),!0):!1},collideSpriteVsGroup:function(a,b,c,d,e,f){if(0!==b.length&&a.body){this.quadTree.clear(),this.quadTree.reset(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels),this.quadTree.populate(b),this._potentials=this.quadTree.retrieve(a);for(var g=0,h=this._potentials.length;h>g;g++)this.separate(a.body,this._potentials[g],d,e,f)&&(c&&c.call(e,a,this._potentials[g].sprite),this._total++)}},collideGroupVsSelf:function(a,b,c,d,e){if(0!==a.length)for(var f=a.children.length,g=0;f>g;g++)for(var h=g+1;f>=h;h++)a.children[g]&&a.children[h]&&a.children[g].exists&&a.children[h].exists&&this.collideSpriteVsSprite(a.children[g],a.children[h],b,c,d,e)},collideGroupVsGroup:function(a,b,c,d,e,f){if(0!==a.length&&0!==b.length)for(var g=0,h=a.children.length;h>g;g++)a.children[g].exists&&this.collideSpriteVsGroup(a.children[g],b,c,d,e,f)},collideSpriteVsTilemapLayer:function(a,b,c,d,e){if(a.body&&(this._mapData=b.getTiles(a.body.position.x-a.body.tilePadding.x,a.body.position.y-a.body.tilePadding.y,a.body.width+a.body.tilePadding.x,a.body.height+a.body.tilePadding.y,!1,!1),0!==this._mapData.length))for(var f=0;ff;f++)a.children[f].exists&&this.collideSpriteVsTilemapLayer(a.children[f],b,c,d,e)},separate:function(a,b,c,d,e){return this.intersects(a,b)?c&&c.call(d,a.sprite,b.sprite)===!1?!1:e?!0:(this._result=this.forceX||Math.abs(this.gravity.y+a.gravity.y)=b.right?!1:a.position.y>=b.bottom?!1:!0},separateX:function(a,b,c){return a.immovable&&b.immovable?!1:(this._overlap=0,this.intersects(a,b)&&(this._maxOverlap=a.deltaAbsX()+b.deltaAbsX()+this.OVERLAP_BIAS,0===a.deltaX()&&0===b.deltaX()?(a.embedded=!0,b.embedded=!0):a.deltaX()>b.deltaX()?(this._overlap=a.right-b.x,this._overlap>this._maxOverlap||a.checkCollision.right===!1||b.checkCollision.left===!1?this._overlap=0:(a.touching.none=!1,a.touching.right=!0,b.touching.none=!1,b.touching.left=!0)):a.deltaX()this._maxOverlap||a.checkCollision.left===!1||b.checkCollision.right===!1?this._overlap=0:(a.touching.none=!1,a.touching.left=!0,b.touching.none=!1,b.touching.right=!0)),0!==this._overlap)?(a.overlapX=this._overlap,b.overlapX=this._overlap,c||a.customSeparateX||b.customSeparateX?!0:(this._velocity1=a.velocity.x,this._velocity2=b.velocity.x,a.immovable||b.immovable?a.immovable?b.immovable||(b.x+=this._overlap,b.velocity.x=this._velocity1-this._velocity2*b.bounce.x):(a.x=a.x-this._overlap,a.velocity.x=this._velocity2-this._velocity1*a.bounce.x):(this._overlap*=.5,a.x=a.x-this._overlap,b.x+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.x=this._average+this._newVelocity1*a.bounce.x,b.velocity.x=this._average+this._newVelocity2*b.bounce.x),!0)):!1)},separateY:function(a,b,c){return a.immovable&&b.immovable?!1:(this._overlap=0,this.intersects(a,b)&&(this._maxOverlap=a.deltaAbsY()+b.deltaAbsY()+this.OVERLAP_BIAS,0===a.deltaY()&&0===b.deltaY()?(a.embedded=!0,b.embedded=!0):a.deltaY()>b.deltaY()?(this._overlap=a.bottom-b.y,this._overlap>this._maxOverlap||a.checkCollision.down===!1||b.checkCollision.up===!1?this._overlap=0:(a.touching.none=!1,a.touching.down=!0,b.touching.none=!1,b.touching.up=!0)):a.deltaY()this._maxOverlap||a.checkCollision.up===!1||b.checkCollision.down===!1?this._overlap=0:(a.touching.none=!1,a.touching.up=!0,b.touching.none=!1,b.touching.down=!0)),0!==this._overlap)?(a.overlapY=this._overlap,b.overlapY=this._overlap,c||a.customSeparateY||b.customSeparateY?!0:(this._velocity1=a.velocity.y,this._velocity2=b.velocity.y,a.immovable||b.immovable?a.immovable?b.immovable||(b.y+=this._overlap,b.velocity.y=this._velocity1-this._velocity2*b.bounce.y,a.moves&&(b.x+=a.x-a.prev.x)):(a.y=a.y-this._overlap,a.velocity.y=this._velocity2-this._velocity1*a.bounce.y,b.moves&&(a.x+=b.x-b.prev.x)):(this._overlap*=.5,a.y=a.y-this._overlap,b.y+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.y=this._average+this._newVelocity1*a.bounce.y,b.velocity.y=this._average+this._newVelocity2*b.bounce.y),!0)):!1)},separateTile:function(a,b,c){if(!c.intersects(b.position.x,b.position.y,b.right,b.bottom))return!1;if(c.collisionCallback&&!c.collisionCallback.call(c.collisionCallbackContext,b.sprite,c))return!1;if(c.layer.callbacks[c.index]&&!c.layer.callbacks[c.index].callback.call(c.layer.callbacks[c.index].callbackContext,b.sprite,c))return!1;if(!(c.faceLeft||c.faceRight||c.faceTop||c.faceBottom))return!1;var d=0,e=0,f=0,g=1;if(b.deltaAbsX()>b.deltaAbsY()?f=-1:b.deltaAbsX()f){if((c.faceLeft||c.faceRight)&&(d=this.tileCheckX(b,c),0!==d&&!c.intersects(b.position.x,b.position.y,b.right,b.bottom)))return!0;(c.faceTop||c.faceBottom)&&(e=this.tileCheckY(b,c))}else{if((c.faceTop||c.faceBottom)&&(e=this.tileCheckY(b,c),0!==e&&!c.intersects(b.position.x,b.position.y,b.right,b.bottom)))return!0;(c.faceLeft||c.faceRight)&&(d=this.tileCheckX(b,c))}return 0!==d||0!==e},tileCheckX:function(a,b){var c=0;return a.deltaX()<0&&!a.blocked.left&&b.collideRight&&a.checkCollision.left?b.faceRight&&a.x0&&!a.blocked.right&&b.collideLeft&&a.checkCollision.right&&b.faceLeft&&a.right>b.left&&(c=a.right-b.left,c>this.TILE_BIAS&&(c=0)),0!==c&&this.processTileSeparationX(a,c),c},tileCheckY:function(a,b){var c=0;return a.deltaY()<0&&!a.blocked.up&&b.collideDown&&a.checkCollision.up?b.faceBottom&&a.y0&&!a.blocked.down&&b.collideUp&&a.checkCollision.down&&b.faceTop&&a.bottom>b.top&&(c=a.bottom-b.top,c>this.TILE_BIAS&&(c=0)),0!==c&&this.processTileSeparationY(a,c),c},processTileSeparationX:function(a,b){0>b?a.blocked.left=!0:b>0&&(a.blocked.right=!0),a.position.x-=b,a.velocity.x=0===a.bounce.x?0:-a.velocity.x*a.bounce.x},processTileSeparationY:function(a,b){0>b?a.blocked.up=!0:b>0&&(a.blocked.down=!0),a.position.y-=b,a.velocity.y=0===a.bounce.y?0:-a.velocity.y*a.bounce.y},moveToObject:function(a,b,c,d){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=0),this._angle=Math.atan2(b.y-a.y,b.x-a.x),d>0&&(c=this.distanceBetween(a,b)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*c,a.body.velocity.y=Math.sin(this._angle)*c,this._angle},moveToPointer:function(a,b,c,d){return"undefined"==typeof b&&(b=60),c=c||this.game.input.activePointer,"undefined"==typeof d&&(d=0),this._angle=this.angleToPointer(a,c),d>0&&(b=this.distanceToPointer(a,c)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*b,a.body.velocity.y=Math.sin(this._angle)*b,this._angle},moveToXY:function(a,b,c,d,e){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=0),this._angle=Math.atan2(c-a.y,b-a.x),e>0&&(d=this.distanceToXY(a,b,c)/(e/1e3)),a.body.velocity.x=Math.cos(this._angle)*d,a.body.velocity.y=Math.sin(this._angle)*d,this._angle},velocityFromAngle:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(this.game.math.degToRad(a))*c,Math.sin(this.game.math.degToRad(a))*c)},velocityFromRotation:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(a)*c,Math.sin(a)*c)},accelerationFromRotation:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(a)*c,Math.sin(a)*c)},accelerateToObject:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleBetween(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle},accelerateToPointer:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof b&&(b=this.game.input.activePointer),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleToPointer(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle},accelerateToXY:function(a,b,c,d,e,f){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=1e3),"undefined"==typeof f&&(f=1e3),this._angle=this.angleToXY(a,b,c),a.body.acceleration.setTo(Math.cos(this._angle)*d,Math.sin(this._angle)*d),a.body.maxVelocity.setTo(e,f),this._angle},distanceBetween:function(a,b){return this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToXY:function(a,b,c){return this._dx=a.x-b,this._dy=a.y-c,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},angleBetween:function(a,b){return this._dx=b.x-a.x,this._dy=b.y-a.y,Math.atan2(this._dy,this._dx)},angleToXY:function(a,b,c){return this._dx=b-a.x,this._dy=c-a.y,Math.atan2(this._dy,this._dx)},angleToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=b.worldX-a.x,this._dy=b.worldY-a.y,Math.atan2(this._dy,this._dx)}},b.Physics.Arcade.Body=function(a){this.sprite=a,this.game=a.game,this.type=b.Physics.ARCADE,this.offset=new b.Point,this.position=new b.Point(a.x,a.y),this.prev=new b.Point(this.position.x,this.position.y),this.allowRotation=!0,this.rotation=a.rotation,this.preRotation=a.rotation,this.sourceWidth=a.texture.frame.width,this.sourceHeight=a.texture.frame.height,this.width=a.width,this.height=a.height,this.halfWidth=Math.abs(a.width/2),this.halfHeight=Math.abs(a.height/2),this.center=new b.Point(a.x+this.halfWidth,a.y+this.halfHeight),this.velocity=new b.Point,this.newVelocity=new b.Point(0,0),this.deltaMax=new b.Point(0,0),this.acceleration=new b.Point,this.drag=new b.Point,this.allowGravity=!0,this.gravity=new b.Point(0,0),this.bounce=new b.Point,this.maxVelocity=new b.Point(1e4,1e4),this.angularVelocity=0,this.angularAcceleration=0,this.angularDrag=0,this.maxAngular=1e3,this.mass=1,this.angle=0,this.speed=0,this.facing=b.NONE,this.immovable=!1,this.moves=!0,this.customSeparateX=!1,this.customSeparateY=!1,this.overlapX=0,this.overlapY=0,this.embedded=!1,this.collideWorldBounds=!1,this.checkCollision={none:!1,any:!0,up:!0,down:!0,left:!0,right:!0},this.touching={none:!0,up:!1,down:!1,left:!1,right:!1},this.wasTouching={none:!0,up:!1,down:!1,left:!1,right:!1},this.blocked={up:!1,down:!1,left:!1,right:!1},this.tilePadding=new b.Point,this.phase=0,this._reset=!0,this._sx=a.scale.x,this._sy=a.scale.y,this._dx=0,this._dy=0},b.Physics.Arcade.Body.prototype={updateBounds:function(){var a=Math.abs(this.sprite.scale.x),b=Math.abs(this.sprite.scale.y);(a!==this._sx||b!==this._sy)&&(this.width=this.sourceWidth*a,this.height=this.sourceHeight*b,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this._sx=a,this._sy=b,this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight),this._reset=!0)},preUpdate:function(){this.phase=1,this.wasTouching.none=this.touching.none,this.wasTouching.up=this.touching.up,this.wasTouching.down=this.touching.down,this.wasTouching.left=this.touching.left,this.wasTouching.right=this.touching.right,this.touching.none=!0,this.touching.up=!1,this.touching.down=!1,this.touching.left=!1,this.touching.right=!1,this.blocked.up=!1,this.blocked.down=!1,this.blocked.left=!1,this.blocked.right=!1,this.embedded=!1,this.updateBounds(),this.position.x=this.sprite.world.x-this.sprite.anchor.x*this.width+this.offset.x,this.position.y=this.sprite.world.y-this.sprite.anchor.y*this.height+this.offset.y,this.rotation=this.sprite.angle,this.preRotation=this.rotation,(this._reset||1===this.sprite._cache[4])&&(this.prev.x=this.position.x,this.prev.y=this.position.y),this.moves&&(this.game.physics.arcade.updateMotion(this),this.newVelocity.set(this.velocity.x*this.game.time.physicsElapsed,this.velocity.y*this.game.time.physicsElapsed),this.position.x+=this.newVelocity.x,this.position.y+=this.newVelocity.y,(this.position.x!==this.prev.x||this.position.y!==this.prev.y)&&(this.speed=Math.sqrt(this.velocity.x*this.velocity.x+this.velocity.y*this.velocity.y),this.angle=Math.atan2(this.velocity.y,this.velocity.x)),this.collideWorldBounds&&this.checkWorldBounds()),this._dx=this.deltaX(),this._dy=this.deltaY(),this._reset=!1},postUpdate:function(){2!==this.phase&&(this.phase=2,this.deltaX()<0?this.facing=b.LEFT:this.deltaX()>0&&(this.facing=b.RIGHT),this.deltaY()<0?this.facing=b.UP:this.deltaY()>0&&(this.facing=b.DOWN),this.moves&&(this._dx=this.deltaX(),this._dy=this.deltaY(),0!==this.deltaMax.x&&0!==this._dx&&(this._dx<0&&this._dx<-this.deltaMax.x?this._dx=-this.deltaMax.x:this._dx>0&&this._dx>this.deltaMax.x&&(this._dx=this.deltaMax.x)),0!==this.deltaMax.y&&0!==this._dy&&(this._dy<0&&this._dy<-this.deltaMax.y?this._dy=-this.deltaMax.y:this._dy>0&&this._dy>this.deltaMax.y&&(this._dy=this.deltaMax.y)),this.sprite.x+=this._dx,this.sprite.y+=this._dy),this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight),this.allowRotation&&(this.sprite.angle+=this.deltaZ()),this.prev.x=this.position.x,this.prev.y=this.position.y)},destroy:function(){this.sprite=null},checkWorldBounds:function(){this.position.xthis.game.physics.arcade.bounds.right&&this.game.physics.arcade.checkCollision.right&&(this.position.x=this.game.physics.arcade.bounds.right-this.width,this.velocity.x*=-this.bounce.x,this.blocked.right=!0),this.position.ythis.game.physics.arcade.bounds.bottom&&this.game.physics.arcade.checkCollision.down&&(this.position.y=this.game.physics.arcade.bounds.bottom-this.height,this.velocity.y*=-this.bounce.y,this.blocked.down=!0)},setSize:function(a,b,c,d){c=c||this.offset.x,d=d||this.offset.y,this.sourceWidth=a,this.sourceHeight=b,this.width=this.sourceWidth*this._sx,this.height=this.sourceHeight*this._sy,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this.offset.setTo(c,d),this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight)},reset:function(a,b){this.velocity.set(0),this.acceleration.set(0),this.angularVelocity=0,this.angularAcceleration=0,this.position.x=a-this.sprite.anchor.x*this.width+this.offset.x,this.position.y=b-this.sprite.anchor.y*this.height+this.offset.y,this.prev.x=this.position.x,this.prev.y=this.position.y,this.rotation=this.sprite.angle,this.preRotation=this.rotation,this._sx=this.sprite.scale.x,this._sy=this.sprite.scale.y,this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight)},hitTest:function(a,c){return b.Rectangle.contains(this,a,c)},onFloor:function(){return this.blocked.down},onWall:function(){return this.blocked.left||this.blocked.right},deltaAbsX:function(){return this.deltaX()>0?this.deltaX():-this.deltaX()},deltaAbsY:function(){return this.deltaY()>0?this.deltaY():-this.deltaY()},deltaX:function(){return this.position.x-this.prev.x},deltaY:function(){return this.position.y-this.prev.y},deltaZ:function(){return this.rotation-this.preRotation}},Object.defineProperty(b.Physics.Arcade.Body.prototype,"bottom",{get:function(){return this.position.y+this.height}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"right",{get:function(){return this.position.x+this.width}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a}}),b.Physics.Arcade.Body.render=function(a,b,c,d){"undefined"==typeof c&&(c=!0),d=d||"rgba(0,255,0,0.4)",c?(a.fillStyle=d,a.fillRect(b.position.x-b.game.camera.x,b.position.y-b.game.camera.y,b.width,b.height)):(a.strokeStyle=d,a.strokeRect(b.position.x-b.game.camera.x,b.position.y-b.game.camera.y,b.width,b.height))},b.Physics.Arcade.Body.renderBodyInfo=function(a,b){a.line("x: "+b.x.toFixed(2),"y: "+b.y.toFixed(2),"width: "+b.width,"height: "+b.height),a.line("velocity x: "+b.velocity.x.toFixed(2),"y: "+b.velocity.y.toFixed(2),"deltaX: "+b._dx.toFixed(2),"deltaY: "+b._dy.toFixed(2)),a.line("acceleration x: "+b.acceleration.x.toFixed(2),"y: "+b.acceleration.y.toFixed(2),"speed: "+b.speed.toFixed(2),"angle: "+b.angle.toFixed(2)),a.line("gravity x: "+b.gravity.x,"y: "+b.gravity.y,"bounce x: "+b.bounce.x.toFixed(2),"y: "+b.bounce.y.toFixed(2)),a.line("touching left: "+b.touching.left,"right: "+b.touching.right,"up: "+b.touching.up,"down: "+b.touching.down),a.line("blocked left: "+b.blocked.left,"right: "+b.blocked.right,"up: "+b.blocked.up,"down: "+b.blocked.down)},b.Physics.Arcade.Body.prototype.constructor=b.Physics.Arcade.Body,b.Particles=function(a){this.game=a,this.emitters={},this.ID=0},b.Particles.prototype={add:function(a){return this.emitters[a.name]=a,a},remove:function(a){delete this.emitters[a.name]},update:function(){for(var a in this.emitters)this.emitters[a].exists&&this.emitters[a].update()}},b.Particles.prototype.constructor=b.Particles,b.Particles.Arcade={},b.Particles.Arcade.Emitter=function(a,c,d,e){this.maxParticles=e||50,b.Group.call(this,a),this.name="emitter"+this.game.particles.ID++,this.type=b.EMITTER,this.width=1,this.height=1,this.minParticleSpeed=new b.Point(-100,-100),this.maxParticleSpeed=new b.Point(100,100),this.minParticleScale=1,this.maxParticleScale=1,this.scaleData=null,this.minRotation=-360,this.maxRotation=360,this.minParticleAlpha=1,this.maxParticleAlpha=1,this.alphaData=null,this.gravity=100,this.particleClass=b.Particle,this.particleDrag=new b.Point,this.angularDrag=0,this.frequency=100,this.lifespan=2e3,this.bounce=new b.Point,this.on=!1,this.particleAnchor=new b.Point(.5,.5),this.blendMode=b.blendModes.NORMAL,this.emitX=c,this.emitY=d,this.autoScale=!1,this.autoAlpha=!1,this.particleBringToTop=!1,this.particleSendToBack=!1,this._minParticleScale=new b.Point(1,1),this._maxParticleScale=new b.Point(1,1),this._quantity=0,this._timer=0,this._counter=0,this._explode=!0,this._frames=null},b.Particles.Arcade.Emitter.prototype=Object.create(b.Group.prototype),b.Particles.Arcade.Emitter.prototype.constructor=b.Particles.Arcade.Emitter,b.Particles.Arcade.Emitter.prototype.update=function(){if(this.on)if(this._explode){this._counter=0;do this.emitParticle(),this._counter++;while(this._counter=this._timer&&(this.emitParticle(),this._counter++,this._quantity>0&&this._counter>=this._quantity&&(this.on=!1),this._timer=this.game.time.now+this.frequency);for(var a=this.children.length;a--;)this.children[a].exists&&this.children[a].update()},b.Particles.Arcade.Emitter.prototype.makeParticles=function(a,b,c,d,e){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=this.maxParticles),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1);var f,g=0,h=a,i=b;for(this._frames=b;c>g;)"object"==typeof a&&(h=this.game.rnd.pick(a)),"object"==typeof b&&(i=this.game.rnd.pick(b)),f=new this.particleClass(this.game,0,0,h,i),this.game.physics.arcade.enable(f,!1),d?(f.body.checkCollision.any=!0,f.body.checkCollision.none=!1):f.body.checkCollision.none=!0,f.body.collideWorldBounds=e,f.exists=!1,f.visible=!1,f.anchor.copyFrom(this.particleAnchor),this.add(f),g++;return this},b.Particles.Arcade.Emitter.prototype.kill=function(){this.on=!1,this.alive=!1,this.exists=!1},b.Particles.Arcade.Emitter.prototype.revive=function(){this.alive=!0,this.exists=!0},b.Particles.Arcade.Emitter.prototype.start=function(a,b,c,d){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=0),("undefined"==typeof c||null===c)&&(c=250),"undefined"==typeof d&&(d=0),this.revive(),this.visible=!0,this.on=!0,this._explode=a,this.lifespan=b,this.frequency=c,a?this._quantity=d:this._quantity+=d,this._counter=0,this._timer=this.game.time.now+c},b.Particles.Arcade.Emitter.prototype.emitParticle=function(){var a=this.getFirstExists(!1);null!==a&&(this.width>1||this.height>1?a.reset(this.game.rnd.integerInRange(this.left,this.right),this.game.rnd.integerInRange(this.top,this.bottom)):a.reset(this.emitX,this.emitY),a.angle=0,a.lifespan=this.lifespan,this.particleBringToTop?this.bringToTop(a):this.particleSendToBack&&this.sendToBack(a),this.autoScale?a.setScaleData(this.scaleData):1!==this.minParticleScale||1!==this.maxParticleScale?a.scale.set(this.game.rnd.realInRange(this.minParticleScale,this.maxParticleScale)):(this._minParticleScale.x!==this._maxParticleScale.x||this._minParticleScale.y!==this._maxParticleScale.y)&&a.scale.set(this.game.rnd.realInRange(this._minParticleScale.x,this._maxParticleScale.x),this.game.rnd.realInRange(this._minParticleScale.y,this._maxParticleScale.y)),a.frame=Array.isArray("object"===this._frames)?this.game.rnd.pick(this._frames):this._frames,this.autoAlpha?a.setAlphaData(this.alphaData):a.alpha=this.game.rnd.realInRange(this.minParticleAlpha,this.maxParticleAlpha),a.blendMode=this.blendMode,a.body.updateBounds(),a.body.bounce.setTo(this.bounce.x,this.bounce.y),a.body.velocity.x=this.game.rnd.integerInRange(this.minParticleSpeed.x,this.maxParticleSpeed.x),a.body.velocity.y=this.game.rnd.integerInRange(this.minParticleSpeed.y,this.maxParticleSpeed.y),a.body.angularVelocity=this.game.rnd.integerInRange(this.minRotation,this.maxRotation),a.body.gravity.y=this.gravity,a.body.drag.x=this.particleDrag.x,a.body.drag.y=this.particleDrag.y,a.body.angularDrag=this.angularDrag,a.onEmit())},b.Particles.Arcade.Emitter.prototype.setSize=function(a,b){this.width=a,this.height=b},b.Particles.Arcade.Emitter.prototype.setXSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.x=a,this.maxParticleSpeed.x=b},b.Particles.Arcade.Emitter.prototype.setYSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.y=a,this.maxParticleSpeed.y=b},b.Particles.Arcade.Emitter.prototype.setRotation=function(a,b){a=a||0,b=b||0,this.minRotation=a,this.maxRotation=b},b.Particles.Arcade.Emitter.prototype.setAlpha=function(a,c,d,e,f){if("undefined"==typeof a&&(a=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=0),"undefined"==typeof e&&(e=b.Easing.Linear.None),"undefined"==typeof f&&(f=!1),this.minParticleAlpha=a,this.maxParticleAlpha=c,this.autoAlpha=!1,d>0&&a!==c){var g={v:a},h=this.game.make.tween(g).to({v:c},d,e);h.yoyo(f),this.alphaData=h.generateData(60),this.alphaData.reverse(),this.autoAlpha=!0}},b.Particles.Arcade.Emitter.prototype.setScale=function(a,c,d,e,f,g,h){if("undefined"==typeof a&&(a=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1),"undefined"==typeof e&&(e=1),"undefined"==typeof f&&(f=0),"undefined"==typeof g&&(g=b.Easing.Linear.None),"undefined"==typeof h&&(h=!1),this.minParticleScale=1,this.maxParticleScale=1,this._minParticleScale.set(a,d),this._maxParticleScale.set(c,e),this.autoScale=!1,f>0&&a!==c||d!==e){var i={x:a,y:d},j=this.game.make.tween(i).to({x:c,y:e},f,g);j.yoyo(h),this.scaleData=j.generateData(60),this.scaleData.reverse(),this.autoScale=!0}},b.Particles.Arcade.Emitter.prototype.at=function(a){a.center?(this.emitX=a.center.x,this.emitY=a.center.y):(this.emitX=a.world.x+a.anchor.x*a.width,this.emitY=a.world.y+a.anchor.y*a.height)},Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"x",{get:function(){return this.emitX},set:function(a){this.emitX=a}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"y",{get:function(){return this.emitY},set:function(a){this.emitY=a}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"left",{get:function(){return Math.floor(this.x-this.width/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"right",{get:function(){return Math.floor(this.x+this.width/2) +}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"top",{get:function(){return Math.floor(this.y-this.height/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"bottom",{get:function(){return Math.floor(this.y+this.height/2)}}),b.Tile=function(a,b,c,d,e,f){this.layer=a,this.index=b,this.x=c,this.y=d,this.worldX=c*e,this.worldY=d*f,this.width=e,this.height=f,this.centerX=Math.abs(e/2),this.centerY=Math.abs(f/2),this.alpha=1,this.properties={},this.scanned=!1,this.faceTop=!1,this.faceBottom=!1,this.faceLeft=!1,this.faceRight=!1,this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.collisionCallback=null,this.collisionCallbackContext=this},b.Tile.prototype={containsPoint:function(a,b){return!(athis.right||b>this.bottom)},intersects:function(a,b,c,d){return c<=this.worldX?!1:d<=this.worldY?!1:a>=this.worldX+this.width?!1:b>=this.worldY+this.height?!1:!0},setCollisionCallback:function(a,b){this.collisionCallback=a,this.collisionCallbackContext=b},destroy:function(){this.collisionCallback=null,this.collisionCallbackContext=null,this.properties=null},setCollision:function(a,b,c,d){this.collideLeft=a,this.collideRight=b,this.collideUp=c,this.collideDown=d},resetCollision:function(){this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.faceTop=!1,this.faceBottom=!1,this.faceLeft=!1,this.faceRight=!1},isInteresting:function(a,b){return a&&b?this.collideLeft||this.collideRight||this.collideUp||this.collideDown||this.faceTop||this.faceBottom||this.faceLeft||this.faceRight||this.collisionCallback:a?this.collideLeft||this.collideRight||this.collideUp||this.collideDown:b?this.faceTop||this.faceBottom||this.faceLeft||this.faceRight:!1},copy:function(a){this.index=a.index,this.alpha=a.alpha,this.properties=a.properties,this.collideUp=a.collideUp,this.collideDown=a.collideDown,this.collideLeft=a.collideLeft,this.collideRight=a.collideRight,this.collisionCallback=a.collisionCallback,this.collisionCallbackContext=a.collisionCallbackContext}},b.Tile.prototype.constructor=b.Tile,Object.defineProperty(b.Tile.prototype,"collides",{get:function(){return this.collideLeft||this.collideRight||this.collideUp||this.collideDown}}),Object.defineProperty(b.Tile.prototype,"canCollide",{get:function(){return this.collideLeft||this.collideRight||this.collideUp||this.collideDown||this.collisionCallback}}),Object.defineProperty(b.Tile.prototype,"left",{get:function(){return this.worldX}}),Object.defineProperty(b.Tile.prototype,"right",{get:function(){return this.worldX+this.width}}),Object.defineProperty(b.Tile.prototype,"top",{get:function(){return this.worldY}}),Object.defineProperty(b.Tile.prototype,"bottom",{get:function(){return this.worldY+this.height}}),b.Tilemap=function(a,c,d,e,f,g){this.game=a,this.key=c;var h=b.TilemapParser.parse(this.game,c,d,e,f,g);null!==h&&(this.width=h.width,this.height=h.height,this.tileWidth=h.tileWidth,this.tileHeight=h.tileHeight,this.orientation=h.orientation,this.format=h.format,this.version=h.version,this.properties=h.properties,this.widthInPixels=h.widthInPixels,this.heightInPixels=h.heightInPixels,this.layers=h.layers,this.tilesets=h.tilesets,this.tiles=h.tiles,this.objects=h.objects,this.collideIndexes=[],this.collision=h.collision,this.images=h.images,this.currentLayer=0,this.debugMap=[],this._results=[],this._tempA=0,this._tempB=0)},b.Tilemap.CSV=0,b.Tilemap.TILED_JSON=1,b.Tilemap.prototype={create:function(a,b,c,d,e,f){return"undefined"==typeof f&&(f=this.game.world),this.width=b,this.height=c,this.setTileSize(d,e),this.layers.length=0,this.createBlankLayer(a,b,c,d,e,f)},setTileSize:function(a,b){this.tileWidth=a,this.tileHeight=b,this.widthInPixels=this.width*a,this.heightInPixels=this.height*b},addTilesetImage:function(a,c,d,e,f,g,h){if("undefined"==typeof d&&(d=this.tileWidth),"undefined"==typeof e&&(e=this.tileHeight),"undefined"==typeof f&&(f=0),"undefined"==typeof g&&(g=0),"undefined"==typeof h&&(h=0),0===d&&(d=32),0===e&&(e=32),"undefined"==typeof c){if("string"!=typeof a)return null;if(c=a,!this.game.cache.checkImageKey(c))return console.warn('Phaser.Tilemap.addTilesetImage: Invalid image key given: "'+c+'"'),null}if("string"==typeof a&&(a=this.getTilesetIndex(a),null===a&&this.format===b.Tilemap.TILED_JSON))return console.warn('Phaser.Tilemap.addTilesetImage: No data found in the JSON matching the tileset name: "'+c+'"'),null;if(this.tilesets[a])return this.tilesets[a].setImage(this.game.cache.getImage(c)),this.tilesets[a];var i=new b.Tileset(c,h,d,e,f,g,{});i.setImage(this.game.cache.getImage(c)),this.tilesets.push(i);for(var j=this.tilesets.length-1,k=f,l=f,m=0,n=0,o=0,p=h;pl;l++)if(this.objects[a][l].gid===c){k=new i(this.game,this.objects[a][l].x,this.objects[a][l].y,d,e),k.name=this.objects[a][l].name,k.visible=this.objects[a][l].visible,k.autoCull=g,k.exists=f,j&&(k.y-=k.height),h.add(k);for(var n in this.objects[a][l].properties)h.set(k,n,this.objects[a][l].properties[n],!1,!1,0)}},createLayer:function(a,c,d,e){"undefined"==typeof c&&(c=this.game.width),"undefined"==typeof d&&(d=this.game.height),"undefined"==typeof e&&(e=this.game.world);var f=a;return"string"==typeof a&&(f=this.getLayerIndex(a)),null===f||f>this.layers.length?void console.warn("Tilemap.createLayer: Invalid layer ID given: "+f):e.add(new b.TilemapLayer(this.game,this,f,c,d))},createBlankLayer:function(a,c,d,e,f,g){if("undefined"==typeof g&&(g=this.game.world),null!==this.getLayerIndex(a))return void console.warn("Tilemap.createBlankLayer: Layer with matching name already exists");for(var h,i={name:a,x:0,y:0,width:c,height:d,widthInPixels:c*e,heightInPixels:d*f,alpha:1,visible:!0,properties:{},indexes:[],callbacks:[],bodies:[],data:null},j=[],k=0;d>k;k++){h=[];for(var l=0;c>l;l++)h.push(new b.Tile(i,-1,l,k,e,f));j.push(h)}i.data=j,this.layers.push(i),this.currentLayer=this.layers.length-1;var m=i.widthInPixels,n=i.heightInPixels;m>this.game.width&&(m=this.game.width),n>this.game.height&&(n=this.game.height);var j=new b.TilemapLayer(this.game,this,this.layers.length-1,m,n);return j.name=a,g.add(j)},getIndex:function(a,b){for(var c=0;ce;e++)this.layers[d].callbacks[a[e]]={callback:b,callbackContext:c}},setTileLocationCallback:function(a,b,c,d,e,f,g){if(g=this.getLayer(g),this.copy(a,b,c,d,g),!(this._results.length<2))for(var h=1;hd;d++)this.setCollisionByIndex(a[d],b,c,!1);this.calculateFaces(c)},setCollisionBetween:function(a,b,c,d){if("undefined"==typeof c&&(c=!0),d=this.getLayer(d),!(a>b)){for(var e=a;b>=e;e++)this.setCollisionByIndex(e,c,d,!1);this.calculateFaces(d)}},setCollisionByExclusion:function(a,b,c){"undefined"==typeof b&&(b=!0),c=this.getLayer(c);for(var d=0,e=this.tiles.length;e>d;d++)-1===a.indexOf(d)&&this.setCollisionByIndex(d,b,c,!1);this.calculateFaces(c)},setCollisionByIndex:function(a,b,c,d){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=this.currentLayer),"undefined"==typeof d&&(d=!0),b)this.collideIndexes.push(a);else{var e=this.collideIndexes.indexOf(a);e>-1&&this.collideIndexes.splice(e,1)}for(var f=0;ff;f++)for(var h=0,i=this.layers[a].width;i>h;h++){var j=this.layers[a].data[f][h];j&&(b=this.getTileAbove(a,h,f),c=this.getTileBelow(a,h,f),d=this.getTileLeft(a,h,f),e=this.getTileRight(a,h,f),j.collides&&(j.faceTop=!0,j.faceBottom=!0,j.faceLeft=!0,j.faceRight=!0),b&&b.collides&&(j.faceTop=!1),c&&c.collides&&(j.faceBottom=!1),d&&d.collides&&(j.faceLeft=!1),e&&e.collides&&(j.faceRight=!1))}},getTileAbove:function(a,b,c){return c>0?this.layers[a].data[c-1][b]:null},getTileBelow:function(a,b,c){return c0?this.layers[a].data[c][b-1]:null},getTileRight:function(a,b,c){return b=0&&a=0&&b=0&&c=0&&d-1?this.layers[e].data[d][c].setCollision(!0,!0,!0,!0):this.layers[e].data[d][c].resetCollision(),this.layers[e].dirty=!0,this.calculateFaces(e),this.layers[e].data[d][c]}return null},putTileWorldXY:function(a,b,c,d,e,f){return f=this.getLayer(f),b=this.game.math.snapToFloor(b,d)/d,c=this.game.math.snapToFloor(c,e)/e,this.putTile(a,b,c,f)},getTile:function(a,b,c){return c=this.getLayer(c),a>=0&&a=0&&ba&&(a=0),0>b&&(b=0),c>this.layers[e].width&&(c=this.layers[e].width),d>this.layers[e].height&&(d=this.layers[e].height),this._results.length=0,this._results.push({x:a,y:b,width:c,height:d,layer:e});for(var f=b;b+d>f;f++)for(var g=a;a+c>g;g++)this._results.push(this.layers[e].data[f][g]);return this._results},paste:function(a,b,c,d){if("undefined"==typeof a&&(a=0),"undefined"==typeof b&&(b=0),d=this.getLayer(d),c&&!(c.length<2)){for(var e=c[1].x-a,f=c[1].y-b,g=1;g1?this.debugMap[this.layers[this.currentLayer].data[c][d]]?"background: "+this.debugMap[this.layers[this.currentLayer].data[c][d]]:"background: #ffffff":"background: rgb(0, 0, 0)");a+="\n"}b[0]=a,console.log.apply(console,b)},destroy:function(){this.removeAllLayers(),this.data=[],this.game=null}},b.Tilemap.prototype.constructor=b.Tilemap,b.TilemapLayer=function(a,c,d,e,f){this.game=a,this.map=c,this.index=d,this.layer=c.layers[d],this.canvas=b.Canvas.create(e,f,"",!0),this.context=this.canvas.getContext("2d"),this.baseTexture=new PIXI.BaseTexture(this.canvas),this.texture=new PIXI.Texture(this.baseTexture),this.textureFrame=new b.Frame(0,0,0,e,f,"tilemapLayer",a.rnd.uuid()),b.Image.call(this,this.game,0,0,this.texture,this.textureFrame),this.name="",this.type=b.TILEMAPLAYER,this.fixedToCamera=!0,this.cameraOffset=new b.Point(0,0),this.tileColor="rgb(255, 255, 255)",this.debug=!1,this.debugAlpha=.5,this.debugColor="rgba(0, 255, 0, 1)",this.debugFill=!1,this.debugFillColor="rgba(0, 255, 0, 0.2)",this.debugCallbackColor="rgba(255, 0, 0, 1)",this.scrollFactorX=1,this.scrollFactorY=1,this.dirty=!0,this.rayStepRate=4,this._mc={cw:c.tileWidth,ch:c.tileHeight,ga:1,dx:0,dy:0,dw:0,dh:0,tx:0,ty:0,tw:0,th:0,tl:0,maxX:0,maxY:0,startX:0,startY:0,x:0,y:0,prevX:0,prevY:0},this._results=[],this.updateMax()},b.TilemapLayer.prototype=Object.create(b.Image.prototype),b.TilemapLayer.prototype.constructor=b.TilemapLayer,b.TilemapLayer.prototype.postUpdate=function(){b.Image.prototype.postUpdate.call(this),this.scrollX=this.game.camera.x*this.scrollFactorX,this.scrollY=this.game.camera.y*this.scrollFactorY,this.render(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y)},b.TilemapLayer.prototype.resizeWorld=function(){this.game.world.setBounds(0,0,this.layer.widthInPixels,this.layer.heightInPixels)},b.TilemapLayer.prototype._fixX=function(a){return 0>a&&(a=0),1===this.scrollFactorX?a:this._mc.x+(a-this._mc.x/this.scrollFactorX)},b.TilemapLayer.prototype._unfixX=function(a){return 1===this.scrollFactorX?a:this._mc.x/this.scrollFactorX+(a-this._mc.x)},b.TilemapLayer.prototype._fixY=function(a){return 0>a&&(a=0),1===this.scrollFactorY?a:this._mc.y+(a-this._mc.y/this.scrollFactorY)},b.TilemapLayer.prototype._unfixY=function(a){return 1===this.scrollFactorY?a:this._mc.y/this.scrollFactorY+(a-this._mc.y)},b.TilemapLayer.prototype.getTileX=function(a){return this.game.math.snapToFloor(this._fixX(a),this.map.tileWidth)/this.map.tileWidth},b.TilemapLayer.prototype.getTileY=function(a){return this.game.math.snapToFloor(this._fixY(a),this.map.tileHeight)/this.map.tileHeight},b.TilemapLayer.prototype.getTileXY=function(a,b,c){return c.x=this.getTileX(a),c.y=this.getTileY(b),c},b.TilemapLayer.prototype.getRayCastTiles=function(a,b,c,d){("undefined"==typeof b||null===b)&&(b=this.rayStepRate),"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1);var e=this.getTiles(a.x,a.y,a.width,a.height,c,d);if(0===e.length)return[];for(var f=a.coordinatesOnLine(b),g=f.length,h=[],i=0;ij;j++)if(e[i].containsPoint(f[j][0],f[j][1])){h.push(e[i]);break}return h},b.TilemapLayer.prototype.getTiles=function(a,b,c,d,e,f){"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=!1),a=this._fixX(a),b=this._fixY(b),c>this.layer.widthInPixels&&(c=this.layer.widthInPixels),d>this.layer.heightInPixels&&(d=this.layer.heightInPixels),this._mc.tx=this.game.math.snapToFloor(a,this._mc.cw)/this._mc.cw,this._mc.ty=this.game.math.snapToFloor(b,this._mc.ch)/this._mc.ch,this._mc.tw=(this.game.math.snapToCeil(c,this._mc.cw)+this._mc.cw)/this._mc.cw,this._mc.th=(this.game.math.snapToCeil(d,this._mc.ch)+this._mc.ch)/this._mc.ch,this._results.length=0;for(var g=this._mc.ty;gthis.layer.width&&(this._mc.maxX=this.layer.width),this._mc.maxY>this.layer.height&&(this._mc.maxY=this.layer.height)),this.dirty=!0},b.TilemapLayer.prototype.render=function(){if(this.layer.dirty&&(this.dirty=!0),this.dirty&&this.visible){this._mc.prevX=this._mc.dx,this._mc.prevY=this._mc.dy,this._mc.dx=-(this._mc.x-this._mc.startX*this.map.tileWidth),this._mc.dy=-(this._mc.y-this._mc.startY*this.map.tileHeight),this._mc.tx=this._mc.dx,this._mc.ty=this._mc.dy,this.context.clearRect(0,0,this.canvas.width,this.canvas.height),this.context.fillStyle=this.tileColor;var a,c;this.debug&&(this.context.globalAlpha=this.debugAlpha);for(var d=this._mc.startY,e=this._mc.startY+this._mc.maxY;e>d;d++){this._column=this.layer.data[d];for(var f=this._mc.startX,g=this._mc.startX+this._mc.maxX;g>f;f++)this._column[f]&&(a=this._column[f],a.index>-1&&(c=this.map.tilesets[this.map.tiles[a.index][2]],this.debug===!1&&a.alpha!==this.context.globalAlpha&&(this.context.globalAlpha=a.alpha),c.draw(this.context,Math.floor(this._mc.tx),Math.floor(this._mc.ty),a.index),a.debug&&(this.context.fillStyle="rgba(0, 255, 0, 0.4)",this.context.fillRect(Math.floor(this._mc.tx),Math.floor(this._mc.ty),this.map.tileWidth,this.map.tileHeight)))),this._mc.tx+=this.map.tileWidth;this._mc.tx=this._mc.dx,this._mc.ty+=this.map.tileHeight}return this.debug&&(this.context.globalAlpha=1,this.renderDebug()),this.game.renderType===b.WEBGL&&PIXI.updateWebGLTexture(this.baseTexture,this.game.renderer.gl),this.dirty=!1,this.layer.dirty=!1,!0}},b.TilemapLayer.prototype.renderDebug=function(){this._mc.tx=this._mc.dx,this._mc.ty=this._mc.dy,this.context.strokeStyle=this.debugColor,this.context.fillStyle=this.debugFillColor;for(var a=this._mc.startY,b=this._mc.startY+this._mc.maxY;b>a;a++){this._column=this.layer.data[a];for(var c=this._mc.startX,d=this._mc.startX+this._mc.maxX;d>c;c++){var e=this._column[c];e&&(e.faceTop||e.faceBottom||e.faceLeft||e.faceRight)&&(this._mc.tx=Math.floor(this._mc.tx),this.debugFill&&this.context.fillRect(this._mc.tx,this._mc.ty,this._mc.cw,this._mc.ch),this.context.beginPath(),e.faceTop&&(this.context.moveTo(this._mc.tx,this._mc.ty),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty)),e.faceBottom&&(this.context.moveTo(this._mc.tx,this._mc.ty+this._mc.ch),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty+this._mc.ch)),e.faceLeft&&(this.context.moveTo(this._mc.tx,this._mc.ty),this.context.lineTo(this._mc.tx,this._mc.ty+this._mc.ch)),e.faceRight&&(this.context.moveTo(this._mc.tx+this._mc.cw,this._mc.ty),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty+this._mc.ch)),this.context.stroke()),this._mc.tx+=this.map.tileWidth}this._mc.tx=this._mc.dx,this._mc.ty+=this.map.tileHeight}},Object.defineProperty(b.TilemapLayer.prototype,"scrollX",{get:function(){return this._mc.x},set:function(a){a!==this._mc.x&&a>=0&&this.layer.widthInPixels>this.width&&(this._mc.x=a,this._mc.x>this.layer.widthInPixels-this.width&&(this._mc.x=this.layer.widthInPixels-this.width),this._mc.startX=this.game.math.floor(this._mc.x/this.map.tileWidth),this._mc.startX<0&&(this._mc.startX=0),this._mc.startX+this._mc.maxX>this.layer.width&&(this._mc.startX=this.layer.width-this._mc.maxX),this.dirty=!0)}}),Object.defineProperty(b.TilemapLayer.prototype,"scrollY",{get:function(){return this._mc.y},set:function(a){a!==this._mc.y&&a>=0&&this.layer.heightInPixels>this.height&&(this._mc.y=a,this._mc.y>this.layer.heightInPixels-this.height&&(this._mc.y=this.layer.heightInPixels-this.height),this._mc.startY=this.game.math.floor(this._mc.y/this.map.tileHeight),this._mc.startY<0&&(this._mc.startY=0),this._mc.startY+this._mc.maxY>this.layer.height&&(this._mc.startY=this.layer.height-this._mc.maxY),this.dirty=!0)}}),Object.defineProperty(b.TilemapLayer.prototype,"collisionWidth",{get:function(){return this._mc.cw},set:function(a){this._mc.cw=a,this.dirty=!0}}),Object.defineProperty(b.TilemapLayer.prototype,"collisionHeight",{get:function(){return this._mc.ch},set:function(a){this._mc.ch=a,this.dirty=!0}}),b.TilemapParser={parse:function(a,c,d,e,f,g){if("undefined"==typeof d&&(d=32),"undefined"==typeof e&&(e=32),"undefined"==typeof f&&(f=10),"undefined"==typeof g&&(g=10),"undefined"==typeof c)return this.getEmptyData();if(null===c)return this.getEmptyData(d,e,f,g);var h=a.cache.getTilemapData(c);if(h){if(h.format===b.Tilemap.CSV)return this.parseCSV(c,h.data,d,e);if(!h.format||h.format===b.Tilemap.TILED_JSON)return this.parseTiledJSON(h.data)}else console.warn("Phaser.TilemapParser.parse - No map data found for key "+c)},parseCSV:function(a,c,d,e){var f=this.getEmptyData();c=c.trim();for(var g=[],h=c.split("\n"),i=h.length,j=0,k=0;kj;j++)h.push(a.layers[e].data[j]>0?new b.Tile(f,a.layers[e].data[j],g,i.length,a.tilewidth,a.tileheight):new b.Tile(f,-1,g,i.length,a.tilewidth,a.tileheight)),g++,g===a.layers[e].width&&(i.push(h),g=0,h=[]);f.data=i,d.push(f)}c.layers=d;for(var l=[],e=0;es;s++)if(a.layers[e].objects[s].gid){var t={gid:a.layers[e].objects[s].gid,name:a.layers[e].objects[s].name,x:a.layers[e].objects[s].x,y:a.layers[e].objects[s].y,visible:a.layers[e].objects[s].visible,properties:a.layers[e].objects[s].properties};q[a.layers[e].name].push(t)}else if(a.layers[e].objects[s].polyline){var t={name:a.layers[e].objects[s].name,x:a.layers[e].objects[s].x,y:a.layers[e].objects[s].y,width:a.layers[e].objects[s].width,height:a.layers[e].objects[s].height,visible:a.layers[e].objects[s].visible,properties:a.layers[e].objects[s].properties};t.polyline=[];for(var u=0;u=c)&&(c=32),("undefined"==typeof d||0>=d)&&(d=32),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=0),this.name=a,this.firstgid=b,this.tileWidth=c,this.tileHeight=d,this.tileMargin=e,this.tileSpacing=f,this.properties=g,this.image=null,this.rows=0,this.columns=0,this.total=0,this.drawCoords=[]},b.Tileset.prototype={draw:function(a,b,c,d){this.image&&this.drawCoords[d]&&a.drawImage(this.image,this.drawCoords[d][0],this.drawCoords[d][1],this.tileWidth,this.tileHeight,b,c,this.tileWidth,this.tileHeight)},setImage:function(a){this.image=a,this.rows=Math.round((a.height-this.tileMargin)/(this.tileHeight+this.tileSpacing)),this.columns=Math.round((a.width-this.tileMargin)/(this.tileWidth+this.tileSpacing)),this.total=this.rows*this.columns,this.drawCoords.length=0;for(var b=this.tileMargin,c=this.tileMargin,d=this.firstgid,e=0;e', - DEV_VERSION: '2.0.4', + VERSION: '2.0.4', GAMES: [], AUTO: 0, @@ -441,6 +440,61 @@ if (!Array.prototype.forEach) } }; } + +/** +* Low-budget Float32Array knock-off, suitable for use with P2.js in IE9 +* Source: http://www.html5gamedevs.com/topic/5988-phaser-12-ie9/ +* Cameron Foale (http://www.kibibu.com) +*/ +if (typeof window.Uint32Array !== "function") +{ + var CheapArray = function(type) + { + var proto = new Array(); // jshint ignore:line + + window[type] = function(arg) { + + if (typeof(arg) === "number") + { + Array.call(this, arg); + this.length = arg; + + for (var i = 0; i < this.length; i++) + { + this[i] = 0; + } + } + else + { + Array.call(this, arg.length); + + this.length = arg.length; + + for (var i = 0; i < this.length; i++) + { + this[i] = arg[i]; + } + } + }; + + window[type].prototype = proto; + window[type].constructor = window[type]; + }; + + CheapArray('Uint32Array'); // jshint ignore:line + CheapArray('Int16Array'); // jshint ignore:line +} + +/** + * Also fix for the absent console in IE9 + */ +if (!window.console) +{ + window.console = {}; + window.console.log = window.console.assert = function(){}; + window.console.warn = window.console.assert = function(){}; +} + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -566,7 +620,7 @@ Phaser.Circle.prototype = { if (round) { - return Phaser.Math.distanceRound(this.x, this.y, dest.x, dest.y); + return Phaser.Math.distanceRounded(this.x, this.y, dest.x, dest.y); } else { @@ -985,12 +1039,21 @@ PIXI.Circle = Phaser.Circle; */ /** -* Creates a new Point. If you pass no parameters a Point is created set to (0,0). * @class Phaser.Point -* @classdesc The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. +* @classdesc +* The Point object represents a location in a two-dimensional coordinate system, +* where x represents the horizontal axis and y represents the vertical axis. +* The following code creates a point at (0,0): +* `var myPoint = new Phaser.Point();` +* You can also use them as 2D Vectors and you'll find different vector related methods in this class. +*/ + +/** +* Creates a new Point object. If you pass no parameters a Point is created set to (0, 0). +* * @constructor -* @param {number} x The horizontal position of this Point (default 0) -* @param {number} y The vertical position of this Point (default 0) +* @param {number} [x=0] - The horizontal position of this Point. +* @param {number} [y=0] - The vertical position of this Point. */ Phaser.Point = function (x, y) { @@ -998,12 +1061,12 @@ Phaser.Point = function (x, y) { y = y || 0; /** - * @property {number} x - The x coordinate of the point. + * @property {number} x - The x value of the point. */ this.x = x; /** - * @property {number} y - The y coordinate of the point. + * @property {number} y - The y value of the point. */ this.y = y; @@ -1013,29 +1076,38 @@ Phaser.Point.prototype = { /** * Copies the x and y properties from any given object to this Point. + * * @method Phaser.Point#copyFrom * @param {any} source - The object to copy from. - * @return {Point} This Point object. + * @return {Phaser.Point} This Point object. */ copyFrom: function (source) { + return this.setTo(source.x, source.y); + }, /** * Inverts the x and y values of this Point + * * @method Phaser.Point#invert - * @return {Point} This Point object. + * @return {Phaser.Point} This Point object. */ invert: function () { + return this.setTo(this.y, this.x); + }, /** - * Sets the x and y values of this Point object to the given coordinates. + * Sets the `x` and `y` values of this Point object to the given values. + * If you omit the `y` value then the `x` value will be applied to both, for example: + * `Point.setTo(2)` is the same as `Point.setTo(2, 2)` + * * @method Phaser.Point#setTo - * @param {number} x - The horizontal position of this point. - * @param {number} y - The vertical position of this point. - * @return {Point} This Point object. Useful for chaining method calls. + * @param {number} x - The horizontal value of this point. + * @param {number} [y] - The vertical value of this point. If not given the x value will be used in its place. + * @return {Phaser.Point} This Point object. Useful for chaining method calls. */ setTo: function (x, y) { @@ -1047,11 +1119,14 @@ Phaser.Point.prototype = { }, /** - * Sets the x and y values of this Point object to the given coordinates. + * Sets the `x` and `y` values of this Point object to the given values. + * If you omit the `y` value then the `x` value will be applied to both, for example: + * `Point.setTo(2)` is the same as `Point.setTo(2, 2)` + * * @method Phaser.Point#set - * @param {number} x - The horizontal position of this point. - * @param {number} y - The vertical position of this point. - * @return {Point} This Point object. Useful for chaining method calls. + * @param {number} x - The horizontal value of this point. + * @param {number} [y] - The vertical value of this point. If not given the x value will be used in its place. + * @return {Phaser.Point} This Point object. Useful for chaining method calls. */ set: function (x, y) { @@ -1064,6 +1139,7 @@ Phaser.Point.prototype = { /** * Adds the given x and y values to this Point. + * * @method Phaser.Point#add * @param {number} x - The value to add to Point.x. * @param {number} y - The value to add to Point.y. @@ -1079,6 +1155,7 @@ Phaser.Point.prototype = { /** * Subtracts the given x and y values from this Point. + * * @method Phaser.Point#subtract * @param {number} x - The value to subtract from Point.x. * @param {number} y - The value to subtract from Point.y. @@ -1093,7 +1170,8 @@ Phaser.Point.prototype = { }, /** - * Multiplies Point.x and Point.y by the given x and y values. + * Multiplies Point.x and Point.y by the given x and y values. Sometimes known as `Scale`. + * * @method Phaser.Point#multiply * @param {number} x - The value to multiply Point.x by. * @param {number} y - The value to multiply Point.x by. @@ -1109,6 +1187,7 @@ Phaser.Point.prototype = { /** * Divides Point.x and Point.y by the given x and y values. + * * @method Phaser.Point#divide * @param {number} x - The value to divide Point.x by. * @param {number} y - The value to divide Point.x by. @@ -1124,6 +1203,7 @@ Phaser.Point.prototype = { /** * Clamps the x value of this Point to be between the given min and max. + * * @method Phaser.Point#clampX * @param {number} min - The minimum value to clamp this Point to. * @param {number} max - The maximum value to clamp this Point to. @@ -1138,6 +1218,7 @@ Phaser.Point.prototype = { /** * Clamps the y value of this Point to be between the given min and max + * * @method Phaser.Point#clampY * @param {number} min - The minimum value to clamp this Point to. * @param {number} max - The maximum value to clamp this Point to. @@ -1152,6 +1233,7 @@ Phaser.Point.prototype = { /** * Clamps this Point object values to be between the given min and max. + * * @method Phaser.Point#clamp * @param {number} min - The minimum value to clamp this Point to. * @param {number} max - The maximum value to clamp this Point to. @@ -1167,6 +1249,7 @@ Phaser.Point.prototype = { /** * Creates a copy of the given Point. + * * @method Phaser.Point#clone * @param {Phaser.Point} [output] Optional Point object. If given the values will be set into this object, otherwise a brand new Point object will be created and returned. * @return {Phaser.Point} The new Point object. @@ -1188,11 +1271,12 @@ Phaser.Point.prototype = { /** * Copies the x and y properties from this Point to any given object. + * * @method Phaser.Point#copyTo * @param {any} dest - The object to copy to. * @return {Object} The dest object. */ - copyTo: function(dest) { + copyTo: function (dest) { dest.x = this.x; dest.y = this.y; @@ -1203,66 +1287,121 @@ Phaser.Point.prototype = { /** * Returns the distance of this Point object to the given object (can be a Circle, Point or anything with x/y properties) + * * @method Phaser.Point#distance * @param {object} dest - The target object. Must have visible x and y properties that represent the center of the object. * @param {boolean} [round] - Round the distance to the nearest integer (default false). * @return {number} The distance between this Point object and the destination Point object. */ distance: function (dest, round) { + return Phaser.Point.distance(this, dest, round); + }, /** * Determines whether the given objects x/y values are equal to this Point object. + * * @method Phaser.Point#equals - * @param {Phaser.Point} a - The first object to compare. - * @return {boolean} A value of true if the Points are equal, otherwise false. + * @param {Phaser.Point|any} a - The object to compare with this Point. + * @return {boolean} A value of true if the x and y points are equal, otherwise false. */ equals: function (a) { - return (a.x == this.x && a.y == this.y); + + return (a.x === this.x && a.y === this.y); + + }, + + /** + * Returns the angle between this Point object and another object with public x and y properties. + * + * @method Phaser.Point#angle + * @param {Phaser.Point|any} a - The object to get the angle from this Point to. + * @return {number} The angle between the two objects. + */ + angle: function (a) { + + return Math.atan2(this.x * a.y - this.y * a.x, this.x * a.x + this.y * a.y); + + }, + + /** + * Returns the angle squared between this Point object and another object with public x and y properties. + * + * @method Phaser.Point#angleSq + * @param {Phaser.Point|any} a - The object to get the angleSq from this Point to. + * @return {number} The angleSq between the two objects. + */ + angleSq: function (a) { + + return this.subtract(a).angle(a.subtract(this)); + }, /** * Rotates this Point around the x/y coordinates given to the desired angle. + * * @method Phaser.Point#rotate - * @param {number} x - The x coordinate of the anchor point - * @param {number} y - The y coordinate of the anchor point + * @param {number} x - The x coordinate of the anchor point. + * @param {number} y - The y coordinate of the anchor point. * @param {number} angle - The angle in radians (unless asDegrees is true) to rotate the Point to. * @param {boolean} asDegrees - Is the given rotation in radians (false) or degrees (true)? * @param {number} [distance] - An optional distance constraint between the Point and the anchor. * @return {Phaser.Point} The modified point object. */ rotate: function (x, y, angle, asDegrees, distance) { + return Phaser.Point.rotate(this, x, y, angle, asDegrees, distance); + }, /** - * Calculates the length of the vector + * Calculates the length of the Point object. + * * @method Phaser.Point#getMagnitude - * @return {number} the length of the vector + * @return {number} The length of the Point. */ - getMagnitude: function() { + getMagnitude: function () { + return Math.sqrt((this.x * this.x) + (this.y * this.y)); + }, /** - * Alters the length of the vector without changing the direction + * Calculates the length squared of the Point object. + * + * @method Phaser.Point#getMagnitudeSq + * @return {number} The length ^ 2 of the Point. + */ + getMagnitudeSq: function () { + + return (this.x * this.x) + (this.y * this.y); + + }, + + /** + * Alters the length of the Point without changing the direction. + * * @method Phaser.Point#setMagnitude - * @param {number} magnitude the desired magnitude of the resulting vector - * @return {Phaser.Point} the modified original vector + * @param {number} magnitude - The desired magnitude of the resulting Point. + * @return {Phaser.Point} This Point object. */ - setMagnitude: function(magnitude) { + setMagnitude: function (magnitude) { + return this.normalize().multiply(magnitude, magnitude); + }, /** - * Alters the vector so that its length is 1, but it retains the same direction + * Alters the Point object so that its length is 1, but it retains the same direction. + * * @method Phaser.Point#normalize - * @return {Phaser.Point} the modified original vector + * @return {Phaser.Point} This Point object. */ - normalize: function() { + normalize: function () { - if(!this.isZero()) { + if (!this.isZero()) + { var m = this.getMagnitude(); this.x /= m; this.y /= m; @@ -1273,21 +1412,89 @@ Phaser.Point.prototype = { }, /** - * Determine if this point is at 0,0 + * Determine if this point is at 0,0. + * * @method Phaser.Point#isZero - * @return {boolean} True if this Point is 0,0, otherwise false + * @return {boolean} True if this Point is 0,0, otherwise false. */ - isZero: function() { + isZero: function () { + return (this.x === 0 && this.y === 0); + + }, + + /** + * The dot product of this and another Point object. + * + * @method Phaser.Point#dot + * @param {Phaser.Point} a - The Point object to get the dot product combined with this Point. + * @return {number} The result. + */ + dot: function (a) { + + return ((this.x * a.x) + (this.y * a.y)); + + }, + + /** + * The cross product of this and another Point object. + * + * @method Phaser.Point#cross + * @param {Phaser.Point} a - The Point object to get the cross product combined with this Point. + * @return {number} The result. + */ + cross: function (a) { + + return ((this.x * a.y) - (this.y * a.x)); + + }, + + /** + * Make this Point perpendicular (90 degrees rotation) + * + * @method Phaser.Point#perp + * @return {Phaser.Point} This Point object. + */ + perp: function () { + + return this.setTo(-this.y, this.x); + + }, + + /** + * Make this Point perpendicular (-90 degrees rotation) + * + * @method Phaser.Point#rperp + * @return {Phaser.Point} This Point object. + */ + rperp: function () { + + return this.setTo(this.y, -this.x); + + }, + + /** + * Right-hand normalize (make unit length) this Point. + * + * @method Phaser.Point#normalRightHand + * @return {Phaser.Point} This Point object. + */ + normalRightHand: function () { + + return this.setTo(this.y * -1, this.x); + }, /** * Returns a string representation of this object. + * * @method Phaser.Point#toString * @return {string} A string representation of the instance. */ toString: function () { + return '[{Point (x=' + this.x + ' y=' + this.y + ')}]'; + } }; @@ -1296,6 +1503,7 @@ Phaser.Point.prototype.constructor = Phaser.Point; /** * Adds the coordinates of two points together to create a new point. +* * @method Phaser.Point.add * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. @@ -1315,6 +1523,7 @@ Phaser.Point.add = function (a, b, out) { /** * Subtracts the coordinates of two points to create a new point. +* * @method Phaser.Point.subtract * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. @@ -1334,6 +1543,7 @@ Phaser.Point.subtract = function (a, b, out) { /** * Multiplies the coordinates of two points to create a new point. +* * @method Phaser.Point.multiply * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. @@ -1353,6 +1563,7 @@ Phaser.Point.multiply = function (a, b, out) { /** * Divides the coordinates of two points to create a new point. +* * @method Phaser.Point.divide * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. @@ -1372,17 +1583,133 @@ Phaser.Point.divide = function (a, b, out) { /** * Determines whether the two given Point objects are equal. They are considered equal if they have the same x and y values. +* * @method Phaser.Point.equals * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. * @return {boolean} A value of true if the Points are equal, otherwise false. */ Phaser.Point.equals = function (a, b) { - return (a.x == b.x && a.y == b.y); + + return (a.x === b.x && a.y === b.y); + +}; + +/** +* Returns the angle between two Point objects. +* +* @method Phaser.Point.angle +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @return {number} The angle between the two Points. +*/ +Phaser.Point.angle = function (a, b) { + + return Math.atan2(a.x * b.y - a.y * b.x, a.x * b.x + a.y * b.y); + +}; + +/** +* Returns the angle squared between two Point objects. +* +* @method Phaser.Point.angleSq +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @return {number} The angle squared between the two Points. +*/ +Phaser.Point.angleSq = function (a, b) { + + return a.subtract(b).angle(b.subtract(a)); + +}; + +/** +* Creates a negative Point. +* +* @method Phaser.Point.negative +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.negative = function (a, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(-a.x, -a.y); + +}; + +/** +* Adds two 2D Points together and multiplies the result by the given scalar. +* +* @method Phaser.Point.multiplyAdd +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @param {number} s - The scaling value. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.multiplyAdd = function (a, b, s, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(a.x + b.x * s, a.y + b.y * s); + +}; + +/** +* Interpolates the two given Points, based on the `f` value (between 0 and 1) and returns a new Point. +* +* @method Phaser.Point.interpolate +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @param {number} f - The level of interpolation between the two points. Indicates where the new point will be, along the line between pt1 and pt2. If f=1, pt1 is returned; if f=0, pt2 is returned. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.interpolate = function (a, b, f, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(a.x + (b.x - a.x) * f, a.y + (b.y - a.y) * f); + +}; + +/** +* Return a perpendicular vector (90 degrees rotation) +* +* @method Phaser.Point.perp +* @param {Phaser.Point} a - The Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.perp = function (a, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(-a.y, a.x); + +}; + +/** +* Return a perpendicular vector (-90 degrees rotation) +* +* @method Phaser.Point.rperp +* @param {Phaser.Point} a - The Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.rperp = function (a, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(a.y, -a.x); + }; /** * Returns the distance of this Point object to the given object (can be a Circle, Point or anything with x/y properties). +* * @method Phaser.Point.distance * @param {object} a - The target object. Must have visible x and y properties that represent the center of the object. * @param {object} b - The target object. Must have visible x and y properties that represent the center of the object. @@ -1395,7 +1722,7 @@ Phaser.Point.distance = function (a, b, round) { if (round) { - return Phaser.Math.distanceRound(a.x, a.y, b.x, b.y); + return Phaser.Math.distanceRounded(a.x, a.y, b.x, b.y); } else { @@ -1404,15 +1731,103 @@ Phaser.Point.distance = function (a, b, round) { }; +/** +* Project two Points onto another Point. +* +* @method Phaser.Point.project +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.project = function (a, b, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + var amt = a.dot(b) / b.getMagnitudeSq(); + + if (amt !== 0) + { + out.setTo(amt * b.x, amt * b.y); + } + + return out; + +}; + +/** +* Project two Points onto a Point of unit length. +* +* @method Phaser.Point.projectUnit +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.projectUnit = function (a, b, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + var amt = a.dot(b); + + if (amt !== 0) + { + out.setTo(amt * b.x, amt * b.y); + } + + return out; + +}; + +/** +* Right-hand normalize (make unit length) a Point. +* +* @method Phaser.Point.normalRightHand +* @param {Phaser.Point} a - The Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.normalRightHand = function (a, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(a.y * -1, a.x); + +}; + +/** +* Normalize (make unit length) a Point. +* +* @method Phaser.Point.normalize +* @param {Phaser.Point} a - The Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.normalize = function (a, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + var m = a.getMagnitude(); + + if (m !== 0) + { + out.setTo(a.x / m, a.y / m); + } + + return out; + +}; + /** * Rotates a Point around the x/y coordinates given to the desired angle. +* * @method Phaser.Point.rotate * @param {Phaser.Point} a - The Point object to rotate. * @param {number} x - The x coordinate of the anchor point * @param {number} y - The y coordinate of the anchor point * @param {number} angle - The angle in radians (unless asDegrees is true) to rotate the Point to. -* @param {boolean} asDegrees - Is the given rotation in radians (false) or degrees (true)? -* @param {number} distance - An optional distance constraint between the Point and the anchor. +* @param {boolean} [asDegrees=false] - Is the given rotation in radians (false) or degrees (true)? +* @param {number} [distance] - An optional distance constraint between the Point and the anchor. * @return {Phaser.Point} The modified point object. */ Phaser.Point.rotate = function (a, x, y, angle, asDegrees, distance) { @@ -1437,6 +1852,7 @@ Phaser.Point.rotate = function (a, x, y, angle, asDegrees, distance) { /** * Calculates centroid (or midpoint) from an array of points. If only one point is provided, that point is returned. +* * @method Phaser.Point.centroid * @param {Phaser.Point[]} points - The array of one or more points. * @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. @@ -3074,7 +3490,7 @@ Phaser.Polygon.prototype = { if (intersect) { - inside = true; + inside = !inside; } } @@ -3258,6 +3674,17 @@ Phaser.Camera.prototype = { }, + /** + * Sets the Camera follow target to null, stopping it from following an object if it's doing so. + * + * @method Phaser.Camera#unfollow + */ + unfollow: function () { + + this.target = null; + + }, + /** * Move the camera focus on a display object instantly. * @method Phaser.Camera#focusOn @@ -3542,87 +3969,87 @@ Object.defineProperty(Phaser.Camera.prototype, "height", { Phaser.State = function () { /** - * @property {Phaser.Game} game - A reference to the currently running Game. + * @property {Phaser.Game} game - This is a reference to the currently running Game. */ this.game = null; /** - * @property {Phaser.GameObjectFactory} add - Reference to the GameObjectFactory. + * @property {Phaser.GameObjectFactory} add - A reference to the GameObjectFactory which can be used to add new objects to the World. */ this.add = null; /** - * @property {Phaser.GameObjectCreator} make - Reference to the GameObjectCreator. + * @property {Phaser.GameObjectCreator} make - A reference to the GameObjectCreator which can be used to make new objects. */ this.make = null; /** - * @property {Phaser.Camera} camera - A handy reference to world.camera. + * @property {Phaser.Camera} camera - A handy reference to World.camera. */ this.camera = null; /** - * @property {Phaser.Cache} cache - Reference to the assets cache. + * @property {Phaser.Cache} cache - A reference to the game cache which contains any loaded or generated assets, such as images, sound and more. */ this.cache = null; /** - * @property {Phaser.Input} input - Reference to the input manager + * @property {Phaser.Input} input - A reference to the Input Manager. */ this.input = null; /** - * @property {Phaser.Loader} load - Reference to the assets loader. + * @property {Phaser.Loader} load - A reference to the Loader, which you mostly use in the preload method of your state to load external assets. */ this.load = null; /** - * @property {Phaser.Math} math - Reference to the math helper. + * @property {Phaser.Math} math - A reference to Math class with lots of helpful functions. */ this.math = null; /** - * @property {Phaser.SoundManager} sound - Reference to the sound manager. + * @property {Phaser.SoundManager} sound - A reference to the Sound Manager which can create, play and stop sounds, as well as adjust global volume. */ this.sound = null; /** - * @property {Phaser.ScaleManager} scale - Reference to the game scale manager. + * @property {Phaser.ScaleManager} scale - A reference to the Scale Manager which controls the way the game scales on different displays. */ this.scale = null; /** - * @property {Phaser.Stage} stage - Reference to the stage. + * @property {Phaser.Stage} stage - A reference to the Stage. */ this.stage = null; /** - * @property {Phaser.Time} time - Reference to the core game clock. + * @property {Phaser.Time} time - A reference to the game clock and timed events system. */ this.time = null; /** - * @property {Phaser.TweenManager} tweens - Reference to the tween manager. + * @property {Phaser.TweenManager} tweens - A reference to the tween manager. */ this.tweens = null; /** - * @property {Phaser.World} world - Reference to the world. + * @property {Phaser.World} world - A reference to the game world. All objects live in the Game World and its size is not bound by the display resolution. */ this.world = null; /** - * @property {Phaser.Particles} particles - The Particle Manager for the game. It is called during the game update loop and in turn updates any Emitters attached to it. + * @property {Phaser.Particles} particles - The Particle Manager. It is called during the core gameloop and updates any Particle Emitters it has created. */ this.particles = null; /** - * @property {Phaser.Physics} physics - Reference to the physics manager. + * @property {Phaser.Physics} physics - A reference to the physics manager which looks after the different physics systems available within Phaser. */ this.physics = null; /** - * @property {Phaser.RandomDataGenerator} rnd - Reference to the random data generator. + * @property {Phaser.RandomDataGenerator} rnd - A reference to the seeded and repeatable random data generator. */ this.rnd = null; @@ -3631,8 +4058,9 @@ Phaser.State = function () { Phaser.State.prototype = { /** - * Override this method to add some load operations. - * If you need to use the loader, you may need to use them here. + * preload is called first. Normally you'd use this to load your game assets (or those needed for the current State) + * You shouldn't create any objects in this method that require assets that you're also loading in this method, as + * they won't yet be available. * * @method Phaser.State#preload */ @@ -3640,7 +4068,7 @@ Phaser.State.prototype = { }, /** - * Put update logic here. + * loadUpdate is called during the Loader process. This only happens if you've set one or more assets to load in the preload method. * * @method Phaser.State#loadUpdate */ @@ -3648,7 +4076,8 @@ Phaser.State.prototype = { }, /** - * Put render operations here. + * loadRender is called during the Loader process. This only happens if you've set one or more assets to load in the preload method. + * The difference between loadRender and render is that any objects you render in this method you must be sure their assets exist. * * @method Phaser.State#loadRender */ @@ -3656,8 +4085,8 @@ Phaser.State.prototype = { }, /** - * This method is called after the game engine successfully switches states. - * Feel free to add any setup code here (do not load anything here, override preload() instead). + * create is called once preload has completed, this includes the loading of any assets from the Loader. + * If you don't have a preload method then create is the first method called in your State. * * @method Phaser.State#create */ @@ -3665,7 +4094,9 @@ Phaser.State.prototype = { }, /** - * Put update logic here. + * The update method is left empty for your own use. + * It is called during the core game loop AFTER debug, physics, plugins and the Stage have had their preUpdate methods called. + * If is called BEFORE Stage, Tweens, Sounds, Input, Physics, Particles and Plugins have had their postUpdate methods called. * * @method Phaser.State#update */ @@ -3673,7 +4104,9 @@ Phaser.State.prototype = { }, /** - * Put render operations here. + * Nearly all display objects in Phaser render automatically, you don't need to tell them to render. + * However the render method is called AFTER the game renderer and plugins have rendered, so you're able to do any + * final post-processing style effects here. Note that this happens before plugins postRender takes place. * * @method Phaser.State#render */ @@ -3681,7 +4114,7 @@ Phaser.State.prototype = { }, /** - * This method will be called when game paused. + * This method will be called if the core game loop is paused. * * @method Phaser.State#paused */ @@ -3689,7 +4122,16 @@ Phaser.State.prototype = { }, /** - * This method will be called when the state is shut down (i.e. you switch to another state from this one). + * pauseUpdate is called while the game is paused instead of preUpdate, update and postUpdate. + * + * @method Phaser.State#pauseUpdate + */ + pauseUpdate: function () { + }, + + /** + * This method will be called when the State is shutdown (i.e. you switch to another state from this one). + * * @method Phaser.State#shutdown */ shutdown: function () { @@ -3808,15 +4250,20 @@ Phaser.StateManager = function (game, pendingState) { this.onLoadRenderCallback = null; /** - * @property {function} onPausedCallback - This will be called when the state is paused. + * @property {function} onPausedCallback - This will be called once each time the game is paused. */ this.onPausedCallback = null; /** - * @property {function} onResumedCallback - This will be called when the state is resumed from a paused state. + * @property {function} onResumedCallback - This will be called once each time the game is resumed from a paused state. */ this.onResumedCallback = null; + /** + * @property {function} onPauseUpdateCallback - This will be called every frame while the game is paused. + */ + this.onPauseUpdateCallback = null; + /** * @property {function} onShutDownCallback - This will be called when the state is shut down (i.e. swapped to another state). */ @@ -3922,7 +4369,7 @@ Phaser.StateManager.prototype = { this.onRenderCallback = null; this.onPausedCallback = null; this.onResumedCallback = null; - this.onDestroyCallback = null; + this.onPauseUpdateCallback = null; } delete this.states[key]; @@ -4094,6 +4541,7 @@ Phaser.StateManager.prototype = { /** * Links game properties to the State given by the key. + * * @method Phaser.StateManager#link * @param {string} key - State key. * @protected @@ -4123,6 +4571,7 @@ Phaser.StateManager.prototype = { /** * Sets the current State. Should not be called directly (use StateManager.start) + * * @method Phaser.StateManager#setCurrentState * @param {string} key - State key. * @private @@ -4145,6 +4594,7 @@ Phaser.StateManager.prototype = { this.onRenderCallback = this.states[key]['render'] || null; this.onPausedCallback = this.states[key]['paused'] || null; this.onResumedCallback = this.states[key]['resumed'] || null; + this.onPauseUpdateCallback = this.states[key]['pauseUpdate'] || null; // Used when the state is no longer the current active state this.onShutDownCallback = this.states[key]['shutdown'] || this.dummy; @@ -4233,6 +4683,26 @@ Phaser.StateManager.prototype = { }, + /** + * @method Phaser.StateManager#pauseUpdate + * @protected + */ + pauseUpdate: function () { + + if (this._created && this.onPauseUpdateCallback) + { + this.onPauseUpdateCallback.call(this.callbackContext, this.game); + } + else + { + if (this.onLoadUpdateCallback) + { + this.onLoadUpdateCallback.call(this.callbackContext, this.game); + } + } + + }, + /** * @method Phaser.StateManager#preRender * @protected @@ -4297,7 +4767,7 @@ Phaser.StateManager.prototype = { this.onRenderCallback = null; this.onPausedCallback = null; this.onResumedCallback = null; - this.onDestroyCallback = null; + this.onPauseUpdateCallback = null; this.game = null; this.states = {}; @@ -4348,7 +4818,7 @@ Phaser.LinkedList = function () { this.last = null; /** - * @property {object} game - Number of elements in the list. + * @property {number} total - Number of elements in the list. * @default */ this.total = 0; @@ -4367,7 +4837,7 @@ Phaser.LinkedList.prototype = { add: function (child) { // If the list is empty - if (this.total === 0 && this.first == null && this.last == null) + if (this.total === 0 && this.first === null && this.last === null) { this.first = child; this.last = child; @@ -4377,7 +4847,7 @@ Phaser.LinkedList.prototype = { return child; } - // Get gets appended to the end of the list, regardless of anything, and it won't have any children of its own (non-nested list) + // Gets appended to the end of the list, regardless of anything, and it won't have any children of its own (non-nested list) this.last.next = child; child.prev = this.last; @@ -4390,6 +4860,21 @@ Phaser.LinkedList.prototype = { }, + /** + * Resets the first, last, next and previous node pointers in this list. + * + * @method Phaser.LinkedList#reset + */ + reset: function () { + + this.first = null; + this.last = null; + this.next = null; + this.prev = null; + this.total = 0; + + }, + /** * Removes the given element from this linked list if it exists. * @@ -4398,12 +4883,19 @@ Phaser.LinkedList.prototype = { */ remove: function (child) { - if (child == this.first) + if (this.total === 1) + { + this.reset(); + child.next = child.prev = null; + return; + } + + if (child === this.first) { // It was 'first', make 'first' point to first.next this.first = this.first.next; } - else if (child == this.last) + else if (child === this.last) { // It was 'last', make 'last' point to last.prev this.last = this.last.prev; @@ -4423,7 +4915,7 @@ Phaser.LinkedList.prototype = { child.next = child.prev = null; - if (this.first == null ) + if (this.first === null ) { this.last = null; } @@ -4472,6 +4964,196 @@ Phaser.LinkedList.prototype.constructor = Phaser.LinkedList; * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} */ +/** +* A set data structure. Allows items to add themselves to and remove themselves from the set. Items can only exist once in the set. +* +* @class Phaser.ArrayList +* @constructor +*/ +Phaser.ArrayList = function () { + + /** + * @property {number} total - Number of objects in the list. + * @default + */ + this.total = 0; + + /** + * @property {number} position - Current cursor position. + * @default + */ + this.position = 0; + + /** + * @property {array} list - The list. + */ + this.list = []; + +}; + +Phaser.ArrayList.prototype = { + + /** + * Adds a new element to this list. The item can only exist in the list once. + * + * @method Phaser.ArrayList#add + * @param {object} child - The element to add to this list. Can be a Phaser.Sprite or any other object you need to quickly iterate through. + * @return {object} The child that was added. + */ + add: function (child) { + + if (!this.exists(child)) + { + this.list.push(child); + this.total++; + } + + return child; + + }, + + /** + * Gets the index of the child in the list, or -1 if it isn't in the list. + * + * @method Phaser.ArrayList#getIndex + * @param {object} child - The element to get the list index for. + * @return {number} The index of the child or -1 if not found. + */ + getIndex: function (child) { + + return this.list.indexOf(child); + + }, + + /** + * Checks for the child within this list. + * + * @method Phaser.ArrayList#exists + * @param {object} child - The element to get the list index for. + * @return {boolean} True if the child is found in the list, otherwise false. + */ + exists: function (child) { + + return (this.list.indexOf(child) > -1); + + }, + + /** + * Resets the list length and drops all items in the list. + * + * @method Phaser.ArrayList#reset + */ + reset: function () { + + this.list.length = 0; + this.total = 0; + + }, + + /** + * Removes the given element from this list if it exists. + * + * @method Phaser.ArrayList#remove + * @param {object} child - The child to be removed from the list. + * @return {object} child - The child that was removed. + */ + remove: function (child) { + + var idx = this.list.indexOf(child); + + if (idx > -1) + { + this.list.splice(idx, 1); + this.total--; + return child; + } + + }, + + /** + * Calls a function on all members of this list, using the member as the context for the callback. + * The function must exist on the member. + * + * @method Phaser.ArrayList#callAll + * @param {function} callback - The function to call. + * @param {...*} parameter - Additional parameters that will be passed to the callback. + */ + callAll: function (callback) { + + var args = Array.prototype.splice.call(arguments, 1); + + var i = this.list.length; + + while (i--) + { + if (this.list[i] && this.list[i][callback]) + { + this.list[i][callback].apply(this.list[i], args); + } + } + + } + +}; + +/** +* Resets the cursor to the first item in the list and returns it. +* +* @name Phaser.ArrayList#first +* @property {object} first - The first item in the list. +*/ +Object.defineProperty(Phaser.ArrayList.prototype, "first", { + + get: function () { + + this.position = 0; + + if (this.total > 0) + { + return this.list[0]; + } + else + { + return null; + } + + } + +}); + +/** +* Gets the next item in the list and returns it, advancing the cursor. +* +* @name Phaser.ArrayList#next +* @property {object} next - Advanced the cursor and return. +*/ +Object.defineProperty(Phaser.ArrayList.prototype, "next", { + + get: function () { + + if (this.position < this.total) + { + this.position++; + + return this.list[this.position]; + } + else + { + return null; + } + + } + +}); + +Phaser.ArrayList.prototype.constructor = Phaser.ArrayList; + +/** +* @author Richard Davey +* @copyright 2014 Photon Storm Ltd. +* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} +*/ + /** * @class Phaser.Signal * @classdesc A Signal is used for object communication via a custom broadcaster instead of Events. @@ -5990,6 +6672,14 @@ Phaser.Group = function (game, parent, name, addToStage, enableBody, physicsBody */ this.exists = true; + /** + * The type of objects that will be created when you use Group.create or Group.createMultiple. Defaults to Phaser.Sprite. + * When a new object is created it is passed the following parameters to its constructor: game, x, y, key, frame. + * @property {object} classType + * @default + */ + this.classType = Phaser.Sprite; + /** * @property {Phaser.Group|Phaser.Sprite} parent - The parent of this Group. */ @@ -6187,7 +6877,7 @@ Phaser.Group.prototype.getAt = function (index) { /** * Automatically creates a new Phaser.Sprite object and adds it to the top of this Group. -* Useful if you don't need to create the Sprite instances before-hand. +* You can change Group.classType to any object and this call will create an object of that type instead, but it should extend either Sprite or Image. * * @method Phaser.Group#create * @param {number} x - The x coordinate to display the newly created Sprite at. The value is in relation to the Group.x point. @@ -6195,13 +6885,13 @@ Phaser.Group.prototype.getAt = function (index) { * @param {string} key - The Game.cache key of the image that this Sprite will use. * @param {number|string} [frame] - If the Sprite image contains multiple frames you can specify which one to use here. * @param {boolean} [exists=true] - The default exists state of the Sprite. -* @return {Phaser.Sprite} The child that was created. +* @return {Phaser.Sprite|object} The child that was created. Will be a Phaser.Sprite unless Group.classType has been changed. */ Phaser.Group.prototype.create = function (x, y, key, frame, exists) { if (typeof exists === 'undefined') { exists = true; } - var child = new Phaser.Sprite(this.game, x, y, key, frame); + var child = new this.classType(this.game, x, y, key, frame); if (this.enableBody) { @@ -6234,6 +6924,7 @@ Phaser.Group.prototype.create = function (x, y, key, frame, exists) { * Automatically creates multiple Phaser.Sprite objects and adds them to the top of this Group. * Useful if you need to quickly generate a pool of identical sprites, such as bullets. By default the sprites will be set to not exist * and will be positioned at 0, 0 (relative to the Group.x/y) +* You can change Group.classType to any object and this call will create an object of that type instead, but it should extend either Sprite or Image. * * @method Phaser.Group#createMultiple * @param {number} quantity - The number of Sprites to create. @@ -7346,7 +8037,7 @@ Phaser.Group.prototype.remove = function (child, destroy) { return false; } - if (child.events) + if (child.events && !child.destroyPhase) { child.events.onRemovedFromGroup.dispatch(child, this); } @@ -8036,7 +8727,7 @@ Phaser.ScaleManager = function (game, width, height) { this.scaleFactorInversed = new Phaser.Point(1, 1); /** - * @property {Phaser.Point} margin - If the game canvas is seto to align by adjusting the margin, the margin calculation values are stored in this Point. + * @property {Phaser.Point} margin - If the game canvas is set to align by adjusting the margin, the margin calculation values are stored in this Point. * @readonly */ this.margin = new Phaser.Point(0, 0); @@ -8244,7 +8935,7 @@ Phaser.ScaleManager.prototype = { if (typeof orientationImage !== 'undefined') { - if (orientationImage == null || this.game.cache.checkImageKey(orientationImage) === false) + if (orientationImage === null || this.game.cache.checkImageKey(orientationImage) === false) { orientationImage = '__default'; } @@ -8389,9 +9080,12 @@ Phaser.ScaleManager.prototype = { refresh: function () { // We can't do anything about the status bars in iPads, web apps or desktops - if (this.game.device.iPad === false && this.game.device.webApp === false && this.game.device.desktop === false) + if (!this.game.device.iPad && !this.game.device.webApp && !this.game.device.desktop) { - if (this.game.device.android && this.game.device.chrome === false) + // TODO - Test this + // this._startHeight = window.innerHeight; + + if (this.game.device.android && !this.game.device.chrome) { window.scrollTo(0, 1); } @@ -8401,7 +9095,7 @@ Phaser.ScaleManager.prototype = { } } - if (this._check == null && this.maxIterations > 0) + if (this._check === null && this.maxIterations > 0) { this._iterations = this.maxIterations; @@ -8422,14 +9116,14 @@ Phaser.ScaleManager.prototype = { */ setScreenSize: function (force) { - if (typeof force == 'undefined') + if (typeof force === 'undefined') { force = false; } - if (this.game.device.iPad === false && this.game.device.webApp === false && this.game.device.desktop === false) + if (!this.game.device.iPad && !this.game.device.webApp && !this.game.device.desktop) { - if (this.game.device.android && this.game.device.chrome === false) + if (this.game.device.android && !this.game.device.chrome) { window.scrollTo(0, 1); } @@ -8446,28 +9140,28 @@ Phaser.ScaleManager.prototype = { // Set minimum height of content to new window height document.documentElement['style'].minHeight = window.innerHeight + 'px'; - if (this.incorrectOrientation === true) + if (this.incorrectOrientation) { this.setMaximum(); } else if (!this.isFullScreen) { - if (this.scaleMode == Phaser.ScaleManager.EXACT_FIT) + if (this.scaleMode === Phaser.ScaleManager.EXACT_FIT) { this.setExactFit(); } - else if (this.scaleMode == Phaser.ScaleManager.SHOW_ALL) + else if (this.scaleMode === Phaser.ScaleManager.SHOW_ALL) { this.setShowAll(); } } else { - if (this.fullScreenScaleMode == Phaser.ScaleManager.EXACT_FIT) + if (this.fullScreenScaleMode === Phaser.ScaleManager.EXACT_FIT) { this.setExactFit(); } - else if (this.fullScreenScaleMode == Phaser.ScaleManager.SHOW_ALL) + else if (this.fullScreenScaleMode === Phaser.ScaleManager.SHOW_ALL) { this.setShowAll(); } @@ -8486,7 +9180,7 @@ Phaser.ScaleManager.prototype = { */ setSize: function () { - if (this.incorrectOrientation === false) + if (!this.incorrectOrientation) { if (this.maxWidth && this.width > this.maxWidth) { @@ -8516,7 +9210,7 @@ Phaser.ScaleManager.prototype = { if (this.pageAlignHorizontally) { - if (this.width < window.innerWidth && this.incorrectOrientation === false) + if (this.width < window.innerWidth && !this.incorrectOrientation) { this.margin.x = Math.round((window.innerWidth - this.width) / 2); this.game.canvas.style.marginLeft = this.margin.x + 'px'; @@ -8530,7 +9224,7 @@ Phaser.ScaleManager.prototype = { if (this.pageAlignVertically) { - if (this.height < window.innerHeight && this.incorrectOrientation === false) + if (this.height < window.innerHeight && !this.incorrectOrientation) { this.margin.y = Math.round((window.innerHeight - this.height) / 2); this.game.canvas.style.marginTop = this.margin.y + 'px'; @@ -8638,7 +9332,7 @@ Object.defineProperty(Phaser.ScaleManager.prototype, "isFullScreen", { Object.defineProperty(Phaser.ScaleManager.prototype, "isPortrait", { get: function () { - return this.orientation === 0 || this.orientation == 180; + return (this.orientation === 0 || this.orientation === 180); } }); @@ -8651,7 +9345,7 @@ Object.defineProperty(Phaser.ScaleManager.prototype, "isPortrait", { Object.defineProperty(Phaser.ScaleManager.prototype, "isLandscape", { get: function () { - return this.orientation === 90 || this.orientation === -90; + return (this.orientation === 90 || this.orientation === -90); } }); @@ -9103,6 +9797,7 @@ Phaser.Game.prototype = { this.plugins = new Phaser.PluginManager(this); this.net = new Phaser.Net(this); this.debug = new Phaser.Utils.Debug(this); + this.scratch = new Phaser.BitmapData(this, '__root', 1024, 1024); this.time.boot(); this.stage.boot(); @@ -9138,7 +9833,7 @@ Phaser.Game.prototype = { */ showDebugHeader: function () { - var v = Phaser.DEV_VERSION; + var v = Phaser.VERSION; var r = 'Canvas'; var a = 'HTML Audio'; var c = 1; @@ -9185,7 +9880,7 @@ Phaser.Game.prototype = { console.log.apply(console, args); } - else + else if (window['console']) { console.log('Phaser v' + v + ' - Renderer: ' + r + ' - Audio: ' + a + ' - http://phaser.io'); } @@ -9271,7 +9966,6 @@ Phaser.Game.prototype = { this.tweens.update(); this.sound.update(); this.input.update(); - // this.state.update(); this.physics.update(); this.particles.update(); this.plugins.update(); @@ -9281,6 +9975,8 @@ Phaser.Game.prototype = { } else { + this.state.pauseUpdate(); + // this.input.update(); this.debug.preUpdate(); } @@ -9453,7 +10149,7 @@ Object.defineProperty(Phaser.Game.prototype, "paused", { { this._paused = true; this._codePaused = true; - this.sound.mute = true; + this.sound.setMute(); this.time.gamePaused(); this.onPause.dispatch(this); } @@ -9465,7 +10161,7 @@ Object.defineProperty(Phaser.Game.prototype, "paused", { this._paused = false; this._codePaused = false; this.input.reset(); - this.sound.mute = false; + this.sound.unsetMute(); this.time.gameResumed(); this.onResume.dispatch(this); } @@ -9749,10 +10445,10 @@ Phaser.Input = function (game) { this.onHold = null; /** - * A linked list of interactive objects; the InputHandler components (belonging to Sprites) register themselves with this. - * @property {Phaser.LinkedList} interactiveItems + * A list of interactive objects. Te InputHandler components add and remove themselves from this. + * @property {Phaser.ArrayList} interactiveItems */ - this.interactiveItems = new Phaser.LinkedList(); + this.interactiveItems = new Phaser.ArrayList(); /** * @property {Phaser.Point} _localPoint - Internal cache var. @@ -10002,8 +10698,6 @@ Phaser.Input.prototype = { this.onUp = new Phaser.Signal(); this.onTap = new Phaser.Signal(); this.onHold = new Phaser.Signal(); - - this.interactiveItems.callAll('reset'); } this._pollCounter = 0; @@ -10651,7 +11345,10 @@ Phaser.Key.prototype.constructor = Phaser.Key; */ /** -* The Keyboard class handles looking after keyboard input for your game. It will recognise and respond to key presses and dispatch the required events. +* The Keyboard class handles looking after keyboard input for your game. +* It will recognise and respond to key presses and dispatch the required events. +* Please be aware that lots of keyboards are unable to process certain combinations of keys due to hardware +* limitations known as ghosting. Full details here: http://www.html5gamedevs.com/topic/4876-impossible-to-use-more-than-2-keyboard-input-buttons-at-the-same-time/ * * @class Phaser.Keyboard * @constructor @@ -12068,15 +12765,15 @@ Phaser.Pointer.prototype = { this._highestRenderObject = null; this._highestInputPriorityID = -1; - // Just run through the linked list + // Run through the list if (this.game.input.interactiveItems.total > 0) { - var currentNode = this.game.input.interactiveItems.next; + var currentNode = this.game.input.interactiveItems.first; do { // If the object is using pixelPerfect checks, or has a higher InputManager.PriorityID OR if the priority ID is the same as the current highest AND it has a higher renderOrderID, then set it to the top - if (currentNode.validForInput(this._highestInputPriorityID, this._highestRenderOrderID)) + if (currentNode && currentNode.validForInput(this._highestInputPriorityID, this._highestRenderOrderID)) { if ((!fromClick && currentNode.checkPointerOver(this)) || (fromClick && currentNode.checkPointerDown(this))) { @@ -12085,9 +12782,9 @@ Phaser.Pointer.prototype = { this._highestRenderObject = currentNode; } } - currentNode = currentNode.next; + currentNode = this.game.input.interactiveItems.next; } - while (currentNode != null); + while (currentNode !== null); } if (this._highestRenderObject === null) @@ -12206,28 +12903,10 @@ Phaser.Pointer.prototype = { this.game.input.currentPointers--; } - if (this.game.input.interactiveItems.total > 0) - { - var currentNode = this.game.input.interactiveItems.next; - - do - { - if (currentNode) - { - currentNode._releasedHandler(this); - } - - currentNode = currentNode.next; - } - while (currentNode != null); - } - - if (this.targetObject) - { - this.targetObject._releasedHandler(this); - } + this.game.input.interactiveItems.callAll('_releasedHandler', this); this.targetObject = null; + return this; }, @@ -14274,7 +14953,7 @@ Phaser.InputHandler.prototype = { start: function (priority, useHandCursor) { priority = priority || 0; - if (typeof useHandCursor == 'undefined') { useHandCursor = false; } + if (typeof useHandCursor === 'undefined') { useHandCursor = false; } // Turning on if (this.enabled === false) @@ -14415,7 +15094,7 @@ Phaser.InputHandler.prototype = { */ destroy: function () { - if (this.enabled) + if (this.sprite) { if (this._setHandCursor) { @@ -14831,10 +15510,13 @@ Phaser.InputHandler.prototype = { if (this.useHandCursor && this._pointerData[pointer.id].isDragged === false) { this.game.canvas.style.cursor = "pointer"; - this._setHandCursor = false; + this._setHandCursor = true; } - this.sprite.events.onInputOver.dispatch(this.sprite, pointer); + if (this.sprite && this.sprite.events) + { + this.sprite.events.onInputOver.dispatch(this.sprite, pointer); + } } }, @@ -14894,7 +15576,11 @@ Phaser.InputHandler.prototype = { this._pointerData[pointer.id].isDown = true; this._pointerData[pointer.id].isUp = false; this._pointerData[pointer.id].timeDown = this.game.time.now; - this.sprite.events.onInputDown.dispatch(this.sprite, pointer); + + if (this.sprite && this.sprite.events) + { + this.sprite.events.onInputDown.dispatch(this.sprite, pointer); + } // Start drag if (this.draggable && this.isDragged === false) @@ -14939,12 +15625,18 @@ Phaser.InputHandler.prototype = { if (this.checkPointerOver(pointer)) { // Release the inputUp signal and provide optional parameter if pointer is still over the sprite or not - this.sprite.events.onInputUp.dispatch(this.sprite, pointer, true); + if (this.sprite && this.sprite.events) + { + this.sprite.events.onInputUp.dispatch(this.sprite, pointer, true); + } } else { // Release the inputUp signal and provide optional parameter if pointer is still over the sprite or not - this.sprite.events.onInputUp.dispatch(this.sprite, pointer, false); + if (this.sprite && this.sprite.events) + { + this.sprite.events.onInputUp.dispatch(this.sprite, pointer, false); + } // Pointer outside the sprite? Reset the cursor if (this.useHandCursor) @@ -16369,20 +17061,39 @@ Phaser.BitmapData = function (game, key, width, height) { this.ctx = this.context; /** - * @property {array} imageData - The canvas image data. + * @property {ImageData} imageData - The context image data. */ this.imageData = this.context.getImageData(0, 0, width, height); /** - * @property {UInt8Clamped} pixels - A reference to the context imageData buffer. + * @property {Uint8ClampedArray} data - A Uint8ClampedArray view into BitmapData.buffer. + */ + this.data = this.imageData.data; + + /** + * @property {Uint32Array} pixels - An Uint32Array view into BitmapData.buffer. + */ + this.pixels = null; + + /** + * @property {ArrayBuffer} buffer - An ArrayBuffer the same size as the context ImageData. */ if (this.imageData.data.buffer) { - this.pixels = this.imageData.data.buffer; + this.buffer = this.imageData.data.buffer; + this.pixels = new Uint32Array(this.buffer); } else { - this.pixels = this.imageData.data; + if (window['ArrayBuffer']) + { + this.buffer = new ArrayBuffer(this.imageData.data.length); + this.pixels = new Uint32Array(this.buffer); + } + else + { + this.pixels = this.imageData.data; + } } /** @@ -16409,11 +17120,38 @@ Phaser.BitmapData = function (game, key, width, height) { */ this.type = Phaser.BITMAPDATA; + /** + * @property {boolean} disableTextureUpload - If disableTextureUpload is true this BitmapData will never send its image data to the GPU when its dirty flag is true. + */ + this.disableTextureUpload = false; + /** * @property {boolean} dirty - If dirty this BitmapData will be re-rendered. */ this.dirty = false; + // Aliases + this.cls = this.clear; + this.update = this.refreshBuffer; + + /** + * @property {number} _tempR - Internal cache var. + * @private + */ + this._tempR = 0; + + /** + * @property {number} _tempG - Internal cache var. + * @private + */ + this._tempG = 0; + + /** + * @property {number} _tempB - Internal cache var. + * @private + */ + this._tempB = 0; + }; Phaser.BitmapData.prototype = { @@ -16444,7 +17182,14 @@ Phaser.BitmapData.prototype = { }, /** - * Clears the BitmapData. + * Clears the BitmapData context using a clearRect. + * + * @method Phaser.BitmapData#cls + */ + + /** + * Clears the BitmapData context using a clearRect. + * * @method Phaser.BitmapData#clear */ clear: function () { @@ -16456,7 +17201,27 @@ Phaser.BitmapData.prototype = { }, /** - * Resizes the BitmapData. + * Fills the BitmapData with the given color. + * + * @method Phaser.BitmapData#fill + * @param {number} r - The red color value, between 0 and 0xFF (255). + * @param {number} g - The green color value, between 0 and 0xFF (255). + * @param {number} b - The blue color value, between 0 and 0xFF (255). + * @param {number} [a=1] - The alpha color value, between 0 and 1. + */ + fill: function (r, g, b, a) { + + if (typeof a === 'undefined') { a = 1; } + + this.context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + this.context.fillRect(0, 0, this.width, this.height); + this.dirty = true; + + }, + + /** + * Resizes the BitmapData. This changes the size of the underlying canvas and refreshes the buffer. + * * @method Phaser.BitmapData#resize */ resize: function (width, height) { @@ -16469,7 +17234,7 @@ Phaser.BitmapData.prototype = { this.canvas.height = height; this.textureFrame.width = width; this.textureFrame.height = height; - this.imageData = this.context.getImageData(0, 0, width, height); + this.refreshBuffer(); } this.dirty = true; @@ -16477,50 +17242,363 @@ Phaser.BitmapData.prototype = { }, /** + * This re-creates the BitmapData.imageData from the current context. + * It then re-builds the ArrayBuffer, the data Uint8ClampedArray reference and the pixels Int32Array. + * If not given the dimensions defaults to the full size of the context. + * + * @method Phaser.BitmapData#update + * @param {number} [x=0] - The x coordinate of the top-left of the image data area to grab from. + * @param {number} [y=0] - The y coordinate of the top-left of the image data area to grab from. + * @param {number} [width] - The width of the image data area. + * @param {number} [height] - The height of the image data area. + */ + + /** + * DEPRECATED: This method will be removed in Phaser 2.1. Please use BitmapData.update instead. + * + * This re-creates the BitmapData.imageData from the current context. + * It then re-builds the ArrayBuffer, the data Uint8ClampedArray reference and the pixels Int32Array. + * If not given the dimensions defaults to the full size of the context. + * * @method Phaser.BitmapData#refreshBuffer + * @param {number} [x=0] - The x coordinate of the top-left of the image data area to grab from. + * @param {number} [y=0] - The y coordinate of the top-left of the image data area to grab from. + * @param {number} [width] - The width of the image data area. + * @param {number} [height] - The height of the image data area. + */ + refreshBuffer: function (x, y, width, height) { + + if (typeof x === 'undefined') { x = 0; } + if (typeof y === 'undefined') { y = 0; } + if (typeof width === 'undefined') { width = this.width; } + if (typeof height === 'undefined') { height = this.height; } + + this.imageData = this.context.getImageData(x, y, width, height); + this.data = this.imageData.data; + + if (this.imageData.data.buffer) + { + this.buffer = this.imageData.data.buffer; + this.pixels = new Uint32Array(this.buffer); + } + else + { + if (window['ArrayBuffer']) + { + this.buffer = new ArrayBuffer(this.imageData.data.length); + this.pixels = new Uint32Array(this.buffer); + } + else + { + this.pixels = this.imageData.data; + } + } + + }, + + /** + * Scans through the area specified in this BitmapData and sends a color object for every pixel to the given callback. + * The callback will be sent a color object with 6 properties: `{ r: number, g: number, b: number, a: number, color: number, rgba: string }`. + * Where r, g, b and a are integers between 0 and 255 representing the color component values for red, green, blue and alpha. + * The `color` property is an Int32 of the full color. Note the endianess of this will change per system. + * The `rgba` property is a CSS style rgba() string which can be used with context.fillStyle calls, among others. + * The callback will also be sent the pixels x and y coordinates respectively. + * The callback must return either `false`, in which case no change will be made to the pixel, or a new color object. + * If a new color object is returned the pixel will be set to the r, g, b and a color values given within it. + * + * @method Phaser.BitmapData#processPixelRGB + * @param {function} callback - The callback that will be sent each pixel color object to be processed. + * @param {object} callbackContext - The context under which the callback will be called. + * @param {number} [x=0] - The x coordinate of the top-left of the region to process from. + * @param {number} [y=0] - The y coordinate of the top-left of the region to process from. + * @param {number} [width] - The width of the region to process. + * @param {number} [height] - The height of the region to process. + */ + processPixelRGB: function (callback, callbackContext, x, y, width, height) { + + if (typeof x === 'undefined') { x = 0; } + if (typeof y === 'undefined') { y = 0; } + if (typeof width === 'undefined') { width = this.width; } + if (typeof height === 'undefined') { height = this.height; } + + var w = x + width; + var h = y + height; + var pixel = Phaser.Color.createColor(); + var result = { r: 0, g: 0, b: 0, a: 0 }; + var dirty = false; + + for (var ty = y; ty < h; ty++) + { + for (var tx = x; tx < w; tx++) + { + Phaser.Color.unpackPixel(this.getPixel32(tx, ty), pixel); + + result = callback.call(callbackContext, pixel, tx, ty); + + if (result !== false && result !== null) + { + this.setPixel32(tx, ty, result.r, result.g, result.b, result.a, false); + dirty = true; + } + } + } + + if (dirty) + { + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; + } + + }, + + /** + * Scans through the area specified in this BitmapData and sends the color for every pixel to the given callback along with its x and y coordinates. + * Whatever value the callback returns is set as the new color for that pixel, unless it returns the same color, in which case it's skipped. + * Note that the format of the color received will be different depending on if the system is big or little endian. + * It is expected that your callback will deal with endianess. If you'd rather Phaser did it then use processPixelRGB instead. + * The callback will also be sent the pixels x and y coordinates respectively. + * + * @method Phaser.BitmapData#processPixel + * @param {function} callback - The callback that will be sent each pixel color to be processed. + * @param {object} callbackContext - The context under which the callback will be called. + * @param {number} [x=0] - The x coordinate of the top-left of the region to process from. + * @param {number} [y=0] - The y coordinate of the top-left of the region to process from. + * @param {number} [width] - The width of the region to process. + * @param {number} [height] - The height of the region to process. + */ + processPixel: function (callback, callbackContext, x, y, width, height) { + + if (typeof x === 'undefined') { x = 0; } + if (typeof y === 'undefined') { y = 0; } + if (typeof width === 'undefined') { width = this.width; } + if (typeof height === 'undefined') { height = this.height; } + + var w = x + width; + var h = y + height; + var pixel = 0; + var result = 0; + var dirty = false; + + for (var ty = y; ty < h; ty++) + { + for (var tx = x; tx < w; tx++) + { + pixel = this.getPixel32(tx, ty); + result = callback.call(callbackContext, pixel, tx, ty); + + if (result !== pixel) + { + this.pixels[ty * this.width + tx] = result; + dirty = true; + } + } + } + + if (dirty) + { + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; + } + + }, + + /** + * Replaces all pixels matching one color with another. The color values are given as two sets of RGBA values. + * An optional region parameter controls if the replacement happens in just a specific area of the BitmapData or the entire thing. + * + * @method Phaser.BitmapData#replaceRGB + * @param {number} r1 - The red color value to be replaced. Between 0 and 255. + * @param {number} g1 - The green color value to be replaced. Between 0 and 255. + * @param {number} b1 - The blue color value to be replaced. Between 0 and 255. + * @param {number} a1 - The alpha color value to be replaced. Between 0 and 255. + * @param {number} r2 - The red color value that is the replacement color. Between 0 and 255. + * @param {number} g2 - The green color value that is the replacement color. Between 0 and 255. + * @param {number} b2 - The blue color value that is the replacement color. Between 0 and 255. + * @param {number} a2 - The alpha color value that is the replacement color. Between 0 and 255. + * @param {Phaser.Rectangle} [region] - The area to perform the search over. If not given it will replace over the whole BitmapData. + */ + replaceRGB: function (r1, g1, b1, a1, r2, g2, b2, a2, region) { + + var sx = 0; + var sy = 0; + var w = this.width; + var h = this.height; + var source = Phaser.Color.packPixel(r1, g1, b1, a1); + + if (region !== undefined && region instanceof Phaser.Rectangle) + { + sx = region.x; + sy = region.y; + w = region.width; + h = region.height; + } + + for (var y = 0; y < h; y++) + { + for (var x = 0; x < w; x++) + { + if (this.getPixel32(sx + x, sy + y) === source) + { + this.setPixel32(sx + x, sy + y, r2, g2, b2, a2, false); + } + } + } + + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; + + }, + + /** + * Sets the hue, saturation and lightness values on every pixel in the given region, or the whole BitmapData if no region was specified. + * + * @method Phaser.BitmapData#setHSL + * @param {number} [h=null] - The hue, in the range 0 - 1. + * @param {number} [s=null] - The saturation, in the range 0 - 1. + * @param {number} [l=null] - The lightness, in the range 0 - 1. + * @param {Phaser.Rectangle} [region] - The area to perform the operation on. If not given it will run over the whole BitmapData. + */ + setHSL: function (h, s, l, region) { + + if (typeof h === 'undefined' || h === null) { h = false; } + if (typeof s === 'undefined' || s === null) { s = false; } + if (typeof l === 'undefined' || l === null) { l = false; } + + if (!h && !s && !l) + { + return; + } + + if (typeof region === 'undefined') + { + region = new Phaser.Rectangle(0, 0, this.width, this.height); + } + + var pixel = Phaser.Color.createColor(); + + for (var y = region.y; y < region.bottom; y++) + { + for (var x = region.x; x < region.right; x++) + { + Phaser.Color.unpackPixel(this.getPixel32(x, y), pixel, true); + + if (h) + { + pixel.h = h; + } + + if (s) + { + pixel.s = s; + } + + if (l) + { + pixel.l = l; + } + + Phaser.Color.HSLtoRGB(pixel.h, pixel.s, pixel.l, pixel); + this.setPixel32(x, y, pixel.r, pixel.g, pixel.b, pixel.a, false); + } + } + + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; + + }, + + /** + * Shifts any or all of the hue, saturation and lightness values on every pixel in the given region, or the whole BitmapData if no region was specified. + * Shifting will add the given value onto the current h, s and l values, not replace them. + * The hue is wrapped to keep it within the range 0 to 1. Saturation and lightness are clamped to not exceed 1. + * + * @method Phaser.BitmapData#shiftHSL + * @param {number} [h=null] - The amount to shift the hue by. + * @param {number} [s=null] - The amount to shift the saturation by. + * @param {number} [l=null] - The amount to shift the lightness by. + * @param {Phaser.Rectangle} [region] - The area to perform the operation on. If not given it will run over the whole BitmapData. */ - refreshBuffer: function () { + shiftHSL: function (h, s, l, region) { - this.imageData = this.context.getImageData(0, 0, this.width, this.height); - this.pixels = new Int32Array(this.imageData.data.buffer); + if (typeof h === 'undefined' || h === null) { h = false; } + if (typeof s === 'undefined' || s === null) { s = false; } + if (typeof l === 'undefined' || l === null) { l = false; } - // this.data8 = new Uint8ClampedArray(this.imageData.buffer); - // this.data32 = new Uint32Array(this.imageData.buffer); + if (!h && !s && !l) + { + return; + } + + if (typeof region === 'undefined') + { + region = new Phaser.Rectangle(0, 0, this.width, this.height); + } + + var pixel = Phaser.Color.createColor(); + + for (var y = region.y; y < region.bottom; y++) + { + for (var x = region.x; x < region.right; x++) + { + Phaser.Color.unpackPixel(this.getPixel32(x, y), pixel, true); + + if (h) + { + pixel.h = this.game.math.wrap(pixel.h + h, 0, 1); + } + + if (s) + { + pixel.s = this.game.math.limitValue(pixel.s + s, 0, 1); + } + + if (l) + { + pixel.l = this.game.math.limitValue(pixel.l + l, 0, 1); + } + + Phaser.Color.HSLtoRGB(pixel.h, pixel.s, pixel.l, pixel); + this.setPixel32(x, y, pixel.r, pixel.g, pixel.b, pixel.a, false); + } + } + + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; }, /** * Sets the color of the given pixel to the specified red, green, blue and alpha values. + * * @method Phaser.BitmapData#setPixel32 - * @param {number} x - The X coordinate of the pixel to be set. - * @param {number} y - The Y coordinate of the pixel to be set. + * @param {number} x - The x coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} y - The y coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. * @param {number} red - The red color value, between 0 and 0xFF (255). * @param {number} green - The green color value, between 0 and 0xFF (255). * @param {number} blue - The blue color value, between 0 and 0xFF (255). * @param {number} alpha - The alpha color value, between 0 and 0xFF (255). + * @param {boolean} [immediate=true] - If `true` the context.putImageData will be called and the dirty flag set. */ - setPixel32: function (x, y, red, green, blue, alpha) { + setPixel32: function (x, y, red, green, blue, alpha, immediate) { + + if (typeof immediate === 'undefined') { immediate = true; } if (x >= 0 && x <= this.width && y >= 0 && y <= this.height) { - this.pixels[y * this.width + x] = (alpha << 24) | (blue << 16) | (green << 8) | red; - - /* - if (this.isLittleEndian) + if (Phaser.Device.LITTLE_ENDIAN) { - this.data32[y * this.width + x] = (alpha << 24) | (blue << 16) | (green << 8) | red; + this.pixels[y * this.width + x] = (alpha << 24) | (blue << 16) | (green << 8) | red; } else { - this.data32[y * this.width + x] = (red << 24) | (green << 16) | (blue << 8) | alpha; + this.pixels[y * this.width + x] = (red << 24) | (green << 16) | (blue << 8) | alpha; } - */ - // this.imageData.data.set(this.data8); - - this.context.putImageData(this.imageData, 0, 0); - - this.dirty = true; + if (immediate) + { + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; + } } }, @@ -16529,55 +17607,93 @@ Phaser.BitmapData.prototype = { * Sets the color of the given pixel to the specified red, green and blue values. * * @method Phaser.BitmapData#setPixel - * @param {number} x - The X coordinate of the pixel to be set. - * @param {number} y - The Y coordinate of the pixel to be set. - * @param {number} red - The red color value (between 0 and 255) - * @param {number} green - The green color value (between 0 and 255) - * @param {number} blue - The blue color value (between 0 and 255) + * @param {number} x - The x coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} y - The y coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} red - The red color value, between 0 and 0xFF (255). + * @param {number} green - The green color value, between 0 and 0xFF (255). + * @param {number} blue - The blue color value, between 0 and 0xFF (255). + * @param {number} alpha - The alpha color value, between 0 and 0xFF (255). + * @param {boolean} [immediate=true] - If `true` the context.putImageData will be called and the dirty flag set. */ - setPixel: function (x, y, red, green, blue) { + setPixel: function (x, y, red, green, blue, immediate) { - this.setPixel32(x, y, red, green, blue, 255); + this.setPixel32(x, y, red, green, blue, 255, immediate); }, /** - * Get the color of a specific pixel. + * Get the color of a specific pixel in the context into a color object. * - * @param {number} x - The X coordinate of the pixel to get. - * @param {number} y - The Y coordinate of the pixel to get. - * @return {number} A native color value integer (format: 0xRRGGBB) + * @method Phaser.BitmapData#getPixel + * @param {number} x - The x coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} y - The y coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {object} [out] - An object into which 4 properties will be created: r, g, b and a. If not provided a new object will be created. + * @return {object} An object with the red, green, blue and alpha values set in the r, g, b and a properties. */ - getPixel: function (x, y) { + getPixel: function (x, y, out) { - if (x >= 0 && x <= this.width && y >= 0 && y <= this.height) + if (!out) + { + out = Phaser.Color.createColor(); + } + + var index = ~~(x + (y * this.width)); + + index *= 4; + + if (this.data[index]) { - return this.data32[y * this.width + x]; + out.r = this.data[index]; + out.g = this.data[++index]; + out.b = this.data[++index]; + out.a = this.data[++index]; } + return out; + }, /** * Get the color of a specific pixel including its alpha value. + * Note that on little-endian systems the format is 0xAABBGGRR and on big-endian the format is 0xRRGGBBAA. * - * @param {number} x - The X coordinate of the pixel to get. - * @param {number} y - The Y coordinate of the pixel to get. + * @method Phaser.BitmapData#getPixel32 + * @param {number} x - The x coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} y - The y coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. * @return {number} A native color value integer (format: 0xAARRGGBB) */ getPixel32: function (x, y) { if (x >= 0 && x <= this.width && y >= 0 && y <= this.height) { - return this.data32[y * this.width + x]; + return this.pixels[y * this.width + x]; } }, + /** + * Get the color of a specific pixel including its alpha value as a color object containing r,g,b,a and rgba properties. + * + * @method Phaser.BitmapData#getPixelRGB + * @param {number} x - The x coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} y - The y coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {object} [out] - An object into which 3 properties will be created: r, g and b. If not provided a new object will be created. + * @param {boolean} [hsl=false] - Also convert the rgb values into hsl? + * @param {boolean} [hsv=false] - Also convert the rgb values into hsv? + * @return {object} An object with the red, green and blue values set in the r, g and b properties. + */ + getPixelRGB: function (x, y, out, hsl, hsv) { + + return Phaser.Color.unpackPixel(this.getPixel32(x, y), out, hsl, hsv); + + }, + /** * Gets all the pixels from the region specified by the given Rectangle object. * + * @method Phaser.BitmapData#getPixels * @param {Phaser.Rectangle} rect - The Rectangle region to get. - * @return {array} CanvasPixelArray. + * @return {ImageData} Returns a ImageData object containing a Uint8ClampedArray data property. */ getPixels: function (rect) { @@ -16588,6 +17704,7 @@ Phaser.BitmapData.prototype = { /** * Copies the pixels from the source image to this BitmapData based on the given area and destination. * + * @method Phaser.BitmapData#copyPixels * @param {HTMLImage|string} source - The Image to draw. If you give a key it will try and find the Image in the Game.Cache. * @param {Phaser.Rectangle} area - The Rectangle region to copy from the source image. * @param {number} destX - The destination x coordinate to copy the image to. @@ -16605,16 +17722,22 @@ Phaser.BitmapData.prototype = { this.context.drawImage(source, area.x, area.y, area.width, area.height, destX, destY, area.width, area.height); } + this.dirty = true; + }, /** * Draws the given image to this BitmapData at the coordinates specified. If you need to only draw a part of the image use BitmapData.copyPixels instead. * - * @param {HTMLImage|string} source - The Image to draw. If you give a key it will try and find the Image in the Game.Cache. - * @param {number} destX - The destination x coordinate to draw the image to. - * @param {number} destY - The destination y coordinate to draw the image to. + * @method Phaser.BitmapData#draw + * @param {HTMLImage|string} source - The Image to draw. If you give a string it will try and find the Image in the Game.Cache. + * @param {number} [x=0] - The x coordinate to draw the image to. + * @param {number} [y=0] - The y coordinate to draw the image to. */ - draw: function (source, destX, destY) { + draw: function (source, x, y) { + + if (typeof x === 'undefined') { x = 0; } + if (typeof y === 'undefined') { y = 0; } if (typeof source === 'string') { @@ -16623,14 +17746,38 @@ Phaser.BitmapData.prototype = { if (source) { - this.context.drawImage(source, 0, 0, source.width, source.height, destX, destY, source.width, source.height); + this.context.drawImage(source, 0, 0, source.width, source.height, x, y, source.width, source.height); } + this.dirty = true; + + }, + + /** + * Draws the given image to this BitmapData at the coordinates specified. If you need to only draw a part of the image use BitmapData.copyPixels instead. + * + * @method Phaser.BitmapData#drawSprite + * @param {Phaser.Sprite|Phaser.Image} sprite - The Sprite to draw. Must have a loaded texture and frame. + * @param {number} [x=0] - The x coordinate to draw the Sprite to. + * @param {number} [y=0] - The y coordinate to draw the Sprite to. + */ + drawSprite: function (sprite, x, y) { + + if (typeof x === 'undefined') { x = 0; } + if (typeof y === 'undefined') { y = 0; } + + var frame = sprite.texture.frame; + + this.context.drawImage(sprite.texture.baseTexture.source, frame.x, frame.y, frame.width, frame.height, x, y, frame.width, frame.height); + + this.dirty = true; + }, /** * Draws the given image onto this BitmapData using an image as an alpha mask. * + * @method Phaser.BitmapData#alphaMask * @param {HTMLImage|string} source - The Image to draw. If you give a key it will try and find the Image in the Game.Cache. * @param {HTMLImage|string} mask - The Image to use as the alpha mask. If you give a key it will try and find the Image in the Game.Cache. */ @@ -16662,17 +17809,79 @@ Phaser.BitmapData.prototype = { this.context.globalCompositeOperation = temp; + this.dirty = true; + + }, + + /** + * Scans this BitmapData for all pixels matching the given r,g,b values and then draws them into the given destination BitmapData. + * The destination BitmapData must be large enough to receive all of the pixels that are scanned. + * Although the destination BitmapData is returned from this method, it's actually modified directly in place, meaning this call is perfectly valid: + * `picture.extract(mask, r, g, b)` + * + * @method Phaser.BitmapData#extract + * @param {Phaser.BitmapData} destination - The BitmapData that the extracts pixels will be drawn to. + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {number} [a=255] - The alpha color component, in the range 0 - 255. + * @returns {Phaser.BitmapData} The BitmapData that the extract pixels were drawn on. + */ + extract: function (destination, r, g, b, a) { + + if (typeof a === 'undefined') { a = 255; } + + this.processPixelRGB( + function(pixel, x, y){ + if (pixel.r === r && pixel.g === g && pixel.b === b) + { + destination.setPixel32(x, y, r, g, b, a, false); + } + return false; + }, + this); + + destination.context.putImageData(destination.imageData, 0, 0); + destination.dirty = true; + + return destination; + + }, + + /** + * Draws a filled Circle to the BitmapData at the given x, y coordinates and radius in size. + * + * @method Phaser.BitmapData#circle + * @param {number} x - The x coordinate to draw the Circle at. + * @param {number} y - The y coordinate to draw the Circle at. + * @param {number} radius - The radius of the Circle. + * @param {string} [fillStyle] - If set the context fillStyle will be set to this value before the circle is drawn. + */ + circle: function (x, y, radius, fillStyle) { + + if (typeof fillStyle !== 'undefined') + { + this.context.fillStyle = fillStyle; + } + + this.context.beginPath(); + this.context.arc(x, y, radius, 0, Math.PI * 2, false); + this.context.closePath(); + + this.context.fill(); + }, /** * If the game is running in WebGL this will push the texture up to the GPU if it's dirty. * This is called automatically if the BitmapData is being used by a Sprite, otherwise you need to remember to call it in your render function. + * If you wish to suppress this functionality set BitmapData.disableTextureUpload to `true`. * * @method Phaser.BitmapData#render */ render: function () { - if (this.game.renderType === Phaser.WEBGL && this.dirty) + if (!this.disableTextureUpload && this.game.renderType === Phaser.WEBGL && this.dirty) { // Only needed if running in WebGL, otherwise this array will never get cleared down // should use the rendersession @@ -16854,10 +18063,11 @@ Phaser.Sprite = function (game, x, y, key, frame) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0 ]; + this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0, 0 ]; /** * @property {Phaser.Rectangle} _bounds - Internal cache var. @@ -17205,10 +18415,12 @@ Phaser.Sprite.prototype.kill = function() { */ Phaser.Sprite.prototype.destroy = function(destroyChildren) { - if (this.game === null) { return; } + if (this.game === null || this._cache[8] === 1) { return; } if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + if (this.parent) { if (this.parent instanceof Phaser.Group) @@ -17266,6 +18478,8 @@ Phaser.Sprite.prototype.destroy = function(destroyChildren) { this.mask = null; this.game = null; + this._cache[8] = 0; + }; /** @@ -17750,6 +18964,20 @@ Object.defineProperty(Phaser.Sprite.prototype, "y", { }); +/** +* @name Phaser.Sprite#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.Sprite.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -17867,10 +19095,11 @@ Phaser.Image = function (game, x, y, key, frame) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0 ]; + this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0, 0 ]; }; @@ -18139,10 +19368,12 @@ Phaser.Image.prototype.kill = function() { */ Phaser.Image.prototype.destroy = function(destroyChildren) { - if (this.game === null) { return; } + if (this.game === null || this.destroyPhase) { return; } if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + if (this.parent) { if (this.parent instanceof Phaser.Group) @@ -18190,6 +19421,8 @@ Phaser.Image.prototype.destroy = function(destroyChildren) { this.mask = null; this.game = null; + this._cache[8] = 0; + }; /** @@ -18521,6 +19754,20 @@ Object.defineProperty(Phaser.Image.prototype, "smoothed", { }); +/** +* @name Phaser.Image#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.Image.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -18668,10 +19915,11 @@ Phaser.TileSprite = function (game, x, y, width, height, key, frame) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0 ]; + this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0, 0 ]; }; @@ -18925,10 +20173,12 @@ Phaser.TileSprite.prototype.loadTexture = function (key, frame) { */ Phaser.TileSprite.prototype.destroy = function(destroyChildren) { - if (this.game === null) { return; } + if (this.game === null || this.destroyPhase) { return; } if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + if (this.filters) { this.filters = null; @@ -18974,6 +20224,8 @@ Phaser.TileSprite.prototype.destroy = function(destroyChildren) { this.mask = null; this.game = null; + this._cache[8] = 0; + }; /** @@ -19269,6 +20521,20 @@ Object.defineProperty(Phaser.TileSprite.prototype, "y", { }); +/** +* @name Phaser.TileSprite#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.TileSprite.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -19399,10 +20665,11 @@ Phaser.Text = function (game, x, y, text, style) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0 ]; + this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0, 0 ]; }; @@ -19484,10 +20751,12 @@ Phaser.Text.prototype.postUpdate = function () { */ Phaser.Text.prototype.destroy = function (destroyChildren) { - if (this.game === null) { return; } + if (this.game === null || this.destroyPhase) { return; } if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + if (this.parent) { if (this.parent instanceof Phaser.Group) @@ -19536,6 +20805,8 @@ Phaser.Text.prototype.destroy = function (destroyChildren) { this.mask = null; this.game = null; + this._cache[8] = 0; + }; /** @@ -19646,6 +20917,7 @@ Phaser.Text.prototype.updateText = function () { this.context.shadowBlur = this.style.shadowBlur; this.context.textBaseline = 'top'; + this.context.lineCap = 'round'; this.context.lineJoin = 'round'; //draw lines line by line @@ -20158,6 +21430,20 @@ Object.defineProperty(Phaser.Text.prototype, "fixedToCamera", { }); +/** +* @name Phaser.Text#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.Text.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -20283,10 +21569,11 @@ Phaser.BitmapText = function (game, x, y, font, text, size) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [0, 0, 0, 0, 1, 0, 1, 0]; + this._cache = [0, 0, 0, 0, 1, 0, 1, 0, 0]; }; @@ -20370,10 +21657,12 @@ Phaser.BitmapText.prototype.postUpdate = function () { */ Phaser.BitmapText.prototype.destroy = function(destroyChildren) { - if (this.game === null) { return; } + if (this.game === null || this.destroyPhase) { return; } if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + if (this.parent) { if (this.parent instanceof Phaser.Group) @@ -20417,6 +21706,8 @@ Phaser.BitmapText.prototype.destroy = function(destroyChildren) { this.mask = null; this.game = null; + this._cache[8] = 0; + }; /** @@ -20625,6 +21916,20 @@ Object.defineProperty(Phaser.BitmapText.prototype, "fixedToCamera", { }); +/** +* @name Phaser.BitmapText#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.BitmapText.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -21336,10 +22641,11 @@ Phaser.Graphics = function (game, x, y) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0 ]; + this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0, 0 ]; }; @@ -21412,8 +22718,12 @@ Phaser.Graphics.prototype.postUpdate = function () { */ Phaser.Graphics.prototype.destroy = function(destroyChildren) { + if (this.game === null || this.destroyPhase) { return; } + if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + this.clear(); if (this.parent) @@ -21450,6 +22760,8 @@ Phaser.Graphics.prototype.destroy = function(destroyChildren) { this.game = null; + this._cache[8] = 0; + }; /* @@ -21520,6 +22832,20 @@ Object.defineProperty(Phaser.Graphics.prototype, "fixedToCamera", { }); +/** +* @name Phaser.Graphics#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.Graphics.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -23035,6 +24361,12 @@ Phaser.Device = function (game) { */ this.littleEndian = false; + /** + * @property {boolean} support32bit - Does the device context support 32bit pixel manipulation using array buffer views? + * @default + */ + this.support32bit = false; + /** * @property {boolean} fullscreen - Does the browser support the Full Screen API? * @default @@ -23069,6 +24401,8 @@ Phaser.Device = function (game) { }; +Phaser.Device.LITTLE_ENDIAN = false; + Phaser.Device.prototype = { /** @@ -23357,7 +24691,7 @@ Phaser.Device.prototype = { }, /** - * Check PixelRatio of devices. + * Check PixelRatio, iOS device, Vibration API, ArrayBuffers and endianess. * @method Phaser.Device#_checkDevice * @private */ @@ -23370,15 +24704,21 @@ Phaser.Device.prototype = { if (typeof Int8Array !== 'undefined') { - this.littleEndian = new Int8Array(new Int16Array([1]).buffer)[0] > 0; this.typedArray = true; } else { - this.littleEndian = false; this.typedArray = false; } + if (typeof ArrayBuffer !== 'undefined' && typeof Uint8Array !== 'undefined' && typeof Uint32Array !== 'undefined') + { + this.littleEndian = this._checkIsLittleEndian(); + Phaser.Device.LITTLE_ENDIAN = this.littleEndian; + } + + this.support32bit = (typeof ArrayBuffer !== "undefined" && typeof Uint8ClampedArray !== "undefined" && typeof Int32Array !== "undefined" && this.littleEndian !== null && this._checkIsUint8ClampedImageData()); + navigator.vibrate = navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate; if (navigator.vibrate) @@ -23388,6 +24728,67 @@ Phaser.Device.prototype = { }, + /** + * Check Little or Big Endian system. + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Device#_checkIsLittleEndian + * @private + */ + _checkIsLittleEndian: function () { + + var a = new ArrayBuffer(4); + var b = new Uint8Array(a); + var c = new Uint32Array(a); + + b[0] = 0xa1; + b[1] = 0xb2; + b[2] = 0xc3; + b[3] = 0xd4; + + if (c[0] == 0xd4c3b2a1) + { + return true; + } + + if (c[0] == 0xa1b2c3d4) + { + return false; + } + else + { + // Could not determine endianness + return null; + } + + }, + + /** + * Test to see if ImageData uses CanvasPixelArray or Uint8ClampedArray. + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Device#_checkIsUint8ClampedImageData + * @private + */ + _checkIsUint8ClampedImageData: function () { + + if (typeof Uint8ClampedArray === "undefined") + { + return false; + } + + var elem = document.createElement('canvas'); + var ctx = elem.getContext('2d'); + + if (!ctx) + { + return false; + } + + var image = ctx.createImageData(1, 1); + + return image.data instanceof Uint8ClampedArray; + + }, + /** * Check whether the host environment support 3D CSS. * @method Phaser.Device#_checkCSS3D @@ -24269,6 +25670,21 @@ Phaser.Math = { }, + /** + * Ensures the given value is between min and max inclusive. + * + * @method Phaser.Math#limitValue + * @param {number} value - The value to limit. + * @param {number} min - The minimum the value can be. + * @param {number} max - The maximum the value can be. + * @return {number} The limited value. + */ + limitValue: function(value, min, max) { + + return value < min ? min : value > max ? max : value; + + }, + /** * Randomly returns either a 1 or -1. * @@ -24276,7 +25692,9 @@ Phaser.Math = { * @return {number} 1 or -1 */ randomSign: function () { + return (Math.random() > 0.5) ? 1 : -1; + }, /** @@ -24911,18 +26329,7 @@ Phaser.Math = { */ smoothstep: function ( x, min, max ) { - if (x <= min) - { - return 0; - } - - if (x >= max) - { - return 1; - } - - x = (x - min) / (max - min); - + x = Math.max(0, Math.min(1, (x - min) / (max - min))); return x * x * (3 - 2 * x); }, @@ -24938,18 +26345,7 @@ Phaser.Math = { */ smootherstep: function ( x, min, max ) { - if (x <= min) - { - return 0; - } - - if (x >= max) - { - return 1; - } - - x = (x - min) / (max - min); - + x = Math.max(0, Math.min(1, (x - min) / (max - min))); return x * x * x * (x * (x * 6 - 15) + 10); }, @@ -25061,6 +26457,7 @@ Phaser.RandomDataGenerator.prototype = { /** * Private random helper. + * * @method Phaser.RandomDataGenerator#rnd * @private * @return {number} @@ -25108,9 +26505,10 @@ Phaser.RandomDataGenerator.prototype = { /** * Internal method that creates a seed hash. + * * @method Phaser.RandomDataGenerator#hash - * @param {Any} data * @private + * @param {Any} data * @return {number} hashed value. */ hash: function (data) { @@ -25136,29 +26534,38 @@ Phaser.RandomDataGenerator.prototype = { /** * Returns a random integer between 0 and 2^32. + * * @method Phaser.RandomDataGenerator#integer * @return {number} A random integer between 0 and 2^32. */ integer: function() { + return this.rnd.apply(this) * 0x100000000;// 2^32 + }, /** * Returns a random real number between 0 and 1. + * * @method Phaser.RandomDataGenerator#frac * @return {number} A random real number between 0 and 1. */ frac: function() { - return this.rnd.apply(this) + (this.rnd.apply(this) * 0x200000 | 0) * 1.1102230246251565e-16;// 2^-53 + + return this.rnd.apply(this) + (this.rnd.apply(this) * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53 + }, /** * Returns a random real number between 0 and 2^32. + * * @method Phaser.RandomDataGenerator#real * @return {number} A random real number between 0 and 2^32. */ real: function() { + return this.integer() + this.frac(); + }, /** @@ -25170,11 +26577,14 @@ Phaser.RandomDataGenerator.prototype = { * @return {number} A random number between min and max. */ integerInRange: function (min, max) { - return Math.round(this.realInRange(min, max)); + + return Math.floor(this.realInRange(0, max - min + 1)) + min; + }, /** * Returns a random real number between min and max. + * * @method Phaser.RandomDataGenerator#realInRange * @param {number} min - The minimum value in the range. * @param {number} max - The maximum value in the range. @@ -25188,15 +26598,19 @@ Phaser.RandomDataGenerator.prototype = { /** * Returns a random real number between -1 and 1. + * * @method Phaser.RandomDataGenerator#normal * @return {number} A random real number between -1 and 1. */ normal: function () { + return 1 - 2 * this.frac(); + }, /** * Returns a valid RFC4122 version4 ID hex string from https://gist.github.com/1308368 + * * @method Phaser.RandomDataGenerator#uuid * @return {string} A valid RFC4122 version4 ID hex string */ @@ -25215,42 +26629,54 @@ Phaser.RandomDataGenerator.prototype = { /** * Returns a random member of `array`. + * * @method Phaser.RandomDataGenerator#pick * @param {Array} ary - An Array to pick a random member of. * @return {any} A random member of the array. */ pick: function (ary) { + return ary[this.integerInRange(0, ary.length - 1)]; + }, /** * Returns a random member of `array`, favoring the earlier entries. + * * @method Phaser.RandomDataGenerator#weightedPick * @param {Array} ary - An Array to pick a random member of. * @return {any} A random member of the array. */ weightedPick: function (ary) { + return ary[~~(Math.pow(this.frac(), 2) * (ary.length - 1))]; + }, /** * Returns a random timestamp between min and max, or between the beginning of 2000 and the end of 2020 if min and max aren't specified. + * * @method Phaser.RandomDataGenerator#timestamp * @param {number} min - The minimum value in the range. * @param {number} max - The maximum value in the range. * @return {number} A random timestamp between min and max. */ timestamp: function (min, max) { + return this.realInRange(min || 946684800000, max || 1577862000000); + }, /** * Returns a random angle between -180 and 180. + * * @method Phaser.RandomDataGenerator#angle * @return {number} A random number between -180 and 180. */ angle: function() { + return this.integerInRange(-180, 180); + } }; @@ -26221,6 +27647,11 @@ Phaser.Tween.prototype = { repeat = repeat || 0; yoyo = yoyo || false; + if (yoyo && repeat === 0) + { + repeat = 1; + } + var self; if (this._parent) @@ -26465,6 +27896,7 @@ Phaser.Tween.prototype = { repeat: function (times) { this._repeat = times; + return this; }, @@ -26480,6 +27912,12 @@ Phaser.Tween.prototype = { yoyo: function(yoyo) { this._yoyo = yoyo; + + if (yoyo && this._repeat === 0) + { + this._repeat = 1; + } + return this; }, @@ -26726,7 +28164,6 @@ Phaser.Tween.prototype = { this.onLoop.dispatch(this._object); return true; - } else { @@ -27403,6 +28840,11 @@ Phaser.Time = function (game) { */ this.deltaCap = 0; + /** + * @property {number} timeCap - If the difference in time between two frame updates exceeds this value, the frame time is reset to avoid huge elapsed counts. + */ + this.timeCap = 1000; + /** * @property {number} frames - The number of frames record in the last second. Only calculated if Time.advancedTiming is true. */ @@ -27529,29 +28971,27 @@ Phaser.Time.prototype = { * * @method Phaser.Time#update * @protected - * @param {number} time - The current timestamp, either performance.now or Date.now depending on the browser. + * @param {number} time - The current timestamp. */ update: function (time) { this.now = time; - if (this._justResumed) - { - this.time = this.now; - this._justResumed = false; + this.timeToCall = this.game.math.max(0, 16 - (time - this.lastTime)); - this.events.resume(); + this.elapsed = this.now - this.time; - for (var i = 0; i < this._timers.length; i++) - { - this._timers[i]._resume(); - } + // spike-dislike + if (this.elapsed > this.timeCap) + { + // For some reason the time between now and the last time the game was updated was larger than our timeCap + // This can happen if the Stage.disableVisibilityChange is true and you swap tabs, which makes the raf pause. + // In this case we'll drop to some default values to stop the game timers going nuts. + this.elapsed = 1 / 60; } - this.timeToCall = this.game.math.max(0, 16 - (time - this.lastTime)); - - this.elapsed = this.now - this.time; - this.physicsElapsed = this.elapsed / 1000; + // Calculate physics elapsed, ensure it's > 0, use 1/60 as a fallback + this.physicsElapsed = this.elapsed / 1000 || 1 / 60; if (this.deltaCap > 0 && this.physicsElapsed > this.deltaCap) { @@ -27634,12 +29074,19 @@ Phaser.Time.prototype = { */ gameResumed: function () { - this.pauseDuration = Date.now() - this._pauseStarted; - // Level out the elapsed timer to avoid spikes - this.time = Date.now(); + this.time = this.now = Date.now(); + + this.pauseDuration = this.time - this._pauseStarted; - this._justResumed = true; + this.events.resume(); + + var i = this._timers.length; + + while (i--) + { + this._timers[i]._resume(); + } }, @@ -27735,6 +29182,12 @@ Phaser.Timer = function (game, autoDestroy) { */ this.expired = false; + /** + * @property {number} elapsed - Elapsed time since the last frame (in ms). + * @protected + */ + this.elapsed = 0; + /** * @property {array} events - An array holding all of this timers Phaser.TimerEvent objects. Use the methods add, repeat and loop to populate it. */ @@ -27752,6 +29205,11 @@ Phaser.Timer = function (game, autoDestroy) { */ this.nextTick = 0; + /** + * @property {number} timeCap - If the difference in time between two frame updates exceeds this value, the event times are reset to avoid catch-up situations. + */ + this.timeCap = 1000; + /** * @property {boolean} paused - The paused state of the Timer. You can pause the timer by calling Timer.pause() and Timer.resume() or by the game pausing. * @readonly @@ -27788,7 +29246,7 @@ Phaser.Timer = function (game, autoDestroy) { * @property {number} _now - The current start-time adjusted time. * @private */ - this._now = 0; + this._now = Date.now(); /** * @property {number} _len - Temp. array length variable. @@ -27904,7 +29362,7 @@ Phaser.Timer.prototype = { }, /** - * Adds a new Event to this Timer that will repeat for the given number of iterations. + * Adds a new TimerEvent that will always play through once and then repeat for the given number of iterations. * The event will fire after the given amount of 'delay' milliseconds has passed once the Timer has started running. * Call Timer.start() once you have added all of the Events you require for this Timer. The delay is in relation to when the Timer starts, not the time it was added. * If the Timer is already running the delay will be calculated based on the timers current time. @@ -28062,7 +29520,8 @@ Phaser.Timer.prototype = { }, /** - * The main Timer update event, called automatically by the Game clock. + * The main Timer update event, called automatically by Phaser.Time.update. + * * @method Phaser.Timer#update * @protected * @param {number} time - The time from the core game clock. @@ -28075,7 +29534,18 @@ Phaser.Timer.prototype = { return true; } + this.elapsed = time - this._now; this._now = time; + + // spike-dislike + if (this.elapsed > this.timeCap) + { + // For some reason the time between now and the last time the game was updated was larger than our timeCap. + // This can happen if the Stage.disableVisibilityChange is true and you swap tabs, which makes the raf pause. + // In this case we need to adjust the TimerEvents and nextTick. + this.adjustEvents(time - this.elapsed); + } + this._marked = 0; // Clears events marked for deletion and resets _len and _i to 0. @@ -28150,14 +29620,16 @@ Phaser.Timer.prototype = { */ pause: function () { - if (this.running && !this.expired) + if (this.paused) { - this._pauseStarted = this.game.time.now; - - this.paused = true; - this._codePaused = true; + return; } + this._pauseStarted = this.game.time.now; + + this.paused = true; + this._codePaused = true; + }, /** @@ -28167,37 +29639,73 @@ Phaser.Timer.prototype = { */ _pause: function () { - if (this.running && !this.expired) + if (this.paused) { - this._pauseStarted = this.game.time.now; + return; + } - this.paused = true; + this._pauseStarted = this.game.time.now; + + this.paused = true; + + }, + + /** + * Adjusts the time of all pending events and the nextTick by the given baseTime. + * + * @method Phaser.Timer#adjustEvents + */ + adjustEvents: function (baseTime) { + + for (var i = 0; i < this.events.length; i++) + { + if (!this.events[i].pendingDelete) + { + // Work out how long there would have been from when the game paused until the events next tick + var t = this.events[i].tick - baseTime; + + if (t < 0) + { + t = 0; + } + + // Add the difference on to the time now + this.events[i].tick = this._now + t; + } + } + + var d = this.nextTick - baseTime; + + if (d < 0) + { + this.nextTick = this._now; + } + else + { + this.nextTick = this._now + d; } }, /** * Resumes the Timer and updates all pending events. + * * @method Phaser.Timer#resume */ resume: function () { - if (this.running && !this.expired) + if (!this.paused) { - var pauseDuration = this.game.time.now - this._pauseStarted; + return; + } - this._pauseTotal += pauseDuration; + this._pauseTotal += this.game.time.pauseDuration; + this._now = this.game.time.now; - for (var i = 0; i < this.events.length; i++) - { - this.events[i].tick += pauseDuration; - } + this.adjustEvents(this._pauseStarted); - this.nextTick += pauseDuration; - - this.paused = false; - this._codePaused = false; - } + this.paused = false; + this._codePaused = false; }, @@ -28434,6 +29942,12 @@ Phaser.AnimationManager = function (sprite) { */ this.currentFrame = null; + /** + * @property {Phaser.Animation} currentAnim - The currently displayed animation, if any. + * @default + */ + this.currentAnim = null; + /** * @property {boolean} updateIfVisible - Should the animation data continue to update even if the Sprite.visible is set to false. * @default @@ -29102,6 +30616,64 @@ Phaser.Animation.prototype = { }, + /** + * Sets this animations playback to a given frame with the given ID. + * + * @method Phaser.Animation#setFrame + * @param {string|number} [frameId] - The identifier of the frame to set. Can be the name of the frame, the sprite index of the frame, or the animation-local frame index. + * @param {boolean} [useLocalFrameIndex=false] - If you provide a number for frameId, should it use the numeric indexes of the frameData, or the 0-indexed frame index local to the animation. + */ + setFrame: function(frameId, useLocalFrameIndex) { + + var frameIndex; + + if (typeof useLocalFrameIndex === 'undefined') + { + useLocalFrameIndex = false; + } + + // Find the index to the desired frame. + if (typeof frameId === "string") + { + for (var i = 0; i < this._frames.length; i++) + { + if (this._frameData.getFrame(this._frames[i]).name === frameId) + { + frameIndex = i; + } + } + } + else if (typeof frameId === "number") + { + if (useLocalFrameIndex) + { + frameIndex = frameId; + } + else + { + for (var i = 0; i < this._frames.length; i++) + { + if (this.frames[i] === frameIndex) + { + frameIndex = i; + } + } + } + } + + if (frameIndex) + { + // Set the current frame index to the found index. Subtract 1 so that it animates to the desired frame on update. + this._frameIndex = frameIndex - 1; + + // Make the animation update at next update + this._timeNextFrame = this.game.time.now; + + this.update(); + } + + }, + /** * Stops playback of this animation and set it to a finished state. If a resetFrame is provided it will stop playback and set frame to the first in the animation. * If `dispatchComplete` is true it will dispatch the complete events, otherwise they'll be ignored. @@ -29407,6 +30979,7 @@ Object.defineProperty(Phaser.Animation.prototype, 'speed', { * @param {number} stop - The number to count to. If your frames are named 'explosion_0001' to 'explosion_0034' the stop value is 34. * @param {string} [suffix=''] - The end of the filename. If the filename was 'explosion_0001-large' the prefix would be '-large'. * @param {number} [zeroPad=0] - The number of zeroes to pad the min and max values with. If your frames are named 'explosion_0001' to 'explosion_0034' then the zeroPad is 4. +* @return {array} An array of framenames. */ Phaser.Animation.generateFrameNames = function (prefix, start, stop, suffix, zeroPad) { @@ -31456,6 +33029,12 @@ Phaser.Loader = function (game) { */ this._xhr = new XMLHttpRequest(); + /** + * @property {XDomainRequest} - An ajax request used specifically by IE9 for CORs loading issues. + * @private + */ + this._ajax = null; + /** * @property {boolean} isLoading - True if the Loader is in the process of loading the queue. * @default @@ -32372,12 +33951,50 @@ Phaser.Loader.prototype = { break; case 'json': - this._xhr.open("GET", this.baseURL + file.url, true); - this._xhr.responseType = "text"; - this._xhr.onload = function () { - return _this.jsonLoadComplete(_this._fileIndex); - }; - this._xhr.send(); + + if (window.XDomainRequest) + { + this._ajax = new window.XDomainRequest(); + + // XDomainRequest has a few querks. Occasionally it will abort requests + // A way to avoid this is to make sure ALL callbacks are set even if not used + // More info here: http://stackoverflow.com/questions/15786966/xdomainrequest-aborts-post-on-ie-9 + this._ajax.timeout = 3000; + + this._ajax.onerror = function () { + return _this.dataLoadError(_this._fileIndex); + }; + + this._ajax.ontimeout = function () { + return _this.dataLoadError(_this._fileIndex); + }; + + this._ajax.onprogress = function() {}; + + this._ajax.onload = function(){ + return _this.jsonLoadComplete(_this._fileIndex); + }; + + this._ajax.open('GET', this.baseURL + file.url, true); + + this._ajax.send(); + } + else + { + this._xhr.open("GET", this.baseURL + file.url, true); + this._xhr.responseType = "text"; + + this._xhr.onload = function () { + return _this.jsonLoadComplete(_this._fileIndex); + }; + + this._xhr.onerror = function () { + return _this.dataLoadError(_this._fileIndex); + }; + + this._xhr.send(); + } + break; case 'tilemap': @@ -32901,21 +34518,6 @@ Phaser.LoaderParser = { */ bitmapFont: function (game, xml, cacheKey, xSpacing, ySpacing) { - if (!xml || /MSIE 9/i.test(navigator.userAgent)) - { - if (typeof(window.DOMParser) === 'function') - { - var domparser = new DOMParser(); - xml = domparser.parseFromString(this.ajaxRequest.responseText, 'text/xml'); - } - else - { - var div = document.createElement('div'); - div.innerHTML = this.ajaxRequest.responseText; - xml = div; - } - } - var data = {}; var info = xml.getElementsByTagName('info')[0]; var common = xml.getElementsByTagName('common')[0]; @@ -33005,15 +34607,14 @@ Phaser.Sound = function (game, key, volume, loop, connect) { this.key = key; /** - * @property {boolean} loop - Whether or not the sound will loop. + * @property {boolean} loop - Whether or not the sound or current sound marker will loop. */ this.loop = loop; /** - * @property {number} _volume - The global audio volume. A value between 0 (silence) and 1 (full volume). - * @private + * @property {number} volume - The sound or sound marker volume. A value between 0 (silence) and 1 (full volume). */ - this._volume = volume; + this.volume = volume; /** * @property {object} markers - The sound markers. @@ -33025,26 +34626,13 @@ Phaser.Sound = function (game, key, volume, loop, connect) { */ this.context = null; - /** - * @property {Description} _buffer - Decoded data buffer / Audio tag. - * @private - */ - this._buffer = null; - - /** - * @property {boolean} _muted - Boolean indicating whether the sound is muted or not. - * @private - * @default - */ - this._muted = false; - /** * @property {boolean} autoplay - Boolean indicating whether the sound should start automatically. */ this.autoplay = false; /** - * @property {number} totalDuration - The total duration of the sound, in milliseconds + * @property {number} totalDuration - The total duration of the sound in seconds. */ this.totalDuration = 0; @@ -33060,10 +34648,20 @@ Phaser.Sound = function (game, key, volume, loop, connect) { this.currentTime = 0; /** - * @property {number} duration - The duration of the sound. + * @property {number} duration - The duration of the current sound marker in seconds. */ this.duration = 0; + /** + * @property {number} durationMS - The duration of the current sound marker in ms. + */ + this.durationMS = 0; + + /** + * @property {number} position - The position of the current sound marker. + */ + this.position = 0; + /** * @property {number} stopTime - The time the sound stopped. */ @@ -33125,6 +34723,16 @@ Phaser.Sound = function (game, key, volume, loop, connect) { */ this.externalNode = null; + /** + * @property {object} masterGainNode - The master gain node in a Web Audio system. + */ + this.masterGainNode = null; + + /** + * @property {object} gainNode - The gain node in a Web Audio system. + */ + this.gainNode = null; + if (this.usingWebAudio) { this.context = this.game.sound.context; @@ -33204,6 +34812,54 @@ Phaser.Sound = function (game, key, volume, loop, connect) { */ this.onMarkerComplete = new Phaser.Signal(); + /** + * @property {number} _volume - The global audio volume. A value between 0 (silence) and 1 (full volume). + * @private + */ + this._volume = volume; + + /** + * @property {any} _buffer - Decoded data buffer / Audio tag. + * @private + */ + this._buffer = null; + + /** + * @property {boolean} _muted - Boolean indicating whether the sound is muted or not. + * @private + */ + this._muted = false; + + /** + * @property {number} _tempMarker - Internal marker var. + * @private + */ + this._tempMarker = 0; + + /** + * @property {number} _tempPosition - Internal marker var. + * @private + */ + this._tempPosition = 0; + + /** + * @property {number} _tempVolume - Internal marker var. + * @private + */ + this._tempVolume = 0; + + /** + * @property {boolean} _tempLoop - Internal marker var. + * @private + */ + this._tempLoop = 0; + + /** + * @property {boolean} _paused - Was this sound paused via code or a game event? + * @private + */ + this._paused = false; + }; Phaser.Sound.prototype = { @@ -33540,6 +35196,7 @@ Phaser.Sound.prototype = { /** * Restart the sound, or a marked section of it. + * * @method Phaser.Sound#restart * @param {string} [marker=''] - If you want to play a marker then give the key here, otherwise leave blank to play the full sound. * @param {number} [position=0] - The starting position to play the sound from - this is ignored if you provide a marker. @@ -33558,7 +35215,8 @@ Phaser.Sound.prototype = { }, /** - * Pauses the sound + * Pauses the sound. + * * @method Phaser.Sound#pause */ pause: function () { @@ -33576,7 +35234,8 @@ Phaser.Sound.prototype = { }, /** - * Resumes the sound + * Resumes the sound. + * * @method Phaser.Sound#resume */ resume: function () { @@ -33736,7 +35395,9 @@ Object.defineProperty(Phaser.Sound.prototype, "isDecoded", { Object.defineProperty(Phaser.Sound.prototype, "mute", { get: function () { - return this._muted; + + return (this._muted || this.game.sound.mute); + }, set: function (value) { @@ -34044,6 +35705,7 @@ Phaser.SoundManager.prototype = { /** * Stops all the sounds in the game. + * * @method Phaser.SoundManager#stopAll */ stopAll: function () { @@ -34060,6 +35722,7 @@ Phaser.SoundManager.prototype = { /** * Pauses all the sounds in the game. + * * @method Phaser.SoundManager#pauseAll */ pauseAll: function () { @@ -34075,7 +35738,8 @@ Phaser.SoundManager.prototype = { }, /** - * resumes every sound in the game. + * Resumes every sound in the game. + * * @method Phaser.SoundManager#resumeAll */ resumeAll: function () { @@ -34092,6 +35756,7 @@ Phaser.SoundManager.prototype = { /** * Decode a sound by its assets key. + * * @method Phaser.SoundManager#decode * @param {string} key - Assets key of the sound to be decoded. * @param {Phaser.Sound} [sound] - Its buffer will be set to decoded data. @@ -34124,6 +35789,7 @@ Phaser.SoundManager.prototype = { /** * Updates every sound in the game. + * * @method Phaser.SoundManager#update */ update: function () { @@ -34151,6 +35817,7 @@ Phaser.SoundManager.prototype = { /** * Adds a new Sound into the SoundManager. + * * @method Phaser.SoundManager#add * @param {string} key - Asset key for the sound. * @param {number} [volume=1] - Default value for the volume. @@ -34338,7 +36005,7 @@ Object.defineProperty(Phaser.SoundManager.prototype, "mute", { } else { - if (this._muted === false) + if (!this._muted) { return; } @@ -34639,7 +36306,7 @@ Phaser.Utils.Debug.prototype = { if (sound.currentMarker !== '') { - this.line('Marker: ' + sound.currentMarker + ' Duration: ' + sound.duration); + this.line('Marker: ' + sound.currentMarker + ' Duration: ' + sound.duration + ' (ms: ' + sound.durationMS + ')'); this.line('Start: ' + sound.markers[sound.currentMarker].start + ' Stop: ' + sound.markers[sound.currentMarker].stop); this.line('Position: ' + sound.position); } @@ -34668,6 +36335,25 @@ Phaser.Utils.Debug.prototype = { }, + /** + * Render Timer information. + * + * @method Phaser.Utils.Debug#timer + * @param {Phaser.Timer} timer - The Phaser.Timer to show the debug information for. + * @param {number} x - X position of the debug info to be rendered. + * @param {number} y - Y position of the debug info to be rendered. + * @param {string} [color='rgb(255,255,255)'] - color of the debug info to be rendered. (format is css color string). + */ + timer: function (timer, x, y, color) { + + this.start(x, y, color); + this.line('Timer (running: ' + timer.running + ' expired: ' + timer.expired + ')'); + this.line('Next Tick: ' + timer.next + ' Duration: ' + timer.duration); + this.line('Paused: ' + timer.paused + ' Length: ' + timer.length); + this.stop(); + + }, + /** * Renders the Pointer.circle object onto the stage in green if down or red if up along with debug text. * @@ -35120,25 +36806,479 @@ Phaser.Utils.Debug.prototype.constructor = Phaser.Utils.Debug; */ /** -* A collection of methods useful for manipulating and comparing colors. +* The Phaser.Color class is a set of static methods that assist in color manipulation and conversion. * * @class Phaser.Color */ Phaser.Color = { + /** + * Packs the r, g, b, a components into a single integer, for use with Int32Array. + * If device is little endian then ABGR order is used. Otherwise RGBA order is used. + * + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Color.packPixel + * @static + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {number} a - The alpha color component, in the range 0 - 255. + * @return {number} The packed color + */ + packPixel: function (r, g, b, a) { + + if (Phaser.Device.LITTLE_ENDIAN) + { + return (a << 24) | (b << 16) | (g << 8) | r; + } + else + { + return (r << 24) | (g << 16) | (b << 8) | a; + } + + }, + + /** + * Unpacks the r, g, b, a components into the specified color object, or a new + * object, for use with Int32Array. If little endian, then ABGR order is used when + * unpacking, otherwise, RGBA order is used. The resulting color object has the + * `r, g, b, a` properties which are unrelated to endianness. + * + * Note that the integer is assumed to be packed in the correct endianness. On little-endian + * the format is 0xAABBGGRR and on big-endian the format is 0xRRGGBBAA. If you want a + * endian-independent method, use fromRGBA(rgba) and toRGBA(r, g, b, a). + * + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Color.unpackPixel + * @static + * @param {number} rgba - The integer, packed in endian order by packPixel. + * @param {object} [out] - An object into which 3 properties will be created: r, g and b. If not provided a new object will be created. + * @param {boolean} [hsl=false] - Also convert the rgb values into hsl? + * @param {boolean} [hsv=false] - Also convert the rgb values into hsv? + * @return {object} An object with the red, green and blue values set in the r, g and b properties. + */ + unpackPixel: function (rgba, out, hsl, hsv) { + + if (typeof out === 'undefined' || out === null) { out = Phaser.Color.createColor(); } + if (typeof hsl === 'undefined' || hsl === null) { hsl = false; } + if (typeof hsv === 'undefined' || hsv === null) { hsv = false; } + + if (Phaser.Device.LITTLE_ENDIAN) + { + out.a = ((rgba & 0xff000000) >>> 24); + out.b = ((rgba & 0x00ff0000) >>> 16); + out.g = ((rgba & 0x0000ff00) >>> 8); + out.r = ((rgba & 0x000000ff)); + } + else + { + out.r = ((rgba & 0xff000000) >>> 24); + out.g = ((rgba & 0x00ff0000) >>> 16); + out.b = ((rgba & 0x0000ff00) >>> 8); + out.a = ((rgba & 0x000000ff)); + } + + out.color = rgba; + out.rgba = 'rgba(' + out.r + ',' + out.g + ',' + out.b + ',' + (out.a / 255) + ')'; + + if (hsl) + { + Phaser.Color.RGBtoHSL(out.r, out.g, out.b, out); + } + + if (hsv) + { + Phaser.Color.RGBtoHSV(out.r, out.g, out.b, out); + } + + return out; + + }, + + /** + * A utility to convert an integer in 0xRRGGBBAA format to a color object. + * This does not rely on endianness. + * + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Color.fromRGBA + * @static + * @param {number} rgba - An RGBA hex + * @param {object} [out] - The object to use, optional. + * @return {object} A color object. + */ + fromRGBA: function (rgba, out) { + + if (!out) + { + out = Phaser.Color.createColor(); + } + + out.r = ((rgba & 0xff000000) >>> 24); + out.g = ((rgba & 0x00ff0000) >>> 16); + out.b = ((rgba & 0x0000ff00) >>> 8); + out.a = ((rgba & 0x000000ff)); + + out.rgba = 'rgba(' + out.r + ',' + out.g + ',' + out.b + ',' + out.a + ')'; + + return out; + + }, + + /** + * A utility to convert RGBA components to a 32 bit integer in RRGGBBAA format. + * + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Color.toRGBA + * @static + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {number} a - The alpha color component, in the range 0 - 255. + * @return {number} A RGBA-packed 32 bit integer + */ + toRGBA: function (r, g, b, a) { + + return (r << 24) | (g << 16) | (b << 8) | a; + + }, + + /** + * Converts an RGB color value to HSL (hue, saturation and lightness). + * Conversion forumla from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes RGB values are contained in the set [0, 255] and returns h, s and l in the set [0, 1]. + * Based on code by Michael Jackson (https://github.com/mjijackson) + * + * @method Phaser.Color.RGBtoHSL + * @static + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {object} [out] - An object into which 3 properties will be created, h, s and l. If not provided a new object will be created. + * @return {object} An object with the hue, saturation and lightness values set in the h, s and l properties. + */ + RGBtoHSL: function (r, g, b, out) { + + if (!out) + { + out = Phaser.Color.createColor(r, g, b, 1); + } + + r /= 255; + g /= 255; + b /= 255; + + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + + // achromatic by default + out.h = 0; + out.s = 0; + out.l = (max + min) / 2; + + if (max !== min) + { + var d = max - min; + + out.s = out.l > 0.5 ? d / (2 - max - min) : d / (max + min); + + if (max === r) + { + out.h = (g - b) / d + (g < b ? 6 : 0); + } + else if (max === g) + { + out.h = (b - r) / d + 2; + } + else if (max === b) + { + out.h = (r - g) / d + 4; + } + + out.h /= 6; + } + + return out; + + }, + + /** + * Converts an HSL (hue, saturation and lightness) color value to RGB. + * Conversion forumla from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes HSL values are contained in the set [0, 1] and returns r, g and b values in the set [0, 255]. + * Based on code by Michael Jackson (https://github.com/mjijackson) + * + * @method Phaser.Color.HSLtoRGB + * @static + * @param {number} h - The hue, in the range 0 - 1. + * @param {number} s - The saturation, in the range 0 - 1. + * @param {number} l - The lightness, in the range 0 - 1. + * @param {object} [out] - An object into which 3 properties will be created: r, g and b. If not provided a new object will be created. + * @return {object} An object with the red, green and blue values set in the r, g and b properties. + */ + HSLtoRGB: function (h, s, l, out) { + + if (!out) + { + out = Phaser.Color.createColor(l, l, l); + } + else + { + // achromatic by default + out.r = l; + out.g = l; + out.b = l; + } + + if (s !== 0) + { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + out.r = Phaser.Color.hueToColor(p, q, h + 1 / 3); + out.g = Phaser.Color.hueToColor(p, q, h); + out.b = Phaser.Color.hueToColor(p, q, h - 1 / 3); + } + + // out.r = (out.r * 255 | 0); + // out.g = (out.g * 255 | 0); + // out.b = (out.b * 255 | 0); + + out.r = Math.floor((out.r * 255 | 0)); + out.g = Math.floor((out.g * 255 | 0)); + out.b = Math.floor((out.b * 255 | 0)); + + Phaser.Color.updateColor(out); + + return out; + + }, + + /** + * Converts an RGB color value to HSV (hue, saturation and value). + * Conversion forumla from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes RGB values are contained in the set [0, 255] and returns h, s and v in the set [0, 1]. + * Based on code by Michael Jackson (https://github.com/mjijackson) + * + * @method Phaser.Color.RGBtoHSV + * @static + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {object} [out] - An object into which 3 properties will be created, h, s and v. If not provided a new object will be created. + * @return {object} An object with the hue, saturation and value set in the h, s and v properties. + */ + RGBtoHSV: function (r, g, b, out) { + + if (!out) + { + out = Phaser.Color.createColor(r, g, b, 255); + } + + r /= 255; + g /= 255; + b /= 255; + + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var d = max - min; + + // achromatic by default + out.h = 0; + out.s = max === 0 ? 0 : d / max; + out.v = max; + + if (max !== min) + { + if (max === r) + { + out.h = (g - b) / d + (g < b ? 6 : 0); + } + else if (max === g) + { + out.h = (b - r) / d + 2; + } + else if (max === b) + { + out.h = (r - g) / d + 4; + } + + out.h /= 6; + } + + return out; + + }, + + /** + * Converts an HSV (hue, saturation and value) color value to RGB. + * Conversion forumla from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes HSV values are contained in the set [0, 1] and returns r, g and b values in the set [0, 255]. + * Based on code by Michael Jackson (https://github.com/mjijackson) + * + * @method Phaser.Color.HSVtoRGB + * @static + * @param {number} h - The hue, in the range 0 - 1. + * @param {number} s - The saturation, in the range 0 - 1. + * @param {number} v - The value, in the range 0 - 1. + * @param {object} [out] - An object into which 3 properties will be created: r, g and b. If not provided a new object will be created. + * @return {object} An object with the red, green and blue values set in the r, g and b properties. + */ + HSVtoRGB: function (h, s, v, out) { + + if (typeof out === 'undefined') { out = Phaser.Color.createColor(0, 0, 0, 1, h, s, 0, v); } + + var r, g, b; + var i = Math.floor(h * 6); + var f = h * 6 - i; + var p = v * (1 - s); + var q = v * (1 - f * s); + var t = v * (1 - (1 - f) * s); + + switch (i % 6) + { + case 0: + r = v; + g = t; + b = p; + break; + case 1: + r = q; + g = v; + b = p; + break; + case 2: + r = p; + g = v; + b = t; + break; + case 3: + r = p; + g = q; + b = v; + break; + case 4: + r = t; + g = p; + b = v; + break; + case 5: + r = v; + g = p; + b = q; + break; + } + + out.r = Math.floor(r * 255); + out.g = Math.floor(g * 255); + out.b = Math.floor(b * 255); + + Phaser.Color.updateColor(out); + + return out; + + }, + + /** + * Converts a hue to an RGB color. + * Based on code by Michael Jackson (https://github.com/mjijackson) + * + * @method Phaser.Color.hueToColor + * @static + * @param {number} p + * @param {number} q + * @param {number} t + * @return {number} The color component value. + */ + hueToColor: function (p, q, t) { + + if (t < 0) + { + t += 1; + } + + if (t > 1) + { + t -= 1; + } + + if (t < 1 / 6) + { + return p + (q - p) * 6 * t; + } + + if (t < 1 / 2) + { + return q; + } + + if (t < 2 / 3) + { + return p + (q - p) * (2 / 3 - t) * 6; + } + + return p; + + }, + + /** + * A utility function to create a lightweight 'color' object with the default components. + * Any components that are not specified will default to zero. + * + * This is useful when you want to use a shared color object for the getPixel and getPixelAt methods. + * + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Color.createColor + * @static + * @param {number} [r=0] - The red color component, in the range 0 - 255. + * @param {number} [g=0] - The green color component, in the range 0 - 255. + * @param {number} [b=0] - The blue color component, in the range 0 - 255. + * @param {number} [a=1] - The alpha color component, in the range 0 - 1. + * @param {number} [h=0] - The hue, in the range 0 - 1. + * @param {number} [s=0] - The saturation, in the range 0 - 1. + * @param {number} [l=0] - The lightness, in the range 0 - 1. + * @param {number} [v=0] - The value, in the range 0 - 1. + * @return {object} The resulting object with r, g, b, a properties and h, s, l and v. + */ + createColor: function (r, g, b, a, h, s, l, v) { + + var out = { r: r || 0, g: g || 0, b: b || 0, a: a || 1, h: h || 0, s: s || 0, l: l || 0, v: v || 0, color: 0 }; + + out.rgba = 'rgba(' + out.r + ',' + out.g + ',' + out.b + ',' + out.a + ')'; + + return out; + + }, + + /** + * Takes a color object and updates the rgba property. + * + * @method Phaser.Color.updateColor + * @static + * @param {object} out - The color object to update. + * @returns {number} A native color value integer (format: 0xAARRGGBB). + */ + updateColor: function (out) { + + out.rgba = 'rgba(' + out.r + ',' + out.g + ',' + out.b + ',' + out.a + ')'; + + return out; + + }, + /** * Given an alpha and 3 color values this will return an integer representation of it. * * @method Phaser.Color.getColor32 * @static - * @param {number} alpha - The Alpha value (between 0 and 255). - * @param {number} red - The Red channel value (between 0 and 255). - * @param {number} green - The Green channel value (between 0 and 255). - * @param {number} blue - The Blue channel value (between 0 and 255). + * @param {number} a - The alpha color component, in the range 0 - 255. + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. * @returns {number} A native color value integer (format: 0xAARRGGBB). */ - getColor32: function (alpha, red, green, blue) { - return alpha << 24 | red << 16 | green << 8 | blue; + getColor32: function (a, r, g, b) { + + return a << 24 | r << 16 | g << 8 | b; + }, /** @@ -35146,119 +37286,169 @@ Phaser.Color = { * * @method Phaser.Color.getColor * @static - * @param {number} red - The Red channel value (between 0 and 255). - * @param {number} green - The Green channel value (between 0 and 255). - * @param {number} blue - The Blue channel value (between 0 and 255). + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. * @returns {number} A native color value integer (format: 0xRRGGBB). */ - getColor: function (red, green, blue) { - return red << 16 | green << 8 | blue; + getColor: function (r, g, b) { + + return r << 16 | g << 8 | b; + }, /** - * Converts the given hex string into an integer color value. + * Converts the given color values into a string. + * If prefix was '#' it will be in the format `#RRGGBB` otherwise `0xAARRGGBB`. * - * @method Phaser.Color.hexToRGB + * @method Phaser.Color.RGBtoString * @static - * @param {string} h - The string hex color to convert. - * @returns {number} The rgb color value. + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {number} [a=255] - The alpha color component, in the range 0 - 255. + * @param {string} [prefix='#'] - The prefix used in the return string. If '#' it will return `#RRGGBB`, else `0xAARRGGBB`. + * @return {string} A string containing the color values. If prefix was '#' it will be in the format `#RRGGBB` otherwise `0xAARRGGBB`. */ - hexToRGB: function (h) { + RGBtoString: function (r, g, b, a, prefix) { - var hex16 = (h.charAt(0) == "#") ? h.substring(1, 7) : h; + if (typeof a === 'undefined') { a = 255; } + if (typeof prefix === 'undefined') { prefix = '#'; } - if (hex16.length == 3) + if (prefix === '#') { - hex16 = hex16.charAt(0) + hex16.charAt(0) + hex16.charAt(1) + hex16.charAt(1) + hex16.charAt(2) + hex16.charAt(2); + return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); + } + else + { + return '0x' + Phaser.Color.componentToHex(a) + Phaser.Color.componentToHex(r) + Phaser.Color.componentToHex(g) + Phaser.Color.componentToHex(b); } - var red = parseInt(hex16.substring(0, 2), 16); - var green = parseInt(hex16.substring(2, 4), 16); - var blue = parseInt(hex16.substring(4, 6), 16); + }, - return red << 16 | green << 8 | blue; + /** + * Converts a hex string into an integer color value. + * + * @method Phaser.Color.hexToRGB + * @static + * @param {string} hex - The hex string to convert. Can be in the short-hand format `#03f` or `#0033ff`. + * @return {number} The rgb color value in the format 0xAARRGGBB. + */ + hexToRGB: function (hex) { + + var rgb = Phaser.Color.hexToColor(hex); + + if (rgb) + { + return Phaser.Color.getColor32(rgb.a, rgb.r, rgb.g, rgb.b); + } }, /** - * Returns a string containing handy information about the given color including string hex value, - * RGB format information and HSL information. Each section starts on a newline, 3 lines in total. + * Converts a hex string into a Phaser Color object. * - * @method Phaser.Color.getColorInfo + * @method Phaser.Color.hexToColor * @static - * @param {number} color - A color value in the format 0xAARRGGBB. - * @returns {string} String containing the 3 lines of information. + * @param {string} hex - The hex string to convert. Can be in the short-hand format `#03f` or `#0033ff`. + * @param {object} [out] - An object into which 3 properties will be created: r, g and b. If not provided a new object will be created. + * @return {object} An object with the red, green and blue values set in the r, g and b properties. */ - getColorInfo: function (color) { + hexToColor: function (hex, out) { - var argb = Phaser.Color.getRGB(color); - var hsl = Phaser.Color.RGBtoHSV(color); + if (!out) + { + out = Phaser.Color.createColor(); + } - // Hex format - var result = Phaser.Color.RGBtoHexstring(color) + "\n"; + // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") + var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; - // RGB format - result = result.concat("Alpha: " + argb.alpha + " Red: " + argb.red + " Green: " + argb.green + " Blue: " + argb.blue) + "\n"; + hex = hex.replace(shorthandRegex, function(m, r, g, b) { + return r + r + g + g + b + b; + }); - // HSL info - result = result.concat("Hue: " + hsl.hue + " Saturation: " + hsl.saturation + " Lightnes: " + hsl.lightness); + var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); - return result; + if (result) + { + out.r = parseInt(result[1], 16); + out.g = parseInt(result[2], 16); + out.b = parseInt(result[3], 16); + } + + return out; }, /** - * Return a string representation of the color in the format 0xAARRGGBB. + * Return a string containing a hex representation of the given color component. * - * @method Phaser.Color.RGBtoHexstring + * @method Phaser.Color.componentToHex * @static - * @param {number} color - The color to get the string representation for - * @returns {string} A string of length 10 characters in the format 0xAARRGGBB + * @param {number} color - The color channel to get the hex value for, must be a value between 0 and 255. + * @returns {string} A string of length 2 characters, i.e. 255 = ff, 100 = 64. */ - RGBtoHexstring: function (color) { + componentToHex: function (color) { - var argb = Phaser.Color.getRGB(color); - - return "0x" + Phaser.Color.colorToHexstring(argb.alpha) + Phaser.Color.colorToHexstring(argb.red) + Phaser.Color.colorToHexstring(argb.green) + Phaser.Color.colorToHexstring(argb.blue); + var hex = color.toString(16); + return hex.length == 1 ? "0" + hex : hex; }, /** - * Return a string representation of the color in the format #RRGGBB. + * Get HSV color wheel values in an array which will be 360 elements in size. * - * @method Phaser.Color.RGBtoWebstring + * @method Phaser.Color.HSVColorWheel * @static - * @param {number} color - The color to get the string representation for. - * @returns {string} A string of length 10 characters in the format 0xAARRGGBB. + * @param {number} [s=1] - The saturation, in the range 0 - 1. + * @param {number} [v=1] - The value, in the range 0 - 1. + * @return {array} An array containing 360 elements corresponding to the HSV color wheel. */ - RGBtoWebstring: function (color) { + HSVColorWheel: function (s, v) { - var argb = Phaser.Color.getRGB(color); + if (typeof s === 'undefined') { s = 1.0; } + if (typeof v === 'undefined') { v = 1.0; } - return "#" + Phaser.Color.colorToHexstring(argb.red) + Phaser.Color.colorToHexstring(argb.green) + Phaser.Color.colorToHexstring(argb.blue); + var colors = []; + + for (var c = 0; c <= 359; c++) + { + colors.push(Phaser.Color.HSVtoRGB(c / 359, s, v)); + } + + return colors; }, /** - * Return a string containing a hex representation of the given color. + * Get HSL color wheel values in an array which will be 360 elements in size. * - * @method Phaser.Color.colorToHexstring + * @method Phaser.Color.HSLColorWheel * @static - * @param {number} color - The color channel to get the hex value for, must be a value between 0 and 255). - * @returns {string} A string of length 2 characters, i.e. 255 = FF, 0 = 00. + * @param {number} [s=0.5] - The saturation, in the range 0 - 1. + * @param {number} [l=0.5] - The lightness, in the range 0 - 1. + * @return {array} An array containing 360 elements corresponding to the HSL color wheel. */ - colorToHexstring: function (color) { + HSLColorWheel: function (s, l) { - var digits = "0123456789ABCDEF"; - var lsd = color % 16; - var msd = (color - lsd) / 16; - var hexified = digits.charAt(msd) + digits.charAt(lsd); - return hexified; + if (typeof s === 'undefined') { s = 0.5; } + if (typeof l === 'undefined') { l = 0.5; } + + var colors = []; + + for (var c = 0; c <= 359; c++) + { + colors.push(Phaser.Color.HSLtoRGB(c / 359, s, l)); + } + + return colors; }, /** * Interpolates the two given colours based on the supplied step and currentStep properties. + * * @method Phaser.Color.interpolateColor * @static * @param {number} color1 - The first color value. @@ -35348,11 +37538,8 @@ Phaser.Color = { if (typeof alpha === "undefined") { alpha = 255; } // Sanity checks - if (max > 255) { - return Phaser.Color.getColor(255, 255, 255); - } - - if (min > max) { + if (max > 255 || min > max) + { return Phaser.Color.getColor(255, 255, 255); } @@ -35461,6 +37648,85 @@ Phaser.Color = { */ getBlue: function (color) { return color & 0xFF; + }, + + // The following are all DEPRECATED + + /** + * DEPRECATED: This method will be removed in Phaser 2.1. + * Returns a string containing handy information about the given color including string hex value, + * RGB format information. Each section starts on a newline, 3 lines in total. + * + * @method Phaser.Color.getColorInfo + * @static + * @param {number} color - A color value in the format 0xAARRGGBB. + * @returns {string} String containing the 3 lines of information. + */ + getColorInfo: function (color) { + + var argb = Phaser.Color.getRGB(color); + + // Hex format + var result = Phaser.Color.RGBtoHexstring(color) + "\n"; + + // RGB format + result = result.concat("Alpha: " + argb.alpha + " Red: " + argb.red + " Green: " + argb.green + " Blue: " + argb.blue) + "\n"; + + return result; + + }, + + /** + * DEPRECATED: This method will be removed in Phaser 2.1. Please use Phaser.Color.RGBtoString instead. + * Return a string representation of the color in the format 0xAARRGGBB. + * + * @method Phaser.Color.RGBtoHexstring + * @static + * @param {number} color - The color to get the string representation for + * @returns {string} A string of length 10 characters in the format 0xAARRGGBB + */ + RGBtoHexstring: function (color) { + + var argb = Phaser.Color.getRGB(color); + + return "0x" + Phaser.Color.colorToHexstring(argb.alpha) + Phaser.Color.colorToHexstring(argb.red) + Phaser.Color.colorToHexstring(argb.green) + Phaser.Color.colorToHexstring(argb.blue); + + }, + + /** + * DEPRECATED: This method will be removed in Phaser 2.1. Please use Phaser.Color.RGBtoString instead. + * Return a string representation of the color in the format #RRGGBB. + * + * @method Phaser.Color.RGBtoWebstring + * @static + * @param {number} color - The color to get the string representation for. + * @returns {string} A string of length 10 characters in the format 0xAARRGGBB. + */ + RGBtoWebstring: function (color) { + + var argb = Phaser.Color.getRGB(color); + + return "#" + Phaser.Color.colorToHexstring(argb.red) + Phaser.Color.colorToHexstring(argb.green) + Phaser.Color.colorToHexstring(argb.blue); + + }, + + /** + * DEPRECATED: This method will be removed in Phaser 2.1. Please use Phaser.Color.componentToHex instead. + * Return a string containing a hex representation of the given color. + * + * @method Phaser.Color.colorToHexstring + * @static + * @param {number} color - The color channel to get the hex value for, must be a value between 0 and 255). + * @returns {string} A string of length 2 characters, i.e. 255 = FF, 0 = 00. + */ + colorToHexstring: function (color) { + + var digits = "0123456789ABCDEF"; + var lsd = color % 16; + var msd = (color - lsd) / 16; + var hexified = digits.charAt(msd) + digits.charAt(lsd); + return hexified; + } }; @@ -38813,7 +41079,7 @@ Phaser.Particles.Arcade.Emitter.prototype.emitParticle = function () { { particle.setScaleData(this.scaleData); } - else if (this.minParticleScale !== this.maxParticleScale) + else if (this.minParticleScale !== 1 || this.maxParticleScale !== 1) { particle.scale.set(this.game.rnd.realInRange(this.minParticleScale, this.maxParticleScale)); } @@ -39143,7 +41409,7 @@ Phaser.Tile = function (layer, index, x, y, width, height) { this.layer = layer; /** - * @property {number} index - The index of this tile within the map data corresponding to the tileset. + * @property {number} index - The index of this tile within the map data corresponding to the tileset, or -1 if this represents a blank/null tile. */ this.index = index; @@ -39578,6 +41844,11 @@ Phaser.Tilemap = function (game, key, tileWidth, tileHeight, width, height) { */ this.orientation = data.orientation; + /** + * @property {number} format - The format of the map data, either Phaser.Tilemap.CSV or Phaser.Tilemap.TILED_JSON. + */ + this.format = data.format; + /** * @property {number} version - The version of the map data (as specified in Tiled, usually 1). */ @@ -39758,6 +42029,12 @@ Phaser.Tilemap.prototype = { if (typeof tileset === 'string') { key = tileset; + + if (!this.game.cache.checkImageKey(key)) + { + console.warn('Phaser.Tilemap.addTilesetImage: Invalid image key given: "' + key + '"'); + return null; + } } else { @@ -39768,6 +42045,12 @@ Phaser.Tilemap.prototype = { if (typeof tileset === 'string') { tileset = this.getTilesetIndex(tileset); + + if (tileset === null && this.format === Phaser.Tilemap.TILED_JSON) + { + console.warn('Phaser.Tilemap.addTilesetImage: No data found in the JSON matching the tileset name: "' + key + '"'); + return null; + } } if (this.tilesets[tileset]) @@ -39949,21 +42232,6 @@ Phaser.Tilemap.prototype = { return; } - var row; - var output = []; - - for (var y = 0; y < height; y++) - { - row = []; - - for (var x = 0; x < width; x++) - { - row.push(null); - } - - output.push(row); - } - var layer = { name: name, @@ -39979,10 +42247,28 @@ Phaser.Tilemap.prototype = { indexes: [], callbacks: [], bodies: [], - data: output + data: null }; + var row; + var output = []; + + for (var y = 0; y < height; y++) + { + row = []; + + for (var x = 0; x < width; x++) + { + // row.push(null); + row.push(new Phaser.Tile(layer, -1, x, y, tileWidth, tileHeight)); + } + + output.push(row); + } + + layer.data = output; + this.layers.push(layer); this.currentLayer = this.layers.length - 1; @@ -41092,7 +43378,8 @@ Phaser.Tilemap.prototype = { }, /** - * Removes all layers from this tile map and nulls the game reference. + * Removes all layer data from this tile map and nulls the game reference. + * Note: You are responsible for destroying any TilemapLayer objects you generated yourself, as Tilemap doesn't keep a reference to them. * * @method Phaser.Tilemap#destroy */ @@ -41671,19 +43958,22 @@ Phaser.TilemapLayer.prototype.render = function () { { tile = this._column[x]; - set = this.map.tilesets[this.map.tiles[tile.index][2]]; - - if (this.debug === false && tile.alpha !== this.context.globalAlpha) + if (tile.index > -1) { - this.context.globalAlpha = tile.alpha; - } + set = this.map.tilesets[this.map.tiles[tile.index][2]]; + + if (this.debug === false && tile.alpha !== this.context.globalAlpha) + { + this.context.globalAlpha = tile.alpha; + } - set.draw(this.context, Math.floor(this._mc.tx), Math.floor(this._mc.ty), tile.index); + set.draw(this.context, Math.floor(this._mc.tx), Math.floor(this._mc.ty), tile.index); - if (tile.debug) - { - this.context.fillStyle = 'rgba(0, 255, 0, 0.4)'; - this.context.fillRect(Math.floor(this._mc.tx), Math.floor(this._mc.ty), this.map.tileWidth, this.map.tileHeight); + if (tile.debug) + { + this.context.fillStyle = 'rgba(0, 255, 0, 0.4)'; + this.context.fillRect(Math.floor(this._mc.tx), Math.floor(this._mc.ty), this.map.tileWidth, this.map.tileHeight); + } } } @@ -41996,7 +44286,7 @@ Phaser.TilemapParser = { for (var x = 0; x < column.length; x++) { - output[y][x] = new Phaser.Tile(0, parseInt(column[x], 10), x, y, tileWidth, tileHeight); + output[y][x] = new Phaser.Tile(map.layers[0], parseInt(column[x], 10), x, y, tileWidth, tileHeight); } if (width === 0) @@ -42005,6 +44295,7 @@ Phaser.TilemapParser = { } } + map.format = Phaser.Tilemap.CSV; map.name = key; map.width = width; map.height = height; @@ -42025,6 +44316,7 @@ Phaser.TilemapParser = { /** * Returns an empty map data object. + * * @method Phaser.TilemapParser.getEmptyData * @return {object} Generated map data. */ @@ -42105,6 +44397,7 @@ Phaser.TilemapParser = { map.tileWidth = json.tilewidth; map.tileHeight = json.tileheight; map.orientation = json.orientation; + map.format = Phaser.Tilemap.TILED_JSON; map.version = json.version; map.properties = json.properties; map.widthInPixels = map.width * map.tileWidth; @@ -42149,7 +44442,7 @@ Phaser.TilemapParser = { // Loop through the data field in the JSON. - // This is an array containing the tile indexes, one after the other. null = no tile, everything else = the tile index (starting at 1 for Tiled, 0 for CSV) + // This is an array containing the tile indexes, one after the other. -1 = no tile, everything else = the tile index (starting at 1 for Tiled, 0 for CSV) // If the map contains multiple tilesets then the indexes are relative to that which the set starts from. // Need to set which tileset in the cache = which tileset in the JSON, if you do this manually it means you can use the same map data but a new tileset. @@ -42162,7 +44455,7 @@ Phaser.TilemapParser = { } else { - row.push(null); + row.push(new Phaser.Tile(layer, -1, x, output.length, json.tilewidth, json.tileheight)); } x++; @@ -42558,3 +44851,7 @@ Phaser.Tileset.prototype.constructor = Phaser.Tileset; root.Phaser = Phaser; } }).call(this); + +/* +* "Don't follow strange women who lure you into woods with beautiful poetry." - @djfood +*/ diff --git a/build/custom/phaser-no-libs.min.js b/build/custom/phaser-no-libs.min.js index 55a60b15e5..a23411c3b5 100644 --- a/build/custom/phaser-no-libs.min.js +++ b/build/custom/phaser-no-libs.min.js @@ -1,12 +1,12 @@ /* Phaser (no libs) v2.0.4 - http://phaser.io - @photonstorm - (c) 2014 Photon Storm Ltd. */ -(function(){var a=this,b=b||{VERSION:"<%= version %>",DEV_VERSION:"2.0.4",GAMES:[],AUTO:0,CANVAS:1,WEBGL:2,HEADLESS:3,NONE:0,LEFT:1,RIGHT:2,UP:3,DOWN:4,SPRITE:0,BUTTON:1,IMAGE:2,GRAPHICS:3,TEXT:4,TILESPRITE:5,BITMAPTEXT:6,GROUP:7,RENDERTEXTURE:8,TILEMAP:9,TILEMAPLAYER:10,EMITTER:11,POLYGON:12,BITMAPDATA:13,CANVAS_FILTER:14,WEBGL_FILTER:15,ELLIPSE:16,SPRITEBATCH:17,RETROFONT:18,blendModes:{NORMAL:0,ADD:1,MULTIPLY:2,SCREEN:3,OVERLAY:4,DARKEN:5,LIGHTEN:6,COLOR_DODGE:7,COLOR_BURN:8,HARD_LIGHT:9,SOFT_LIGHT:10,DIFFERENCE:11,EXCLUSION:12,HUE:13,SATURATION:14,COLOR:15,LUMINOSITY:16},scaleModes:{DEFAULT:0,LINEAR:0,NEAREST:1}};PIXI.InteractionManager=function(){},b.Utils={parseDimension:function(a,b){var c=0,d=0;return"string"==typeof a?"%"===a.substr(-1)?(c=parseInt(a,10)/100,d=0===b?window.innerWidth*c:window.innerHeight*c):d=parseInt(a,10):d=a,d},shuffle:function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},pad:function(a,b,c,d){if("undefined"==typeof b)var b=0;if("undefined"==typeof c)var c=" ";if("undefined"==typeof d)var d=3;var e=0;if(b+1>=a.length)switch(d){case 1:a=new Array(b+1-a.length).join(c)+a;break;case 3:var f=Math.ceil((e=b-a.length)/2),g=e-f;a=new Array(g+1).join(c)+a+new Array(f+1).join(c);break;default:a+=new Array(b+1-a.length).join(c)}return a},isPlainObject:function(a){if("object"!=typeof a||a.nodeType||a===a.window)return!1;try{if(a.constructor&&!{}.hasOwnProperty.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},extend:function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for("boolean"==typeof h&&(k=h,h=arguments[1]||{},i=2),j===i&&(h=this,--i);j>i;i++)if(null!=(a=arguments[i]))for(c in a)d=h[c],e=a[c],h!==e&&(k&&e&&(b.Utils.isPlainObject(e)||(f=Array.isArray(e)))?(f?(f=!1,g=d&&Array.isArray(d)?d:[]):g=d&&b.Utils.isPlainObject(d)?d:{},h[c]=b.Utils.extend(k,g,e)):void 0!==e&&(h[c]=e));return h}},"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),Array.isArray||(Array.isArray=function(a){return"[object Array]"==Object.prototype.toString.call(a)}),Array.prototype.forEach||(Array.prototype.forEach=function(a){"use strict";if(void 0===this||null===this)throw new TypeError;var b=Object(this),c=b.length>>>0;if("function"!=typeof a)throw new TypeError;for(var d=arguments.length>=2?arguments[1]:void 0,e=0;c>e;e++)e in b&&a.call(d,b[e],e,b)}),b.Circle=function(a,b,c){a=a||0,b=b||0,c=c||0,this.x=a,this.y=b,this._diameter=c,this._radius=c>0?.5*c:0},b.Circle.prototype={circumference:function(){return 2*Math.PI*this._radius},setTo:function(a,b,c){return this.x=a,this.y=b,this._diameter=c,this._radius=.5*c,this},copyFrom:function(a){return this.setTo(a.x,a.y,a.diameter)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.diameter=this._diameter,a},distance:function(a,c){return"undefined"==typeof c&&(c=!1),c?b.Math.distanceRound(this.x,this.y,a.x,a.y):b.Math.distance(this.x,this.y,a.x,a.y)},clone:function(a){return"undefined"==typeof a?a=new b.Circle(this.x,this.y,this.diameter):a.setTo(this.x,this.y,this.diameter),a},contains:function(a,c){return b.Circle.contains(this,a,c)},circumferencePoint:function(a,c,d){return b.Circle.circumferencePoint(this,a,c,d)},offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},toString:function(){return"[{Phaser.Circle (x="+this.x+" y="+this.y+" diameter="+this.diameter+" radius="+this.radius+")}]"}},b.Circle.prototype.constructor=b.Circle,Object.defineProperty(b.Circle.prototype,"diameter",{get:function(){return this._diameter},set:function(a){a>0&&(this._diameter=a,this._radius=.5*a)}}),Object.defineProperty(b.Circle.prototype,"radius",{get:function(){return this._radius},set:function(a){a>0&&(this._radius=a,this._diameter=2*a)}}),Object.defineProperty(b.Circle.prototype,"left",{get:function(){return this.x-this._radius},set:function(a){a>this.x?(this._radius=0,this._diameter=0):this.radius=this.x-a}}),Object.defineProperty(b.Circle.prototype,"right",{get:function(){return this.x+this._radius},set:function(a){athis.y?(this._radius=0,this._diameter=0):this.radius=this.y-a}}),Object.defineProperty(b.Circle.prototype,"bottom",{get:function(){return this.y+this._radius},set:function(a){a0?Math.PI*this._radius*this._radius:0}}),Object.defineProperty(b.Circle.prototype,"empty",{get:function(){return 0===this._diameter},set:function(a){a===!0&&this.setTo(0,0,0)}}),b.Circle.contains=function(a,b,c){if(a.radius>0&&b>=a.left&&b<=a.right&&c>=a.top&&c<=a.bottom){var d=(a.x-b)*(a.x-b),e=(a.y-c)*(a.y-c);return d+e<=a.radius*a.radius}return!1},b.Circle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.diameter==b.diameter},b.Circle.intersects=function(a,c){return b.Math.distance(a.x,a.y,c.x,c.y)<=a.radius+c.radius},b.Circle.circumferencePoint=function(a,c,d,e){return"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=new b.Point),d===!0&&(c=b.Math.degToRad(c)),e.x=a.x+a.radius*Math.cos(c),e.y=a.y+a.radius*Math.sin(c),e},b.Circle.intersectsRectangle=function(a,b){var c=Math.abs(a.x-b.x-b.halfWidth),d=b.halfWidth+a.radius;if(c>d)return!1;var e=Math.abs(a.y-b.y-b.halfHeight),f=b.halfHeight+a.radius;if(e>f)return!1;if(c<=b.halfWidth||e<=b.halfHeight)return!0;var g=c-b.halfWidth,h=e-b.halfHeight,i=g*g,j=h*h,k=a.radius*a.radius;return k>=i+j},PIXI.Circle=b.Circle,b.Point=function(a,b){a=a||0,b=b||0,this.x=a,this.y=b},b.Point.prototype={copyFrom:function(a){return this.setTo(a.x,a.y)},invert:function(){return this.setTo(this.y,this.x)},setTo:function(a,b){return this.x=a||0,this.y=b||(0!==b?this.x:0),this},set:function(a,b){return this.x=a||0,this.y=b||(0!==b?this.x:0),this},add:function(a,b){return this.x+=a,this.y+=b,this},subtract:function(a,b){return this.x-=a,this.y-=b,this},multiply:function(a,b){return this.x*=a,this.y*=b,this},divide:function(a,b){return this.x/=a,this.y/=b,this},clampX:function(a,c){return this.x=b.Math.clamp(this.x,a,c),this},clampY:function(a,c){return this.y=b.Math.clamp(this.y,a,c),this},clamp:function(a,c){return this.x=b.Math.clamp(this.x,a,c),this.y=b.Math.clamp(this.y,a,c),this},clone:function(a){return"undefined"==typeof a?a=new b.Point(this.x,this.y):a.setTo(this.x,this.y),a},copyTo:function(a){return a.x=this.x,a.y=this.y,a},distance:function(a,c){return b.Point.distance(this,a,c)},equals:function(a){return a.x==this.x&&a.y==this.y},rotate:function(a,c,d,e,f){return b.Point.rotate(this,a,c,d,e,f)},getMagnitude:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},setMagnitude:function(a){return this.normalize().multiply(a,a)},normalize:function(){if(!this.isZero()){var a=this.getMagnitude();this.x/=a,this.y/=a}return this},isZero:function(){return 0===this.x&&0===this.y},toString:function(){return"[{Point (x="+this.x+" y="+this.y+")}]"}},b.Point.prototype.constructor=b.Point,b.Point.add=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x+c.x,d.y=a.y+c.y,d},b.Point.subtract=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x-c.x,d.y=a.y-c.y,d},b.Point.multiply=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x*c.x,d.y=a.y*c.y,d},b.Point.divide=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x/c.x,d.y=a.y/c.y,d},b.Point.equals=function(a,b){return a.x==b.x&&a.y==b.y},b.Point.distance=function(a,c,d){return"undefined"==typeof d&&(d=!1),d?b.Math.distanceRound(a.x,a.y,c.x,c.y):b.Math.distance(a.x,a.y,c.x,c.y)},b.Point.rotate=function(a,c,d,e,f,g){return f=f||!1,g=g||null,f&&(e=b.Math.degToRad(e)),null===g&&(g=Math.sqrt((c-a.x)*(c-a.x)+(d-a.y)*(d-a.y))),a.setTo(c+g*Math.cos(e),d+g*Math.sin(e))},b.Point.centroid=function(a,c){if("undefined"==typeof c&&(c=new b.Point),"[object Array]"!==Object.prototype.toString.call(a))throw new Error("Phaser.Point. Parameter 'points' must be an array");var d=a.length;if(1>d)throw new Error("Phaser.Point. Parameter 'points' array must not be empty");if(1===d)return c.copyFrom(a[0]),c;for(var e=0;d>e;e++)b.Point.add(c,a[e],c);return c.divide(d,d),c},PIXI.Point=b.Point,b.Rectangle=function(a,b,c,d){a=a||0,b=b||0,c=c||0,d=d||0,this.x=a,this.y=b,this.width=c,this.height=d},b.Rectangle.prototype={offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},setTo:function(a,b,c,d){return this.x=a,this.y=b,this.width=c,this.height=d,this},floor:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y)},floorAll:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.width=Math.floor(this.width),this.height=Math.floor(this.height)},copyFrom:function(a){return this.setTo(a.x,a.y,a.width,a.height)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.width=this.width,a.height=this.height,a},inflate:function(a,c){return b.Rectangle.inflate(this,a,c)},size:function(a){return b.Rectangle.size(this,a)},clone:function(a){return b.Rectangle.clone(this,a)},contains:function(a,c){return b.Rectangle.contains(this,a,c)},containsRect:function(a){return b.Rectangle.containsRect(this,a)},equals:function(a){return b.Rectangle.equals(this,a)},intersection:function(a,c){return b.Rectangle.intersection(this,a,c)},intersects:function(a,c){return b.Rectangle.intersects(this,a,c)},intersectsRaw:function(a,c,d,e,f){return b.Rectangle.intersectsRaw(this,a,c,d,e,f)},union:function(a,c){return b.Rectangle.union(this,a,c)},toString:function(){return"[{Rectangle (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+" empty="+this.empty+")}]"}},Object.defineProperty(b.Rectangle.prototype,"halfWidth",{get:function(){return Math.round(this.width/2)}}),Object.defineProperty(b.Rectangle.prototype,"halfHeight",{get:function(){return Math.round(this.height/2)}}),Object.defineProperty(b.Rectangle.prototype,"bottom",{get:function(){return this.y+this.height},set:function(a){this.height=a<=this.y?0:this.y-a}}),Object.defineProperty(b.Rectangle.prototype,"bottomRight",{get:function(){return new b.Point(this.right,this.bottom)},set:function(a){this.right=a.x,this.bottom=a.y}}),Object.defineProperty(b.Rectangle.prototype,"left",{get:function(){return this.x},set:function(a){this.width=a>=this.right?0:this.right-a,this.x=a}}),Object.defineProperty(b.Rectangle.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=a<=this.x?0:this.x+a}}),Object.defineProperty(b.Rectangle.prototype,"volume",{get:function(){return this.width*this.height}}),Object.defineProperty(b.Rectangle.prototype,"perimeter",{get:function(){return 2*this.width+2*this.height}}),Object.defineProperty(b.Rectangle.prototype,"centerX",{get:function(){return this.x+this.halfWidth},set:function(a){this.x=a-this.halfWidth}}),Object.defineProperty(b.Rectangle.prototype,"centerY",{get:function(){return this.y+this.halfHeight},set:function(a){this.y=a-this.halfHeight}}),Object.defineProperty(b.Rectangle.prototype,"top",{get:function(){return this.y},set:function(a){a>=this.bottom?(this.height=0,this.y=a):this.height=this.bottom-a}}),Object.defineProperty(b.Rectangle.prototype,"topLeft",{get:function(){return new b.Point(this.x,this.y)},set:function(a){this.x=a.x,this.y=a.y}}),Object.defineProperty(b.Rectangle.prototype,"empty",{get:function(){return!this.width||!this.height},set:function(a){a===!0&&this.setTo(0,0,0,0)}}),b.Rectangle.prototype.constructor=b.Rectangle,b.Rectangle.inflate=function(a,b,c){return a.x-=b,a.width+=2*b,a.y-=c,a.height+=2*c,a},b.Rectangle.inflatePoint=function(a,c){return b.Rectangle.inflate(a,c.x,c.y)},b.Rectangle.size=function(a,c){return"undefined"==typeof c?c=new b.Point(a.width,a.height):c.setTo(a.width,a.height),c},b.Rectangle.clone=function(a,c){return"undefined"==typeof c?c=new b.Rectangle(a.x,a.y,a.width,a.height):c.setTo(a.x,a.y,a.width,a.height),c},b.Rectangle.contains=function(a,b,c){return a.width<=0||a.height<=0?!1:b>=a.x&&b<=a.right&&c>=a.y&&c<=a.bottom},b.Rectangle.containsRaw=function(a,b,c,d,e,f){return e>=a&&a+c>=e&&f>=b&&b+d>=f},b.Rectangle.containsPoint=function(a,c){return b.Rectangle.contains(a,c.x,c.y)},b.Rectangle.containsRect=function(a,b){return a.volume>b.volume?!1:a.x>=b.x&&a.y>=b.y&&a.right<=b.right&&a.bottom<=b.bottom},b.Rectangle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.width==b.width&&a.height==b.height},b.Rectangle.intersection=function(a,c,d){return"undefined"==typeof d&&(d=new b.Rectangle),b.Rectangle.intersects(a,c)&&(d.x=Math.max(a.x,c.x),d.y=Math.max(a.y,c.y),d.width=Math.min(a.right,c.right)-d.x,d.height=Math.min(a.bottom,c.bottom)-d.y),d},b.Rectangle.intersects=function(a,b){return a.width<=0||a.height<=0||b.width<=0||b.height<=0?!1:!(a.rightb.right||a.y>b.bottom)},b.Rectangle.intersectsRaw=function(a,b,c,d,e,f){return"undefined"==typeof f&&(f=0),!(b>a.right+f||ca.bottom+f||e=c&&d>=a&&b>=e&&f>=b},coordinatesOnLine:function(a,b){"undefined"==typeof a&&(a=1),"undefined"==typeof b&&(b=[]);var c=Math.round(this.start.x),d=Math.round(this.start.y),e=Math.round(this.end.x),f=Math.round(this.end.y),g=Math.abs(e-c),h=Math.abs(f-d),i=e>c?1:-1,j=f>d?1:-1,k=g-h;b.push([c,d]);for(var l=1;c!=e||d!=f;){var m=k<<1;m>-h&&(k-=h,c+=i),g>m&&(k+=g,d+=j),l%a===0&&b.push([c,d]),l++}return b}},Object.defineProperty(b.Line.prototype,"length",{get:function(){return Math.sqrt((this.end.x-this.start.x)*(this.end.x-this.start.x)+(this.end.y-this.start.y)*(this.end.y-this.start.y))}}),Object.defineProperty(b.Line.prototype,"angle",{get:function(){return Math.atan2(this.end.y-this.start.y,this.end.x-this.start.x)}}),Object.defineProperty(b.Line.prototype,"slope",{get:function(){return(this.end.y-this.start.y)/(this.end.x-this.start.x)}}),Object.defineProperty(b.Line.prototype,"perpSlope",{get:function(){return-((this.end.x-this.start.x)/(this.end.y-this.start.y))}}),Object.defineProperty(b.Line.prototype,"x",{get:function(){return Math.min(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"y",{get:function(){return Math.min(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"left",{get:function(){return Math.min(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"right",{get:function(){return Math.max(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"top",{get:function(){return Math.min(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"bottom",{get:function(){return Math.max(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"width",{get:function(){return Math.abs(this.start.x-this.end.x)}}),Object.defineProperty(b.Line.prototype,"height",{get:function(){return Math.abs(this.start.y-this.end.y)}}),b.Line.intersectsPoints=function(a,c,d,e,f,g){"undefined"==typeof f&&(f=!0),"undefined"==typeof g&&(g=new b.Point);var h=c.y-a.y,i=e.y-d.y,j=a.x-c.x,k=d.x-e.x,l=c.x*a.y-a.x*c.y,m=e.x*d.y-d.x*e.y,n=h*k-i*j;if(0===n)return null;if(g.x=(j*m-k*l)/n,g.y=(i*l-h*m)/n,f){if(Math.pow(g.x-c.x+(g.y-c.y),2)>Math.pow(a.x-c.x+(a.y-c.y),2))return null;if(Math.pow(g.x-a.x+(g.y-a.y),2)>Math.pow(a.x-c.x+(a.y-c.y),2))return null;if(Math.pow(g.x-e.x+(g.y-e.y),2)>Math.pow(d.x-e.x+(d.y-e.y),2))return null;if(Math.pow(g.x-d.x+(g.y-d.y),2)>Math.pow(d.x-e.x+(d.y-e.y),2))return null}return g},b.Line.intersects=function(a,c,d,e){return b.Line.intersectsPoints(a.start,a.end,c.start,c.end,d,e)},b.Ellipse=function(a,c,d,e){this.type=b.ELLIPSE,a=a||0,c=c||0,d=d||0,e=e||0,this.x=a,this.y=c,this.width=d,this.height=e},b.Ellipse.prototype={setTo:function(a,b,c,d){return this.x=a,this.y=b,this.width=c,this.height=d,this},copyFrom:function(a){return this.setTo(a.x,a.y,a.width,a.height)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.width=this.width,a.height=this.height,a},clone:function(a){return"undefined"==typeof a?a=new b.Ellipse(this.x,this.y,this.width,this.height):a.setTo(this.x,this.y,this.width,this.height),a},contains:function(a,c){return b.Ellipse.contains(this,a,c)},toString:function(){return"[{Phaser.Ellipse (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+")}]"}},b.Ellipse.prototype.constructor=b.Ellipse,Object.defineProperty(b.Ellipse.prototype,"left",{get:function(){return this.x},set:function(a){this.x=a}}),Object.defineProperty(b.Ellipse.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=ad+e},b.Ellipse.prototype.getBounds=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Ellipse=b.Ellipse,b.Polygon=function(a){if(this.type=b.POLYGON,a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var c=[],d=0,e=a.length;e>d;d+=2)c.push(new b.Point(a[d],a[d+1]));a=c}this.points=a},b.Polygon.prototype={clone:function(){for(var a=[],c=0;cb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!0)}return c}},b.Polygon.prototype.constructor=b.Polygon,PIXI.Polygon=b.Polygon,b.Camera=function(a,c,d,e,f,g){this.game=a,this.world=a.world,this.id=0,this.view=new b.Rectangle(d,e,f,g),this.screenView=new b.Rectangle(d,e,f,g),this.bounds=new b.Rectangle(d,e,f,g),this.deadzone=null,this.visible=!0,this.atLimit={x:!1,y:!1},this.target=null,this._edge=0,this.displayObject=null,this.scale=null},b.Camera.FOLLOW_LOCKON=0,b.Camera.FOLLOW_PLATFORMER=1,b.Camera.FOLLOW_TOPDOWN=2,b.Camera.FOLLOW_TOPDOWN_TIGHT=3,b.Camera.prototype={follow:function(a,c){"undefined"==typeof c&&(c=b.Camera.FOLLOW_LOCKON),this.target=a;var d;switch(c){case b.Camera.FOLLOW_PLATFORMER:var e=this.width/8,f=this.height/3;this.deadzone=new b.Rectangle((this.width-e)/2,(this.height-f)/2-.25*f,e,f);break;case b.Camera.FOLLOW_TOPDOWN:d=Math.max(this.width,this.height)/4,this.deadzone=new b.Rectangle((this.width-d)/2,(this.height-d)/2,d,d);break;case b.Camera.FOLLOW_TOPDOWN_TIGHT:d=Math.max(this.width,this.height)/8,this.deadzone=new b.Rectangle((this.width-d)/2,(this.height-d)/2,d,d);break;case b.Camera.FOLLOW_LOCKON:this.deadzone=null;break;default:this.deadzone=null}},focusOn:function(a){this.setPosition(Math.round(a.x-this.view.halfWidth),Math.round(a.y-this.view.halfHeight))},focusOnXY:function(a,b){this.setPosition(Math.round(a-this.view.halfWidth),Math.round(b-this.view.halfHeight))},update:function(){this.target&&this.updateTarget(),this.bounds&&this.checkBounds(),this.displayObject.position.x=-this.view.x,this.displayObject.position.y=-this.view.y},updateTarget:function(){this.deadzone?(this._edge=this.target.x-this.deadzone.x,this.view.x>this._edge&&(this.view.x=this._edge),this._edge=this.target.x+this.target.width-this.deadzone.x-this.deadzone.width,this.view.xthis._edge&&(this.view.y=this._edge),this._edge=this.target.y+this.target.height-this.deadzone.y-this.deadzone.height,this.view.y=this.bounds.right&&(this.atLimit.x=!0,this.view.x=this.bounds.right-this.width),this.view.y<=this.bounds.top&&(this.atLimit.y=!0,this.view.y=this.bounds.top),this.view.bottom>=this.bounds.bottom&&(this.atLimit.y=!0,this.view.y=this.bounds.bottom-this.height),this.view.floor()},setPosition:function(a,b){this.view.x=a,this.view.y=b,this.bounds&&this.checkBounds()},setSize:function(a,b){this.view.width=a,this.view.height=b},reset:function(){this.target=null,this.view.x=0,this.view.y=0}},b.Camera.prototype.constructor=b.Camera,Object.defineProperty(b.Camera.prototype,"x",{get:function(){return this.view.x},set:function(a){this.view.x=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(b.Camera.prototype,"y",{get:function(){return this.view.y},set:function(a){this.view.y=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(b.Camera.prototype,"width",{get:function(){return this.view.width},set:function(a){this.view.width=a}}),Object.defineProperty(b.Camera.prototype,"height",{get:function(){return this.view.height},set:function(a){this.view.height=a}}),b.State=function(){this.game=null,this.add=null,this.make=null,this.camera=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.sound=null,this.scale=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.particles=null,this.physics=null,this.rnd=null},b.State.prototype={preload:function(){},loadUpdate:function(){},loadRender:function(){},create:function(){},update:function(){},render:function(){},paused:function(){},shutdown:function(){}},b.State.prototype.constructor=b.State,b.StateManager=function(a,b){this.game=a,this.states={},this._pendingState=null,"undefined"!=typeof b&&null!==b&&(this._pendingState=b),this._clearWorld=!1,this._clearCache=!1,this._created=!1,this._args=[],this.current="",this.onInitCallback=null,this.onPreloadCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPreRenderCallback=null,this.onLoadUpdateCallback=null,this.onLoadRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onShutDownCallback=null},b.StateManager.prototype={boot:function(){this.game.onPause.add(this.pause,this),this.game.onResume.add(this.resume,this),this.game.load.onLoadComplete.add(this.loadComplete,this),null!==this._pendingState&&("string"==typeof this._pendingState?this.start(this._pendingState,!1,!1):this.add("default",this._pendingState,!0))},add:function(a,c,d){"undefined"==typeof d&&(d=!1);var e;return c instanceof b.State?e=c:"object"==typeof c?(e=c,e.game=this.game):"function"==typeof c&&(e=new c(this.game)),this.states[a]=e,d&&(this.game.isBooted?this.start(a):this._pendingState=a),e},remove:function(a){this.current===a&&(this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onDestroyCallback=null),delete this.states[a]},start:function(a,b,c){"undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=!1),this.checkState(a)&&(this._pendingState=a,this._clearWorld=b,this._clearCache=c,arguments.length>3&&(this._args=Array.prototype.splice.call(arguments,3)))},restart:function(a,b){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!1),this._pendingState=this.current,this._clearWorld=a,this._clearCache=b,arguments.length>2&&(this._args=Array.prototype.splice.call(arguments,2))},dummy:function(){},preUpdate:function(){this._pendingState&&this.game.isBooted&&(this.current&&(this.onShutDownCallback.call(this.callbackContext,this.game),this.game.tweens.removeAll(),this.game.camera.reset(),this.game.input.reset(!0),this.game.physics.clear(),this.game.time.removeAll(),this._clearWorld&&(this.game.world.shutdown(),this._clearCache===!0&&this.game.cache.destroy())),this.setCurrentState(this._pendingState),this.onPreloadCallback?(this.game.load.reset(),this.onPreloadCallback.call(this.callbackContext,this.game),0===this.game.load.totalQueuedFiles()?this.loadComplete():this.game.load.start()):this.loadComplete(),this.current===this._pendingState&&(this._pendingState=null))},checkState:function(a){if(this.states[a]){var b=!1;return this.states[a].preload&&(b=!0),this.states[a].create&&(b=!0),this.states[a].update&&(b=!0),this.states[a].render&&(b=!0),b===!1?(console.warn("Invalid Phaser State object given. Must contain at least a one of the required functions: preload, create, update or render"),!1):!0}return console.warn("Phaser.StateManager - No state found with the key: "+a),!1},link:function(a){this.states[a].game=this.game,this.states[a].add=this.game.add,this.states[a].make=this.game.make,this.states[a].camera=this.game.camera,this.states[a].cache=this.game.cache,this.states[a].input=this.game.input,this.states[a].load=this.game.load,this.states[a].math=this.game.math,this.states[a].sound=this.game.sound,this.states[a].scale=this.game.scale,this.states[a].state=this,this.states[a].stage=this.game.stage,this.states[a].time=this.game.time,this.states[a].tweens=this.game.tweens,this.states[a].world=this.game.world,this.states[a].particles=this.game.particles,this.states[a].rnd=this.game.rnd,this.states[a].physics=this.game.physics},setCurrentState:function(a){this.callbackContext=this.states[a],this.link(a),this.onInitCallback=this.states[a].init||this.dummy,this.onPreloadCallback=this.states[a].preload||null,this.onLoadRenderCallback=this.states[a].loadRender||null,this.onLoadUpdateCallback=this.states[a].loadUpdate||null,this.onCreateCallback=this.states[a].create||null,this.onUpdateCallback=this.states[a].update||null,this.onPreRenderCallback=this.states[a].preRender||null,this.onRenderCallback=this.states[a].render||null,this.onPausedCallback=this.states[a].paused||null,this.onResumedCallback=this.states[a].resumed||null,this.onShutDownCallback=this.states[a].shutdown||this.dummy,this.current=a,this._created=!1,this.onInitCallback.apply(this.callbackContext,this._args),this._args=[]},getCurrentState:function(){return this.states[this.current]},loadComplete:function(){this._created===!1&&this.onCreateCallback?(this._created=!0,this.onCreateCallback.call(this.callbackContext,this.game)):this._created=!0},pause:function(){this._created&&this.onPausedCallback&&this.onPausedCallback.call(this.callbackContext,this.game)},resume:function(){this._created&&this.onResumedCallback&&this.onResumedCallback.call(this.callbackContext,this.game)},update:function(){this._created&&this.onUpdateCallback?this.onUpdateCallback.call(this.callbackContext,this.game):this.onLoadUpdateCallback&&this.onLoadUpdateCallback.call(this.callbackContext,this.game)},preRender:function(){this.onPreRenderCallback&&this.onPreRenderCallback.call(this.callbackContext,this.game)},render:function(){this._created&&this.onRenderCallback?(this.game.renderType===b.CANVAS&&(this.game.context.save(),this.game.context.setTransform(1,0,0,1,0,0)),this.onRenderCallback.call(this.callbackContext,this.game),this.game.renderType===b.CANVAS&&this.game.context.restore()):this.onLoadRenderCallback&&this.onLoadRenderCallback.call(this.callbackContext,this.game)},destroy:function(){this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onDestroyCallback=null,this.game=null,this.states={},this._pendingState=null}},b.StateManager.prototype.constructor=b.StateManager,b.LinkedList=function(){this.next=null,this.prev=null,this.first=null,this.last=null,this.total=0},b.LinkedList.prototype={add:function(a){return 0===this.total&&null==this.first&&null==this.last?(this.first=a,this.last=a,this.next=a,a.prev=this,this.total++,a):(this.last.next=a,a.prev=this.last,this.last=a,this.total++,a)},remove:function(a){a==this.first?this.first=this.first.next:a==this.last&&(this.last=this.last.prev),a.prev&&(a.prev.next=a.next),a.next&&(a.next.prev=a.prev),a.next=a.prev=null,null==this.first&&(this.last=null),this.total--},callAll:function(a){if(this.first&&this.last){var b=this.first;do b&&b[a]&&b[a].call(b),b=b.next;while(b!=this.last.next)}}},b.LinkedList.prototype.constructor=b.LinkedList,b.Signal=function(){this._bindings=[],this._prevParams=null;var a=this;this.dispatch=function(){b.Signal.prototype.dispatch.apply(a,arguments)}},b.Signal.prototype={memorize:!1,_shouldPropagate:!0,active:!0,validateListener:function(a,b){if("function"!=typeof a)throw new Error("listener is a required param of {fn}() and should be a Function.".replace("{fn}",b))},_registerListener:function(a,c,d,e){var f,g=this._indexOfListener(a,d);if(-1!==g){if(f=this._bindings[g],f.isOnce()!==c)throw new Error("You cannot add"+(c?"":"Once")+"() then add"+(c?"Once":"")+"() the same listener without removing the relationship first.")}else f=new b.SignalBinding(this,a,c,d,e),this._addBinding(f);return this.memorize&&this._prevParams&&f.execute(this._prevParams),f},_addBinding:function(a){var b=this._bindings.length;do--b;while(this._bindings[b]&&a._priority<=this._bindings[b]._priority);this._bindings.splice(b+1,0,a)},_indexOfListener:function(a,b){for(var c,d=this._bindings.length;d--;)if(c=this._bindings[d],c._listener===a&&c.context===b)return d;return-1},has:function(a,b){return-1!==this._indexOfListener(a,b)},add:function(a,b,c){return this.validateListener(a,"add"),this._registerListener(a,!1,b,c)},addOnce:function(a,b,c){return this.validateListener(a,"addOnce"),this._registerListener(a,!0,b,c)},remove:function(a,b){this.validateListener(a,"remove");var c=this._indexOfListener(a,b);return-1!==c&&(this._bindings[c]._destroy(),this._bindings.splice(c,1)),a},removeAll:function(){for(var a=this._bindings.length;a--;)this._bindings[a]._destroy();this._bindings.length=0},getNumListeners:function(){return this._bindings.length},halt:function(){this._shouldPropagate=!1},dispatch:function(){if(this.active){var a,b=Array.prototype.slice.call(arguments),c=this._bindings.length;if(this.memorize&&(this._prevParams=b),c){a=this._bindings.slice(),this._shouldPropagate=!0;do c--;while(a[c]&&this._shouldPropagate&&a[c].execute(b)!==!1) -}}},forget:function(){this._prevParams=null},dispose:function(){this.removeAll(),delete this._bindings,delete this._prevParams},toString:function(){return"[Phaser.Signal active:"+this.active+" numListeners:"+this.getNumListeners()+"]"}},b.Signal.prototype.constructor=b.Signal,b.SignalBinding=function(a,b,c,d,e){this._listener=b,this._isOnce=c,this.context=d,this._signal=a,this._priority=e||0},b.SignalBinding.prototype={active:!0,params:null,execute:function(a){var b,c;return this.active&&this._listener&&(c=this.params?this.params.concat(a):a,b=this._listener.apply(this.context,c),this._isOnce&&this.detach()),b},detach:function(){return this.isBound()?this._signal.remove(this._listener,this.context):null},isBound:function(){return!!this._signal&&!!this._listener},isOnce:function(){return this._isOnce},getListener:function(){return this._listener},getSignal:function(){return this._signal},_destroy:function(){delete this._signal,delete this._listener,delete this.context},toString:function(){return"[Phaser.SignalBinding isOnce:"+this._isOnce+", isBound:"+this.isBound()+", active:"+this.active+"]"}},b.SignalBinding.prototype.constructor=b.SignalBinding,b.Filter=function(a,c,d){this.game=a,this.type=b.WEBGL_FILTER,this.passes=[this],this.shaders=[],this.dirty=!0,this.padding=0,this.uniforms={time:{type:"1f",value:0},resolution:{type:"2f",value:{x:256,y:256}},mouse:{type:"2f",value:{x:0,y:0}}},this.fragmentSrc=d||[]},b.Filter.prototype={init:function(){},setResolution:function(a,b){this.uniforms.resolution.value.x=a,this.uniforms.resolution.value.y=b},update:function(a){"undefined"!=typeof a&&(a.x>0&&(this.uniforms.mouse.x=a.x.toFixed(2)),a.y>0&&(this.uniforms.mouse.y=a.y.toFixed(2))),this.uniforms.time.value=this.game.time.totalElapsedSeconds()},destroy:function(){this.game=null}},b.Filter.prototype.constructor=b.Filter,Object.defineProperty(b.Filter.prototype,"width",{get:function(){return this.uniforms.resolution.value.x},set:function(a){this.uniforms.resolution.value.x=a}}),Object.defineProperty(b.Filter.prototype,"height",{get:function(){return this.uniforms.resolution.value.y},set:function(a){this.uniforms.resolution.value.y=a}}),b.Plugin=function(a,b){"undefined"==typeof b&&(b=null),this.game=a,this.parent=b,this.active=!1,this.visible=!1,this.hasPreUpdate=!1,this.hasUpdate=!1,this.hasPostUpdate=!1,this.hasRender=!1,this.hasPostRender=!1},b.Plugin.prototype={preUpdate:function(){},update:function(){},render:function(){},postRender:function(){},destroy:function(){this.game=null,this.parent=null,this.active=!1,this.visible=!1}},b.Plugin.prototype.constructor=b.Plugin,b.PluginManager=function(a){this.game=a,this.plugins=[],this._len=0,this._i=0},b.PluginManager.prototype={add:function(a){var b=!1;return"function"==typeof a?a=new a(this.game,this._parent):(a.game=this.game,a.parent=this),"function"==typeof a.preUpdate&&(a.hasPreUpdate=!0,b=!0),"function"==typeof a.update&&(a.hasUpdate=!0,b=!0),"function"==typeof a.postUpdate&&(a.hasPostUpdate=!0,b=!0),"function"==typeof a.render&&(a.hasRender=!0,b=!0),"function"==typeof a.postRender&&(a.hasPostRender=!0,b=!0),b?((a.hasPreUpdate||a.hasUpdate||a.hasPostUpdate)&&(a.active=!0),(a.hasRender||a.hasPostRender)&&(a.visible=!0),this._len=this.plugins.push(a),"function"==typeof a.init&&a.init(),a):null},remove:function(a){for(this._i=this._len;this._i--;)if(this.plugins[this._i]===a)return a.destroy(),this.plugins.splice(this._i,1),void this._len--},removeAll:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].destroy();this.plugins.length=0,this._len=0},preUpdate:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasPreUpdate&&this.plugins[this._i].preUpdate()},update:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasUpdate&&this.plugins[this._i].update()},postUpdate:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasPostUpdate&&this.plugins[this._i].postUpdate()},render:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].visible&&this.plugins[this._i].hasRender&&this.plugins[this._i].render()},postRender:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].visible&&this.plugins[this._i].hasPostRender&&this.plugins[this._i].postRender()},destroy:function(){this.removeAll(),this.game=null}},b.PluginManager.prototype.constructor=b.PluginManager,b.Stage=function(a,c,d){this.game=a,this.offset=new b.Point,PIXI.Stage.call(this,0,!1),this.name="_stage_root",this.interactive=!1,this.disableVisibilityChange=!1,this.checkOffsetInterval=2500,this.exists=!0,this.currentRenderOrderID=0,this._hiddenVar="hidden",this._nextOffsetCheck=0,this._backgroundColor=0,a.config?this.parseConfig(a.config):(this.game.canvas=b.Canvas.create(c,d),this.game.canvas.style["-webkit-full-screen"]="width: 100%; height: 100%")},b.Stage.prototype=Object.create(PIXI.Stage.prototype),b.Stage.prototype.constructor=b.Stage,b.Stage.prototype.preUpdate=function(){this.currentRenderOrderID=0;for(var a=this.children.length,b=0;a>b;b++)this.children[b].preUpdate()},b.Stage.prototype.update=function(){for(var a=this.children.length;a--;)this.children[a].update()},b.Stage.prototype.postUpdate=function(){if(this.game.world.camera.target){this.game.world.camera.target.postUpdate(),this.game.world.camera.update();for(var a=this.children.length;a--;)this.children[a]!==this.game.world.camera.target&&this.children[a].postUpdate()}else{this.game.world.camera.update();for(var a=this.children.length;a--;)this.children[a].postUpdate()}this.checkOffsetInterval!==!1&&this.game.time.now>this._nextOffsetCheck&&(b.Canvas.getOffset(this.game.canvas,this.offset),this._nextOffsetCheck=this.game.time.now+this.checkOffsetInterval)},b.Stage.prototype.parseConfig=function(a){this.game.canvas=a.canvasID?b.Canvas.create(this.game.width,this.game.height,a.canvasID):b.Canvas.create(this.game.width,this.game.height),a.canvasStyle?this.game.canvas.stlye=a.canvasStyle:this.game.canvas.style["-webkit-full-screen"]="width: 100%; height: 100%",a.checkOffsetInterval&&(this.checkOffsetInterval=a.checkOffsetInterval),a.disableVisibilityChange&&(this.disableVisibilityChange=a.disableVisibilityChange),a.fullScreenScaleMode&&(this.fullScreenScaleMode=a.fullScreenScaleMode),a.scaleMode&&(this.scaleMode=a.scaleMode),a.backgroundColor&&(this.backgroundColor=a.backgroundColor)},b.Stage.prototype.boot=function(){b.Canvas.getOffset(this.game.canvas,this.offset),this.bounds=new b.Rectangle(this.offset.x,this.offset.y,this.game.width,this.game.height);var a=this;this._onChange=function(b){return a.visibilityChange(b)},b.Canvas.setUserSelect(this.game.canvas,"none"),b.Canvas.setTouchAction(this.game.canvas,"none"),this.checkVisibility()},b.Stage.prototype.checkVisibility=function(){this._hiddenVar=void 0!==document.webkitHidden?"webkitvisibilitychange":void 0!==document.mozHidden?"mozvisibilitychange":void 0!==document.msHidden?"msvisibilitychange":void 0!==document.hidden?"visibilitychange":null,this._hiddenVar&&document.addEventListener(this._hiddenVar,this._onChange,!1),window.onpagehide=this._onChange,window.onpageshow=this._onChange,window.onblur=this._onChange,window.onfocus=this._onChange},b.Stage.prototype.visibilityChange=function(a){return this.disableVisibilityChange?void 0:"pagehide"===a.type||"blur"===a.type||"pageshow"===a.type||"focus"===a.type?void("pagehide"===a.type||"blur"===a.type?this.game.focusLoss(a):("pageshow"===a.type||"focus"===a.type)&&this.game.focusGain(a)):void(document.hidden||document.mozHidden||document.msHidden||document.webkitHidden?this.game.gamePaused(a):this.game.gameResumed(a))},b.Stage.prototype.setBackgroundColor=function(a){this._backgroundColor=a||0,this.backgroundColorSplit=PIXI.hex2rgb(this.backgroundColor);var b=this._backgroundColor.toString(16);b="000000".substr(0,6-b.length)+b,this.backgroundColorString="#"+b},Object.defineProperty(b.Stage.prototype,"backgroundColor",{get:function(){return this._backgroundColor},set:function(a){this._backgroundColor=a,this.game.transparent===!1&&("string"==typeof a&&(a=b.Color.hexToRGB(a)),this.setBackgroundColor(a))}}),Object.defineProperty(b.Stage.prototype,"smoothed",{get:function(){return!PIXI.scaleModes.LINEAR},set:function(a){PIXI.scaleModes.LINEAR=a?0:1}}),b.Group=function(a,c,d,e,f,g){"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=!1),"undefined"==typeof g&&(g=b.Physics.ARCADE),this.game=a,"undefined"==typeof c&&(c=a.world),this.name=d||"group",PIXI.DisplayObjectContainer.call(this),e?this.game.stage.addChild(this):c&&c.addChild(this),this.z=0,this.type=b.GROUP,this.alive=!0,this.exists=!0,this.scale=new b.Point(1,1),this.cursor=null,this.cameraOffset=new b.Point,this.enableBody=f,this.enableBodyDebug=!1,this.physicsBodyType=g,this._sortProperty="z",this._cache=[0,0,0,0,1,0,1,0,0,0]},b.Group.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),b.Group.prototype.constructor=b.Group,b.Group.RETURN_NONE=0,b.Group.RETURN_TOTAL=1,b.Group.RETURN_CHILD=2,b.Group.SORT_ASCENDING=-1,b.Group.SORT_DESCENDING=1,b.Group.prototype.add=function(a){return a.parent!==this&&(this.enableBody&&this.game.physics.enable(a,this.physicsBodyType),this.addChild(a),a.z=this.children.length,a.events&&a.events.onAddedToGroup.dispatch(a,this),null===this.cursor&&(this.cursor=a)),a},b.Group.prototype.addAt=function(a,b){return a.parent!==this&&(this.enableBody&&this.game.physics.enable(a,this.physicsBodyType),this.addChildAt(a,b),this.updateZ(),a.events&&a.events.onAddedToGroup.dispatch(a,this),null===this.cursor&&(this.cursor=a)),a},b.Group.prototype.getAt=function(a){return 0>a||a>=this.children.length?-1:this.getChildAt(a)},b.Group.prototype.create=function(a,c,d,e,f){"undefined"==typeof f&&(f=!0);var g=new b.Sprite(this.game,a,c,d,e);return this.enableBody&&this.game.physics.enable(g,this.physicsBodyType),g.exists=f,g.visible=f,g.alive=f,this.addChild(g),g.z=this.children.length,g.events&&g.events.onAddedToGroup.dispatch(g,this),null===this.cursor&&(this.cursor=g),g},b.Group.prototype.createMultiple=function(a,b,c,d){"undefined"==typeof d&&(d=!1);for(var e=0;a>e;e++)this.create(0,0,b,c,d)},b.Group.prototype.updateZ=function(){for(var a=this.children.length;a--;)this.children[a].z=a},b.Group.prototype.resetCursor=function(a){return"undefined"==typeof a&&(a=0),a>this.children.length-1&&(a=0),this.cursor?(this._cache[8]=a,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.next=function(){return this.cursor?(this._cache[8]>=this.children.length-1?this._cache[8]=0:this._cache[8]++,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.previous=function(){return this.cursor?(0===this._cache[8]?this._cache[8]=this.children.length-1:this._cache[8]--,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.swap=function(a,b){var c=this.swapChildren(a,b);return c&&this.updateZ(),c},b.Group.prototype.bringToTop=function(a){return a.parent===this&&this.getIndex(a)0&&(this.remove(a),this.addAt(a,0)),a},b.Group.prototype.moveUp=function(a){if(a.parent===this&&this.getIndex(a)0){var b=this.getIndex(a),c=this.getAt(b-1);c&&this.swap(a,c)}return a},b.Group.prototype.xy=function(a,b,c){return 0>a||a>this.children.length?-1:(this.getChildAt(a).x=b,void(this.getChildAt(a).y=c))},b.Group.prototype.reverse=function(){this.children.reverse(),this.updateZ()},b.Group.prototype.getIndex=function(a){return this.children.indexOf(a)},b.Group.prototype.replace=function(a,c){var d=this.getIndex(a);if(-1!==d){void 0!==c.parent&&(c.events.onRemovedFromGroup.dispatch(c,this),c.parent.removeChild(c),c.parent instanceof b.Group&&c.parent.updateZ());var e=a;return this.remove(e),this.addAt(c,d),e}},b.Group.prototype.setProperty=function(a,b,c,d){d=d||0;var e=b.length;1===e&&a.hasOwnProperty(b[0])?0===d?a[b[0]]=c:1==d?a[b[0]]+=c:2==d?a[b[0]]-=c:3==d?a[b[0]]*=c:4==d&&(a[b[0]]/=c):2===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])?0===d?a[b[0]][b[1]]=c:1==d?a[b[0]][b[1]]+=c:2==d?a[b[0]][b[1]]-=c:3==d?a[b[0]][b[1]]*=c:4==d&&(a[b[0]][b[1]]/=c):3===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])&&a[b[0]][b[1]].hasOwnProperty(b[2])?0===d?a[b[0]][b[1]][b[2]]=c:1==d?a[b[0]][b[1]][b[2]]+=c:2==d?a[b[0]][b[1]][b[2]]-=c:3==d?a[b[0]][b[1]][b[2]]*=c:4==d&&(a[b[0]][b[1]][b[2]]/=c):4===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])&&a[b[0]][b[1]].hasOwnProperty(b[2])&&a[b[0]][b[1]][b[2]].hasOwnProperty(b[3])&&(0===d?a[b[0]][b[1]][b[2]][b[3]]=c:1==d?a[b[0]][b[1]][b[2]][b[3]]+=c:2==d?a[b[0]][b[1]][b[2]][b[3]]-=c:3==d?a[b[0]][b[1]][b[2]][b[3]]*=c:4==d&&(a[b[0]][b[1]][b[2]][b[3]]/=c))},b.Group.prototype.set=function(a,b,c,d,e,f){b=b.split("."),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1),(d===!1||d&&a.alive)&&(e===!1||e&&a.visible)&&this.setProperty(a,b,c,f)},b.Group.prototype.setAll=function(a,b,c,d,e){a=a.split("."),"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1),e=e||0;for(var f=0,g=this.children.length;g>f;f++)(!c||c&&this.children[f].alive)&&(!d||d&&this.children[f].visible)&&this.setProperty(this.children[f],a,b,e)},b.Group.prototype.setAllChildren=function(a,c,d,e,f){"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1),f=f||0;for(var g=0,h=this.children.length;h>g;g++)(!d||d&&this.children[g].alive)&&(!e||e&&this.children[g].visible)&&(this.children[g]instanceof b.Group?this.children[g].setAllChildren(a,c,d,e,f):this.setProperty(this.children[g],a.split("."),c,f))},b.Group.prototype.addAll=function(a,b,c,d){this.setAll(a,b,c,d,1)},b.Group.prototype.subAll=function(a,b,c,d){this.setAll(a,b,c,d,2)},b.Group.prototype.multiplyAll=function(a,b,c,d){this.setAll(a,b,c,d,3)},b.Group.prototype.divideAll=function(a,b,c,d){this.setAll(a,b,c,d,4)},b.Group.prototype.callAllExists=function(a,b){for(var c=Array.prototype.splice.call(arguments,2),d=0,e=this.children.length;e>d;d++)this.children[d].exists===b&&this.children[d][a]&&this.children[d][a].apply(this.children[d],c)},b.Group.prototype.callbackFromArray=function(a,b,c){if(1==c){if(a[b[0]])return a[b[0]]}else if(2==c){if(a[b[0]][b[1]])return a[b[0]][b[1]]}else if(3==c){if(a[b[0]][b[1]][b[2]])return a[b[0]][b[1]][b[2]]}else if(4==c){if(a[b[0]][b[1]][b[2]][b[3]])return a[b[0]][b[1]][b[2]][b[3]]}else if(a[b])return a[b];return!1},b.Group.prototype.callAll=function(a,b){if("undefined"!=typeof a){a=a.split(".");var c=a.length;if("undefined"==typeof b||null===b||""===b)b=null;else if("string"==typeof b){b=b.split(".");var d=b.length}for(var e=Array.prototype.splice.call(arguments,2),f=null,g=null,h=0,i=this.children.length;i>h;h++)f=this.callbackFromArray(this.children[h],a,c),b&&f?(g=this.callbackFromArray(this.children[h],b,d),f&&f.apply(g,e)):f&&f.apply(this.children[h],e)}},b.Group.prototype.preUpdate=function(){if(!this.exists||!this.parent.exists)return this.renderOrderID=-1,!1;for(var a=this.children.length;a--;)this.children[a].preUpdate();return!0},b.Group.prototype.update=function(){for(var a=this.children.length;a--;)this.children[a].update()},b.Group.prototype.postUpdate=function(){1===this._cache[7]&&(this.x=this.game.camera.view.x+this.cameraOffset.x,this.y=this.game.camera.view.y+this.cameraOffset.y);for(var a=this.children.length;a--;)this.children[a].postUpdate()},b.Group.prototype.forEach=function(a,b,c){"undefined"==typeof c&&(c=!1);var d=Array.prototype.splice.call(arguments,3);d.unshift(null);for(var e=0,f=this.children.length;f>e;e++)(!c||c&&this.children[e].exists)&&(d[0]=this.children[e],a.apply(b,d))},b.Group.prototype.forEachExists=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("exists",!0,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.forEachAlive=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("alive",!0,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.forEachDead=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("alive",!1,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.sort=function(a,c){this.children.length<2||("undefined"==typeof a&&(a="z"),"undefined"==typeof c&&(c=b.Group.SORT_ASCENDING),this._sortProperty=a,this.children.sort(c===b.Group.SORT_ASCENDING?this.ascendingSortHandler.bind(this):this.descendingSortHandler.bind(this)),this.updateZ())},b.Group.prototype.customSort=function(a,b){this.children.length<2||(this.children.sort(a.bind(b)),this.updateZ())},b.Group.prototype.ascendingSortHandler=function(a,b){return a[this._sortProperty]b[this._sortProperty]?1:a.zb[this._sortProperty]?-1:0},b.Group.prototype.iterate=function(a,c,d,e,f,g){if(d===b.Group.RETURN_TOTAL&&0===this.children.length)return 0;"undefined"==typeof e&&(e=!1);for(var h=0,i=0,j=this.children.length;j>i;i++)if(this.children[i][a]===c&&(h++,e&&(g[0]=this.children[i],e.apply(f,g)),d===b.Group.RETURN_CHILD))return this.children[i];return d===b.Group.RETURN_TOTAL?h:d===b.Group.RETURN_CHILD?null:void 0},b.Group.prototype.getFirstExists=function(a){return"boolean"!=typeof a&&(a=!0),this.iterate("exists",a,b.Group.RETURN_CHILD)},b.Group.prototype.getFirstAlive=function(){return this.iterate("alive",!0,b.Group.RETURN_CHILD)},b.Group.prototype.getFirstDead=function(){return this.iterate("alive",!1,b.Group.RETURN_CHILD)},b.Group.prototype.getTop=function(){return this.children.length>0?this.children[this.children.length-1]:void 0},b.Group.prototype.getBottom=function(){return this.children.length>0?this.children[0]:void 0},b.Group.prototype.countLiving=function(){return this.iterate("alive",!0,b.Group.RETURN_TOTAL)},b.Group.prototype.countDead=function(){return this.iterate("alive",!1,b.Group.RETURN_TOTAL)},b.Group.prototype.getRandom=function(a,b){return 0===this.children.length?null:(a=a||0,b=b||this.children.length,this.game.math.getRandom(this.children,a,b))},b.Group.prototype.remove=function(a,b){if("undefined"==typeof b&&(b=!1),0===this.children.length||-1===this.children.indexOf(a))return!1;a.events&&a.events.onRemovedFromGroup.dispatch(a,this);var c=this.removeChild(a);return this.updateZ(),this.cursor===a&&this.next(),b&&c&&c.destroy(!0),!0},b.Group.prototype.removeAll=function(a){if("undefined"==typeof a&&(a=!1),0!==this.children.length){do{this.children[0].events&&this.children[0].events.onRemovedFromGroup.dispatch(this.children[0],this);var b=this.removeChild(this.children[0]);a&&b&&b.destroy(!0)}while(this.children.length>0);this.cursor=null}},b.Group.prototype.removeBetween=function(a,b,c){if("undefined"==typeof b&&(b=this.children.length),"undefined"==typeof c&&(c=!1),0!==this.children.length){if(a>b||0>a||b>this.children.length)return!1;for(var d=b;d>=a;){this.children[d].events&&this.children[d].events.onRemovedFromGroup.dispatch(this.children[d],this);var e=this.removeChild(this.children[d]);c&&e&&e.destroy(!0),this.cursor===this.children[d]&&(this.cursor=null),d--}this.updateZ()}},b.Group.prototype.destroy=function(a,b){null!==this.game&&("undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!1),this.removeAll(a),this.cursor=null,b||(this.parent&&this.parent.removeChild(this),this.game=null,this.exists=!1))},Object.defineProperty(b.Group.prototype,"total",{get:function(){return this.iterate("exists",!0,b.Group.RETURN_TOTAL)}}),Object.defineProperty(b.Group.prototype,"length",{get:function(){return this.children.length}}),Object.defineProperty(b.Group.prototype,"angle",{get:function(){return b.Math.radToDeg(this.rotation)},set:function(a){this.rotation=b.Math.degToRad(a)}}),Object.defineProperty(b.Group.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),b.World=function(a){b.Group.call(this,a,null,"__world",!1),this.bounds=new b.Rectangle(0,0,a.width,a.height),this.camera=null},b.World.prototype=Object.create(b.Group.prototype),b.World.prototype.constructor=b.World,b.World.prototype.boot=function(){this.camera=new b.Camera(this.game,0,0,0,this.game.width,this.game.height),this.camera.displayObject=this,this.camera.scale=this.scale,this.game.camera=this.camera,this.game.stage.addChild(this)},b.World.prototype.setBounds=function(a,b,c,d){cthis.bounds.right&&(a.x=this.bounds.left),a._currentBounds.bottomthis.bounds.bottom&&(a.y=this.bounds.top)):(a.x+bthis.bounds.right&&(a.x=this.bounds.left-b),a.y+bthis.bounds.bottom&&(a.y=this.bounds.top-b))},Object.defineProperty(b.World.prototype,"width",{get:function(){return this.bounds.width},set:function(a){this.bounds.width=a}}),Object.defineProperty(b.World.prototype,"height",{get:function(){return this.bounds.height},set:function(a){this.bounds.height=a}}),Object.defineProperty(b.World.prototype,"centerX",{get:function(){return this.bounds.halfWidth}}),Object.defineProperty(b.World.prototype,"centerY",{get:function(){return this.bounds.halfHeight}}),Object.defineProperty(b.World.prototype,"randomX",{get:function(){return this.bounds.x<0?this.game.rnd.integerInRange(this.bounds.x,this.bounds.width-Math.abs(this.bounds.x)):this.game.rnd.integerInRange(this.bounds.x,this.bounds.width)}}),Object.defineProperty(b.World.prototype,"randomY",{get:function(){return this.bounds.y<0?this.game.rnd.integerInRange(this.bounds.y,this.bounds.height-Math.abs(this.bounds.y)):this.game.rnd.integerInRange(this.bounds.y,this.bounds.height)}}),b.ScaleManager=function(a,c,d){this.game=a,this.width=c,this.height=d,this.minWidth=null,this.maxWidth=null,this.minHeight=null,this.maxHeight=null,this.forceLandscape=!1,this.forcePortrait=!1,this.incorrectOrientation=!1,this.pageAlignHorizontally=!1,this.pageAlignVertically=!1,this.maxIterations=5,this.orientationSprite=null,this.enterLandscape=new b.Signal,this.enterPortrait=new b.Signal,this.enterIncorrectOrientation=new b.Signal,this.leaveIncorrectOrientation=new b.Signal,this.hasResized=new b.Signal,this.fullScreenTarget=this.game.canvas,this.enterFullScreen=new b.Signal,this.leaveFullScreen=new b.Signal,this.orientation=0,window.orientation?this.orientation=window.orientation:window.outerWidth>window.outerHeight&&(this.orientation=90),this.scaleFactor=new b.Point(1,1),this.scaleFactorInversed=new b.Point(1,1),this.margin=new b.Point(0,0),this.aspectRatio=0,this.sourceAspectRatio=c/d,this.event=null,this.scaleMode=b.ScaleManager.NO_SCALE,this.fullScreenScaleMode=b.ScaleManager.NO_SCALE,this._startHeight=0,this._width=0,this._height=0;var e=this;window.addEventListener("orientationchange",function(a){return e.checkOrientation(a)},!1),window.addEventListener("resize",function(a){return e.checkResize(a)},!1),document.addEventListener("webkitfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("mozfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("fullscreenchange",function(a){return e.fullScreenChange(a)},!1)},b.ScaleManager.EXACT_FIT=0,b.ScaleManager.NO_SCALE=1,b.ScaleManager.SHOW_ALL=2,b.ScaleManager.prototype={startFullScreen:function(a){!this.isFullScreen&&this.game.device.fullscreen&&("undefined"!=typeof a&&this.game.renderType===b.CANVAS&&(this.game.stage.smoothed=a),this._width=this.width,this._height=this.height,this.game.device.fullscreenKeyboard?this.fullScreenTarget[this.game.device.requestFullscreen](Element.ALLOW_KEYBOARD_INPUT):this.fullScreenTarget[this.game.device.requestFullscreen]())},stopFullScreen:function(){this.fullScreenTarget[this.game.device.cancelFullscreen]()},fullScreenChange:function(a){this.event=a,this.isFullScreen?(this.fullScreenScaleMode===b.ScaleManager.EXACT_FIT?(this.fullScreenTarget.style.width="100%",this.fullScreenTarget.style.height="100%",this.width=window.outerWidth,this.height=window.outerHeight,this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height,this.checkResize()):this.fullScreenScaleMode===b.ScaleManager.SHOW_ALL&&(this.setShowAll(),this.refresh()),this.enterFullScreen.dispatch(this.width,this.height)):(this.fullScreenTarget.style.width=this.game.width+"px",this.fullScreenTarget.style.height=this.game.height+"px",this.width=this._width,this.height=this._height,this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height,this.leaveFullScreen.dispatch(this.width,this.height))},forceOrientation:function(a,c,d){"undefined"==typeof c&&(c=!1),this.forceLandscape=a,this.forcePortrait=c,"undefined"!=typeof d&&((null==d||this.game.cache.checkImageKey(d)===!1)&&(d="__default"),this.orientationSprite=new b.Image(this.game,this.game.width/2,this.game.height/2,PIXI.TextureCache[d]),this.orientationSprite.anchor.set(.5),this.checkOrientationState(),this.incorrectOrientation?(this.orientationSprite.visible=!0,this.game.world.visible=!1):(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.game.stage.addChild(this.orientationSprite))},checkOrientationState:function(){this.incorrectOrientation?(this.forceLandscape&&window.innerWidth>window.innerHeight||this.forcePortrait&&window.innerHeight>window.innerWidth)&&(this.incorrectOrientation=!1,this.leaveIncorrectOrientation.dispatch(),this.orientationSprite&&(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.scaleMode!==b.ScaleManager.NO_SCALE&&this.refresh()):(this.forceLandscape&&window.innerWidthwindow.outerHeight?90:0,this.isLandscape?this.enterLandscape.dispatch(this.orientation,!0,!1):this.enterPortrait.dispatch(this.orientation,!1,!0),this.scaleMode!==b.ScaleManager.NO_SCALE&&this.refresh(),this.checkOrientationState()},refresh:function(){if(this.game.device.iPad===!1&&this.game.device.webApp===!1&&this.game.device.desktop===!1&&(this.game.device.android&&this.game.device.chrome===!1?window.scrollTo(0,1):window.scrollTo(0,0)),null==this._check&&this.maxIterations>0){this._iterations=this.maxIterations;var a=this;this._check=window.setInterval(function(){return a.setScreenSize()},10),this.setScreenSize()}},setScreenSize:function(a){"undefined"==typeof a&&(a=!1),this.game.device.iPad===!1&&this.game.device.webApp===!1&&this.game.device.desktop===!1&&(this.game.device.android&&this.game.device.chrome===!1?window.scrollTo(0,1):window.scrollTo(0,0)),this._iterations--,(a||window.innerHeight>this._startHeight||this._iterations<0)&&(document.documentElement.style.minHeight=window.innerHeight+"px",this.incorrectOrientation===!0?this.setMaximum():this.isFullScreen?this.fullScreenScaleMode==b.ScaleManager.EXACT_FIT?this.setExactFit():this.fullScreenScaleMode==b.ScaleManager.SHOW_ALL&&this.setShowAll():this.scaleMode==b.ScaleManager.EXACT_FIT?this.setExactFit():this.scaleMode==b.ScaleManager.SHOW_ALL&&this.setShowAll(),this.setSize(),clearInterval(this._check),this._check=null)},setSize:function(){this.incorrectOrientation===!1&&(this.maxWidth&&this.width>this.maxWidth&&(this.width=this.maxWidth),this.maxHeight&&this.height>this.maxHeight&&(this.height=this.maxHeight),this.minWidth&&this.widththis.maxWidth?this.maxWidth:a,this.height=this.maxHeight&&b>this.maxHeight?this.maxHeight:b}},b.ScaleManager.prototype.constructor=b.ScaleManager,Object.defineProperty(b.ScaleManager.prototype,"isFullScreen",{get:function(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement}}),Object.defineProperty(b.ScaleManager.prototype,"isPortrait",{get:function(){return 0===this.orientation||180==this.orientation}}),Object.defineProperty(b.ScaleManager.prototype,"isLandscape",{get:function(){return 90===this.orientation||-90===this.orientation}}),b.Game=function(a,c,d,e,f,g,h,i){this.id=b.GAMES.push(this)-1,this.config=null,this.physicsConfig=i,this.parent="",this.width=800,this.height=600,this.transparent=!1,this.antialias=!0,this.renderer=null,this.renderType=b.AUTO,this.state=null,this.isBooted=!1,this.isRunning=!1,this.raf=null,this.add=null,this.make=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.net=null,this.scale=null,this.sound=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.physics=null,this.rnd=null,this.device=null,this.camera=null,this.canvas=null,this.context=null,this.debug=null,this.particles=null,this.stepping=!1,this.pendingStep=!1,this.stepCount=0,this.onPause=null,this.onResume=null,this.onBlur=null,this.onFocus=null,this._paused=!1,this._codePaused=!1,1===arguments.length&&"object"==typeof arguments[0]?this.parseConfig(arguments[0]):("undefined"!=typeof a&&(this.width=a),"undefined"!=typeof c&&(this.height=c),"undefined"!=typeof d&&(this.renderer=d,this.renderType=d),"undefined"!=typeof e&&(this.parent=e),"undefined"!=typeof g&&(this.transparent=g),"undefined"!=typeof h&&(this.antialias=h),this.rnd=new b.RandomDataGenerator([(Date.now()*Math.random()).toString()]),this.state=new b.StateManager(this,f)); -var j=this;return this._onBoot=function(){return j.boot()},"complete"===document.readyState||"interactive"===document.readyState?window.setTimeout(this._onBoot,0):(document.addEventListener("DOMContentLoaded",this._onBoot,!1),window.addEventListener("load",this._onBoot,!1)),this},b.Game.prototype={parseConfig:function(a){this.config=a,a.width&&(this.width=b.Utils.parseDimension(a.width,0)),a.height&&(this.height=b.Utils.parseDimension(a.height,1)),a.renderer&&(this.renderer=a.renderer,this.renderType=a.renderer),a.parent&&(this.parent=a.parent),a.transparent&&(this.transparent=a.transparent),a.antialias&&(this.antialias=a.antialias),a.physicsConfig&&(this.physicsConfig=a.physicsConfig);var c=[(Date.now()*Math.random()).toString()];a.seed&&(c=a.seed),this.rnd=new b.RandomDataGenerator(c);var d=null;a.state&&(d=a.state),this.state=new b.StateManager(this,d)},boot:function(){this.isBooted||(document.body?(document.removeEventListener("DOMContentLoaded",this._onBoot),window.removeEventListener("load",this._onBoot),this.onPause=new b.Signal,this.onResume=new b.Signal,this.onBlur=new b.Signal,this.onFocus=new b.Signal,this.isBooted=!0,this.device=new b.Device(this),this.math=b.Math,this.stage=new b.Stage(this,this.width,this.height),this.scale=new b.ScaleManager(this,this.width,this.height),this.setUpRenderer(),this.device.checkFullScreenSupport(),this.world=new b.World(this),this.add=new b.GameObjectFactory(this),this.make=new b.GameObjectCreator(this),this.cache=new b.Cache(this),this.load=new b.Loader(this),this.time=new b.Time(this),this.tweens=new b.TweenManager(this),this.input=new b.Input(this),this.sound=new b.SoundManager(this),this.physics=new b.Physics(this,this.physicsConfig),this.particles=new b.Particles(this),this.plugins=new b.PluginManager(this),this.net=new b.Net(this),this.debug=new b.Utils.Debug(this),this.time.boot(),this.stage.boot(),this.world.boot(),this.input.boot(),this.sound.boot(),this.state.boot(),this.debug.boot(),this.showDebugHeader(),this.isRunning=!0,this.raf=this.config&&this.config.forceSetTimeOut?new b.RequestAnimationFrame(this,this.config.forceSetTimeOut):new b.RequestAnimationFrame(this,!1),this.raf.start()):window.setTimeout(this._onBoot,20))},showDebugHeader:function(){var a=b.DEV_VERSION,c="Canvas",d="HTML Audio",e=1;if(this.renderType===b.WEBGL?(c="WebGL",e++):this.renderType==b.HEADLESS&&(c="Headless"),this.device.webAudio&&(d="WebAudio",e++),this.device.chrome){for(var f=["%c %c %c Phaser v"+a+" - "+c+" - "+d+" %c %c http://phaser.io %c %c ♥%c♥%c♥ ","background: #0cf300","background: #00bc17","color: #ffffff; background: #00711f;","background: #00bc17","background: #0cf300","background: #00bc17"],g=0;3>g;g++)f.push(e>g?"color: #ff2424; background: #fff":"color: #959595; background: #fff");console.log.apply(console,f)}else console.log("Phaser v"+a+" - Renderer: "+c+" - Audio: "+d+" - http://phaser.io")},setUpRenderer:function(){if(this.device.trident&&(this.renderType=b.CANVAS),this.renderType===b.HEADLESS||this.renderType===b.CANVAS||this.renderType===b.AUTO&&this.device.webGL===!1){if(!this.device.canvas)throw new Error("Phaser.Game - cannot create Canvas or WebGL context, aborting.");this.renderType===b.AUTO&&(this.renderType=b.CANVAS),this.renderer=new PIXI.CanvasRenderer(this.width,this.height,this.canvas,this.transparent),this.context=this.renderer.context}else this.renderType=b.WEBGL,this.renderer=new PIXI.WebGLRenderer(this.width,this.height,this.canvas,this.transparent,this.antialias),this.context=null;this.renderType!==b.HEADLESS&&(this.stage.smoothed=this.antialias,b.Canvas.addToDOM(this.canvas,this.parent,!0),b.Canvas.setTouchAction(this.canvas))},update:function(a){this.time.update(a),this._paused||this.pendingStep?this.debug.preUpdate():(this.stepping&&(this.pendingStep=!0),this.debug.preUpdate(),this.physics.preUpdate(),this.state.preUpdate(),this.plugins.preUpdate(),this.stage.preUpdate(),this.state.update(),this.stage.update(),this.tweens.update(),this.sound.update(),this.input.update(),this.physics.update(),this.particles.update(),this.plugins.update(),this.stage.postUpdate(),this.plugins.postUpdate()),this.renderType!=b.HEADLESS&&(this.renderer.render(this.stage),this.plugins.render(),this.state.render(),this.plugins.postRender())},enableStep:function(){this.stepping=!0,this.pendingStep=!1,this.stepCount=0},disableStep:function(){this.stepping=!1,this.pendingStep=!1},step:function(){this.pendingStep=!1,this.stepCount++},destroy:function(){this.raf.stop(),this.input.destroy(),this.state.destroy(),this.physics.destroy(),this.state=null,this.cache=null,this.input=null,this.load=null,this.sound=null,this.stage=null,this.time=null,this.world=null,this.isBooted=!1},gamePaused:function(a){this._paused||(this._paused=!0,this.time.gamePaused(),this.sound.setMute(),this.onPause.dispatch(a))},gameResumed:function(a){this._paused&&!this._codePaused&&(this._paused=!1,this.time.gameResumed(),this.input.reset(),this.sound.unsetMute(),this.onResume.dispatch(a))},focusLoss:function(a){this.onBlur.dispatch(a),this.gamePaused(a)},focusGain:function(a){this.onFocus.dispatch(a),this.gameResumed(a)}},b.Game.prototype.constructor=b.Game,Object.defineProperty(b.Game.prototype,"paused",{get:function(){return this._paused},set:function(a){a===!0?this._paused===!1&&(this._paused=!0,this._codePaused=!0,this.sound.mute=!0,this.time.gamePaused(),this.onPause.dispatch(this)):this._paused&&(this._paused=!1,this._codePaused=!1,this.input.reset(),this.sound.mute=!1,this.time.gameResumed(),this.onResume.dispatch(this))}}),b.Input=function(a){this.game=a,this.hitCanvas=null,this.hitContext=null,this.moveCallback=null,this.moveCallbackContext=this,this.pollRate=0,this.disabled=!1,this.multiInputOverride=b.Input.MOUSE_TOUCH_COMBINE,this.position=null,this.speed=null,this.circle=null,this.scale=null,this.maxPointers=10,this.currentPointers=0,this.tapRate=200,this.doubleTapRate=300,this.holdRate=2e3,this.justPressedRate=200,this.justReleasedRate=200,this.recordPointerHistory=!1,this.recordRate=100,this.recordLimit=100,this.pointer1=null,this.pointer2=null,this.pointer3=null,this.pointer4=null,this.pointer5=null,this.pointer6=null,this.pointer7=null,this.pointer8=null,this.pointer9=null,this.pointer10=null,this.activePointer=null,this.mousePointer=null,this.mouse=null,this.keyboard=null,this.touch=null,this.mspointer=null,this.gamepad=null,this.resetLocked=!1,this.onDown=null,this.onUp=null,this.onTap=null,this.onHold=null,this.interactiveItems=new b.LinkedList,this._localPoint=new b.Point,this._pollCounter=0,this._oldPosition=null,this._x=0,this._y=0},b.Input.MOUSE_OVERRIDES_TOUCH=0,b.Input.TOUCH_OVERRIDES_MOUSE=1,b.Input.MOUSE_TOUCH_COMBINE=2,b.Input.prototype={boot:function(){this.mousePointer=new b.Pointer(this.game,0),this.pointer1=new b.Pointer(this.game,1),this.pointer2=new b.Pointer(this.game,2),this.mouse=new b.Mouse(this.game),this.keyboard=new b.Keyboard(this.game),this.touch=new b.Touch(this.game),this.mspointer=new b.MSPointer(this.game),this.gamepad=new b.Gamepad(this.game),this.onDown=new b.Signal,this.onUp=new b.Signal,this.onTap=new b.Signal,this.onHold=new b.Signal,this.scale=new b.Point(1,1),this.speed=new b.Point,this.position=new b.Point,this._oldPosition=new b.Point,this.circle=new b.Circle(0,0,44),this.activePointer=this.mousePointer,this.currentPointers=0,this.hitCanvas=document.createElement("canvas"),this.hitCanvas.width=1,this.hitCanvas.height=1,this.hitContext=this.hitCanvas.getContext("2d"),this.mouse.start(),this.keyboard.start(),this.touch.start(),this.mspointer.start(),this.mousePointer.active=!0},destroy:function(){this.mouse.stop(),this.keyboard.stop(),this.touch.stop(),this.mspointer.stop(),this.gamepad.stop(),this.moveCallback=null},setMoveCallback:function(a,b){this.moveCallback=a,this.moveCallbackContext=b},addPointer:function(){for(var a=0,c=10;c>0;c--)null===this["pointer"+c]&&(a=c);return 0===a?(console.warn("You can only have 10 Pointer objects"),null):(this["pointer"+a]=new b.Pointer(this.game,a),this["pointer"+a])},update:function(){return this.keyboard.update(),this.pollRate>0&&this._pollCounter=c;c++)this["pointer"+c]&&this["pointer"+c].reset();this.currentPointers=0,"none"!==this.game.canvas.style.cursor&&(this.game.canvas.style.cursor="inherit"),a&&(this.onDown.dispose(),this.onUp.dispose(),this.onTap.dispose(),this.onHold.dispose(),this.onDown=new b.Signal,this.onUp=new b.Signal,this.onTap=new b.Signal,this.onHold=new b.Signal,this.interactiveItems.callAll("reset")),this._pollCounter=0}},resetSpeed:function(a,b){this._oldPosition.setTo(a,b),this.speed.setTo(0,0)},startPointer:function(a){if(this.maxPointers<10&&this.totalActivePointers==this.maxPointers)return null;if(this.pointer1.active===!1)return this.pointer1.start(a);if(this.pointer2.active===!1)return this.pointer2.start(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active===!1)return this["pointer"+b].start(a);return null},updatePointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.move(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.move(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].move(a);return null},stopPointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.stop(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.stop(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].stop(a);return null},getPointer:function(a){if(a=a||!1,this.pointer1.active==a)return this.pointer1;if(this.pointer2.active==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active==a)return this["pointer"+b];return null},getPointerFromIdentifier:function(a){if(this.pointer1.identifier==a)return this.pointer1;if(this.pointer2.identifier==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].identifier==a)return this["pointer"+b];return null},getLocalPosition:function(a,c,d){"undefined"==typeof d&&(d=new b.Point);var e=a.worldTransform,f=1/(e.a*e.d+e.b*-e.c);return d.setTo(e.d*f*c.x+-e.b*f*c.y+(e.ty*e.b-e.tx*e.d)*f,e.a*f*c.y+-e.c*f*c.x+(-e.ty*e.a+e.tx*e.c)*f)},hitTest:function(a,c,d){if(!a.worldVisible)return!1;if(this.getLocalPosition(a,c,this._localPoint),d.copyFrom(this._localPoint),a.hitArea&&a.hitArea.contains)return a.hitArea.contains(this._localPoint.x,this._localPoint.y)?!0:!1;if(a instanceof b.TileSprite){var e=a.width,f=a.height,g=-e*a.anchor.x;if(this._localPoint.x>g&&this._localPoint.xh&&this._localPoint.yg&&this._localPoint.xh&&this._localPoint.yi;i++)if(this.hitTest(a.children[i],c,d))return!0;return!1}},b.Input.prototype.constructor=b.Input,Object.defineProperty(b.Input.prototype,"x",{get:function(){return this._x},set:function(a){this._x=Math.floor(a)}}),Object.defineProperty(b.Input.prototype,"y",{get:function(){return this._y},set:function(a){this._y=Math.floor(a)}}),Object.defineProperty(b.Input.prototype,"pollLocked",{get:function(){return this.pollRate>0&&this._pollCounter=a;a++)this["pointer"+a]&&this["pointer"+a].active&&this.currentPointers++;return this.currentPointers}}),Object.defineProperty(b.Input.prototype,"worldX",{get:function(){return this.game.camera.view.x+this.x}}),Object.defineProperty(b.Input.prototype,"worldY",{get:function(){return this.game.camera.view.y+this.y}}),b.Key=function(a,c){this.game=a,this.enabled=!0,this.event=null,this.isDown=!1,this.isUp=!0,this.altKey=!1,this.ctrlKey=!1,this.shiftKey=!1,this.timeDown=0,this.duration=0,this.timeUp=-2500,this.repeats=0,this.keyCode=c,this.onDown=new b.Signal,this.onHoldCallback=null,this.onHoldContext=null,this.onUp=new b.Signal},b.Key.prototype={update:function(){this.enabled&&this.isDown&&(this.duration=this.game.time.now-this.timeDown,this.repeats++,this.onHoldCallback&&this.onHoldCallback.call(this.onHoldContext,this))},processKeyDown:function(a){this.enabled&&(this.event=a,this.isDown||(this.altKey=a.altKey,this.ctrlKey=a.ctrlKey,this.shiftKey=a.shiftKey,this.isDown=!0,this.isUp=!1,this.timeDown=this.game.time.now,this.duration=0,this.repeats=0,this.onDown.dispatch(this)))},processKeyUp:function(a){this.enabled&&(this.event=a,this.isUp||(this.isDown=!1,this.isUp=!0,this.timeUp=this.game.time.now,this.duration=this.game.time.now-this.timeDown,this.onUp.dispatch(this)))},reset:function(a){"undefined"==typeof a&&(a=!0),this.isDown=!1,this.isUp=!0,this.timeUp=this.game.time.now,this.duration=this.game.time.now-this.timeDown,this.enabled=!0,a&&(this.onDown.removeAll(),this.onUp.removeAll(),this.onHoldCallback=null,this.onHoldContext=null)},justPressed:function(a){return"undefined"==typeof a&&(a=2500),this.isDown&&this.duration=this.game.input.holdRate&&((this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&this.game.input.onHold.dispatch(this),this._holdSent=!0),this.game.input.recordPointerHistory&&this.game.time.now>=this._nextDrop&&(this._nextDrop=this.game.time.now+this.game.input.recordRate,this._history.push({x:this.position.x,y:this.position.y}),this._history.length>this.game.input.recordLimit&&this._history.shift()))},move:function(a,c){if(!this.game.input.pollLocked){if("undefined"==typeof c&&(c=!1),"undefined"!=typeof a.button&&(this.button=a.button),this.clientX=a.clientX,this.clientY=a.clientY,this.pageX=a.pageX,this.pageY=a.pageY,this.screenX=a.screenX,this.screenY=a.screenY,this.x=(this.pageX-this.game.stage.offset.x)*this.game.input.scale.x,this.y=(this.pageY-this.game.stage.offset.y)*this.game.input.scale.y,this.position.setTo(this.x,this.y),this.circle.x=this.x,this.circle.y=this.y,(this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.activePointer=this,this.game.input.x=this.x,this.game.input.y=this.y,this.game.input.position.setTo(this.game.input.x,this.game.input.y),this.game.input.circle.x=this.game.input.x,this.game.input.circle.y=this.game.input.y),this.game.paused)return this;if(this.game.input.moveCallback&&this.game.input.moveCallback.call(this.game.input.moveCallbackContext,this,this.x,this.y),null!==this.targetObject&&this.targetObject.isDragged===!0)return this.targetObject.update(this)===!1&&(this.targetObject=null),this;if(this._highestRenderOrderID=Number.MAX_SAFE_INTEGER,this._highestRenderObject=null,this._highestInputPriorityID=-1,this.game.input.interactiveItems.total>0){var d=this.game.input.interactiveItems.next;do d.validForInput(this._highestInputPriorityID,this._highestRenderOrderID)&&(!c&&d.checkPointerOver(this)||c&&d.checkPointerDown(this))&&(this._highestRenderOrderID=d.sprite._cache[3],this._highestInputPriorityID=d.priorityID,this._highestRenderObject=d),d=d.next;while(null!=d)}return null===this._highestRenderObject?this.targetObject&&(this.targetObject._pointerOutHandler(this),this.targetObject=null):null===this.targetObject?(this.targetObject=this._highestRenderObject,this._highestRenderObject._pointerOverHandler(this)):this.targetObject===this._highestRenderObject?this._highestRenderObject.update(this)===!1&&(this.targetObject=null):(this.targetObject._pointerOutHandler(this),this.targetObject=this._highestRenderObject,this.targetObject._pointerOverHandler(this)),this}},leave:function(a){this.withinGame=!1,this.move(a,!1)},stop:function(a){if(this._stateReset)return void a.preventDefault();if(this.timeUp=this.game.time.now,(this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.onUp.dispatch(this,a),this.duration>=0&&this.duration<=this.game.input.tapRate&&(this.timeUp-this.previousTapTime0&&(this.active=!1),this.withinGame=!1,this.isDown=!1,this.isUp=!0,this.positionUp.setTo(this.x,this.y),this.isMouse===!1&&this.game.input.currentPointers--,this.game.input.interactiveItems.total>0){var c=this.game.input.interactiveItems.next;do c&&c._releasedHandler(this),c=c.next;while(null!=c)}return this.targetObject&&this.targetObject._releasedHandler(this),this.targetObject=null,this},justPressed:function(a){return a=a||this.game.input.justPressedRate,this.isDown===!0&&this.timeDown+a>this.game.time.now},justReleased:function(a){return a=a||this.game.input.justReleasedRate,this.isUp===!0&&this.timeUp+a>this.game.time.now},reset:function(){this.isMouse===!1&&(this.active=!1),this.identifier=null,this.isDown=!1,this.isUp=!0,this.totalTouches=0,this._holdSent=!1,this._history.length=0,this._stateReset=!0,this.targetObject&&this.targetObject._releasedHandler(this),this.targetObject=null}},b.Pointer.prototype.constructor=b.Pointer,Object.defineProperty(b.Pointer.prototype,"duration",{get:function(){return this.isUp?-1:this.game.time.now-this.timeDown}}),Object.defineProperty(b.Pointer.prototype,"worldX",{get:function(){return this.game.world.camera.x+this.x}}),Object.defineProperty(b.Pointer.prototype,"worldY",{get:function(){return this.game.world.camera.y+this.y}}),b.Touch=function(a){this.game=a,this.disabled=!1,this.callbackContext=this.game,this.touchStartCallback=null,this.touchMoveCallback=null,this.touchEndCallback=null,this.touchEnterCallback=null,this.touchLeaveCallback=null,this.touchCancelCallback=null,this.preventDefault=!0,this.event=null,this._onTouchStart=null,this._onTouchMove=null,this._onTouchEnd=null,this._onTouchEnter=null,this._onTouchLeave=null,this._onTouchCancel=null,this._onTouchMove=null},b.Touch.prototype={start:function(){if(null===this._onTouchStart){var a=this;this.game.device.touch&&(this._onTouchStart=function(b){return a.onTouchStart(b)},this._onTouchMove=function(b){return a.onTouchMove(b)},this._onTouchEnd=function(b){return a.onTouchEnd(b)},this._onTouchEnter=function(b){return a.onTouchEnter(b)},this._onTouchLeave=function(b){return a.onTouchLeave(b)},this._onTouchCancel=function(b){return a.onTouchCancel(b)},this.game.canvas.addEventListener("touchstart",this._onTouchStart,!1),this.game.canvas.addEventListener("touchmove",this._onTouchMove,!1),this.game.canvas.addEventListener("touchend",this._onTouchEnd,!1),this.game.canvas.addEventListener("touchenter",this._onTouchEnter,!1),this.game.canvas.addEventListener("touchleave",this._onTouchLeave,!1),this.game.canvas.addEventListener("touchcancel",this._onTouchCancel,!1)) -}},consumeDocumentTouches:function(){this._documentTouchMove=function(a){a.preventDefault()},document.addEventListener("touchmove",this._documentTouchMove,!1)},onTouchStart:function(a){if(this.event=a,this.touchStartCallback&&this.touchStartCallback.call(this.callbackContext,a),!this.game.input.disabled&&!this.disabled){this.preventDefault&&a.preventDefault();for(var b=0;b0&&e>this.deadZone||0>e&&e<-this.deadZone?{axis:d,value:e}:{axis:d,value:0})}this._prevTimestamp=this._rawPad.timestamp}},connect:function(a){var b=!this._connected;this._index=a.index,this._connected=!0,this._rawPad=a,this._rawButtons=a.buttons,this._axes=a.axes,b&&this._padParent.onConnectCallback&&this._padParent.onConnectCallback.call(this._padParent.callbackContext,this._index),b&&this.onConnectCallback&&this.onConnectCallback.call(this.callbackContext)},disconnect:function(){var a=this._connected;this._connected=!1,this._rawPad=void 0,this._rawButtons=[],this._buttons=[];var b=this._index;this._index=null,a&&this._padParent.onDisconnectCallback&&this._padParent.onDisconnectCallback.call(this._padParent.callbackContext,b),a&&this.onDisconnectCallback&&this.onDisconnectCallback.call(this.callbackContext)},processAxisChange:function(a){this.game.input.disabled||this.game.input.gamepad.disabled||this._axes[a.axis]!==a.value&&(this._axes[a.axis]=a.value,this._padParent.onAxisCallback&&this._padParent.onAxisCallback.call(this._padParent.callbackContext,a,this._index),this.onAxisCallback&&this.onAxisCallback.call(this.callbackContext,a))},processButtonDown:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onDownCallback&&this._padParent.onDownCallback.call(this._padParent.callbackContext,a,b,this._index),this.onDownCallback&&this.onDownCallback.call(this.callbackContext,a,b),this._buttons[a]&&this._buttons[a].isDown?this._buttons[a].duration=this.game.time.now-this._buttons[a].timeDown:this._buttons[a]?(this._buttons[a].isDown=!0,this._buttons[a].timeDown=this.game.time.now,this._buttons[a].duration=0,this._buttons[a].value=b):this._buttons[a]={isDown:!0,timeDown:this.game.time.now,timeUp:0,duration:0,value:b},this._hotkeys[a]&&this._hotkeys[a].processButtonDown(b))},processButtonUp:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onUpCallback&&this._padParent.onUpCallback.call(this._padParent.callbackContext,a,b,this._index),this.onUpCallback&&this.onUpCallback.call(this.callbackContext,a,b),this._hotkeys[a]&&this._hotkeys[a].processButtonUp(b),this._buttons[a]?(this._buttons[a].isDown=!1,this._buttons[a].timeUp=this.game.time.now,this._buttons[a].value=b):this._buttons[a]={isDown:!1,timeDown:this.game.time.now,timeUp:this.game.time.now,duration:0,value:b})},processButtonFloat:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onFloatCallback&&this._padParent.onFloatCallback.call(this._padParent.callbackContext,a,b,this._index),this.onFloatCallback&&this.onFloatCallback.call(this.callbackContext,a,b),this._buttons[a]?this._buttons[a].value=b:this._buttons[a]={value:b},this._hotkeys[a]&&this._hotkeys[a].processButtonFloat(b))},axis:function(a){return this._axes[a]?this._axes[a]:!1},isDown:function(a){return this._buttons[a]?this._buttons[a].isDown:!1},justReleased:function(a,b){return"undefined"==typeof b&&(b=250),this._buttons[a]&&this._buttons[a].isDown===!1&&this.game.time.now-this._buttons[a].timeUpd;d++)this._pointerData[d]={id:d,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1};this.snapOffset=new b.Point,this.enabled=!0,this._wasEnabled=!0,this.sprite.events&&null===this.sprite.events.onInputOver&&(this.sprite.events.onInputOver=new b.Signal,this.sprite.events.onInputOut=new b.Signal,this.sprite.events.onInputDown=new b.Signal,this.sprite.events.onInputUp=new b.Signal,this.sprite.events.onDragStart=new b.Signal,this.sprite.events.onDragStop=new b.Signal)}return this.sprite.events.onAddedToGroup.add(this.addedToGroup,this),this.sprite.events.onRemovedFromGroup.add(this.removedFromGroup,this),this.sprite},addedToGroup:function(){this._wasEnabled&&!this.enabled&&this.start()},removedFromGroup:function(){this.enabled?(this._wasEnabled=!0,this.stop()):this._wasEnabled=!1},reset:function(){this.enabled=!1;for(var a=0;10>a;a++)this._pointerData[a]={id:a,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1}},stop:function(){this.enabled!==!1&&(this.enabled=!1,this.game.input.interactiveItems.remove(this))},destroy:function(){this.enabled&&(this._setHandCursor&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1),this.enabled=!1,this.game.input.interactiveItems.remove(this),this._pointerData.length=0,this.boundsRect=null,this.boundsSprite=null,this.sprite=null)},validForInput:function(a,b){return 0===this.sprite.scale.x||0===this.sprite.scale.y?!1:this.pixelPerfectClick||this.pixelPerfectOver?!0:this.priorityID>a||this.priorityID===a&&this.sprite._cache[3]b;b++)if(this._pointerData[b].isOver)return!0}return!1},pointerOut:function(a){if(this.enabled){if("undefined"!=typeof a)return this._pointerData[a].isOut;for(var b=0;10>b;b++)if(this._pointerData[b].isOut)return!0}return!1},pointerTimeOver:function(a){return a=a||0,this._pointerData[a].timeOver},pointerTimeOut:function(a){return a=a||0,this._pointerData[a].timeOut},pointerDragged:function(a){return a=a||0,this._pointerData[a].isDragged},checkPointerDown:function(a){return this.enabled&&this.sprite&&this.sprite.parent&&this.sprite.visible&&this.sprite.parent.visible&&this.game.input.hitTest(this.sprite,a,this._tempPoint)?this.pixelPerfectClick?this.checkPixel(this._tempPoint.x,this._tempPoint.y):!0:!1},checkPointerOver:function(a){return this.enabled&&this.sprite&&this.sprite.parent&&this.sprite.visible&&this.sprite.parent.visible&&this.game.input.hitTest(this.sprite,a,this._tempPoint)?this.pixelPerfectOver?this.checkPixel(this._tempPoint.x,this._tempPoint.y):!0:!1},checkPixel:function(a,b,c){if(this.sprite.texture.baseTexture.source){if(this.game.input.hitContext.clearRect(0,0,1,1),null===a&&null===b){this.game.input.getLocalPosition(this.sprite,c,this._tempPoint);var a=this._tempPoint.x,b=this._tempPoint.y}0!==this.sprite.anchor.x&&(a-=-this.sprite.texture.frame.width*this.sprite.anchor.x),0!==this.sprite.anchor.y&&(b-=-this.sprite.texture.frame.height*this.sprite.anchor.y),a+=this.sprite.texture.frame.x,b+=this.sprite.texture.frame.y,this.game.input.hitContext.drawImage(this.sprite.texture.baseTexture.source,a,b,1,1,0,0,1,1);var d=this.game.input.hitContext.getImageData(0,0,1,1);if(d.data[3]>=this.pixelPerfectAlpha)return!0}return!1},update:function(a){return null!==this.sprite&&void 0!==this.sprite.parent?this.enabled&&this.sprite.visible&&this.sprite.parent.visible?this.draggable&&this._draggedPointerID==a.id?this.updateDrag(a):this._pointerData[a.id].isOver===!0?this.checkPointerOver(a)?(this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,!0):(this._pointerOutHandler(a),!1):void 0:(this._pointerOutHandler(a),!1):void 0},_pointerOverHandler:function(a){null!==this.sprite&&this._pointerData[a.id].isOver===!1&&(this._pointerData[a.id].isOver=!0,this._pointerData[a.id].isOut=!1,this._pointerData[a.id].timeOver=this.game.time.now,this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.canvas.style.cursor="pointer",this._setHandCursor=!1),this.sprite.events.onInputOver.dispatch(this.sprite,a))},_pointerOutHandler:function(a){null!==this.sprite&&(this._pointerData[a.id].isOver=!1,this._pointerData[a.id].isOut=!0,this._pointerData[a.id].timeOut=this.game.time.now,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1),this.sprite&&this.sprite.events&&this.sprite.events.onInputOut.dispatch(this.sprite,a))},_touchedHandler:function(a){if(null!==this.sprite){if(this._pointerData[a.id].isDown===!1&&this._pointerData[a.id].isOver===!0){if(this.pixelPerfectClick&&!this.checkPixel(null,null,a))return;this._pointerData[a.id].isDown=!0,this._pointerData[a.id].isUp=!1,this._pointerData[a.id].timeDown=this.game.time.now,this.sprite.events.onInputDown.dispatch(this.sprite,a),this.draggable&&this.isDragged===!1&&this.startDrag(a),this.bringToTop&&this.sprite.bringToTop()}return this.consumePointerEvent}},_releasedHandler:function(a){null!==this.sprite&&this._pointerData[a.id].isDown&&a.isUp&&(this._pointerData[a.id].isDown=!1,this._pointerData[a.id].isUp=!0,this._pointerData[a.id].timeUp=this.game.time.now,this._pointerData[a.id].downDuration=this._pointerData[a.id].timeUp-this._pointerData[a.id].timeDown,this.checkPointerOver(a)?this.sprite.events.onInputUp.dispatch(this.sprite,a,!0):(this.sprite.events.onInputUp.dispatch(this.sprite,a,!1),this.useHandCursor&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1)),this.draggable&&this.isDragged&&this._draggedPointerID==a.id&&this.stopDrag(a))},updateDrag:function(a){return a.isUp?(this.stopDrag(a),!1):(this.sprite.fixedToCamera?(this.allowHorizontalDrag&&(this.sprite.cameraOffset.x=a.x+this._dragPoint.x+this.dragOffset.x),this.allowVerticalDrag&&(this.sprite.cameraOffset.y=a.y+this._dragPoint.y+this.dragOffset.y),this.boundsRect&&this.checkBoundsRect(),this.boundsSprite&&this.checkBoundsSprite(),this.snapOnDrag&&(this.sprite.cameraOffset.x=Math.round((this.sprite.cameraOffset.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.cameraOffset.y=Math.round((this.sprite.cameraOffset.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)):(this.allowHorizontalDrag&&(this.sprite.x=a.x+this._dragPoint.x+this.dragOffset.x),this.allowVerticalDrag&&(this.sprite.y=a.y+this._dragPoint.y+this.dragOffset.y),this.boundsRect&&this.checkBoundsRect(),this.boundsSprite&&this.checkBoundsSprite(),this.snapOnDrag&&(this.sprite.x=Math.round((this.sprite.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.y=Math.round((this.sprite.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)),!0)},justOver:function(a,b){return a=a||0,b=b||500,this._pointerData[a].isOver&&this.overDuration(a)a;a++)this._pointerData[a].isDragged=!1;this.draggable=!1,this.isDragged=!1,this._draggedPointerID=-1},startDrag:function(a){if(this.isDragged=!0,this._draggedPointerID=a.id,this._pointerData[a.id].isDragged=!0,this.sprite.fixedToCamera)this.dragFromCenter?(this.sprite.centerOn(a.x,a.y),this._dragPoint.setTo(this.sprite.cameraOffset.x-a.x,this.sprite.cameraOffset.y-a.y)):this._dragPoint.setTo(this.sprite.cameraOffset.x-a.x,this.sprite.cameraOffset.y-a.y);else if(this.dragFromCenter){var b=this.sprite.getBounds();this.sprite.x=a.x+(this.sprite.x-b.centerX),this.sprite.y=a.y+(this.sprite.y-b.centerY),this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y)}else this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y);this.updateDrag(a),this.bringToTop&&this.sprite.bringToTop(),this.sprite.events.onDragStart.dispatch(this.sprite,a)},stopDrag:function(a){this.isDragged=!1,this._draggedPointerID=-1,this._pointerData[a.id].isDragged=!1,this.snapOnRelease&&(this.sprite.fixedToCamera?(this.sprite.cameraOffset.x=Math.round((this.sprite.cameraOffset.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.cameraOffset.y=Math.round((this.sprite.cameraOffset.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY):(this.sprite.x=Math.round((this.sprite.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.y=Math.round((this.sprite.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)),this.sprite.events.onDragStop.dispatch(this.sprite,a),this.checkPointerOver(a)===!1&&this._pointerOutHandler(a)},setDragLock:function(a,b){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!0),this.allowHorizontalDrag=a,this.allowVerticalDrag=b},enableSnap:function(a,b,c,d,e,f){"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=0),this.snapX=a,this.snapY=b,this.snapOffsetX=e,this.snapOffsetY=f,this.snapOnDrag=c,this.snapOnRelease=d},disableSnap:function(){this.snapOnDrag=!1,this.snapOnRelease=!1},checkBoundsRect:function(){this.sprite.fixedToCamera?(this.sprite.cameraOffset.xthis.boundsRect.right&&(this.sprite.cameraOffset.x=this.boundsRect.right-this.sprite.width),this.sprite.cameraOffset.ythis.boundsRect.bottom&&(this.sprite.cameraOffset.y=this.boundsRect.bottom-this.sprite.height)):(this.sprite.xthis.boundsRect.right&&(this.sprite.x=this.boundsRect.right-this.sprite.width),this.sprite.ythis.boundsRect.bottom&&(this.sprite.y=this.boundsRect.bottom-this.sprite.height))},checkBoundsSprite:function(){this.sprite.fixedToCamera&&this.boundsSprite.fixedToCamera?(this.sprite.cameraOffset.xthis.boundsSprite.camerOffset.x+this.boundsSprite.width&&(this.sprite.cameraOffset.x=this.boundsSprite.camerOffset.x+this.boundsSprite.width-this.sprite.width),this.sprite.cameraOffset.ythis.boundsSprite.camerOffset.y+this.boundsSprite.height&&(this.sprite.cameraOffset.y=this.boundsSprite.camerOffset.y+this.boundsSprite.height-this.sprite.height)):(this.sprite.xthis.boundsSprite.x+this.boundsSprite.width&&(this.sprite.x=this.boundsSprite.x+this.boundsSprite.width-this.sprite.width),this.sprite.ythis.boundsSprite.y+this.boundsSprite.height&&(this.sprite.y=this.boundsSprite.y+this.boundsSprite.height-this.sprite.height))}},b.InputHandler.prototype.constructor=b.InputHandler,b.Events=function(a){this.parent=a,this.onAddedToGroup=new b.Signal,this.onRemovedFromGroup=new b.Signal,this.onKilled=new b.Signal,this.onRevived=new b.Signal,this.onOutOfBounds=new b.Signal,this.onEnterBounds=new b.Signal,this.onInputOver=null,this.onInputOut=null,this.onInputDown=null,this.onInputUp=null,this.onDragStart=null,this.onDragStop=null,this.onAnimationStart=null,this.onAnimationComplete=null,this.onAnimationLoop=null},b.Events.prototype={destroy:function(){this.parent=null,this.onAddedToGroup.dispose(),this.onRemovedFromGroup.dispose(),this.onKilled.dispose(),this.onRevived.dispose(),this.onOutOfBounds.dispose(),this.onInputOver&&(this.onInputOver.dispose(),this.onInputOut.dispose(),this.onInputDown.dispose(),this.onInputUp.dispose(),this.onDragStart.dispose(),this.onDragStop.dispose()),this.onAnimationStart&&(this.onAnimationStart.dispose(),this.onAnimationComplete.dispose(),this.onAnimationLoop.dispose())}},b.Events.prototype.constructor=b.Events,b.GameObjectFactory=function(a){this.game=a,this.world=this.game.world},b.GameObjectFactory.prototype={existing:function(a){return this.world.add(a)},image:function(a,c,d,e,f){return"undefined"==typeof f&&(f=this.world),f.add(new b.Image(this.game,a,c,d,e))},sprite:function(a,b,c,d,e){return"undefined"==typeof e&&(e=this.world),e.create(a,b,c,d)},tween:function(a){return this.game.tweens.create(a)},group:function(a,c,d,e,f){return new b.Group(this.game,a,c,d,e,f)},physicsGroup:function(a,c,d,e){return new b.Group(this.game,c,d,e,!0,a)},spriteBatch:function(a,c,d){return"undefined"==typeof c&&(c="group"),"undefined"==typeof d&&(d=!1),new b.SpriteBatch(this.game,a,c,d)},audio:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},sound:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},tileSprite:function(a,c,d,e,f,g,h){return"undefined"==typeof h&&(h=this.world),h.add(new b.TileSprite(this.game,a,c,d,e,f,g))},text:function(a,c,d,e,f){return"undefined"==typeof f&&(f=this.world),f.add(new b.Text(this.game,a,c,d,e))},button:function(a,c,d,e,f,g,h,i,j,k){return"undefined"==typeof k&&(k=this.world),k.add(new b.Button(this.game,a,c,d,e,f,g,h,i,j))},graphics:function(a,c,d){return"undefined"==typeof d&&(d=this.world),d.add(new b.Graphics(this.game,a,c))},emitter:function(a,c,d){return this.game.particles.add(new b.Particles.Arcade.Emitter(this.game,a,c,d))},retroFont:function(a,c,d,e,f,g,h,i,j){return new b.RetroFont(this.game,a,c,d,e,f,g,h,i,j)},bitmapText:function(a,c,d,e,f,g){return"undefined"==typeof g&&(g=this.world),g.add(new b.BitmapText(this.game,a,c,d,e,f))},tilemap:function(a,c,d,e,f){return new b.Tilemap(this.game,a,c,d,e,f)},renderTexture:function(a,c,d,e){("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid()),"undefined"==typeof e&&(e=!1);var f=new b.RenderTexture(this.game,a,c,d);return e&&this.game.cache.addRenderTexture(d,f),f},bitmapData:function(a,c,d,e){"undefined"==typeof e&&(e=!1),("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid());var f=new b.BitmapData(this.game,d,a,c);return e&&this.game.cache.addBitmapData(d,f),f},filter:function(a){var c=Array.prototype.splice.call(arguments,1),a=new b.Filter[a](this.game);return a.init.apply(a,c),a}},b.GameObjectFactory.prototype.constructor=b.GameObjectFactory,b.GameObjectCreator=function(a){this.game=a,this.world=this.game.world},b.GameObjectCreator.prototype={image:function(a,c,d,e){return new b.Image(this.game,a,c,d,e)},sprite:function(a,c,d,e){return new b.Sprite(this.game,a,c,d,e)},tween:function(a){return new b.Tween(a,this.game)},group:function(a,c,d,e,f){return new b.Group(this.game,null,c,d,e,f)},spriteBatch:function(a,c,d){return"undefined"==typeof c&&(c="group"),"undefined"==typeof d&&(d=!1),new b.SpriteBatch(this.game,a,c,d)},audio:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},sound:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},tileSprite:function(a,c,d,e,f,g){return new b.TileSprite(this.game,a,c,d,e,f,g)},text:function(a,c,d,e){return new b.Text(this.game,a,c,d,e)},button:function(a,c,d,e,f,g,h,i,j){return new b.Button(this.game,a,c,d,e,f,g,h,i,j)},graphics:function(a,c){return new b.Graphics(this.game,a,c)},emitter:function(a,c,d){return new b.Particles.Arcade.Emitter(this.game,a,c,d)},retroFont:function(a,c,d,e,f,g,h,i,j){return new b.RetroFont(this.game,a,c,d,e,f,g,h,i,j)},bitmapText:function(a,c,d,e,f){return new b.BitmapText(this.game,a,c,d,e,f)},tilemap:function(a,c,d,e,f){return new b.Tilemap(this.game,a,c,d,e,f)},renderTexture:function(a,c,d,e){("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid()),"undefined"==typeof e&&(e=!1);var f=new b.RenderTexture(this.game,a,c,d);return e&&this.game.cache.addRenderTexture(d,f),f -},bitmapData:function(a,c,d,e){"undefined"==typeof e&&(e=!1),("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid());var f=new b.BitmapData(this.game,d,a,c);return e&&this.game.cache.addBitmapData(d,f),f},filter:function(a){var c=Array.prototype.splice.call(arguments,1),a=new b.Filter[a](this.game);return a.init.apply(a,c),a}},b.GameObjectCreator.prototype.constructor=b.GameObjectCreator,b.BitmapData=function(a,c,d,e){"undefined"==typeof d&&(d=100),"undefined"==typeof e&&(e=100),this.game=a,this.key=c,this.width=d,this.height=e,this.canvas=b.Canvas.create(d,e,"",!0),this.context=this.canvas.getContext("2d"),this.ctx=this.context,this.imageData=this.context.getImageData(0,0,d,e),this.pixels=this.imageData.data.buffer?this.imageData.data.buffer:this.imageData.data,this.baseTexture=new PIXI.BaseTexture(this.canvas),this.texture=new PIXI.Texture(this.baseTexture),this.textureFrame=new b.Frame(0,0,0,d,e,"bitmapData",a.rnd.uuid()),this.type=b.BITMAPDATA,this.dirty=!1},b.BitmapData.prototype={add:function(a){if(Array.isArray(a))for(var b=0;b=0&&a<=this.width&&b>=0&&b<=this.height&&(this.pixels[b*this.width+a]=f<<24|e<<16|d<<8|c,this.context.putImageData(this.imageData,0,0),this.dirty=!0)},setPixel:function(a,b,c,d,e){this.setPixel32(a,b,c,d,e,255)},getPixel:function(a,b){return a>=0&&a<=this.width&&b>=0&&b<=this.height?this.data32[b*this.width+a]:void 0},getPixel32:function(a,b){return a>=0&&a<=this.width&&b>=0&&b<=this.height?this.data32[b*this.width+a]:void 0},getPixels:function(a){return this.context.getImageData(a.x,a.y,a.width,a.height)},copyPixels:function(a,b,c,d){"string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,b.x,b.y,b.width,b.height,c,d,b.width,b.height)},draw:function(a,b,c){"string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,0,0,a.width,a.height,b,c,a.width,a.height)},alphaMask:function(a,b){var c=this.context.globalCompositeOperation;"string"==typeof b&&(b=this.game.cache.getImage(b)),b&&this.context.drawImage(b,0,0),this.context.globalCompositeOperation="source-atop","string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,0,0),this.context.globalCompositeOperation=c},render:function(){this.game.renderType===b.WEBGL&&this.dirty&&(PIXI.updateWebGLTexture(this.baseTexture,this.game.renderer.gl),this.dirty=!1)}},b.BitmapData.prototype.constructor=b.BitmapData,b.Sprite=function(a,c,d,e,f){c=c||0,d=d||0,e=e||null,f=f||null,this.game=a,this.name="",this.type=b.SPRITE,this.z=0,this.events=new b.Events(this),this.animations=new b.AnimationManager(this),this.key=e,this._frame=0,this._frameName="",PIXI.Sprite.call(this,PIXI.TextureCache.__default),this.loadTexture(e,f),this.position.set(c,d),this.world=new b.Point(c,d),this.autoCull=!1,this.input=null,this.body=null,this.health=1,this.lifespan=0,this.checkWorldBounds=!1,this.outOfBoundsKill=!1,this.debug=!1,this.cameraOffset=new b.Point,this._cache=[0,0,0,0,1,0,1,0],this._bounds=new b.Rectangle},b.Sprite.prototype=Object.create(PIXI.Sprite.prototype),b.Sprite.prototype.constructor=b.Sprite,b.Sprite.prototype.preUpdate=function(){if(1===this._cache[4]&&this.exists)return this.world.setTo(this.parent.position.x+this.position.x,this.parent.position.y+this.position.y),this.worldTransform.tx=this.world.x,this.worldTransform.ty=this.world.y,this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,this.body&&this.body.preUpdate(),this._cache[4]=0,!1;if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this._cache[3]=-1,!1;if(this.lifespan>0&&(this.lifespan-=this.game.time.elapsed,this.lifespan<=0))return this.kill(),!1;if((this.autoCull||this.checkWorldBounds)&&this._bounds.copyFrom(this.getBounds()),this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this._bounds)),this.checkWorldBounds)if(1===this._cache[5]&&this.game.world.bounds.intersects(this._bounds))this._cache[5]=0,this.events.onEnterBounds.dispatch(this);else if(0===this._cache[5]&&!this.game.world.bounds.intersects(this._bounds)&&(this._cache[5]=1,this.events.onOutOfBounds.dispatch(this),this.outOfBoundsKill))return this.kill(),!1;this.world.setTo(this.game.camera.x+this.worldTransform.tx,this.game.camera.y+this.worldTransform.ty),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++),this.animations.update(),this.body&&this.body.preUpdate();for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Sprite.prototype.update=function(){},b.Sprite.prototype.postUpdate=function(){this.key instanceof b.BitmapData&&this.key.render(),this.exists&&this.body&&this.body.postUpdate(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,c=this.children.length;c>a;a++)this.children[a].postUpdate()},b.Sprite.prototype.loadTexture=function(a,c){return c=c||0,a instanceof b.RenderTexture?(this.key=a.key,void this.setTexture(a)):a instanceof b.BitmapData?(this.key=a,void this.setTexture(a.texture)):a instanceof PIXI.Texture?(this.key=a,void this.setTexture(a)):null===a||"undefined"==typeof a?(this.key="__default",void this.setTexture(PIXI.TextureCache[this.key])):"string"!=typeof a||this.game.cache.checkImageKey(a)?this.game.cache.isSpriteSheet(a)?(this.key=a,this.animations.loadFrameData(this.game.cache.getFrameData(a)),"string"==typeof c?this.frameName=c:this.frame=c,void 0):(this.key=a,void this.setTexture(PIXI.TextureCache[a])):(this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]))},b.Sprite.prototype.crop=function(a){if("undefined"==typeof a||null===a)this.texture.hasOwnProperty("sourceWidth")&&this.texture.setFrame(new b.Rectangle(0,0,this.texture.sourceWidth,this.texture.sourceHeight));else if(this.texture instanceof PIXI.Texture){var c={};b.Utils.extend(!0,c,this.texture),c.sourceWidth=c.width,c.sourceHeight=c.height,c.frame=a,c.width=a.width,c.height=a.height,this.texture=c,this.texture.updateFrame=!0,PIXI.Texture.frameUpdates.push(this.texture)}else this.texture.setFrame(a)},b.Sprite.prototype.revive=function(a){return"undefined"==typeof a&&(a=1),this.alive=!0,this.exists=!0,this.visible=!0,this.health=a,this.events&&this.events.onRevived.dispatch(this),this},b.Sprite.prototype.kill=function(){return this.alive=!1,this.exists=!1,this.visible=!1,this.events&&this.events.onKilled.dispatch(this),this},b.Sprite.prototype.destroy=function(a){if(null!==this.game){"undefined"==typeof a&&(a=!0),this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.input&&this.input.destroy(),this.animations&&this.animations.destroy(),this.body&&this.body.destroy(),this.events&&this.events.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.alive=!1,this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null}},b.Sprite.prototype.damage=function(a){return this.alive&&(this.health-=a,this.health<=0&&this.kill()),this},b.Sprite.prototype.reset=function(a,b,c){return"undefined"==typeof c&&(c=1),this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.health=c,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this},b.Sprite.prototype.bringToTop=function(){return this.parent&&this.parent.bringToTop(this),this},b.Sprite.prototype.play=function(a,b,c,d){return this.animations?this.animations.play(a,b,c,d):void 0},b.Sprite.prototype.overlap=function(a){return b.Rectangle.intersects(this.getBounds(),a.getBounds())},Object.defineProperty(b.Sprite.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.Sprite.prototype,"deltaX",{get:function(){return this.world.x-this._cache[0]}}),Object.defineProperty(b.Sprite.prototype,"deltaY",{get:function(){return this.world.y-this._cache[1]}}),Object.defineProperty(b.Sprite.prototype,"deltaZ",{get:function(){return this.rotation-this._cache[2]}}),Object.defineProperty(b.Sprite.prototype,"inWorld",{get:function(){return this.game.world.bounds.intersects(this.getBounds())}}),Object.defineProperty(b.Sprite.prototype,"inCamera",{get:function(){return this.game.world.camera.screenView.intersects(this.getBounds())}}),Object.defineProperty(b.Sprite.prototype,"frame",{get:function(){return this.animations.frame},set:function(a){this.animations.frame=a}}),Object.defineProperty(b.Sprite.prototype,"frameName",{get:function(){return this.animations.frameName},set:function(a){this.animations.frameName=a}}),Object.defineProperty(b.Sprite.prototype,"renderOrderID",{get:function(){return this._cache[3]}}),Object.defineProperty(b.Sprite.prototype,"inputEnabled",{get:function(){return this.input&&this.input.enabled},set:function(a){a?null===this.input?(this.input=new b.InputHandler(this),this.input.start()):this.input&&!this.input.enabled&&this.input.start():this.input&&this.input.enabled&&this.input.stop()}}),Object.defineProperty(b.Sprite.prototype,"exists",{get:function(){return!!this._cache[6]},set:function(a){a?(this._cache[6]=1,this.body&&this.body.type===b.Physics.P2JS&&this.body.addToWorld(),this.visible=!0):(this._cache[6]=0,this.body&&this.body.type===b.Physics.P2JS&&this.body.removeFromWorld(),this.visible=!1)}}),Object.defineProperty(b.Sprite.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),Object.defineProperty(b.Sprite.prototype,"smoothed",{get:function(){return!this.texture.baseTexture.scaleMode},set:function(a){a?this.texture&&(this.texture.baseTexture.scaleMode=0):this.texture&&(this.texture.baseTexture.scaleMode=1)}}),Object.defineProperty(b.Sprite.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.Sprite.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),b.Image=function(a,c,d,e,f){c=c||0,d=d||0,e=e||null,f=f||null,this.game=a,this.exists=!0,this.name="",this.type=b.IMAGE,this.z=0,this.events=new b.Events(this),this.key=e,this._frame=0,this._frameName="",PIXI.Sprite.call(this,PIXI.TextureCache.__default),this.loadTexture(e,f),this.position.set(c,d),this.world=new b.Point(c,d),this.autoCull=!1,this.input=null,this.cameraOffset=new b.Point,this._cache=[0,0,0,0,1,0,1,0]},b.Image.prototype=Object.create(PIXI.Sprite.prototype),b.Image.prototype.constructor=b.Image,b.Image.prototype.preUpdate=function(){if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this._cache[3]=-1,!1;this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this.getBounds())),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++);for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Image.prototype.update=function(){},b.Image.prototype.postUpdate=function(){this.key instanceof b.BitmapData&&this.key.render(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,c=this.children.length;c>a;a++)this.children[a].postUpdate()},b.Image.prototype.loadTexture=function(a,c){if(c=c||0,a instanceof b.RenderTexture)return this.key=a.key,void this.setTexture(a);if(a instanceof b.BitmapData)return this.key=a,void this.setTexture(a.texture);if(a instanceof PIXI.Texture)return this.key=a,void this.setTexture(a);if(null===a||"undefined"==typeof a)return this.key="__default",void this.setTexture(PIXI.TextureCache[this.key]);if("string"==typeof a&&!this.game.cache.checkImageKey(a))return this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]);if(this.game.cache.isSpriteSheet(a)){this.key=a;var d=this.game.cache.getFrameData(a);return"string"==typeof c?(this._frame=0,this._frameName=c,void this.setTexture(PIXI.TextureCache[d.getFrameByName(c).uuid])):(this._frame=c,this._frameName="",void this.setTexture(PIXI.TextureCache[d.getFrame(c).uuid]))}return this.key=a,void this.setTexture(PIXI.TextureCache[a])},b.Image.prototype.crop=function(a){if("undefined"==typeof a||null===a)this.texture.hasOwnProperty("sourceWidth")&&this.texture.setFrame(new b.Rectangle(0,0,this.texture.sourceWidth,this.texture.sourceHeight));else if(this.texture instanceof PIXI.Texture){var c={};b.Utils.extend(!0,c,this.texture),c.sourceWidth=c.width,c.sourceHeight=c.height,c.frame=a,c.width=a.width,c.height=a.height,this.texture=c,this.texture.updateFrame=!0,PIXI.Texture.frameUpdates.push(this.texture)}else this.texture.setFrame(a)},b.Image.prototype.revive=function(){return this.alive=!0,this.exists=!0,this.visible=!0,this.events&&this.events.onRevived.dispatch(this),this},b.Image.prototype.kill=function(){return this.alive=!1,this.exists=!1,this.visible=!1,this.events&&this.events.onKilled.dispatch(this),this},b.Image.prototype.destroy=function(a){if(null!==this.game){"undefined"==typeof a&&(a=!0),this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.events&&this.events.destroy(),this.input&&this.input.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.alive=!1,this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null}},b.Image.prototype.reset=function(a,b){return this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this},b.Image.prototype.bringToTop=function(){return this.parent&&this.parent.bringToTop(this),this},Object.defineProperty(b.Image.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.Image.prototype,"deltaX",{get:function(){return this.world.x-this._cache[0]}}),Object.defineProperty(b.Image.prototype,"deltaY",{get:function(){return this.world.y-this._cache[1]}}),Object.defineProperty(b.Image.prototype,"deltaZ",{get:function(){return this.rotation-this._cache[2]}}),Object.defineProperty(b.Image.prototype,"inWorld",{get:function(){return this.game.world.bounds.intersects(this.getBounds())}}),Object.defineProperty(b.Image.prototype,"inCamera",{get:function(){return this.game.world.camera.screenView.intersects(this.getBounds())}}),Object.defineProperty(b.Image.prototype,"frame",{get:function(){return this._frame},set:function(a){if(a!==this.frame&&this.game.cache.isSpriteSheet(this.key)){var b=this.game.cache.getFrameData(this.key);b&&aa;a++)this.children[a].preUpdate();return!0},b.TileSprite.prototype.update=function(){},b.TileSprite.prototype.postUpdate=function(){this.exists&&this.body&&this.body.postUpdate(),1===this._cache[7]&&(this.position.x=this.game.camera.view.x+this.cameraOffset.x,this.position.y=this.game.camera.view.y+this.cameraOffset.y);for(var a=0,b=this.children.length;b>a;a++)this.children[a].postUpdate()},b.TileSprite.prototype.autoScroll=function(a,b){this._scroll.set(a,b)},b.TileSprite.prototype.stopScroll=function(){this._scroll.set(0,0)},b.TileSprite.prototype.loadTexture=function(a,c){return c=c||0,a instanceof b.RenderTexture?(this.key=a.key,void this.setTexture(a)):a instanceof b.BitmapData?(this.key=a,void this.setTexture(a.texture)):a instanceof PIXI.Texture?(this.key=a,void this.setTexture(a)):null===a||"undefined"==typeof a?(this.key="__default",void this.setTexture(PIXI.TextureCache[this.key])):"string"!=typeof a||this.game.cache.checkImageKey(a)?this.game.cache.isSpriteSheet(a)?(this.key=a,this.animations.loadFrameData(this.game.cache.getFrameData(a)),"string"==typeof c?this.frameName=c:this.frame=c,void 0):(this.key=a,void this.setTexture(PIXI.TextureCache[a])):(this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]))},b.TileSprite.prototype.destroy=function(a){if(null!==this.game){"undefined"==typeof a&&(a=!0),this.filters&&(this.filters=null),this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.animations.destroy(),this.events.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null}},b.TileSprite.prototype.play=function(a,b,c,d){return this.animations.play(a,b,c,d)},b.TileSprite.prototype.reset=function(a,b){return this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.tilePosition.x=0,this.tilePosition.y=0,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this},Object.defineProperty(b.TileSprite.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.TileSprite.prototype,"frame",{get:function(){return this.animations.frame},set:function(a){a!==this.animations.frame&&(this.animations.frame=a)}}),Object.defineProperty(b.TileSprite.prototype,"frameName",{get:function(){return this.animations.frameName},set:function(a){a!==this.animations.frameName&&(this.animations.frameName=a)}}),Object.defineProperty(b.TileSprite.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),Object.defineProperty(b.TileSprite.prototype,"exists",{get:function(){return!!this._cache[6]},set:function(a){a?(this._cache[6]=1,this.body&&this.body.type===b.Physics.P2JS&&this.body.addToWorld(),this.visible=!0):(this._cache[6]=0,this.body&&this.body.type===b.Physics.P2JS&&(this.body.safeRemove=!0),this.visible=!1)}}),Object.defineProperty(b.TileSprite.prototype,"inputEnabled",{get:function(){return this.input&&this.input.enabled},set:function(a){a?null===this.input?(this.input=new b.InputHandler(this),this.input.start()):this.input&&!this.input.enabled&&this.input.start():this.input&&this.input.enabled&&this.input.stop()}}),Object.defineProperty(b.TileSprite.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.TileSprite.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),b.Text=function(a,c,d,e,f){c=c||0,d=d||0,e=e||" ",f=f||{},e=0===e.length?" ":e.toString(),this.game=a,this.exists=!0,this.name="",this.type=b.TEXT,this.z=0,this.world=new b.Point(c,d),this._text=e,this._font="",this._fontSize=32,this._fontWeight="normal",this._lineSpacing=0,this.events=new b.Events(this),this.input=null,this.cameraOffset=new b.Point,this.setStyle(f),PIXI.Text.call(this,e,this.style),this.position.set(c,d),this._cache=[0,0,0,0,1,0,1,0]},b.Text.prototype=Object.create(PIXI.Text.prototype),b.Text.prototype.constructor=b.Text,b.Text.prototype.preUpdate=function(){if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this.renderOrderID=-1,!1;this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this.getBounds())),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++);for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Text.prototype.update=function(){},b.Text.prototype.postUpdate=function(){1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,b=this.children.length;b>a;a++)this.children[a].postUpdate()},b.Text.prototype.destroy=function(a){if(null!==this.game){"undefined"==typeof a&&(a=!0),this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.texture.destroy(),this.canvas.parentNode?this.canvas.parentNode.removeChild(this.canvas):(this.canvas=null,this.context=null);var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null}},b.Text.prototype.setShadow=function(a,b,c,d){this.style.shadowOffsetX=a||0,this.style.shadowOffsetY=b||0,this.style.shadowColor=c||"rgba(0,0,0,0)",this.style.shadowBlur=d||0,this.dirty=!0},b.Text.prototype.setStyle=function(a){a=a||{},a.font=a.font||"bold 20pt Arial",a.fill=a.fill||"black",a.align=a.align||"left",a.stroke=a.stroke||"black",a.strokeThickness=a.strokeThickness||0,a.wordWrap=a.wordWrap||!1,a.wordWrapWidth=a.wordWrapWidth||100,a.shadowOffsetX=a.shadowOffsetX||0,a.shadowOffsetY=a.shadowOffsetY||0,a.shadowColor=a.shadowColor||"rgba(0,0,0,0)",a.shadowBlur=a.shadowBlur||0,this.style=a,this.dirty=!0},b.Text.prototype.updateText=function(){this.context.font=this.style.font;var a=this.text;this.style.wordWrap&&(a=this.runWordWrap(this.text));for(var b=a.split(/(?:\r\n|\r|\n)/),c=[],d=0,e=0;ee?(g>0&&(b+="\n"),b+=f[g]+" ",e=this.style.wordWrapWidth-h):(e-=i,b+=f[g]+" ")}d?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",b.RetroFont.TEXT_SET2=" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET3="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ",b.RetroFont.TEXT_SET4="ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789",b.RetroFont.TEXT_SET5="ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/() '!?-*:0123456789",b.RetroFont.TEXT_SET6="ABCDEFGHIJKLMNOPQRSTUVWXYZ!?:;0123456789\"(),-.' ",b.RetroFont.TEXT_SET7="AGMSY+:4BHNTZ!;5CIOU.?06DJPV,(17EKQW\")28FLRX-'39",b.RetroFont.TEXT_SET8="0123456789 .ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET9="ABCDEFGHIJKLMNOPQRSTUVWXYZ()-0123456789.:,'\"?!",b.RetroFont.TEXT_SET10="ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET11="ABCDEFGHIJKLMNOPQRSTUVWXYZ.,\"-+!?()':;0123456789",b.RetroFont.prototype.setFixedWidth=function(a,b){"undefined"==typeof b&&(b="left"),this.fixedWidth=a,this.align=b},b.RetroFont.prototype.setText=function(a,b,c,d,e,f){this.multiLine=b||!1,this.customSpacingX=c||0,this.customSpacingY=d||0,this.align=e||"left",this.autoUpperCase=f?!1:!0,a.length>0&&(this.text=a)},b.RetroFont.prototype.resize=function(a,b){if(this.width=a,this.height=b,this.frame.width=this.width,this.frame.height=this.height,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.renderer.type===PIXI.WEBGL_RENDERER){this.projection.x=this.width/2,this.projection.y=-this.height/2;var c=this.renderer.gl;c.bindTexture(c.TEXTURE_2D,this.baseTexture._glTextures[c.id]),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,this.width,this.height,0,c.RGBA,c.UNSIGNED_BYTE,null)}else this.textureBuffer.resize(this.width,this.height);PIXI.Texture.frameUpdates.push(this)},b.RetroFont.prototype.buildRetroFontText=function(){var a=0,c=0;if(this.multiLine){var d=this._text.split("\n");this.fixedWidth>0?this.resize(this.fixedWidth,d.length*(this.characterHeight+this.customSpacingY)-this.customSpacingY):this.resize(this.getLongestLine()*(this.characterWidth+this.customSpacingX),d.length*(this.characterHeight+this.customSpacingY)-this.customSpacingY),this.textureBuffer.clear();for(var e=0;ea&&(a=0),this.pasteLine(d[e],a,c,this.customSpacingX),c+=this.characterHeight+this.customSpacingY}}else{switch(this.fixedWidth>0?this.resize(this.fixedWidth,this.characterHeight):this.resize(this._text.length*(this.characterWidth+this.customSpacingX),this.characterHeight),this.textureBuffer.clear(),this.align){case b.RetroFont.ALIGN_LEFT:a=0;break;case b.RetroFont.ALIGN_RIGHT:a=this.width-this._text.length*(this.characterWidth+this.customSpacingX);break;case b.RetroFont.ALIGN_CENTER:a=this.width/2-this._text.length*(this.characterWidth+this.customSpacingX)/2,a+=this.customSpacingX/2}this.pasteLine(this._text,a,0,this.customSpacingX)}},b.RetroFont.prototype.pasteLine=function(a,c,d,e){for(var f=new b.Point,g=0;g=0&&(this.stamp.frame=this.grabData[a.charCodeAt(g)],f.set(c,d),this.render(this.stamp,f,!1),c+=this.characterWidth+e,c>this.width))break},b.RetroFont.prototype.getLongestLine=function(){var a=0;if(this._text.length>0)for(var b=this._text.split("\n"),c=0;ca&&(a=b[c].length);return a},b.RetroFont.prototype.removeUnsupportedCharacters=function(a){for(var b="",c=0;c=0||!a&&"\n"===d)&&(b=b.concat(d))}return b},Object.defineProperty(b.RetroFont.prototype,"text",{get:function(){return this._text},set:function(a){var b;b=this.autoUpperCase?a.toUpperCase():a,b!==this._text&&(this._text=b,this.removeUnsupportedCharacters(this.multiLine),this.buildRetroFontText())}}),b.Particle=function(a,c,d,e,f){b.Sprite.call(this,a,c,d,e,f),this.autoScale=!1,this.scaleData=null,this._s=0,this.autoAlpha=!1,this.alphaData=null,this._a=0},b.Particle.prototype=Object.create(b.Sprite.prototype),b.Particle.prototype.constructor=b.Particle,b.Particle.prototype.update=function(){this.autoScale&&(this._s--,this._s?this.scale.set(this.scaleData[this._s].x,this.scaleData[this._s].y):this.autoScale=!1),this.autoAlpha&&(this._a--,this._a?this.alpha=this.alphaData[this._a].v:this.autoAlpha=!1)},b.Particle.prototype.onEmit=function(){},b.Particle.prototype.setAlphaData=function(a){this.alphaData=a,this._a=a.length-1,this.alpha=this.alphaData[this._a].v,this.autoAlpha=!0},b.Particle.prototype.setScaleData=function(a){this.scaleData=a,this._s=a.length-1,this.scale.set(this.scaleData[this._s].x,this.scaleData[this._s].y),this.autoScale=!0},b.Particle.prototype.reset=function(a,b,c){return"undefined"==typeof c&&(c=1),this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.health=c,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this.alpha=1,this.scale.set(1),this.autoScale=!1,this.autoAlpha=!1,this},b.Canvas={create:function(a,b,c,d){if("undefined"==typeof d&&(d=!1),a=a||256,b=b||256,d)var e=document.createElement("canvas");else var e=document.createElement(navigator.isCocoonJS?"screencanvas":"canvas");return"string"==typeof c&&""!==c&&(e.id=c),e.width=a,e.height=b,e.style.display="block",e},getOffset:function(a,c){c=c||new b.Point;var d=a.getBoundingClientRect(),e=a.clientTop||document.body.clientTop||0,f=a.clientLeft||document.body.clientLeft||0,g=0,h=0;return"CSS1Compat"===document.compatMode?(g=window.pageYOffset||document.documentElement.scrollTop||a.scrollTop||0,h=window.pageXOffset||document.documentElement.scrollLeft||a.scrollLeft||0):(g=window.pageYOffset||document.body.scrollTop||a.scrollTop||0,h=window.pageXOffset||document.body.scrollLeft||a.scrollLeft||0),c.x=d.left+h-f,c.y=d.top+g-e,c},getAspectRatio:function(a){return a.width/a.height},setBackgroundColor:function(a,b){return b=b||"rgb(0,0,0)",a.style.backgroundColor=b,a},setTouchAction:function(a,b){return b=b||"none",a.style.msTouchAction=b,a.style["ms-touch-action"]=b,a.style["touch-action"]=b,a},setUserSelect:function(a,b){return b=b||"none",a.style["-webkit-touch-callout"]=b,a.style["-webkit-user-select"]=b,a.style["-khtml-user-select"]=b,a.style["-moz-user-select"]=b,a.style["-ms-user-select"]=b,a.style["user-select"]=b,a.style["-webkit-tap-highlight-color"]="rgba(0, 0, 0, 0)",a},addToDOM:function(a,b,c){var d;return"undefined"==typeof c&&(c=!0),b&&("string"==typeof b?d=document.getElementById(b):"object"==typeof b&&1===b.nodeType&&(d=b)),d||(d=document.body),c&&d.style&&(d.style.overflow="hidden"),d.appendChild(a),a},setTransform:function(a,b,c,d,e,f,g){return a.setTransform(d,f,g,e,b,c),a},setSmoothingEnabled:function(a,b){return a.imageSmoothingEnabled=b,a.mozImageSmoothingEnabled=b,a.oImageSmoothingEnabled=b,a.webkitImageSmoothingEnabled=b,a.msImageSmoothingEnabled=b,a},setImageRenderingCrisp:function(a){return a.style["image-rendering"]="optimizeSpeed",a.style["image-rendering"]="crisp-edges",a.style["image-rendering"]="-moz-crisp-edges",a.style["image-rendering"]="-webkit-optimize-contrast",a.style["image-rendering"]="optimize-contrast",a.style.msInterpolationMode="nearest-neighbor",a},setImageRenderingBicubic:function(a){return a.style["image-rendering"]="auto",a.style.msInterpolationMode="bicubic",a}},b.Device=function(a){this.game=a,this.desktop=!1,this.iOS=!1,this.cocoonJS=!1,this.ejecta=!1,this.crosswalk=!1,this.android=!1,this.chromeOS=!1,this.linux=!1,this.macOS=!1,this.windows=!1,this.windowsPhone=!1,this.canvas=!1,this.file=!1,this.fileSystem=!1,this.localStorage=!1,this.webGL=!1,this.worker=!1,this.touch=!1,this.mspointer=!1,this.css3D=!1,this.pointerLock=!1,this.typedArray=!1,this.vibration=!1,this.getUserMedia=!1,this.quirksMode=!1,this.arora=!1,this.chrome=!1,this.epiphany=!1,this.firefox=!1,this.ie=!1,this.ieVersion=0,this.trident=!1,this.tridentVersion=0,this.mobileSafari=!1,this.midori=!1,this.opera=!1,this.safari=!1,this.webApp=!1,this.silk=!1,this.audioData=!1,this.webAudio=!1,this.ogg=!1,this.opus=!1,this.mp3=!1,this.wav=!1,this.m4a=!1,this.webm=!1,this.iPhone=!1,this.iPhone4=!1,this.iPad=!1,this.pixelRatio=0,this.littleEndian=!1,this.fullscreen=!1,this.requestFullscreen="",this.cancelFullscreen="",this.fullscreenKeyboard=!1,this._checkAudio(),this._checkBrowser(),this._checkCSS3D(),this._checkDevice(),this._checkFeatures(),this._checkOS()},b.Device.prototype={_checkOS:function(){var a=navigator.userAgent;/Android/.test(a)?this.android=!0:/CrOS/.test(a)?this.chromeOS=!0:/iP[ao]d|iPhone/i.test(a)?this.iOS=!0:/Linux/.test(a)?this.linux=!0:/Mac OS/.test(a)?this.macOS=!0:/Windows/.test(a)&&(this.windows=!0,/Windows Phone/i.test(a)&&(this.windowsPhone=!0)),(this.windows||this.macOS||this.linux&&this.silk===!1)&&(this.desktop=!0),(this.windowsPhone||/Windows NT/i.test(a)&&/Touch/i.test(a))&&(this.desktop=!1)},_checkFeatures:function(){this.canvas=!!window.CanvasRenderingContext2D||this.cocoonJS;try{this.localStorage=!!localStorage.getItem}catch(a){this.localStorage=!1}this.file=!!(window.File&&window.FileReader&&window.FileList&&window.Blob),this.fileSystem=!!window.requestFileSystem,this.webGL=function(){try{var a=document.createElement("canvas");return!!window.WebGLRenderingContext&&(a.getContext("webgl")||a.getContext("experimental-webgl"))}catch(b){return!1}}(),this.webGL=null===this.webGL||this.webGL===!1?!1:!0,this.worker=!!window.Worker,("ontouchstart"in document.documentElement||window.navigator.maxTouchPoints&&window.navigator.maxTouchPoints>1)&&(this.touch=!0),(window.navigator.msPointerEnabled||window.navigator.pointerEnabled)&&(this.mspointer=!0),this.pointerLock="pointerLockElement"in document||"mozPointerLockElement"in document||"webkitPointerLockElement"in document,this.quirksMode="CSS1Compat"===document.compatMode?!1:!0,this.getUserMedia=!!(navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia)},checkFullScreenSupport:function(){for(var a=["requestFullscreen","requestFullScreen","webkitRequestFullscreen","webkitRequestFullScreen","msRequestFullscreen","msRequestFullScreen","mozRequestFullScreen","mozRequestFullscreen"],b=0;b0,this.typedArray=!0):(this.littleEndian=!1,this.typedArray=!1),navigator.vibrate=navigator.vibrate||navigator.webkitVibrate||navigator.mozVibrate||navigator.msVibrate,navigator.vibrate&&(this.vibration=!0)},_checkCSS3D:function(){var a,b=document.createElement("p"),c={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.insertBefore(b,null);for(var d in c)void 0!==b.style[d]&&(b.style[d]="translate3d(1px,1px,1px)",a=window.getComputedStyle(b).getPropertyValue(c[d]));document.body.removeChild(b),this.css3D=void 0!==a&&a.length>0&&"none"!==a},canPlayAudio:function(a){return"mp3"==a&&this.mp3?!0:"ogg"==a&&(this.ogg||this.opus)?!0:"m4a"==a&&this.m4a?!0:"wav"==a&&this.wav?!0:"webm"==a&&this.webm?!0:!1},isConsoleOpen:function(){return window.console&&window.console.firebug?!0:window.console&&(console.profile(),console.profileEnd(),console.clear&&console.clear(),console.profiles)?console.profiles.length>0:!1}},b.Device.prototype.constructor=b.Device,b.RequestAnimationFrame=function(a,b){"undefined"==typeof b&&(b=!1),this.game=a,this.isRunning=!1,this.forceSetTimeOut=b;for(var c=["ms","moz","webkit","o"],d=0;da},fuzzyGreaterThan:function(a,b,c){return"undefined"==typeof c&&(c=1e-4),a>b-c},fuzzyCeil:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.ceil(a-b)},fuzzyFloor:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.floor(a+b)},average:function(){for(var a=[],b=0;b0?Math.floor(a):Math.ceil(a)},shear:function(a){return a%1},snapTo:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.round(a/b),c+a)},snapToFloor:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.floor(a/b),c+a)},snapToCeil:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.ceil(a/b),c+a)},snapToInArray:function(a,b,c){if("undefined"==typeof c&&(c=!0),c&&b.sort(),a=f-a?f:e},roundTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.round(a*d)/d},floorTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.floor(a*d)/d},ceilTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.ceil(a*d)/d},interpolateFloat:function(a,b,c){return(b-a)*c+a},angleBetween:function(a,b,c,d){return Math.atan2(d-b,c-a)},angleBetweenPoints:function(a,b){return Math.atan2(b.y-a.y,b.x-a.x)},reverseAngle:function(a){return this.normalizeAngle(a+Math.PI,!0)},normalizeAngle:function(a){return a%=2*Math.PI,a>=0?a:a+2*Math.PI},normalizeLatitude:function(a){return Math.max(-90,Math.min(90,a))},normalizeLongitude:function(a){return a%360==180?180:(a%=360,-180>a?a+360:a>180?a-360:a)},nearestAngleBetween:function(a,b,c){"undefined"==typeof c&&(c=!0);var d=c?Math.PI:180;return a=this.normalizeAngle(a,c),b=this.normalizeAngle(b,c),-d/2>a&&b>d/2&&(a+=2*d),-d/2>b&&a>d/2&&(b+=2*d),b-a},interpolateAngles:function(a,b,c,d,e){return"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=null),a=this.normalizeAngle(a,d),b=this.normalizeAngleToAnother(b,a,d),"function"==typeof e?e(c,a,b-a,1):this.interpolateFloat(a,b,c)},chanceRoll:function(a){return"undefined"==typeof a&&(a=50),0>=a?!1:a>=100?!0:100*Math.random()>=a?!1:!0},numberArray:function(a,b){for(var c=[],d=a;b>=d;d++)c.push(d);return c},maxAdd:function(a,b,c){return a+=b,a>c&&(a=c),a},minSub:function(a,b,c){return a-=b,c>a&&(a=c),a},wrap:function(a,b,c){var d=c-b;if(0>=d)return 0;var e=(a-b)%d;return 0>e&&(e+=d),e+b},wrapValue:function(a,b,c){var d;return a=Math.abs(a),b=Math.abs(b),c=Math.abs(c),d=(a+b)%c},randomSign:function(){return Math.random()>.5?1:-1},isOdd:function(a){return 1&a},isEven:function(a){return 1&a?!1:!0},min:function(){if(1===arguments.length&&"object"==typeof arguments[0])var a=arguments[0];else var a=arguments;for(var b=1,c=0,d=a.length;d>b;b++)a[b]b;b++)a[b]>a[c]&&(c=b);return a[c]},minProperty:function(a){if(2===arguments.length&&"object"==typeof arguments[1])var b=arguments[1];else var b=arguments.slice(1);for(var c=1,d=0,e=b.length;e>c;c++)b[c][a]c;c++)b[c][a]>b[d][a]&&(d=c);return b[d][a]},wrapAngle:function(a,b){var c=b?Math.PI/180:1;return this.wrap(a,-180*c,180*c)},angleLimit:function(a,b,c){var d=a;return a>c?d=c:b>a&&(d=b),d},linearInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return 0>b?this.linear(a[0],a[1],d):b>1?this.linear(a[c],a[c-1],c-d):this.linear(a[e],a[e+1>c?c:e+1],d-e)},bezierInterpolation:function(a,b){for(var c=0,d=a.length-1,e=0;d>=e;e++)c+=Math.pow(1-b,d-e)*Math.pow(b,e)*a[e]*this.bernstein(d,e);return c},catmullRomInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return a[0]===a[c]?(0>b&&(e=Math.floor(d=c*(1+b))),this.catmullRom(a[(e-1+c)%c],a[e],a[(e+1)%c],a[(e+2)%c],d-e)):0>b?a[0]-(this.catmullRom(a[0],a[0],a[1],a[1],-d)-a[0]):b>1?a[c]-(this.catmullRom(a[c],a[c],a[c-1],a[c-1],d-c)-a[c]):this.catmullRom(a[e?e-1:0],a[e],a[e+1>c?c:e+1],a[e+2>c?c:e+2],d-e)},linear:function(a,b,c){return(b-a)*c+a},bernstein:function(a,b){return this.factorial(a)/this.factorial(b)/this.factorial(a-b)},catmullRom:function(a,b,c,d,e){var f=.5*(c-a),g=.5*(d-b),h=e*e,i=e*h;return(2*b-2*c+f+g)*i+(-3*b+3*c-2*f-g)*h+f*e+b},difference:function(a,b){return Math.abs(a-b)},getRandom:function(a,b,c){if("undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),null!=a){var d=c;if((0===d||d>a.length-b)&&(d=a.length-b),d>0)return a[b+Math.floor(Math.random()*d)]}return null},removeRandom:function(a,b,c){if("undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),null!=a){var d=c;if((0===d||d>a.length-b)&&(d=a.length-b),d>0){var e=b+Math.floor(Math.random()*d),f=a.splice(e,1);return f[0]}}return null},floor:function(a){var b=0|a;return a>0?b:b!=a?b-1:b},ceil:function(a){var b=0|a;return a>0&&b!=a?b+1:b},sinCosGenerator:function(a,b,c,d){"undefined"==typeof b&&(b=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1);for(var e=b,f=c,g=d*Math.PI/a,h=[],i=[],j=0;a>j;j++)f-=e*g,e+=f*g,h[j]=f,i[j]=e;return{sin:i,cos:h,length:a}},shift:function(a){var b=a.shift();return a.push(b),b},shuffleArray:function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},distance:function(a,b,c,d){var e=a-c,f=b-d;return Math.sqrt(e*e+f*f)},distancePow:function(a,b,c,d,e){return"undefined"==typeof e&&(e=2),Math.sqrt(Math.pow(c-a,e)+Math.pow(d-b,e))},distanceRounded:function(a,c,d,e){return Math.round(b.Math.distance(a,c,d,e))},clamp:function(a,b,c){return b>a?b:a>c?c:a},clampBottom:function(a,b){return b>a?b:a},within:function(a,b,c){return Math.abs(a-b)<=c},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){return b>=a?0:a>=c?1:(a=(a-b)/(c-b),a*a*(3-2*a))},smootherstep:function(a,b,c){return b>=a?0:a>=c?1:(a=(a-b)/(c-b),a*a*a*(a*(6*a-15)+10)) -},sign:function(a){return 0>a?-1:a>0?1:0},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}()},b.RandomDataGenerator=function(a){"undefined"==typeof a&&(a=[]),this.c=1,this.s0=0,this.s1=0,this.s2=0,this.sow(a)},b.RandomDataGenerator.prototype={rnd:function(){var a=2091639*this.s0+2.3283064365386963e-10*this.c;return this.c=0|a,this.s0=this.s1,this.s1=this.s2,this.s2=a-this.c,this.s2},sow:function(a){"undefined"==typeof a&&(a=[]),this.s0=this.hash(" "),this.s1=this.hash(this.s0),this.s2=this.hash(this.s1),this.c=1;for(var b,c=0;b=a[c++];)this.s0-=this.hash(b),this.s0+=~~(this.s0<0),this.s1-=this.hash(b),this.s1+=~~(this.s1<0),this.s2-=this.hash(b),this.s2+=~~(this.s2<0)},hash:function(a){var b,c,d;for(d=4022871197,a=a.toString(),c=0;c>>0,b-=d,b*=d,d=b>>>0,b-=d,d+=4294967296*b;return 2.3283064365386963e-10*(d>>>0)},integer:function(){return 4294967296*this.rnd.apply(this)},frac:function(){return this.rnd.apply(this)+1.1102230246251565e-16*(2097152*this.rnd.apply(this)|0)},real:function(){return this.integer()+this.frac()},integerInRange:function(a,b){return Math.round(this.realInRange(a,b))},realInRange:function(a,b){return this.frac()*(b-a)+a},normal:function(){return 1-2*this.frac()},uuid:function(){var a="",b="";for(b=a="";a++<36;b+=~a%5|3*a&4?(15^a?8^this.frac()*(20^a?16:4):4).toString(16):"-");return b},pick:function(a){return a[this.integerInRange(0,a.length-1)]},weightedPick:function(a){return a[~~(Math.pow(this.frac(),2)*(a.length-1))]},timestamp:function(a,b){return this.realInRange(a||9466848e5,b||1577862e6)},angle:function(){return this.integerInRange(-180,180)}},b.RandomDataGenerator.prototype.constructor=b.RandomDataGenerator,b.QuadTree=function(a,b,c,d,e,f,g){this.maxObjects=10,this.maxLevels=4,this.level=0,this.bounds={},this.objects=[],this.nodes=[],this._empty=[],this.reset(a,b,c,d,e,f,g)},b.QuadTree.prototype={reset:function(a,b,c,d,e,f,g){this.maxObjects=e||10,this.maxLevels=f||4,this.level=g||0,this.bounds={x:Math.round(a),y:Math.round(b),width:c,height:d,subWidth:Math.floor(c/2),subHeight:Math.floor(d/2),right:Math.round(a)+Math.floor(c/2),bottom:Math.round(b)+Math.floor(d/2)},this.objects.length=0,this.nodes.length=0},populate:function(a){a.forEach(this.populateHandler,this,!0)},populateHandler:function(a){a.body&&a.exists&&this.insert(a.body)},split:function(){this.level++,this.nodes[0]=new b.QuadTree(this.bounds.right,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[1]=new b.QuadTree(this.bounds.x,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[2]=new b.QuadTree(this.bounds.x,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[3]=new b.QuadTree(this.bounds.right,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level)},insert:function(a){var b,c=0;if(null!=this.nodes[0]&&(b=this.getIndex(a),-1!==b))return void this.nodes[b].insert(a);if(this.objects.push(a),this.objects.length>this.maxObjects&&this.levelthis.bounds.bottom&&(b=2):a.x>this.bounds.right&&(a.ythis.bounds.bottom&&(b=3)),b},retrieve:function(a){if(!a.body)return this._empty;var b=this.objects,c=this.getIndex(a.body);return this.nodes[0]&&(-1!==c?b=b.concat(this.nodes[c].retrieve(a)):(b=b.concat(this.nodes[0].retrieve(a)),b=b.concat(this.nodes[1].retrieve(a)),b=b.concat(this.nodes[2].retrieve(a)),b=b.concat(this.nodes[3].retrieve(a)))),b},clear:function(){this.objects.length=0;for(var a=this.nodes.length;a--;)this.nodes[a].clear(),this.nodes.splice(a,1);this.nodes.length=0}},b.QuadTree.prototype.constructor=b.QuadTree,b.Net=function(a){this.game=a},b.Net.prototype={getHostName:function(){return window.location&&window.location.hostname?window.location.hostname:null},checkDomainName:function(a){return-1!==window.location.hostname.indexOf(a)},updateQueryString:function(a,b,c,d){"undefined"==typeof c&&(c=!1),("undefined"==typeof d||""===d)&&(d=window.location.href);var e="",f=new RegExp("([?|&])"+a+"=.*?(&|#|$)(.*)","gi");if(f.test(d))e="undefined"!=typeof b&&null!==b?d.replace(f,"$1"+a+"="+b+"$2$3"):d.replace(f,"$1$3").replace(/(&|\?)$/,"");else if("undefined"!=typeof b&&null!==b){var g=-1!==d.indexOf("?")?"&":"?",h=d.split("#");d=h[0]+g+a+"="+b,h[1]&&(d+="#"+h[1]),e=d}else e=d;return c?void(window.location.href=e):e},getQueryString:function(a){"undefined"==typeof a&&(a="");var b={},c=location.search.substring(1).split("&");for(var d in c){var e=c[d].split("=");if(e.length>1){if(a&&a==this.decodeURI(e[0]))return this.decodeURI(e[1]);b[this.decodeURI(e[0])]=this.decodeURI(e[1])}}return b},decodeURI:function(a){return decodeURIComponent(a.replace(/\+/g," "))}},b.Net.prototype.constructor=b.Net,b.TweenManager=function(a){this.game=a,this._tweens=[],this._add=[],this.game.onPause.add(this._pauseAll,this),this.game.onResume.add(this._resumeAll,this)},b.TweenManager.prototype={getAll:function(){return this._tweens},removeAll:function(){for(var a=0;aa;)this._tweens[a].update(this.game.time.now)?a++:(this._tweens.splice(a,1),b--);return this._add.length>0&&(this._tweens=this._tweens.concat(this._add),this._add.length=0),!0},isTweening:function(a){return this._tweens.some(function(b){return b._object===a})},_pauseAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a]._pause()},_resumeAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a]._resume()},pauseAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].pause()},resumeAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].resume(!0)}},b.TweenManager.prototype.constructor=b.TweenManager,b.Tween=function(a,c,d){this._object=a,this.game=c,this._manager=d,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._repeat=0,this._yoyo=!1,this._reversed=!1,this._delayTime=0,this._startTime=null,this._easingFunction=b.Easing.Linear.None,this._interpolationFunction=b.Math.linearInterpolation,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onUpdateCallback=null,this._onUpdateCallbackContext=null,this._paused=!1,this._pausedTime=0,this._codePaused=!1,this.pendingDelete=!1,this.onStart=new b.Signal,this.onLoop=new b.Signal,this.onComplete=new b.Signal,this.isRunning=!1},b.Tween.prototype={to:function(a,b,c,d,e,f,g){b=b||1e3,c=c||null,d=d||!1,e=e||0,f=f||0,g=g||!1;var h;return this._parent?(h=this._manager.create(this._object),this._lastChild.chain(h),this._lastChild=h):(h=this,this._parent=this,this._lastChild=this),h._repeat=f,h._duration=b,h._valuesEnd=a,null!==c&&(h._easingFunction=c),e>0&&(h._delayTime=e),h._yoyo=g,d?this.start():this},start:function(){if(null!==this.game&&null!==this._object){this._manager.add(this),this.isRunning=!0,this._onStartCallbackFired=!1,this._startTime=this.game.time.now+this._delayTime;for(var a in this._valuesEnd){if(Array.isArray(this._valuesEnd[a])){if(0===this._valuesEnd[a].length)continue;this._valuesEnd[a]=[this._object[a]].concat(this._valuesEnd[a])}this._valuesStart[a]=this._object[a],Array.isArray(this._valuesStart[a])||(this._valuesStart[a]*=1),this._valuesStartRepeat[a]=this._valuesStart[a]||0}return this}},generateData:function(a,b){if(null===this.game||null===this._object)return null;this._startTime=0;for(var c in this._valuesEnd){if(Array.isArray(this._valuesEnd[c])){if(0===this._valuesEnd[c].length)continue;this._valuesEnd[c]=[this._object[c]].concat(this._valuesEnd[c])}this._valuesStart[c]=this._object[c],Array.isArray(this._valuesStart[c])||(this._valuesStart[c]*=1),this._valuesStartRepeat[c]=this._valuesStart[c]||0}for(var d=0,e=Math.floor(a*(this._duration/1e3)),f=this._duration/e,g=[];e--;){var c,h=(d-this._startTime)/this._duration;h=h>1?1:h;var i=this._easingFunction(h),j={};for(c in this._valuesEnd){var k=this._valuesStart[c]||0,l=this._valuesEnd[c];l instanceof Array?j[c]=this._interpolationFunction(l,i):("string"==typeof l&&(l=k+parseFloat(l,10)),"number"==typeof l&&(j[c]=k+(l-k)*i))}g.push(j),d+=f}if(this._yoyo){var m=g.slice();m.reverse(),g=g.concat(m)}return"undefined"!=typeof b?b=b.concat(g):g},stop:function(){return this.isRunning=!1,this._onUpdateCallback=null,this._manager.remove(this),this},delay:function(a){return this._delayTime=a,this},repeat:function(a){return this._repeat=a,this},yoyo:function(a){return this._yoyo=a,this},easing:function(a){return this._easingFunction=a,this},interpolation:function(a){return this._interpolationFunction=a,this},chain:function(){return this._chainedTweens=arguments,this},loop:function(){return this._lastChild.chain(this),this},onUpdateCallback:function(a,b){return this._onUpdateCallback=a,this._onUpdateCallbackContext=b,this},pause:function(){this._codePaused=!0,this._paused=!0,this._pausedTime=this.game.time.now},_pause:function(){this._codePaused||(this._paused=!0,this._pausedTime=this.game.time.now)},resume:function(){this._paused&&(this._paused=!1,this._codePaused=!1,this._startTime+=this.game.time.now-this._pausedTime)},_resume:function(){this._codePaused||(this._startTime+=this.game.time.pauseDuration,this._paused=!1)},update:function(a){if(this.pendingDelete)return!1;if(this._paused||a1?1:c;var d=this._easingFunction(c);for(b in this._valuesEnd){var e=this._valuesStart[b]||0,f=this._valuesEnd[b];f instanceof Array?this._object[b]=this._interpolationFunction(f,d):("string"==typeof f&&(f=e+parseFloat(f,10)),"number"==typeof f&&(this._object[b]=e+(f-e)*d))}if(null!==this._onUpdateCallback&&this._onUpdateCallback.call(this._onUpdateCallbackContext,this,d),1==c){if(this._repeat>0){isFinite(this._repeat)&&this._repeat--;for(b in this._valuesStartRepeat){if("string"==typeof this._valuesEnd[b]&&(this._valuesStartRepeat[b]=this._valuesStartRepeat[b]+parseFloat(this._valuesEnd[b],10)),this._yoyo){var g=this._valuesStartRepeat[b];this._valuesStartRepeat[b]=this._valuesEnd[b],this._valuesEnd[b]=g,this._reversed=!this._reversed}this._valuesStart[b]=this._valuesStartRepeat[b]}return this._startTime=a+this._delayTime,this.onLoop.dispatch(this._object),!0}this.isRunning=!1,this.onComplete.dispatch(this._object);for(var h=0,i=this._chainedTweens.length;i>h;h++)this._chainedTweens[h].start(a);return!1}return!0}},b.Tween.prototype.constructor=b.Tween,b.Easing={Linear:{None:function(a){return a}},Quadratic:{In:function(a){return a*a},Out:function(a){return a*(2-a)},InOut:function(a){return(a*=2)<1?.5*a*a:-.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a:.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return(a*=2)<1?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a*a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:(a*=2)<1?.5*Math.pow(1024,a-1):.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1-Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return(a*=2)<1?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),-(c*Math.pow(2,10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d)))},Out:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),c*Math.pow(2,-10*a)*Math.sin(2*(a-b)*Math.PI/d)+1)},InOut:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),(a*=2)<1?-.5*c*Math.pow(2,10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d):c*Math.pow(2,-10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d)*.5+1)}},Back:{In:function(a){var b=1.70158;return a*a*((b+1)*a-b)},Out:function(a){var b=1.70158;return--a*a*((b+1)*a+b)+1},InOut:function(a){var b=2.5949095;return(a*=2)<1?.5*a*a*((b+1)*a-b):.5*((a-=2)*a*((b+1)*a+b)+2)}},Bounce:{In:function(a){return 1-b.Easing.Bounce.Out(1-a)},Out:function(a){return 1/2.75>a?7.5625*a*a:2/2.75>a?7.5625*(a-=1.5/2.75)*a+.75:2.5/2.75>a?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},InOut:function(a){return.5>a?.5*b.Easing.Bounce.In(2*a):.5*b.Easing.Bounce.Out(2*a-1)+.5}}},b.Time=function(a){this.game=a,this.time=0,this.now=0,this.elapsed=0,this.pausedTime=0,this.advancedTiming=!1,this.fps=0,this.fpsMin=1e3,this.fpsMax=0,this.msMin=1e3,this.msMax=0,this.physicsElapsed=0,this.deltaCap=0,this.frames=0,this.pauseDuration=0,this.timeToCall=0,this.lastTime=0,this.events=new b.Timer(this.game,!1),this._started=0,this._timeLastSecond=0,this._pauseStarted=0,this._justResumed=!1,this._timers=[],this._len=0,this._i=0},b.Time.prototype={boot:function(){this._started=Date.now(),this.events.start()},create:function(a){"undefined"==typeof a&&(a=!0);var c=new b.Timer(this.game,a);return this._timers.push(c),c},removeAll:function(){for(var a=0;a0&&this.physicsElapsed>this.deltaCap&&(this.physicsElapsed=this.deltaCap),this.advancedTiming&&(this.msMin=this.game.math.min(this.msMin,this.elapsed),this.msMax=this.game.math.max(this.msMax,this.elapsed),this.frames++,this.now>this._timeLastSecond+1e3&&(this.fps=Math.round(1e3*this.frames/(this.now-this._timeLastSecond)),this.fpsMin=this.game.math.min(this.fpsMin,this.fps),this.fpsMax=this.game.math.max(this.fpsMax,this.fps),this._timeLastSecond=this.now,this.frames=0)),this.time=this.now,this.lastTime=a+this.timeToCall,!this.game.paused)for(this.events.update(this.now),this._i=0,this._len=this._timers.length;this._i0&&(this.events.sort(this.sortHandler),this.nextTick=this.events[0].tick)},sortHandler:function(a,b){return a.tickb.tick?1:0},clearPendingEvents:function(){for(this._i=this.events.length;this._i--;)this.events[this._i].pendingDelete&&this.events.splice(this._i,1);this._len=this.events.length,this._i=0},update:function(a){if(this.paused)return!0;if(this._now=a,this._marked=0,this.clearPendingEvents(),this.running&&this._now>=this.nextTick&&this._len>0){for(;this._i=this.events[this._i].tick;)this._newTick=this._now+this.events[this._i].delay-(this._now-this.events[this._i].tick),this._newTick<0&&(this._newTick=this._now+this.events[this._i].delay),this.events[this._i].loop===!0?(this.events[this._i].tick=this._newTick,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)):this.events[this._i].repeatCount>0?(this.events[this._i].repeatCount--,this.events[this._i].tick=this._newTick,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)):(this._marked++,this.events[this._i].pendingDelete=!0,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)),this._i++;this.events.length>this._marked?this.order():(this.expired=!0,this.onComplete.dispatch(this))}return this.expired&&this.autoDestroy?!1:!0},pause:function(){this.running&&!this.expired&&(this._pauseStarted=this.game.time.now,this.paused=!0,this._codePaused=!0)},_pause:function(){this.running&&!this.expired&&(this._pauseStarted=this.game.time.now,this.paused=!0)},resume:function(){if(this.running&&!this.expired){var a=this.game.time.now-this._pauseStarted;this._pauseTotal+=a;for(var b=0;bthis._now?this.nextTick-this._now:0}}),Object.defineProperty(b.Timer.prototype,"length",{get:function(){return this.events.length}}),Object.defineProperty(b.Timer.prototype,"ms",{get:function(){return this._now-this._started-this._pauseTotal}}),Object.defineProperty(b.Timer.prototype,"seconds",{get:function(){return.001*this.ms}}),b.Timer.prototype.constructor=b.Timer,b.TimerEvent=function(a,b,c,d,e,f,g,h){this.timer=a,this.delay=b,this.tick=c,this.repeatCount=d-1,this.loop=e,this.callback=f,this.callbackContext=g,this.args=h,this.pendingDelete=!1},b.TimerEvent.prototype.constructor=b.TimerEvent,b.AnimationManager=function(a){this.sprite=a,this.game=a.game,this.currentFrame=null,this.updateIfVisible=!0,this.isLoaded=!1,this._frameData=null,this._anims={},this._outputFrames=[]},b.AnimationManager.prototype={loadFrameData:function(a){this._frameData=a,this.frame=0,this.isLoaded=!0},add:function(a,c,d,e,f){return null==this._frameData?void console.warn("No FrameData available for Phaser.Animation "+a):(c=c||[],d=d||60,"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=c&&"number"==typeof c[0]?!0:!1),null==this.sprite.events.onAnimationStart&&(this.sprite.events.onAnimationStart=new b.Signal,this.sprite.events.onAnimationComplete=new b.Signal,this.sprite.events.onAnimationLoop=new b.Signal),this._outputFrames.length=0,this._frameData.getFrameIndexes(c,f,this._outputFrames),this._anims[a]=new b.Animation(this.game,this.sprite,a,this._frameData,this._outputFrames,d,e),this.currentAnim=this._anims[a],this.currentFrame=this.currentAnim.currentFrame,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1),this._anims[a])},validateFrames:function(a,b){"undefined"==typeof b&&(b=!0);for(var c=0;cthis._frameData.total)return!1}else if(this._frameData.checkFrameName(a[c])===!1)return!1;return!0},play:function(a,b,c,d){if(this._anims[a]){if(this.currentAnim!==this._anims[a])return this.currentAnim&&this.currentAnim.isPlaying&&this.currentAnim.stop(),this.currentAnim=this._anims[a],this.currentAnim.paused=!1,this.currentAnim.play(b,c,d);if(this.currentAnim.isPlaying===!1)return this.currentAnim.paused=!1,this.currentAnim.play(b,c,d)}},stop:function(a,b){"undefined"==typeof b&&(b=!1),"string"==typeof a?this._anims[a]&&(this.currentAnim=this._anims[a],this.currentAnim.stop(b)):this.currentAnim&&this.currentAnim.stop(b)},update:function(){return this.updateIfVisible&&!this.sprite.visible?!1:this.currentAnim&&this.currentAnim.update()===!0?(this.currentFrame=this.currentAnim.currentFrame,!0):!1},getAnimation:function(a){return"string"==typeof a&&this._anims[a]?this._anims[a]:null},refreshFrame:function(){this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1)},destroy:function(){var a=null;for(var a in this._anims)this._anims.hasOwnProperty(a)&&this._anims[a].destroy();this._anims={},this._frameData=null,this._frameIndex=0,this.currentAnim=null,this.currentFrame=null}},b.AnimationManager.prototype.constructor=b.AnimationManager,Object.defineProperty(b.AnimationManager.prototype,"frameData",{get:function(){return this._frameData}}),Object.defineProperty(b.AnimationManager.prototype,"frameTotal",{get:function(){return this._frameData?this._frameData.total:-1}}),Object.defineProperty(b.AnimationManager.prototype,"paused",{get:function(){return this.currentAnim.isPaused},set:function(a){this.currentAnim.paused=a}}),Object.defineProperty(b.AnimationManager.prototype,"frame",{get:function(){return this.currentFrame?this._frameIndex:void 0},set:function(a){"number"==typeof a&&this._frameData&&null!==this._frameData.getFrame(a)&&(this.currentFrame=this._frameData.getFrame(a),this.currentFrame&&(this._frameIndex=a,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1)))}}),Object.defineProperty(b.AnimationManager.prototype,"frameName",{get:function(){return this.currentFrame?this.currentFrame.name:void 0},set:function(a){"string"==typeof a&&this._frameData&&null!==this._frameData.getFrameByName(a)?(this.currentFrame=this._frameData.getFrameByName(a),this.currentFrame&&(this._frameIndex=this.currentFrame.index,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1))):console.warn("Cannot set frameName: "+a)}}),b.Animation=function(a,c,d,e,f,g,h){this.game=a,this._parent=c,this._frameData=e,this.name=d,this._frames=[],this._frames=this._frames.concat(f),this.delay=1e3/g,this.loop=h,this.loopCount=0,this.killOnComplete=!1,this.isFinished=!1,this.isPlaying=!1,this.isPaused=!1,this._pauseStartTime=0,this._frameIndex=0,this._frameDiff=0,this._frameSkip=1,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.onStart=new b.Signal,this.onComplete=new b.Signal,this.onLoop=new b.Signal,this.game.onPause.add(this.onPause,this),this.game.onResume.add(this.onResume,this)},b.Animation.prototype={play:function(a,b,c){return"number"==typeof a&&(this.delay=1e3/a),"boolean"==typeof b&&(this.loop=b),"undefined"!=typeof c&&(this.killOnComplete=c),this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this.loopCount=0,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]),this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1),this._parent.events.onAnimationStart.dispatch(this._parent,this),this.onStart.dispatch(this._parent,this),this},restart:function(){this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this.loopCount=0,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]),this.onStart.dispatch(this._parent,this)},stop:function(a,b){"undefined"==typeof a&&(a=!1),"undefined"==typeof b&&(b=!1),this.isPlaying=!1,this.isFinished=!0,this.paused=!1,a&&(this.currentFrame=this._frameData.getFrame(this._frames[0])),b&&(this._parent.events.onAnimationComplete.dispatch(this._parent,this),this.onComplete.dispatch(this._parent,this))},onPause:function(){this.isPlaying&&(this._frameDiff=this._timeNextFrame-this.game.time.now)},onResume:function(){this.isPlaying&&(this._timeNextFrame=this.game.time.now+this._frameDiff)},update:function(){return this.isPaused?!1:this.isPlaying===!0&&this.game.time.now>=this._timeNextFrame?(this._frameSkip=1,this._frameDiff=this.game.time.now-this._timeNextFrame,this._timeLastFrame=this.game.time.now,this._frameDiff>this.delay&&(this._frameSkip=Math.floor(this._frameDiff/this.delay),this._frameDiff-=this._frameSkip*this.delay),this._timeNextFrame=this.game.time.now+(this.delay-this._frameDiff),this._frameIndex+=this._frameSkip,this._frameIndex>=this._frames.length?this.loop?(this._frameIndex%=this._frames.length,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&(this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1)),this.loopCount++,this._parent.events.onAnimationLoop.dispatch(this._parent,this),this.onLoop.dispatch(this._parent,this)):this.complete():(this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&(this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1))),!0):!1},destroy:function(){this.game.onPause.remove(this.onPause,this),this.game.onResume.remove(this.onResume,this),this.game=null,this._parent=null,this._frames=null,this._frameData=null,this.currentFrame=null,this.isPlaying=!1,this.onStart.dispose(),this.onLoop.dispose(),this.onComplete.dispose()},complete:function(){this.isPlaying=!1,this.isFinished=!0,this.paused=!1,this._parent.events.onAnimationComplete.dispatch(this._parent,this),this.onComplete.dispatch(this._parent,this),this.killOnComplete&&this._parent.kill()}},b.Animation.prototype.constructor=b.Animation,Object.defineProperty(b.Animation.prototype,"paused",{get:function(){return this.isPaused},set:function(a){this.isPaused=a,a?this._pauseStartTime=this.game.time.now:this.isPlaying&&(this._timeNextFrame=this.game.time.now+this.delay)}}),Object.defineProperty(b.Animation.prototype,"frameTotal",{get:function(){return this._frames.length}}),Object.defineProperty(b.Animation.prototype,"frame",{get:function(){return null!==this.currentFrame?this.currentFrame.index:this._frameIndex},set:function(a){this.currentFrame=this._frameData.getFrame(this._frames[a]),null!==this.currentFrame&&(this._frameIndex=a,this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]))}}),Object.defineProperty(b.Animation.prototype,"speed",{get:function(){return Math.round(1e3/this.delay)},set:function(a){a>=1&&(this.delay=1e3/a)}}),b.Animation.generateFrameNames=function(a,c,d,e,f){"undefined"==typeof e&&(e="");var g=[],h="";if(d>c)for(var i=c;d>=i;i++)h="number"==typeof f?b.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);else for(var i=c;i>=d;i--)h="number"==typeof f?b.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);return g},b.Frame=function(a,c,d,e,f,g,h){this.index=a,this.x=c,this.y=d,this.width=e,this.height=f,this.name=g,this.uuid=h,this.centerX=Math.floor(e/2),this.centerY=Math.floor(f/2),this.distance=b.Math.distance(0,0,e,f),this.rotated=!1,this.rotationDirection="cw",this.trimmed=!1,this.sourceSizeW=e,this.sourceSizeH=f,this.spriteSourceSizeX=0,this.spriteSourceSizeY=0,this.spriteSourceSizeW=0,this.spriteSourceSizeH=0},b.Frame.prototype={setTrim:function(a,b,c,d,e,f,g){this.trimmed=a,a&&(this.width=b,this.height=c,this.sourceSizeW=b,this.sourceSizeH=c,this.centerX=Math.floor(b/2),this.centerY=Math.floor(c/2),this.spriteSourceSizeX=d,this.spriteSourceSizeY=e,this.spriteSourceSizeW=f,this.spriteSourceSizeH=g)},getRect:function(a){return"undefined"==typeof a?a=new b.Rectangle(this.x,this.y,this.width,this.height):a.setTo(this.x,this.y,this.width,this.height),a}},b.Frame.prototype.constructor=b.Frame,b.FrameData=function(){this._frames=[],this._frameNames=[]},b.FrameData.prototype={addFrame:function(a){return a.index=this._frames.length,this._frames.push(a),""!==a.name&&(this._frameNames[a.name]=a.index),a},getFrame:function(a){return a>this._frames.length&&(a=0),this._frames[a]},getFrameByName:function(a){return"number"==typeof this._frameNames[a]?this._frames[this._frameNames[a]]:null},checkFrameName:function(a){return null==this._frameNames[a]?!1:!0},getFrameRange:function(a,b,c){"undefined"==typeof c&&(c=[]);for(var d=a;b>=d;d++)c.push(this._frames[d]);return c},getFrames:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0;dd;d++)c.push(b?this.getFrame(a[d]):this.getFrameByName(a[d]));return c},getFrameIndexes:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0,e=this._frames.length;e>d;d++)c.push(this._frames[d].index);else for(var d=0,e=a.length;e>d;d++)b?c.push(a[d]):this.getFrameByName(a[d])&&c.push(this.getFrameByName(a[d]).index);return c}},b.FrameData.prototype.constructor=b.FrameData,Object.defineProperty(b.FrameData.prototype,"total",{get:function(){return this._frames.length}}),b.AnimationParser={spriteSheet:function(a,c,d,e,f,g,h){var i=a.cache.getImage(c);if(null==i)return null;var j=i.width,k=i.height;0>=d&&(d=Math.floor(-j/Math.min(-1,d))),0>=e&&(e=Math.floor(-k/Math.min(-1,e)));var l=Math.floor((j-g)/(d+h)),m=Math.floor((k-g)/(e+h)),n=l*m;if(-1!==f&&(n=f),0===j||0===k||d>j||e>k||0===n)return console.warn("Phaser.AnimationParser.spriteSheet: width/height zero or width/height < given frameWidth/frameHeight"),null;for(var o=new b.FrameData,p=g,q=g,r=0;n>r;r++){var s=a.rnd.uuid();o.addFrame(new b.Frame(r,p,q,d,e,"",s)),PIXI.TextureCache[s]=new PIXI.Texture(PIXI.BaseTextureCache[c],{x:p,y:q,width:d,height:e}),p+=d+h,p+d>j&&(p=g,q+=e+h) -}return o},JSONData:function(a,c,d){if(!c.frames)return console.warn("Phaser.AnimationParser.JSONData: Invalid Texture Atlas JSON given, missing 'frames' array"),void console.log(c);for(var e,f=new b.FrameData,g=c.frames,h=0;h tag");for(var e,f,g,h,i,j,k,l,m,n,o,p,q=new b.FrameData,r=c.getElementsByTagName("SubTexture"),s=0;s0)for(var c=0;c0)for(var c=0;c0)for(var c=0;c0?(this._fileIndex=0,this._progressChunk=100/this._fileList.length,this.loadFile()):(this.progress=100,this.progressFloat=100,this.hasLoaded=!0,this.onLoadComplete.dispatch()))},loadFile:function(){if(!this._fileList[this._fileIndex])return void console.warn("Phaser.Loader loadFile invalid index "+this._fileIndex);var a=this._fileList[this._fileIndex],c=this;switch(this.onFileStart.dispatch(this.progress,a.key),a.type){case"image":case"spritesheet":case"textureatlas":case"bitmapfont":a.data=new Image,a.data.name=a.key,a.data.onload=function(){return c.fileComplete(c._fileIndex)},a.data.onerror=function(){return c.fileError(c._fileIndex)},this.crossOrigin&&(a.data.crossOrigin=this.crossOrigin),a.data.src=this.baseURL+a.url;break;case"audio":a.url=this.getAudioURL(a.url),null!==a.url?this.game.sound.usingWebAudio?(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="arraybuffer",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send()):this.game.sound.usingAudioTag&&(this.game.sound.touchLocked?(a.data=new Audio,a.data.name=a.key,a.data.preload="auto",a.data.src=this.baseURL+a.url,this.fileComplete(this._fileIndex)):(a.data=new Audio,a.data.name=a.key,a.data.onerror=function(){return c.fileError(c._fileIndex)},a.data.preload="auto",a.data.src=this.baseURL+a.url,a.data.addEventListener("canplaythrough",b.GAMES[this.game.id].load.fileComplete(this._fileIndex),!1),a.data.load())):this.fileError(this._fileIndex);break;case"json":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return c.jsonLoadComplete(c._fileIndex)},this._xhr.send();break;case"tilemap":if(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",a.format===b.Tilemap.TILED_JSON)this._xhr.onload=function(){return c.jsonLoadComplete(c._fileIndex)};else{if(a.format!==b.Tilemap.CSV)throw new Error("Phaser.Loader. Invalid Tilemap format: "+a.format);this._xhr.onload=function(){return c.csvLoadComplete(c._fileIndex)}}this._xhr.onerror=function(){return c.dataLoadError(c._fileIndex)},this._xhr.send();break;case"text":case"script":case"physics":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send();break;case"binary":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="arraybuffer",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send()}},getAudioURL:function(a){var b;"string"==typeof a&&(a=[a]);for(var c=0;c100&&(this.progress=100),null!==this.preloadSprite&&(0===this.preloadSprite.direction?(this.preloadSprite.rect.width=Math.floor(this.preloadSprite.width/100*this.progress),this.preloadSprite.sprite.crop(this.preloadSprite.rect)):(this.preloadSprite.rect.height=Math.floor(this.preloadSprite.height/100*this.progress),this.preloadSprite.sprite.crop(this.preloadSprite.rect))),this.onFileComplete.dispatch(this.progress,this._fileList[a].key,b,this.totalLoadedFiles(),this._fileList.length),this.totalQueuedFiles()>0?(this._fileIndex++,this.loadFile()):(this.hasLoaded=!0,this.isLoading=!1,this.removeAll(),this.onLoadComplete.dispatch())},totalLoadedFiles:function(){for(var a=0,b=0;b=this.durationMS&&(this.usingWebAudio?this.loop?(this.onLoop.dispatch(this),""===this.currentMarker?(this.currentTime=0,this.startTime=this.game.time.now):(this.onMarkerComplete.dispatch(this.currentMarker,this),this.play(this.currentMarker,0,this.volume,!0,!0))):this.stop():this.loop?(this.onLoop.dispatch(this),this.play(this.currentMarker,0,this.volume,!0,!0)):this.stop()))},play:function(a,b,c,d,e){if("undefined"==typeof a&&(a=""),"undefined"==typeof e&&(e=!0),this.isPlaying!==!0||e!==!1||this.override!==!1){if(this.isPlaying&&this.override&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.currentMarker=a,""!==a){if(!this.markers[a])return void console.warn("Phaser.Sound.play: audio marker "+a+" doesn't exist");this.position=this.markers[a].start,this.volume=this.markers[a].volume,this.loop=this.markers[a].loop,this.duration=this.markers[a].duration,this.durationMS=this.markers[a].durationMS,"undefined"!=typeof c&&(this.volume=c),"undefined"!=typeof d&&(this.loop=d),this._tempMarker=a,this._tempPosition=this.position,this._tempVolume=this.volume,this._tempLoop=this.loop}else b=b||0,"undefined"==typeof c&&(c=this._volume),"undefined"==typeof d&&(d=this.loop),this.position=b,this.volume=c,this.loop=d,this.duration=0,this.durationMS=0,this._tempMarker=a,this._tempPosition=b,this._tempVolume=c,this._tempLoop=d;this.usingWebAudio?this.game.cache.isSoundDecoded(this.key)?(null==this._buffer&&(this._buffer=this.game.cache.getSoundData(this.key)),this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this._sound.connect(this.externalNode?this.externalNode.input:this.gainNode),this.totalDuration=this._sound.buffer.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this.loop&&""===a&&(this._sound.loop=!0),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,this.position,this.duration):this._sound.start(0,this.position,this.duration),this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):(this.pendingPlayback=!0,this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).isDecoding===!1&&this.game.sound.decode(this.key,this)):this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).locked?(this.game.cache.reloadSound(this.key),this.pendingPlayback=!0):this._sound&&(this.game.device.cocoonJS||4===this._sound.readyState)?(this._sound.play(),this.totalDuration=this._sound.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this._sound.currentTime=this.position,this._sound.muted=this._muted,this._sound.volume=this._muted?0:this._volume,this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):this.pendingPlayback=!0}},restart:function(a,b,c,d){a=a||"",b=b||0,c=c||1,"undefined"==typeof d&&(d=!1),this.play(a,b,c,d,!0)},pause:function(){this.isPlaying&&this._sound&&(this.stop(),this.isPlaying=!1,this.paused=!0,this.pausedPosition=this.currentTime,this.pausedTime=this.game.time.now,this.onPause.dispatch(this)) -},resume:function(){if(this.paused&&this._sound){if(this.usingWebAudio){var a=this.position+this.pausedPosition/1e3;this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this._sound.connect(this.externalNode?this.externalNode.input:this.gainNode),this.loop&&(this._sound.loop=!0),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,a,this.duration):this._sound.start(0,a,this.duration)}else this._sound.play();this.isPlaying=!0,this.paused=!1,this.startTime+=this.game.time.now-this.pausedTime,this.onResume.dispatch(this)}},stop:function(){this.isPlaying&&this._sound&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.isPlaying=!1;var a=this.currentMarker;""!==this.currentMarker&&this.onMarkerComplete.dispatch(this.currentMarker,this),this.currentMarker="",this.onStop.dispatch(this,a)},destroy:function(a){"undefined"==typeof a&&(a=!0),this.stop(),a&&this.game.sound.remove(this),this.markers={},this.context=null,this._buffer=null,this.externalNode=null,this.onDecoded.dispose(),this.onPlay.dispose(),this.onPause.dispose(),this.onResume.dispose(),this.onLoop.dispose(),this.onStop.dispose(),this.onMute.dispose(),this.onMarkerComplete.dispose()}},b.Sound.prototype.constructor=b.Sound,Object.defineProperty(b.Sound.prototype,"isDecoding",{get:function(){return this.game.cache.getSound(this.key).isDecoding}}),Object.defineProperty(b.Sound.prototype,"isDecoded",{get:function(){return this.game.cache.isSoundDecoded(this.key)}}),Object.defineProperty(b.Sound.prototype,"mute",{get:function(){return this._muted},set:function(a){a=a||null,a?(this._muted=!0,this.usingWebAudio?(this._muteVolume=this.gainNode.gain.value,this.gainNode.gain.value=0):this.usingAudioTag&&this._sound&&(this._muteVolume=this._sound.volume,this._sound.volume=0)):(this._muted=!1,this.usingWebAudio?this.gainNode.gain.value=this._muteVolume:this.usingAudioTag&&this._sound&&(this._sound.volume=this._muteVolume)),this.onMute.dispatch(this)}}),Object.defineProperty(b.Sound.prototype,"volume",{get:function(){return this._volume},set:function(a){this.usingWebAudio?(this._volume=a,this.gainNode.gain.value=a):this.usingAudioTag&&this._sound&&a>=0&&1>=a&&(this._volume=a,this._sound.volume=a)}}),b.SoundManager=function(a){this.game=a,this.onSoundDecode=new b.Signal,this._codeMuted=!1,this._muted=!1,this._unlockSource=null,this._volume=1,this._sounds=[],this.context=null,this.usingWebAudio=!0,this.usingAudioTag=!1,this.noAudio=!1,this.connectToMaster=!0,this.touchLocked=!1,this.channels=32},b.SoundManager.prototype={boot:function(){if(this.game.device.iOS&&this.game.device.webAudio===!1&&(this.channels=1),this.game.device.iOS||window.PhaserGlobal&&window.PhaserGlobal.fakeiOSTouchLock?(this.game.input.touch.callbackContext=this,this.game.input.touch.touchStartCallback=this.unlock,this.game.input.mouse.callbackContext=this,this.game.input.mouse.mouseDownCallback=this.unlock,this.touchLocked=!0):this.touchLocked=!1,window.PhaserGlobal){if(window.PhaserGlobal.disableAudio===!0)return this.usingWebAudio=!1,void(this.noAudio=!0);if(window.PhaserGlobal.disableWebAudio===!0)return this.usingWebAudio=!1,this.usingAudioTag=!0,void(this.noAudio=!1)}if(window.AudioContext)try{this.context=new window.AudioContext}catch(a){this.context=null,this.usingWebAudio=!1,this.noAudio=!0}else if(window.webkitAudioContext)try{this.context=new window.webkitAudioContext}catch(a){this.context=null,this.usingWebAudio=!1,this.noAudio=!0}window.Audio&&null===this.context&&(this.usingWebAudio=!1,this.usingAudioTag=!0,this.noAudio=!1),null!==this.context&&(this.masterGain="undefined"==typeof this.context.createGain?this.context.createGainNode():this.context.createGain(),this.masterGain.gain.value=1,this.masterGain.connect(this.context.destination))},unlock:function(){if(this.touchLocked!==!1)if(this.game.device.webAudio===!1||window.PhaserGlobal&&window.PhaserGlobal.disableWebAudio===!0)this.touchLocked=!1,this._unlockSource=null,this.game.input.touch.callbackContext=null,this.game.input.touch.touchStartCallback=null,this.game.input.mouse.callbackContext=null,this.game.input.mouse.mouseDownCallback=null;else{var a=this.context.createBuffer(1,1,22050);this._unlockSource=this.context.createBufferSource(),this._unlockSource.buffer=a,this._unlockSource.connect(this.context.destination),this._unlockSource.noteOn(0)}},stopAll:function(){for(var a=0;a255)return b.Color.getColor(255,255,255);if(a>c)return b.Color.getColor(255,255,255);var e=a+Math.round(Math.random()*(c-a)),f=a+Math.round(Math.random()*(c-a)),g=a+Math.round(Math.random()*(c-a));return b.Color.getColor32(d,e,f,g)},getRGB:function(a){return{alpha:a>>>24,red:a>>16&255,green:a>>8&255,blue:255&a}},getWebRGB:function(a){var b=(a>>>24)/255,c=a>>16&255,d=a>>8&255,e=255&a;return"rgba("+c.toString()+","+d.toString()+","+e.toString()+","+b.toString()+")"},getAlpha:function(a){return a>>>24},getAlphaFloat:function(a){return(a>>>24)/255},getRed:function(a){return a>>16&255},getGreen:function(a){return a>>8&255},getBlue:function(a){return 255&a}},b.Physics=function(a,b){b=b||{},this.game=a,this.config=b,this.arcade=null,this.p2=null,this.ninja=null,this.box2d=null,this.chipmunk=null,this.parseConfig()},b.Physics.ARCADE=0,b.Physics.P2JS=1,b.Physics.NINJA=2,b.Physics.BOX2D=3,b.Physics.CHIPMUNK=5,b.Physics.prototype={parseConfig:function(){this.config.hasOwnProperty("arcade")&&this.config.arcade!==!0||!b.Physics.hasOwnProperty("Arcade")||(this.arcade=new b.Physics.Arcade(this.game),this.game.time.deltaCap=.2),this.config.hasOwnProperty("ninja")&&this.config.ninja===!0&&b.Physics.hasOwnProperty("Ninja")&&(this.ninja=new b.Physics.Ninja(this.game)),this.config.hasOwnProperty("p2")&&this.config.p2===!0&&b.Physics.hasOwnProperty("P2")&&(this.p2=new b.Physics.P2(this.game,this.config))},startSystem:function(a){if(a===b.Physics.ARCADE?this.arcade=new b.Physics.Arcade(this.game):a===b.Physics.P2JS&&(this.p2=new b.Physics.P2(this.game,this.config)),a===b.Physics.NINJA)this.ninja=new b.Physics.Ninja(this.game);else{if(a===b.Physics.BOX2D&&null===this.box2d)throw new Error("The Box2D physics system has not been implemented yet.");if(a===b.Physics.CHIPMUNK&&null===this.chipmunk)throw new Error("The Chipmunk physics system has not been implemented yet.")}},enable:function(a,c,d){"undefined"==typeof c&&(c=b.Physics.ARCADE),"undefined"==typeof d&&(d=!1),c===b.Physics.ARCADE?this.arcade.enable(a):c===b.Physics.P2JS&&this.p2?this.p2.enable(a,d):c===b.Physics.NINJA&&this.ninja&&this.ninja.enableAABB(a)},preUpdate:function(){this.p2&&this.p2.preUpdate()},update:function(){this.p2&&this.p2.update()},setBoundsToWorld:function(){this.arcade&&this.arcade.setBoundsToWorld(),this.ninja&&this.ninja.setBoundsToWorld(),this.p2&&this.p2.setBoundsToWorld()},clear:function(){this.p2&&this.p2.clear()},destroy:function(){this.p2&&this.p2.destroy(),this.arcade=null,this.ninja=null,this.p2=null}},b.Physics.prototype.constructor=b.Physics,b.Physics.Arcade=function(a){this.game=a,this.gravity=new b.Point,this.bounds=new b.Rectangle(0,0,a.world.width,a.world.height),this.checkCollision={up:!0,down:!0,left:!0,right:!0},this.maxObjects=10,this.maxLevels=4,this.OVERLAP_BIAS=4,this.TILE_BIAS=16,this.forceX=!1,this.quadTree=new b.QuadTree(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels),this._overlap=0,this._maxOverlap=0,this._velocity1=0,this._velocity2=0,this._newVelocity1=0,this._newVelocity2=0,this._average=0,this._mapData=[],this._result=!1,this._total=0,this._angle=0,this._dx=0,this._dy=0},b.Physics.Arcade.prototype.constructor=b.Physics.Arcade,b.Physics.Arcade.prototype={setBounds:function(a,b,c,d){this.bounds.setTo(a,b,c,d)},setBoundsToWorld:function(){this.bounds.setTo(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height)},enable:function(a,c){"undefined"==typeof c&&(c=!0);var d=1;if(Array.isArray(a))for(d=a.length;d--;)a[d]instanceof b.Group?this.enable(a[d].children,c):(this.enableBody(a[d]),c&&a[d].hasOwnProperty("children")&&a[d].children.length>0&&this.enable(a[d],!0));else a instanceof b.Group?this.enable(a.children,c):(this.enableBody(a),c&&a.hasOwnProperty("children")&&a.children.length>0&&this.enable(a.children,!0))},enableBody:function(a){a.hasOwnProperty("body")&&null===a.body&&(a.body=new b.Physics.Arcade.Body(a))},updateMotion:function(a){this._velocityDelta=this.computeVelocity(0,a,a.angularVelocity,a.angularAcceleration,a.angularDrag,a.maxAngular)-a.angularVelocity,a.angularVelocity+=this._velocityDelta,a.rotation+=a.angularVelocity*this.game.time.physicsElapsed,a.velocity.x=this.computeVelocity(1,a,a.velocity.x,a.acceleration.x,a.drag.x,a.maxVelocity.x),a.velocity.y=this.computeVelocity(2,a,a.velocity.y,a.acceleration.y,a.drag.y,a.maxVelocity.y)},computeVelocity:function(a,b,c,d,e,f){return f=f||1e4,1==a&&b.allowGravity?c+=(this.gravity.x+b.gravity.x)*this.game.time.physicsElapsed:2==a&&b.allowGravity&&(c+=(this.gravity.y+b.gravity.y)*this.game.time.physicsElapsed),d?c+=d*this.game.time.physicsElapsed:e&&(this._drag=e*this.game.time.physicsElapsed,c-this._drag>0?c-=this._drag:c+this._drag<0?c+=this._drag:c=0),c>f?c=f:-f>c&&(c=-f),c},overlap:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!0);else this.collideHandler(a,b,c,d,e,!0);return this._total>0},collide:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!1);else this.collideHandler(a,b,c,d,e,!1);return this._total>0},collideHandler:function(a,c,d,e,f,g){return"undefined"!=typeof c||a.type!==b.GROUP&&a.type!==b.EMITTER?void(a&&c&&a.exists&&c.exists&&(a.type==b.SPRITE||a.type==b.TILESPRITE?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsSprite(a,c,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideSpriteVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideSpriteVsTilemapLayer(a,c,d,e,f):a.type==b.GROUP?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsGroup(c,a,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideGroupVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,c,d,e,f):a.type==b.TILEMAPLAYER?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsTilemapLayer(c,a,d,e,f):(c.type==b.GROUP||c.type==b.EMITTER)&&this.collideGroupVsTilemapLayer(c,a,d,e,f):a.type==b.EMITTER&&(c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsGroup(c,a,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideGroupVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,c,d,e,f)))):void this.collideGroupVsSelf(a,d,e,f,g)},collideSpriteVsSprite:function(a,b,c,d,e,f){return a.body&&b.body?(this.separate(a.body,b.body,d,e,f)&&(c&&c.call(e,a,b),this._total++),!0):!1},collideSpriteVsGroup:function(a,b,c,d,e,f){if(0!==b.length&&a.body){this.quadTree.clear(),this.quadTree.reset(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels),this.quadTree.populate(b),this._potentials=this.quadTree.retrieve(a);for(var g=0,h=this._potentials.length;h>g;g++)this.separate(a.body,this._potentials[g],d,e,f)&&(c&&c.call(e,a,this._potentials[g].sprite),this._total++)}},collideGroupVsSelf:function(a,b,c,d,e){if(0!==a.length)for(var f=a.children.length,g=0;f>g;g++)for(var h=g+1;f>=h;h++)a.children[g]&&a.children[h]&&a.children[g].exists&&a.children[h].exists&&this.collideSpriteVsSprite(a.children[g],a.children[h],b,c,d,e)},collideGroupVsGroup:function(a,b,c,d,e,f){if(0!==a.length&&0!==b.length)for(var g=0,h=a.children.length;h>g;g++)a.children[g].exists&&this.collideSpriteVsGroup(a.children[g],b,c,d,e,f)},collideSpriteVsTilemapLayer:function(a,b,c,d,e){if(a.body&&(this._mapData=b.getTiles(a.body.position.x-a.body.tilePadding.x,a.body.position.y-a.body.tilePadding.y,a.body.width+a.body.tilePadding.x,a.body.height+a.body.tilePadding.y,!1,!1),0!==this._mapData.length))for(var f=0;ff;f++)a.children[f].exists&&this.collideSpriteVsTilemapLayer(a.children[f],b,c,d,e)},separate:function(a,b,c,d,e){return this.intersects(a,b)?c&&c.call(d,a.sprite,b.sprite)===!1?!1:e?!0:(this._result=this.forceX||Math.abs(this.gravity.y+a.gravity.y)=b.right?!1:a.position.y>=b.bottom?!1:!0},separateX:function(a,b,c){return a.immovable&&b.immovable?!1:(this._overlap=0,this.intersects(a,b)&&(this._maxOverlap=a.deltaAbsX()+b.deltaAbsX()+this.OVERLAP_BIAS,0===a.deltaX()&&0===b.deltaX()?(a.embedded=!0,b.embedded=!0):a.deltaX()>b.deltaX()?(this._overlap=a.right-b.x,this._overlap>this._maxOverlap||a.checkCollision.right===!1||b.checkCollision.left===!1?this._overlap=0:(a.touching.none=!1,a.touching.right=!0,b.touching.none=!1,b.touching.left=!0)):a.deltaX()this._maxOverlap||a.checkCollision.left===!1||b.checkCollision.right===!1?this._overlap=0:(a.touching.none=!1,a.touching.left=!0,b.touching.none=!1,b.touching.right=!0)),0!==this._overlap)?(a.overlapX=this._overlap,b.overlapX=this._overlap,c||a.customSeparateX||b.customSeparateX?!0:(this._velocity1=a.velocity.x,this._velocity2=b.velocity.x,a.immovable||b.immovable?a.immovable?b.immovable||(b.x+=this._overlap,b.velocity.x=this._velocity1-this._velocity2*b.bounce.x):(a.x=a.x-this._overlap,a.velocity.x=this._velocity2-this._velocity1*a.bounce.x):(this._overlap*=.5,a.x=a.x-this._overlap,b.x+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.x=this._average+this._newVelocity1*a.bounce.x,b.velocity.x=this._average+this._newVelocity2*b.bounce.x),!0)):!1)},separateY:function(a,b,c){return a.immovable&&b.immovable?!1:(this._overlap=0,this.intersects(a,b)&&(this._maxOverlap=a.deltaAbsY()+b.deltaAbsY()+this.OVERLAP_BIAS,0===a.deltaY()&&0===b.deltaY()?(a.embedded=!0,b.embedded=!0):a.deltaY()>b.deltaY()?(this._overlap=a.bottom-b.y,this._overlap>this._maxOverlap||a.checkCollision.down===!1||b.checkCollision.up===!1?this._overlap=0:(a.touching.none=!1,a.touching.down=!0,b.touching.none=!1,b.touching.up=!0)):a.deltaY()this._maxOverlap||a.checkCollision.up===!1||b.checkCollision.down===!1?this._overlap=0:(a.touching.none=!1,a.touching.up=!0,b.touching.none=!1,b.touching.down=!0)),0!==this._overlap)?(a.overlapY=this._overlap,b.overlapY=this._overlap,c||a.customSeparateY||b.customSeparateY?!0:(this._velocity1=a.velocity.y,this._velocity2=b.velocity.y,a.immovable||b.immovable?a.immovable?b.immovable||(b.y+=this._overlap,b.velocity.y=this._velocity1-this._velocity2*b.bounce.y,a.moves&&(b.x+=a.x-a.prev.x)):(a.y=a.y-this._overlap,a.velocity.y=this._velocity2-this._velocity1*a.bounce.y,b.moves&&(a.x+=b.x-b.prev.x)):(this._overlap*=.5,a.y=a.y-this._overlap,b.y+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.y=this._average+this._newVelocity1*a.bounce.y,b.velocity.y=this._average+this._newVelocity2*b.bounce.y),!0)):!1)},separateTile:function(a,b,c){if(!c.intersects(b.position.x,b.position.y,b.right,b.bottom))return!1;if(c.collisionCallback&&!c.collisionCallback.call(c.collisionCallbackContext,b.sprite,c))return!1;if(c.layer.callbacks[c.index]&&!c.layer.callbacks[c.index].callback.call(c.layer.callbacks[c.index].callbackContext,b.sprite,c))return!1;if(!(c.faceLeft||c.faceRight||c.faceTop||c.faceBottom))return!1;var d=0,e=0,f=0,g=1;if(b.deltaAbsX()>b.deltaAbsY()?f=-1:b.deltaAbsX()f){if((c.faceLeft||c.faceRight)&&(d=this.tileCheckX(b,c),0!==d&&!c.intersects(b.position.x,b.position.y,b.right,b.bottom)))return!0;(c.faceTop||c.faceBottom)&&(e=this.tileCheckY(b,c))}else{if((c.faceTop||c.faceBottom)&&(e=this.tileCheckY(b,c),0!==e&&!c.intersects(b.position.x,b.position.y,b.right,b.bottom)))return!0;(c.faceLeft||c.faceRight)&&(d=this.tileCheckX(b,c))}return 0!==d||0!==e},tileCheckX:function(a,b){var c=0;return a.deltaX()<0&&!a.blocked.left&&b.collideRight&&a.checkCollision.left?b.faceRight&&a.x0&&!a.blocked.right&&b.collideLeft&&a.checkCollision.right&&b.faceLeft&&a.right>b.left&&(c=a.right-b.left,c>this.TILE_BIAS&&(c=0)),0!==c&&this.processTileSeparationX(a,c),c},tileCheckY:function(a,b){var c=0;return a.deltaY()<0&&!a.blocked.up&&b.collideDown&&a.checkCollision.up?b.faceBottom&&a.y0&&!a.blocked.down&&b.collideUp&&a.checkCollision.down&&b.faceTop&&a.bottom>b.top&&(c=a.bottom-b.top,c>this.TILE_BIAS&&(c=0)),0!==c&&this.processTileSeparationY(a,c),c},processTileSeparationX:function(a,b){0>b?a.blocked.left=!0:b>0&&(a.blocked.right=!0),a.position.x-=b,a.velocity.x=0===a.bounce.x?0:-a.velocity.x*a.bounce.x},processTileSeparationY:function(a,b){0>b?a.blocked.up=!0:b>0&&(a.blocked.down=!0),a.position.y-=b,a.velocity.y=0===a.bounce.y?0:-a.velocity.y*a.bounce.y},moveToObject:function(a,b,c,d){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=0),this._angle=Math.atan2(b.y-a.y,b.x-a.x),d>0&&(c=this.distanceBetween(a,b)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*c,a.body.velocity.y=Math.sin(this._angle)*c,this._angle},moveToPointer:function(a,b,c,d){return"undefined"==typeof b&&(b=60),c=c||this.game.input.activePointer,"undefined"==typeof d&&(d=0),this._angle=this.angleToPointer(a,c),d>0&&(b=this.distanceToPointer(a,c)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*b,a.body.velocity.y=Math.sin(this._angle)*b,this._angle},moveToXY:function(a,b,c,d,e){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=0),this._angle=Math.atan2(c-a.y,b-a.x),e>0&&(d=this.distanceToXY(a,b,c)/(e/1e3)),a.body.velocity.x=Math.cos(this._angle)*d,a.body.velocity.y=Math.sin(this._angle)*d,this._angle -},velocityFromAngle:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(this.game.math.degToRad(a))*c,Math.sin(this.game.math.degToRad(a))*c)},velocityFromRotation:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(a)*c,Math.sin(a)*c)},accelerationFromRotation:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(a)*c,Math.sin(a)*c)},accelerateToObject:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleBetween(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle},accelerateToPointer:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof b&&(b=this.game.input.activePointer),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleToPointer(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle},accelerateToXY:function(a,b,c,d,e,f){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=1e3),"undefined"==typeof f&&(f=1e3),this._angle=this.angleToXY(a,b,c),a.body.acceleration.setTo(Math.cos(this._angle)*d,Math.sin(this._angle)*d),a.body.maxVelocity.setTo(e,f),this._angle},distanceBetween:function(a,b){return this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToXY:function(a,b,c){return this._dx=a.x-b,this._dy=a.y-c,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},angleBetween:function(a,b){return this._dx=b.x-a.x,this._dy=b.y-a.y,Math.atan2(this._dy,this._dx)},angleToXY:function(a,b,c){return this._dx=b-a.x,this._dy=c-a.y,Math.atan2(this._dy,this._dx)},angleToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=b.worldX-a.x,this._dy=b.worldY-a.y,Math.atan2(this._dy,this._dx)}},b.Physics.Arcade.Body=function(a){this.sprite=a,this.game=a.game,this.type=b.Physics.ARCADE,this.offset=new b.Point,this.position=new b.Point(a.x,a.y),this.prev=new b.Point(this.position.x,this.position.y),this.allowRotation=!0,this.rotation=a.rotation,this.preRotation=a.rotation,this.sourceWidth=a.texture.frame.width,this.sourceHeight=a.texture.frame.height,this.width=a.width,this.height=a.height,this.halfWidth=Math.abs(a.width/2),this.halfHeight=Math.abs(a.height/2),this.center=new b.Point(a.x+this.halfWidth,a.y+this.halfHeight),this.velocity=new b.Point,this.newVelocity=new b.Point(0,0),this.deltaMax=new b.Point(0,0),this.acceleration=new b.Point,this.drag=new b.Point,this.allowGravity=!0,this.gravity=new b.Point(0,0),this.bounce=new b.Point,this.maxVelocity=new b.Point(1e4,1e4),this.angularVelocity=0,this.angularAcceleration=0,this.angularDrag=0,this.maxAngular=1e3,this.mass=1,this.angle=0,this.speed=0,this.facing=b.NONE,this.immovable=!1,this.moves=!0,this.customSeparateX=!1,this.customSeparateY=!1,this.overlapX=0,this.overlapY=0,this.embedded=!1,this.collideWorldBounds=!1,this.checkCollision={none:!1,any:!0,up:!0,down:!0,left:!0,right:!0},this.touching={none:!0,up:!1,down:!1,left:!1,right:!1},this.wasTouching={none:!0,up:!1,down:!1,left:!1,right:!1},this.blocked={up:!1,down:!1,left:!1,right:!1},this.tilePadding=new b.Point,this.phase=0,this._reset=!0,this._sx=a.scale.x,this._sy=a.scale.y,this._dx=0,this._dy=0},b.Physics.Arcade.Body.prototype={updateBounds:function(){var a=Math.abs(this.sprite.scale.x),b=Math.abs(this.sprite.scale.y);(a!==this._sx||b!==this._sy)&&(this.width=this.sourceWidth*a,this.height=this.sourceHeight*b,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this._sx=a,this._sy=b,this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight),this._reset=!0)},preUpdate:function(){this.phase=1,this.wasTouching.none=this.touching.none,this.wasTouching.up=this.touching.up,this.wasTouching.down=this.touching.down,this.wasTouching.left=this.touching.left,this.wasTouching.right=this.touching.right,this.touching.none=!0,this.touching.up=!1,this.touching.down=!1,this.touching.left=!1,this.touching.right=!1,this.blocked.up=!1,this.blocked.down=!1,this.blocked.left=!1,this.blocked.right=!1,this.embedded=!1,this.updateBounds(),this.position.x=this.sprite.world.x-this.sprite.anchor.x*this.width+this.offset.x,this.position.y=this.sprite.world.y-this.sprite.anchor.y*this.height+this.offset.y,this.rotation=this.sprite.angle,this.preRotation=this.rotation,(this._reset||1===this.sprite._cache[4])&&(this.prev.x=this.position.x,this.prev.y=this.position.y),this.moves&&(this.game.physics.arcade.updateMotion(this),this.newVelocity.set(this.velocity.x*this.game.time.physicsElapsed,this.velocity.y*this.game.time.physicsElapsed),this.position.x+=this.newVelocity.x,this.position.y+=this.newVelocity.y,(this.position.x!==this.prev.x||this.position.y!==this.prev.y)&&(this.speed=Math.sqrt(this.velocity.x*this.velocity.x+this.velocity.y*this.velocity.y),this.angle=Math.atan2(this.velocity.y,this.velocity.x)),this.collideWorldBounds&&this.checkWorldBounds()),this._dx=this.deltaX(),this._dy=this.deltaY(),this._reset=!1},postUpdate:function(){2!==this.phase&&(this.phase=2,this.deltaX()<0?this.facing=b.LEFT:this.deltaX()>0&&(this.facing=b.RIGHT),this.deltaY()<0?this.facing=b.UP:this.deltaY()>0&&(this.facing=b.DOWN),this.moves&&(this._dx=this.deltaX(),this._dy=this.deltaY(),0!==this.deltaMax.x&&0!==this._dx&&(this._dx<0&&this._dx<-this.deltaMax.x?this._dx=-this.deltaMax.x:this._dx>0&&this._dx>this.deltaMax.x&&(this._dx=this.deltaMax.x)),0!==this.deltaMax.y&&0!==this._dy&&(this._dy<0&&this._dy<-this.deltaMax.y?this._dy=-this.deltaMax.y:this._dy>0&&this._dy>this.deltaMax.y&&(this._dy=this.deltaMax.y)),this.sprite.x+=this._dx,this.sprite.y+=this._dy),this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight),this.allowRotation&&(this.sprite.angle+=this.deltaZ()),this.prev.x=this.position.x,this.prev.y=this.position.y)},destroy:function(){this.sprite=null},checkWorldBounds:function(){this.position.xthis.game.physics.arcade.bounds.right&&this.game.physics.arcade.checkCollision.right&&(this.position.x=this.game.physics.arcade.bounds.right-this.width,this.velocity.x*=-this.bounce.x,this.blocked.right=!0),this.position.ythis.game.physics.arcade.bounds.bottom&&this.game.physics.arcade.checkCollision.down&&(this.position.y=this.game.physics.arcade.bounds.bottom-this.height,this.velocity.y*=-this.bounce.y,this.blocked.down=!0)},setSize:function(a,b,c,d){c=c||this.offset.x,d=d||this.offset.y,this.sourceWidth=a,this.sourceHeight=b,this.width=this.sourceWidth*this._sx,this.height=this.sourceHeight*this._sy,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this.offset.setTo(c,d),this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight)},reset:function(a,b){this.velocity.set(0),this.acceleration.set(0),this.angularVelocity=0,this.angularAcceleration=0,this.position.x=a-this.sprite.anchor.x*this.width+this.offset.x,this.position.y=b-this.sprite.anchor.y*this.height+this.offset.y,this.prev.x=this.position.x,this.prev.y=this.position.y,this.rotation=this.sprite.angle,this.preRotation=this.rotation,this._sx=this.sprite.scale.x,this._sy=this.sprite.scale.y,this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight)},hitTest:function(a,c){return b.Rectangle.contains(this,a,c)},onFloor:function(){return this.blocked.down},onWall:function(){return this.blocked.left||this.blocked.right},deltaAbsX:function(){return this.deltaX()>0?this.deltaX():-this.deltaX()},deltaAbsY:function(){return this.deltaY()>0?this.deltaY():-this.deltaY()},deltaX:function(){return this.position.x-this.prev.x},deltaY:function(){return this.position.y-this.prev.y},deltaZ:function(){return this.rotation-this.preRotation}},Object.defineProperty(b.Physics.Arcade.Body.prototype,"bottom",{get:function(){return this.position.y+this.height}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"right",{get:function(){return this.position.x+this.width}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a}}),b.Physics.Arcade.Body.render=function(a,b,c,d){"undefined"==typeof c&&(c=!0),d=d||"rgba(0,255,0,0.4)",c?(a.fillStyle=d,a.fillRect(b.position.x-b.game.camera.x,b.position.y-b.game.camera.y,b.width,b.height)):(a.strokeStyle=d,a.strokeRect(b.position.x-b.game.camera.x,b.position.y-b.game.camera.y,b.width,b.height))},b.Physics.Arcade.Body.renderBodyInfo=function(a,b){a.line("x: "+b.x.toFixed(2),"y: "+b.y.toFixed(2),"width: "+b.width,"height: "+b.height),a.line("velocity x: "+b.velocity.x.toFixed(2),"y: "+b.velocity.y.toFixed(2),"deltaX: "+b._dx.toFixed(2),"deltaY: "+b._dy.toFixed(2)),a.line("acceleration x: "+b.acceleration.x.toFixed(2),"y: "+b.acceleration.y.toFixed(2),"speed: "+b.speed.toFixed(2),"angle: "+b.angle.toFixed(2)),a.line("gravity x: "+b.gravity.x,"y: "+b.gravity.y,"bounce x: "+b.bounce.x.toFixed(2),"y: "+b.bounce.y.toFixed(2)),a.line("touching left: "+b.touching.left,"right: "+b.touching.right,"up: "+b.touching.up,"down: "+b.touching.down),a.line("blocked left: "+b.blocked.left,"right: "+b.blocked.right,"up: "+b.blocked.up,"down: "+b.blocked.down)},b.Physics.Arcade.Body.prototype.constructor=b.Physics.Arcade.Body,b.Particles=function(a){this.game=a,this.emitters={},this.ID=0},b.Particles.prototype={add:function(a){return this.emitters[a.name]=a,a},remove:function(a){delete this.emitters[a.name]},update:function(){for(var a in this.emitters)this.emitters[a].exists&&this.emitters[a].update()}},b.Particles.prototype.constructor=b.Particles,b.Particles.Arcade={},b.Particles.Arcade.Emitter=function(a,c,d,e){this.maxParticles=e||50,b.Group.call(this,a),this.name="emitter"+this.game.particles.ID++,this.type=b.EMITTER,this.width=1,this.height=1,this.minParticleSpeed=new b.Point(-100,-100),this.maxParticleSpeed=new b.Point(100,100),this.minParticleScale=1,this.maxParticleScale=1,this.scaleData=null,this.minRotation=-360,this.maxRotation=360,this.minParticleAlpha=1,this.maxParticleAlpha=1,this.alphaData=null,this.gravity=100,this.particleClass=b.Particle,this.particleDrag=new b.Point,this.angularDrag=0,this.frequency=100,this.lifespan=2e3,this.bounce=new b.Point,this.on=!1,this.particleAnchor=new b.Point(.5,.5),this.blendMode=b.blendModes.NORMAL,this.emitX=c,this.emitY=d,this.autoScale=!1,this.autoAlpha=!1,this.particleBringToTop=!1,this.particleSendToBack=!1,this._minParticleScale=new b.Point(1,1),this._maxParticleScale=new b.Point(1,1),this._quantity=0,this._timer=0,this._counter=0,this._explode=!0,this._frames=null},b.Particles.Arcade.Emitter.prototype=Object.create(b.Group.prototype),b.Particles.Arcade.Emitter.prototype.constructor=b.Particles.Arcade.Emitter,b.Particles.Arcade.Emitter.prototype.update=function(){if(this.on)if(this._explode){this._counter=0;do this.emitParticle(),this._counter++;while(this._counter=this._timer&&(this.emitParticle(),this._counter++,this._quantity>0&&this._counter>=this._quantity&&(this.on=!1),this._timer=this.game.time.now+this.frequency);for(var a=this.children.length;a--;)this.children[a].exists&&this.children[a].update()},b.Particles.Arcade.Emitter.prototype.makeParticles=function(a,b,c,d,e){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=this.maxParticles),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1);var f,g=0,h=a,i=b;for(this._frames=b;c>g;)"object"==typeof a&&(h=this.game.rnd.pick(a)),"object"==typeof b&&(i=this.game.rnd.pick(b)),f=new this.particleClass(this.game,0,0,h,i),this.game.physics.arcade.enable(f,!1),d?(f.body.checkCollision.any=!0,f.body.checkCollision.none=!1):f.body.checkCollision.none=!0,f.body.collideWorldBounds=e,f.exists=!1,f.visible=!1,f.anchor.copyFrom(this.particleAnchor),this.add(f),g++;return this},b.Particles.Arcade.Emitter.prototype.kill=function(){this.on=!1,this.alive=!1,this.exists=!1},b.Particles.Arcade.Emitter.prototype.revive=function(){this.alive=!0,this.exists=!0},b.Particles.Arcade.Emitter.prototype.start=function(a,b,c,d){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=0),("undefined"==typeof c||null===c)&&(c=250),"undefined"==typeof d&&(d=0),this.revive(),this.visible=!0,this.on=!0,this._explode=a,this.lifespan=b,this.frequency=c,a?this._quantity=d:this._quantity+=d,this._counter=0,this._timer=this.game.time.now+c},b.Particles.Arcade.Emitter.prototype.emitParticle=function(){var a=this.getFirstExists(!1);null!==a&&(this.width>1||this.height>1?a.reset(this.game.rnd.integerInRange(this.left,this.right),this.game.rnd.integerInRange(this.top,this.bottom)):a.reset(this.emitX,this.emitY),a.angle=0,a.lifespan=this.lifespan,this.particleBringToTop?this.bringToTop(a):this.particleSendToBack&&this.sendToBack(a),this.autoScale?a.setScaleData(this.scaleData):this.minParticleScale!==this.maxParticleScale?a.scale.set(this.game.rnd.realInRange(this.minParticleScale,this.maxParticleScale)):(this._minParticleScale.x!==this._maxParticleScale.x||this._minParticleScale.y!==this._maxParticleScale.y)&&a.scale.set(this.game.rnd.realInRange(this._minParticleScale.x,this._maxParticleScale.x),this.game.rnd.realInRange(this._minParticleScale.y,this._maxParticleScale.y)),a.frame=Array.isArray("object"===this._frames)?this.game.rnd.pick(this._frames):this._frames,this.autoAlpha?a.setAlphaData(this.alphaData):a.alpha=this.game.rnd.realInRange(this.minParticleAlpha,this.maxParticleAlpha),a.blendMode=this.blendMode,a.body.updateBounds(),a.body.bounce.setTo(this.bounce.x,this.bounce.y),a.body.velocity.x=this.game.rnd.integerInRange(this.minParticleSpeed.x,this.maxParticleSpeed.x),a.body.velocity.y=this.game.rnd.integerInRange(this.minParticleSpeed.y,this.maxParticleSpeed.y),a.body.angularVelocity=this.game.rnd.integerInRange(this.minRotation,this.maxRotation),a.body.gravity.y=this.gravity,a.body.drag.x=this.particleDrag.x,a.body.drag.y=this.particleDrag.y,a.body.angularDrag=this.angularDrag,a.onEmit())},b.Particles.Arcade.Emitter.prototype.setSize=function(a,b){this.width=a,this.height=b},b.Particles.Arcade.Emitter.prototype.setXSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.x=a,this.maxParticleSpeed.x=b},b.Particles.Arcade.Emitter.prototype.setYSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.y=a,this.maxParticleSpeed.y=b},b.Particles.Arcade.Emitter.prototype.setRotation=function(a,b){a=a||0,b=b||0,this.minRotation=a,this.maxRotation=b},b.Particles.Arcade.Emitter.prototype.setAlpha=function(a,c,d,e,f){if("undefined"==typeof a&&(a=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=0),"undefined"==typeof e&&(e=b.Easing.Linear.None),"undefined"==typeof f&&(f=!1),this.minParticleAlpha=a,this.maxParticleAlpha=c,this.autoAlpha=!1,d>0&&a!==c){var g={v:a},h=this.game.make.tween(g).to({v:c},d,e);h.yoyo(f),this.alphaData=h.generateData(60),this.alphaData.reverse(),this.autoAlpha=!0}},b.Particles.Arcade.Emitter.prototype.setScale=function(a,c,d,e,f,g,h){if("undefined"==typeof a&&(a=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1),"undefined"==typeof e&&(e=1),"undefined"==typeof f&&(f=0),"undefined"==typeof g&&(g=b.Easing.Linear.None),"undefined"==typeof h&&(h=!1),this.minParticleScale=1,this.maxParticleScale=1,this._minParticleScale.set(a,d),this._maxParticleScale.set(c,e),this.autoScale=!1,f>0&&a!==c||d!==e){var i={x:a,y:d},j=this.game.make.tween(i).to({x:c,y:e},f,g);j.yoyo(h),this.scaleData=j.generateData(60),this.scaleData.reverse(),this.autoScale=!0}},b.Particles.Arcade.Emitter.prototype.at=function(a){a.center?(this.emitX=a.center.x,this.emitY=a.center.y):(this.emitX=a.world.x+a.anchor.x*a.width,this.emitY=a.world.y+a.anchor.y*a.height)},Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"x",{get:function(){return this.emitX},set:function(a){this.emitX=a}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"y",{get:function(){return this.emitY},set:function(a){this.emitY=a}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"left",{get:function(){return Math.floor(this.x-this.width/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"right",{get:function(){return Math.floor(this.x+this.width/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"top",{get:function(){return Math.floor(this.y-this.height/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"bottom",{get:function(){return Math.floor(this.y+this.height/2)}}),b.Tile=function(a,b,c,d,e,f){this.layer=a,this.index=b,this.x=c,this.y=d,this.worldX=c*e,this.worldY=d*f,this.width=e,this.height=f,this.centerX=Math.abs(e/2),this.centerY=Math.abs(f/2),this.alpha=1,this.properties={},this.scanned=!1,this.faceTop=!1,this.faceBottom=!1,this.faceLeft=!1,this.faceRight=!1,this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.collisionCallback=null,this.collisionCallbackContext=this},b.Tile.prototype={containsPoint:function(a,b){return!(athis.right||b>this.bottom)},intersects:function(a,b,c,d){return c<=this.worldX?!1:d<=this.worldY?!1:a>=this.worldX+this.width?!1:b>=this.worldY+this.height?!1:!0},setCollisionCallback:function(a,b){this.collisionCallback=a,this.collisionCallbackContext=b},destroy:function(){this.collisionCallback=null,this.collisionCallbackContext=null,this.properties=null},setCollision:function(a,b,c,d){this.collideLeft=a,this.collideRight=b,this.collideUp=c,this.collideDown=d},resetCollision:function(){this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.faceTop=!1,this.faceBottom=!1,this.faceLeft=!1,this.faceRight=!1},isInteresting:function(a,b){return a&&b?this.collideLeft||this.collideRight||this.collideUp||this.collideDown||this.faceTop||this.faceBottom||this.faceLeft||this.faceRight||this.collisionCallback:a?this.collideLeft||this.collideRight||this.collideUp||this.collideDown:b?this.faceTop||this.faceBottom||this.faceLeft||this.faceRight:!1},copy:function(a){this.index=a.index,this.alpha=a.alpha,this.properties=a.properties,this.collideUp=a.collideUp,this.collideDown=a.collideDown,this.collideLeft=a.collideLeft,this.collideRight=a.collideRight,this.collisionCallback=a.collisionCallback,this.collisionCallbackContext=a.collisionCallbackContext}},b.Tile.prototype.constructor=b.Tile,Object.defineProperty(b.Tile.prototype,"collides",{get:function(){return this.collideLeft||this.collideRight||this.collideUp||this.collideDown}}),Object.defineProperty(b.Tile.prototype,"canCollide",{get:function(){return this.collideLeft||this.collideRight||this.collideUp||this.collideDown||this.collisionCallback}}),Object.defineProperty(b.Tile.prototype,"left",{get:function(){return this.worldX}}),Object.defineProperty(b.Tile.prototype,"right",{get:function(){return this.worldX+this.width}}),Object.defineProperty(b.Tile.prototype,"top",{get:function(){return this.worldY}}),Object.defineProperty(b.Tile.prototype,"bottom",{get:function(){return this.worldY+this.height}}),b.Tilemap=function(a,c,d,e,f,g){this.game=a,this.key=c;var h=b.TilemapParser.parse(this.game,c,d,e,f,g);null!==h&&(this.width=h.width,this.height=h.height,this.tileWidth=h.tileWidth,this.tileHeight=h.tileHeight,this.orientation=h.orientation,this.version=h.version,this.properties=h.properties,this.widthInPixels=h.widthInPixels,this.heightInPixels=h.heightInPixels,this.layers=h.layers,this.tilesets=h.tilesets,this.tiles=h.tiles,this.objects=h.objects,this.collideIndexes=[],this.collision=h.collision,this.images=h.images,this.currentLayer=0,this.debugMap=[],this._results=[],this._tempA=0,this._tempB=0)},b.Tilemap.CSV=0,b.Tilemap.TILED_JSON=1,b.Tilemap.prototype={create:function(a,b,c,d,e,f){return"undefined"==typeof f&&(f=this.game.world),this.width=b,this.height=c,this.setTileSize(d,e),this.layers.length=0,this.createBlankLayer(a,b,c,d,e,f)},setTileSize:function(a,b){this.tileWidth=a,this.tileHeight=b,this.widthInPixels=this.width*a,this.heightInPixels=this.height*b},addTilesetImage:function(a,c,d,e,f,g,h){if("undefined"==typeof d&&(d=this.tileWidth),"undefined"==typeof e&&(e=this.tileHeight),"undefined"==typeof f&&(f=0),"undefined"==typeof g&&(g=0),"undefined"==typeof h&&(h=0),0===d&&(d=32),0===e&&(e=32),"undefined"==typeof c){if("string"!=typeof a)return null;c=a}if("string"==typeof a&&(a=this.getTilesetIndex(a)),this.tilesets[a])return this.tilesets[a].setImage(this.game.cache.getImage(c)),this.tilesets[a];var i=new b.Tileset(c,h,d,e,f,g,{});i.setImage(this.game.cache.getImage(c)),this.tilesets.push(i);for(var j=this.tilesets.length-1,k=f,l=f,m=0,n=0,o=0,p=h;pl;l++)if(this.objects[a][l].gid===c){k=new i(this.game,this.objects[a][l].x,this.objects[a][l].y,d,e),k.name=this.objects[a][l].name,k.visible=this.objects[a][l].visible,k.autoCull=g,k.exists=f,j&&(k.y-=k.height),h.add(k);for(var n in this.objects[a][l].properties)h.set(k,n,this.objects[a][l].properties[n],!1,!1,0)}},createLayer:function(a,c,d,e){"undefined"==typeof c&&(c=this.game.width),"undefined"==typeof d&&(d=this.game.height),"undefined"==typeof e&&(e=this.game.world);var f=a;return"string"==typeof a&&(f=this.getLayerIndex(a)),null===f||f>this.layers.length?void console.warn("Tilemap.createLayer: Invalid layer ID given: "+f):e.add(new b.TilemapLayer(this.game,this,f,c,d))},createBlankLayer:function(a,c,d,e,f,g){if("undefined"==typeof g&&(g=this.game.world),null!==this.getLayerIndex(a))return void console.warn("Tilemap.createBlankLayer: Layer with matching name already exists");for(var h,i=[],j=0;d>j;j++){h=[];for(var k=0;c>k;k++)h.push(null);i.push(h)}var l={name:a,x:0,y:0,width:c,height:d,widthInPixels:c*e,heightInPixels:d*f,alpha:1,visible:!0,properties:{},indexes:[],callbacks:[],bodies:[],data:i};this.layers.push(l),this.currentLayer=this.layers.length-1;var m=l.widthInPixels,n=l.heightInPixels;m>this.game.width&&(m=this.game.width),n>this.game.height&&(n=this.game.height);var i=new b.TilemapLayer(this.game,this,this.layers.length-1,m,n);return i.name=a,g.add(i)},getIndex:function(a,b){for(var c=0;ce;e++)this.layers[d].callbacks[a[e]]={callback:b,callbackContext:c}},setTileLocationCallback:function(a,b,c,d,e,f,g){if(g=this.getLayer(g),this.copy(a,b,c,d,g),!(this._results.length<2))for(var h=1;hd;d++)this.setCollisionByIndex(a[d],b,c,!1);this.calculateFaces(c)},setCollisionBetween:function(a,b,c,d){if("undefined"==typeof c&&(c=!0),d=this.getLayer(d),!(a>b)){for(var e=a;b>=e;e++)this.setCollisionByIndex(e,c,d,!1);this.calculateFaces(d)}},setCollisionByExclusion:function(a,b,c){"undefined"==typeof b&&(b=!0),c=this.getLayer(c);for(var d=0,e=this.tiles.length;e>d;d++)-1===a.indexOf(d)&&this.setCollisionByIndex(d,b,c,!1);this.calculateFaces(c)},setCollisionByIndex:function(a,b,c,d){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=this.currentLayer),"undefined"==typeof d&&(d=!0),b)this.collideIndexes.push(a);else{var e=this.collideIndexes.indexOf(a);e>-1&&this.collideIndexes.splice(e,1)}for(var f=0;ff;f++)for(var h=0,i=this.layers[a].width;i>h;h++){var j=this.layers[a].data[f][h];j&&(b=this.getTileAbove(a,h,f),c=this.getTileBelow(a,h,f),d=this.getTileLeft(a,h,f),e=this.getTileRight(a,h,f),j.collides&&(j.faceTop=!0,j.faceBottom=!0,j.faceLeft=!0,j.faceRight=!0),b&&b.collides&&(j.faceTop=!1),c&&c.collides&&(j.faceBottom=!1),d&&d.collides&&(j.faceLeft=!1),e&&e.collides&&(j.faceRight=!1))}},getTileAbove:function(a,b,c){return c>0?this.layers[a].data[c-1][b]:null},getTileBelow:function(a,b,c){return c0?this.layers[a].data[c][b-1]:null},getTileRight:function(a,b,c){return b=0&&a=0&&b=0&&c=0&&d-1?this.layers[e].data[d][c].setCollision(!0,!0,!0,!0):this.layers[e].data[d][c].resetCollision(),this.layers[e].dirty=!0,this.calculateFaces(e),this.layers[e].data[d][c]}return null},putTileWorldXY:function(a,b,c,d,e,f){return f=this.getLayer(f),b=this.game.math.snapToFloor(b,d)/d,c=this.game.math.snapToFloor(c,e)/e,this.putTile(a,b,c,f)},getTile:function(a,b,c){return c=this.getLayer(c),a>=0&&a=0&&ba&&(a=0),0>b&&(b=0),c>this.layers[e].width&&(c=this.layers[e].width),d>this.layers[e].height&&(d=this.layers[e].height),this._results.length=0,this._results.push({x:a,y:b,width:c,height:d,layer:e});for(var f=b;b+d>f;f++)for(var g=a;a+c>g;g++)this._results.push(this.layers[e].data[f][g]);return this._results},paste:function(a,b,c,d){if("undefined"==typeof a&&(a=0),"undefined"==typeof b&&(b=0),d=this.getLayer(d),c&&!(c.length<2)){for(var e=c[1].x-a,f=c[1].y-b,g=1;g1?this.debugMap[this.layers[this.currentLayer].data[c][d]]?"background: "+this.debugMap[this.layers[this.currentLayer].data[c][d]]:"background: #ffffff":"background: rgb(0, 0, 0)");a+="\n"}b[0]=a,console.log.apply(console,b)},destroy:function(){this.removeAllLayers(),this.data=[],this.game=null}},b.Tilemap.prototype.constructor=b.Tilemap,b.TilemapLayer=function(a,c,d,e,f){this.game=a,this.map=c,this.index=d,this.layer=c.layers[d],this.canvas=b.Canvas.create(e,f,"",!0),this.context=this.canvas.getContext("2d"),this.baseTexture=new PIXI.BaseTexture(this.canvas),this.texture=new PIXI.Texture(this.baseTexture),this.textureFrame=new b.Frame(0,0,0,e,f,"tilemapLayer",a.rnd.uuid()),b.Image.call(this,this.game,0,0,this.texture,this.textureFrame),this.name="",this.type=b.TILEMAPLAYER,this.fixedToCamera=!0,this.cameraOffset=new b.Point(0,0),this.tileColor="rgb(255, 255, 255)",this.debug=!1,this.debugAlpha=.5,this.debugColor="rgba(0, 255, 0, 1)",this.debugFill=!1,this.debugFillColor="rgba(0, 255, 0, 0.2)",this.debugCallbackColor="rgba(255, 0, 0, 1)",this.scrollFactorX=1,this.scrollFactorY=1,this.dirty=!0,this.rayStepRate=4,this._mc={cw:c.tileWidth,ch:c.tileHeight,ga:1,dx:0,dy:0,dw:0,dh:0,tx:0,ty:0,tw:0,th:0,tl:0,maxX:0,maxY:0,startX:0,startY:0,x:0,y:0,prevX:0,prevY:0},this._results=[],this.updateMax()},b.TilemapLayer.prototype=Object.create(b.Image.prototype),b.TilemapLayer.prototype.constructor=b.TilemapLayer,b.TilemapLayer.prototype.postUpdate=function(){b.Image.prototype.postUpdate.call(this),this.scrollX=this.game.camera.x*this.scrollFactorX,this.scrollY=this.game.camera.y*this.scrollFactorY,this.render(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y) -},b.TilemapLayer.prototype.resizeWorld=function(){this.game.world.setBounds(0,0,this.layer.widthInPixels,this.layer.heightInPixels)},b.TilemapLayer.prototype._fixX=function(a){return 0>a&&(a=0),1===this.scrollFactorX?a:this._mc.x+(a-this._mc.x/this.scrollFactorX)},b.TilemapLayer.prototype._unfixX=function(a){return 1===this.scrollFactorX?a:this._mc.x/this.scrollFactorX+(a-this._mc.x)},b.TilemapLayer.prototype._fixY=function(a){return 0>a&&(a=0),1===this.scrollFactorY?a:this._mc.y+(a-this._mc.y/this.scrollFactorY)},b.TilemapLayer.prototype._unfixY=function(a){return 1===this.scrollFactorY?a:this._mc.y/this.scrollFactorY+(a-this._mc.y)},b.TilemapLayer.prototype.getTileX=function(a){return this.game.math.snapToFloor(this._fixX(a),this.map.tileWidth)/this.map.tileWidth},b.TilemapLayer.prototype.getTileY=function(a){return this.game.math.snapToFloor(this._fixY(a),this.map.tileHeight)/this.map.tileHeight},b.TilemapLayer.prototype.getTileXY=function(a,b,c){return c.x=this.getTileX(a),c.y=this.getTileY(b),c},b.TilemapLayer.prototype.getRayCastTiles=function(a,b,c,d){("undefined"==typeof b||null===b)&&(b=this.rayStepRate),"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1);var e=this.getTiles(a.x,a.y,a.width,a.height,c,d);if(0===e.length)return[];for(var f=a.coordinatesOnLine(b),g=f.length,h=[],i=0;ij;j++)if(e[i].containsPoint(f[j][0],f[j][1])){h.push(e[i]);break}return h},b.TilemapLayer.prototype.getTiles=function(a,b,c,d,e,f){"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=!1),a=this._fixX(a),b=this._fixY(b),c>this.layer.widthInPixels&&(c=this.layer.widthInPixels),d>this.layer.heightInPixels&&(d=this.layer.heightInPixels),this._mc.tx=this.game.math.snapToFloor(a,this._mc.cw)/this._mc.cw,this._mc.ty=this.game.math.snapToFloor(b,this._mc.ch)/this._mc.ch,this._mc.tw=(this.game.math.snapToCeil(c,this._mc.cw)+this._mc.cw)/this._mc.cw,this._mc.th=(this.game.math.snapToCeil(d,this._mc.ch)+this._mc.ch)/this._mc.ch,this._results.length=0;for(var g=this._mc.ty;gthis.layer.width&&(this._mc.maxX=this.layer.width),this._mc.maxY>this.layer.height&&(this._mc.maxY=this.layer.height)),this.dirty=!0},b.TilemapLayer.prototype.render=function(){if(this.layer.dirty&&(this.dirty=!0),this.dirty&&this.visible){this._mc.prevX=this._mc.dx,this._mc.prevY=this._mc.dy,this._mc.dx=-(this._mc.x-this._mc.startX*this.map.tileWidth),this._mc.dy=-(this._mc.y-this._mc.startY*this.map.tileHeight),this._mc.tx=this._mc.dx,this._mc.ty=this._mc.dy,this.context.clearRect(0,0,this.canvas.width,this.canvas.height),this.context.fillStyle=this.tileColor;var a,c;this.debug&&(this.context.globalAlpha=this.debugAlpha);for(var d=this._mc.startY,e=this._mc.startY+this._mc.maxY;e>d;d++){this._column=this.layer.data[d];for(var f=this._mc.startX,g=this._mc.startX+this._mc.maxX;g>f;f++)this._column[f]&&(a=this._column[f],c=this.map.tilesets[this.map.tiles[a.index][2]],this.debug===!1&&a.alpha!==this.context.globalAlpha&&(this.context.globalAlpha=a.alpha),c.draw(this.context,Math.floor(this._mc.tx),Math.floor(this._mc.ty),a.index),a.debug&&(this.context.fillStyle="rgba(0, 255, 0, 0.4)",this.context.fillRect(Math.floor(this._mc.tx),Math.floor(this._mc.ty),this.map.tileWidth,this.map.tileHeight))),this._mc.tx+=this.map.tileWidth;this._mc.tx=this._mc.dx,this._mc.ty+=this.map.tileHeight}return this.debug&&(this.context.globalAlpha=1,this.renderDebug()),this.game.renderType===b.WEBGL&&PIXI.updateWebGLTexture(this.baseTexture,this.game.renderer.gl),this.dirty=!1,this.layer.dirty=!1,!0}},b.TilemapLayer.prototype.renderDebug=function(){this._mc.tx=this._mc.dx,this._mc.ty=this._mc.dy,this.context.strokeStyle=this.debugColor,this.context.fillStyle=this.debugFillColor;for(var a=this._mc.startY,b=this._mc.startY+this._mc.maxY;b>a;a++){this._column=this.layer.data[a];for(var c=this._mc.startX,d=this._mc.startX+this._mc.maxX;d>c;c++){var e=this._column[c];e&&(e.faceTop||e.faceBottom||e.faceLeft||e.faceRight)&&(this._mc.tx=Math.floor(this._mc.tx),this.debugFill&&this.context.fillRect(this._mc.tx,this._mc.ty,this._mc.cw,this._mc.ch),this.context.beginPath(),e.faceTop&&(this.context.moveTo(this._mc.tx,this._mc.ty),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty)),e.faceBottom&&(this.context.moveTo(this._mc.tx,this._mc.ty+this._mc.ch),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty+this._mc.ch)),e.faceLeft&&(this.context.moveTo(this._mc.tx,this._mc.ty),this.context.lineTo(this._mc.tx,this._mc.ty+this._mc.ch)),e.faceRight&&(this.context.moveTo(this._mc.tx+this._mc.cw,this._mc.ty),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty+this._mc.ch)),this.context.stroke()),this._mc.tx+=this.map.tileWidth}this._mc.tx=this._mc.dx,this._mc.ty+=this.map.tileHeight}},Object.defineProperty(b.TilemapLayer.prototype,"scrollX",{get:function(){return this._mc.x},set:function(a){a!==this._mc.x&&a>=0&&this.layer.widthInPixels>this.width&&(this._mc.x=a,this._mc.x>this.layer.widthInPixels-this.width&&(this._mc.x=this.layer.widthInPixels-this.width),this._mc.startX=this.game.math.floor(this._mc.x/this.map.tileWidth),this._mc.startX<0&&(this._mc.startX=0),this._mc.startX+this._mc.maxX>this.layer.width&&(this._mc.startX=this.layer.width-this._mc.maxX),this.dirty=!0)}}),Object.defineProperty(b.TilemapLayer.prototype,"scrollY",{get:function(){return this._mc.y},set:function(a){a!==this._mc.y&&a>=0&&this.layer.heightInPixels>this.height&&(this._mc.y=a,this._mc.y>this.layer.heightInPixels-this.height&&(this._mc.y=this.layer.heightInPixels-this.height),this._mc.startY=this.game.math.floor(this._mc.y/this.map.tileHeight),this._mc.startY<0&&(this._mc.startY=0),this._mc.startY+this._mc.maxY>this.layer.height&&(this._mc.startY=this.layer.height-this._mc.maxY),this.dirty=!0)}}),Object.defineProperty(b.TilemapLayer.prototype,"collisionWidth",{get:function(){return this._mc.cw},set:function(a){this._mc.cw=a,this.dirty=!0}}),Object.defineProperty(b.TilemapLayer.prototype,"collisionHeight",{get:function(){return this._mc.ch},set:function(a){this._mc.ch=a,this.dirty=!0}}),b.TilemapParser={parse:function(a,c,d,e,f,g){if("undefined"==typeof d&&(d=32),"undefined"==typeof e&&(e=32),"undefined"==typeof f&&(f=10),"undefined"==typeof g&&(g=10),"undefined"==typeof c)return this.getEmptyData();if(null===c)return this.getEmptyData(d,e,f,g);var h=a.cache.getTilemapData(c);if(h){if(h.format===b.Tilemap.CSV)return this.parseCSV(c,h.data,d,e);if(!h.format||h.format===b.Tilemap.TILED_JSON)return this.parseTiledJSON(h.data)}else console.warn("Phaser.TilemapParser.parse - No map data found for key "+c)},parseCSV:function(a,c,d,e){var f=this.getEmptyData();c=c.trim();for(var g=[],h=c.split("\n"),i=h.length,j=0,k=0;kj;j++)h.push(a.layers[e].data[j]>0?new b.Tile(f,a.layers[e].data[j],g,i.length,a.tilewidth,a.tileheight):null),g++,g===a.layers[e].width&&(i.push(h),g=0,h=[]);f.data=i,d.push(f)}c.layers=d;for(var l=[],e=0;es;s++)if(a.layers[e].objects[s].gid){var t={gid:a.layers[e].objects[s].gid,name:a.layers[e].objects[s].name,x:a.layers[e].objects[s].x,y:a.layers[e].objects[s].y,visible:a.layers[e].objects[s].visible,properties:a.layers[e].objects[s].properties};q[a.layers[e].name].push(t)}else if(a.layers[e].objects[s].polyline){var t={name:a.layers[e].objects[s].name,x:a.layers[e].objects[s].x,y:a.layers[e].objects[s].y,width:a.layers[e].objects[s].width,height:a.layers[e].objects[s].height,visible:a.layers[e].objects[s].visible,properties:a.layers[e].objects[s].properties};t.polyline=[];for(var u=0;u=c)&&(c=32),("undefined"==typeof d||0>=d)&&(d=32),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=0),this.name=a,this.firstgid=b,this.tileWidth=c,this.tileHeight=d,this.tileMargin=e,this.tileSpacing=f,this.properties=g,this.image=null,this.rows=0,this.columns=0,this.total=0,this.drawCoords=[]},b.Tileset.prototype={draw:function(a,b,c,d){this.image&&this.drawCoords[d]&&a.drawImage(this.image,this.drawCoords[d][0],this.drawCoords[d][1],this.tileWidth,this.tileHeight,b,c,this.tileWidth,this.tileHeight)},setImage:function(a){this.image=a,this.rows=Math.round((a.height-this.tileMargin)/(this.tileHeight+this.tileSpacing)),this.columns=Math.round((a.width-this.tileMargin)/(this.tileWidth+this.tileSpacing)),this.total=this.rows*this.columns,this.drawCoords.length=0;for(var b=this.tileMargin,c=this.tileMargin,d=this.firstgid,e=0;e0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},pad:function(a,b,c,d){if("undefined"==typeof b)var b=0;if("undefined"==typeof c)var c=" ";if("undefined"==typeof d)var d=3;var e=0;if(b+1>=a.length)switch(d){case 1:a=new Array(b+1-a.length).join(c)+a;break;case 3:var f=Math.ceil((e=b-a.length)/2),g=e-f;a=new Array(g+1).join(c)+a+new Array(f+1).join(c);break;default:a+=new Array(b+1-a.length).join(c)}return a},isPlainObject:function(a){if("object"!=typeof a||a.nodeType||a===a.window)return!1;try{if(a.constructor&&!{}.hasOwnProperty.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},extend:function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for("boolean"==typeof h&&(k=h,h=arguments[1]||{},i=2),j===i&&(h=this,--i);j>i;i++)if(null!=(a=arguments[i]))for(c in a)d=h[c],e=a[c],h!==e&&(k&&e&&(b.Utils.isPlainObject(e)||(f=Array.isArray(e)))?(f?(f=!1,g=d&&Array.isArray(d)?d:[]):g=d&&b.Utils.isPlainObject(d)?d:{},h[c]=b.Utils.extend(k,g,e)):void 0!==e&&(h[c]=e));return h}},"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),Array.isArray||(Array.isArray=function(a){return"[object Array]"==Object.prototype.toString.call(a)}),Array.prototype.forEach||(Array.prototype.forEach=function(a){"use strict";if(void 0===this||null===this)throw new TypeError;var b=Object(this),c=b.length>>>0;if("function"!=typeof a)throw new TypeError;for(var d=arguments.length>=2?arguments[1]:void 0,e=0;c>e;e++)e in b&&a.call(d,b[e],e,b)}),"function"!=typeof window.Uint32Array){var c=function(a){var b=new Array;window[a]=function(a){if("number"==typeof a){Array.call(this,a),this.length=a;for(var b=0;b0?.5*c:0},b.Circle.prototype={circumference:function(){return 2*Math.PI*this._radius},setTo:function(a,b,c){return this.x=a,this.y=b,this._diameter=c,this._radius=.5*c,this},copyFrom:function(a){return this.setTo(a.x,a.y,a.diameter)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.diameter=this._diameter,a},distance:function(a,c){return"undefined"==typeof c&&(c=!1),c?b.Math.distanceRounded(this.x,this.y,a.x,a.y):b.Math.distance(this.x,this.y,a.x,a.y)},clone:function(a){return"undefined"==typeof a?a=new b.Circle(this.x,this.y,this.diameter):a.setTo(this.x,this.y,this.diameter),a},contains:function(a,c){return b.Circle.contains(this,a,c)},circumferencePoint:function(a,c,d){return b.Circle.circumferencePoint(this,a,c,d)},offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},toString:function(){return"[{Phaser.Circle (x="+this.x+" y="+this.y+" diameter="+this.diameter+" radius="+this.radius+")}]"}},b.Circle.prototype.constructor=b.Circle,Object.defineProperty(b.Circle.prototype,"diameter",{get:function(){return this._diameter},set:function(a){a>0&&(this._diameter=a,this._radius=.5*a)}}),Object.defineProperty(b.Circle.prototype,"radius",{get:function(){return this._radius},set:function(a){a>0&&(this._radius=a,this._diameter=2*a)}}),Object.defineProperty(b.Circle.prototype,"left",{get:function(){return this.x-this._radius},set:function(a){a>this.x?(this._radius=0,this._diameter=0):this.radius=this.x-a}}),Object.defineProperty(b.Circle.prototype,"right",{get:function(){return this.x+this._radius},set:function(a){athis.y?(this._radius=0,this._diameter=0):this.radius=this.y-a}}),Object.defineProperty(b.Circle.prototype,"bottom",{get:function(){return this.y+this._radius},set:function(a){a0?Math.PI*this._radius*this._radius:0}}),Object.defineProperty(b.Circle.prototype,"empty",{get:function(){return 0===this._diameter},set:function(a){a===!0&&this.setTo(0,0,0)}}),b.Circle.contains=function(a,b,c){if(a.radius>0&&b>=a.left&&b<=a.right&&c>=a.top&&c<=a.bottom){var d=(a.x-b)*(a.x-b),e=(a.y-c)*(a.y-c);return d+e<=a.radius*a.radius}return!1},b.Circle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.diameter==b.diameter},b.Circle.intersects=function(a,c){return b.Math.distance(a.x,a.y,c.x,c.y)<=a.radius+c.radius},b.Circle.circumferencePoint=function(a,c,d,e){return"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=new b.Point),d===!0&&(c=b.Math.degToRad(c)),e.x=a.x+a.radius*Math.cos(c),e.y=a.y+a.radius*Math.sin(c),e},b.Circle.intersectsRectangle=function(a,b){var c=Math.abs(a.x-b.x-b.halfWidth),d=b.halfWidth+a.radius;if(c>d)return!1;var e=Math.abs(a.y-b.y-b.halfHeight),f=b.halfHeight+a.radius;if(e>f)return!1;if(c<=b.halfWidth||e<=b.halfHeight)return!0;var g=c-b.halfWidth,h=e-b.halfHeight,i=g*g,j=h*h,k=a.radius*a.radius;return k>=i+j},PIXI.Circle=b.Circle,b.Point=function(a,b){a=a||0,b=b||0,this.x=a,this.y=b},b.Point.prototype={copyFrom:function(a){return this.setTo(a.x,a.y)},invert:function(){return this.setTo(this.y,this.x)},setTo:function(a,b){return this.x=a||0,this.y=b||(0!==b?this.x:0),this},set:function(a,b){return this.x=a||0,this.y=b||(0!==b?this.x:0),this},add:function(a,b){return this.x+=a,this.y+=b,this},subtract:function(a,b){return this.x-=a,this.y-=b,this},multiply:function(a,b){return this.x*=a,this.y*=b,this},divide:function(a,b){return this.x/=a,this.y/=b,this},clampX:function(a,c){return this.x=b.Math.clamp(this.x,a,c),this},clampY:function(a,c){return this.y=b.Math.clamp(this.y,a,c),this},clamp:function(a,c){return this.x=b.Math.clamp(this.x,a,c),this.y=b.Math.clamp(this.y,a,c),this},clone:function(a){return"undefined"==typeof a?a=new b.Point(this.x,this.y):a.setTo(this.x,this.y),a},copyTo:function(a){return a.x=this.x,a.y=this.y,a},distance:function(a,c){return b.Point.distance(this,a,c)},equals:function(a){return a.x===this.x&&a.y===this.y},angle:function(a){return Math.atan2(this.x*a.y-this.y*a.x,this.x*a.x+this.y*a.y)},angleSq:function(a){return this.subtract(a).angle(a.subtract(this))},rotate:function(a,c,d,e,f){return b.Point.rotate(this,a,c,d,e,f)},getMagnitude:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},getMagnitudeSq:function(){return this.x*this.x+this.y*this.y},setMagnitude:function(a){return this.normalize().multiply(a,a)},normalize:function(){if(!this.isZero()){var a=this.getMagnitude();this.x/=a,this.y/=a}return this},isZero:function(){return 0===this.x&&0===this.y},dot:function(a){return this.x*a.x+this.y*a.y},cross:function(a){return this.x*a.y-this.y*a.x},perp:function(){return this.setTo(-this.y,this.x)},rperp:function(){return this.setTo(this.y,-this.x)},normalRightHand:function(){return this.setTo(-1*this.y,this.x)},toString:function(){return"[{Point (x="+this.x+" y="+this.y+")}]"}},b.Point.prototype.constructor=b.Point,b.Point.add=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x+c.x,d.y=a.y+c.y,d},b.Point.subtract=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x-c.x,d.y=a.y-c.y,d},b.Point.multiply=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x*c.x,d.y=a.y*c.y,d},b.Point.divide=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x/c.x,d.y=a.y/c.y,d},b.Point.equals=function(a,b){return a.x===b.x&&a.y===b.y},b.Point.angle=function(a,b){return Math.atan2(a.x*b.y-a.y*b.x,a.x*b.x+a.y*b.y)},b.Point.angleSq=function(a,b){return a.subtract(b).angle(b.subtract(a))},b.Point.negative=function(a,c){return"undefined"==typeof c&&(c=new b.Point),c.setTo(-a.x,-a.y)},b.Point.multiplyAdd=function(a,c,d,e){return"undefined"==typeof e&&(e=new b.Point),e.setTo(a.x+c.x*d,a.y+c.y*d)},b.Point.interpolate=function(a,c,d,e){return"undefined"==typeof e&&(e=new b.Point),e.setTo(a.x+(c.x-a.x)*d,a.y+(c.y-a.y)*d)},b.Point.perp=function(a,c){return"undefined"==typeof c&&(c=new b.Point),c.setTo(-a.y,a.x)},b.Point.rperp=function(a,c){return"undefined"==typeof c&&(c=new b.Point),c.setTo(a.y,-a.x)},b.Point.distance=function(a,c,d){return"undefined"==typeof d&&(d=!1),d?b.Math.distanceRounded(a.x,a.y,c.x,c.y):b.Math.distance(a.x,a.y,c.x,c.y)},b.Point.project=function(a,c,d){"undefined"==typeof d&&(d=new b.Point);var e=a.dot(c)/c.getMagnitudeSq();return 0!==e&&d.setTo(e*c.x,e*c.y),d},b.Point.projectUnit=function(a,c,d){"undefined"==typeof d&&(d=new b.Point);var e=a.dot(c);return 0!==e&&d.setTo(e*c.x,e*c.y),d},b.Point.normalRightHand=function(a,c){return"undefined"==typeof c&&(c=new b.Point),c.setTo(-1*a.y,a.x)},b.Point.normalize=function(a,c){"undefined"==typeof c&&(c=new b.Point);var d=a.getMagnitude();return 0!==d&&c.setTo(a.x/d,a.y/d),c},b.Point.rotate=function(a,c,d,e,f,g){return f=f||!1,g=g||null,f&&(e=b.Math.degToRad(e)),null===g&&(g=Math.sqrt((c-a.x)*(c-a.x)+(d-a.y)*(d-a.y))),a.setTo(c+g*Math.cos(e),d+g*Math.sin(e))},b.Point.centroid=function(a,c){if("undefined"==typeof c&&(c=new b.Point),"[object Array]"!==Object.prototype.toString.call(a))throw new Error("Phaser.Point. Parameter 'points' must be an array");var d=a.length;if(1>d)throw new Error("Phaser.Point. Parameter 'points' array must not be empty");if(1===d)return c.copyFrom(a[0]),c;for(var e=0;d>e;e++)b.Point.add(c,a[e],c);return c.divide(d,d),c},PIXI.Point=b.Point,b.Rectangle=function(a,b,c,d){a=a||0,b=b||0,c=c||0,d=d||0,this.x=a,this.y=b,this.width=c,this.height=d},b.Rectangle.prototype={offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},setTo:function(a,b,c,d){return this.x=a,this.y=b,this.width=c,this.height=d,this},floor:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y)},floorAll:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.width=Math.floor(this.width),this.height=Math.floor(this.height)},copyFrom:function(a){return this.setTo(a.x,a.y,a.width,a.height)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.width=this.width,a.height=this.height,a},inflate:function(a,c){return b.Rectangle.inflate(this,a,c)},size:function(a){return b.Rectangle.size(this,a)},clone:function(a){return b.Rectangle.clone(this,a)},contains:function(a,c){return b.Rectangle.contains(this,a,c)},containsRect:function(a){return b.Rectangle.containsRect(this,a)},equals:function(a){return b.Rectangle.equals(this,a)},intersection:function(a,c){return b.Rectangle.intersection(this,a,c)},intersects:function(a,c){return b.Rectangle.intersects(this,a,c)},intersectsRaw:function(a,c,d,e,f){return b.Rectangle.intersectsRaw(this,a,c,d,e,f)},union:function(a,c){return b.Rectangle.union(this,a,c)},toString:function(){return"[{Rectangle (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+" empty="+this.empty+")}]"}},Object.defineProperty(b.Rectangle.prototype,"halfWidth",{get:function(){return Math.round(this.width/2)}}),Object.defineProperty(b.Rectangle.prototype,"halfHeight",{get:function(){return Math.round(this.height/2)}}),Object.defineProperty(b.Rectangle.prototype,"bottom",{get:function(){return this.y+this.height},set:function(a){this.height=a<=this.y?0:this.y-a}}),Object.defineProperty(b.Rectangle.prototype,"bottomRight",{get:function(){return new b.Point(this.right,this.bottom)},set:function(a){this.right=a.x,this.bottom=a.y}}),Object.defineProperty(b.Rectangle.prototype,"left",{get:function(){return this.x},set:function(a){this.width=a>=this.right?0:this.right-a,this.x=a}}),Object.defineProperty(b.Rectangle.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=a<=this.x?0:this.x+a}}),Object.defineProperty(b.Rectangle.prototype,"volume",{get:function(){return this.width*this.height}}),Object.defineProperty(b.Rectangle.prototype,"perimeter",{get:function(){return 2*this.width+2*this.height}}),Object.defineProperty(b.Rectangle.prototype,"centerX",{get:function(){return this.x+this.halfWidth},set:function(a){this.x=a-this.halfWidth}}),Object.defineProperty(b.Rectangle.prototype,"centerY",{get:function(){return this.y+this.halfHeight},set:function(a){this.y=a-this.halfHeight}}),Object.defineProperty(b.Rectangle.prototype,"top",{get:function(){return this.y},set:function(a){a>=this.bottom?(this.height=0,this.y=a):this.height=this.bottom-a}}),Object.defineProperty(b.Rectangle.prototype,"topLeft",{get:function(){return new b.Point(this.x,this.y)},set:function(a){this.x=a.x,this.y=a.y}}),Object.defineProperty(b.Rectangle.prototype,"empty",{get:function(){return!this.width||!this.height},set:function(a){a===!0&&this.setTo(0,0,0,0)}}),b.Rectangle.prototype.constructor=b.Rectangle,b.Rectangle.inflate=function(a,b,c){return a.x-=b,a.width+=2*b,a.y-=c,a.height+=2*c,a},b.Rectangle.inflatePoint=function(a,c){return b.Rectangle.inflate(a,c.x,c.y)},b.Rectangle.size=function(a,c){return"undefined"==typeof c?c=new b.Point(a.width,a.height):c.setTo(a.width,a.height),c},b.Rectangle.clone=function(a,c){return"undefined"==typeof c?c=new b.Rectangle(a.x,a.y,a.width,a.height):c.setTo(a.x,a.y,a.width,a.height),c},b.Rectangle.contains=function(a,b,c){return a.width<=0||a.height<=0?!1:b>=a.x&&b<=a.right&&c>=a.y&&c<=a.bottom},b.Rectangle.containsRaw=function(a,b,c,d,e,f){return e>=a&&a+c>=e&&f>=b&&b+d>=f},b.Rectangle.containsPoint=function(a,c){return b.Rectangle.contains(a,c.x,c.y)},b.Rectangle.containsRect=function(a,b){return a.volume>b.volume?!1:a.x>=b.x&&a.y>=b.y&&a.right<=b.right&&a.bottom<=b.bottom},b.Rectangle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.width==b.width&&a.height==b.height},b.Rectangle.intersection=function(a,c,d){return"undefined"==typeof d&&(d=new b.Rectangle),b.Rectangle.intersects(a,c)&&(d.x=Math.max(a.x,c.x),d.y=Math.max(a.y,c.y),d.width=Math.min(a.right,c.right)-d.x,d.height=Math.min(a.bottom,c.bottom)-d.y),d},b.Rectangle.intersects=function(a,b){return a.width<=0||a.height<=0||b.width<=0||b.height<=0?!1:!(a.rightb.right||a.y>b.bottom)},b.Rectangle.intersectsRaw=function(a,b,c,d,e,f){return"undefined"==typeof f&&(f=0),!(b>a.right+f||ca.bottom+f||e=c&&d>=a&&b>=e&&f>=b},coordinatesOnLine:function(a,b){"undefined"==typeof a&&(a=1),"undefined"==typeof b&&(b=[]);var c=Math.round(this.start.x),d=Math.round(this.start.y),e=Math.round(this.end.x),f=Math.round(this.end.y),g=Math.abs(e-c),h=Math.abs(f-d),i=e>c?1:-1,j=f>d?1:-1,k=g-h;b.push([c,d]);for(var l=1;c!=e||d!=f;){var m=k<<1;m>-h&&(k-=h,c+=i),g>m&&(k+=g,d+=j),l%a===0&&b.push([c,d]),l++}return b}},Object.defineProperty(b.Line.prototype,"length",{get:function(){return Math.sqrt((this.end.x-this.start.x)*(this.end.x-this.start.x)+(this.end.y-this.start.y)*(this.end.y-this.start.y))}}),Object.defineProperty(b.Line.prototype,"angle",{get:function(){return Math.atan2(this.end.y-this.start.y,this.end.x-this.start.x)}}),Object.defineProperty(b.Line.prototype,"slope",{get:function(){return(this.end.y-this.start.y)/(this.end.x-this.start.x)}}),Object.defineProperty(b.Line.prototype,"perpSlope",{get:function(){return-((this.end.x-this.start.x)/(this.end.y-this.start.y))}}),Object.defineProperty(b.Line.prototype,"x",{get:function(){return Math.min(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"y",{get:function(){return Math.min(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"left",{get:function(){return Math.min(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"right",{get:function(){return Math.max(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"top",{get:function(){return Math.min(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"bottom",{get:function(){return Math.max(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"width",{get:function(){return Math.abs(this.start.x-this.end.x)}}),Object.defineProperty(b.Line.prototype,"height",{get:function(){return Math.abs(this.start.y-this.end.y)}}),b.Line.intersectsPoints=function(a,c,d,e,f,g){"undefined"==typeof f&&(f=!0),"undefined"==typeof g&&(g=new b.Point);var h=c.y-a.y,i=e.y-d.y,j=a.x-c.x,k=d.x-e.x,l=c.x*a.y-a.x*c.y,m=e.x*d.y-d.x*e.y,n=h*k-i*j;if(0===n)return null;if(g.x=(j*m-k*l)/n,g.y=(i*l-h*m)/n,f){if(Math.pow(g.x-c.x+(g.y-c.y),2)>Math.pow(a.x-c.x+(a.y-c.y),2))return null;if(Math.pow(g.x-a.x+(g.y-a.y),2)>Math.pow(a.x-c.x+(a.y-c.y),2))return null;if(Math.pow(g.x-e.x+(g.y-e.y),2)>Math.pow(d.x-e.x+(d.y-e.y),2))return null;if(Math.pow(g.x-d.x+(g.y-d.y),2)>Math.pow(d.x-e.x+(d.y-e.y),2))return null}return g},b.Line.intersects=function(a,c,d,e){return b.Line.intersectsPoints(a.start,a.end,c.start,c.end,d,e)},b.Ellipse=function(a,c,d,e){this.type=b.ELLIPSE,a=a||0,c=c||0,d=d||0,e=e||0,this.x=a,this.y=c,this.width=d,this.height=e},b.Ellipse.prototype={setTo:function(a,b,c,d){return this.x=a,this.y=b,this.width=c,this.height=d,this},copyFrom:function(a){return this.setTo(a.x,a.y,a.width,a.height)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.width=this.width,a.height=this.height,a},clone:function(a){return"undefined"==typeof a?a=new b.Ellipse(this.x,this.y,this.width,this.height):a.setTo(this.x,this.y,this.width,this.height),a},contains:function(a,c){return b.Ellipse.contains(this,a,c)},toString:function(){return"[{Phaser.Ellipse (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+")}]"}},b.Ellipse.prototype.constructor=b.Ellipse,Object.defineProperty(b.Ellipse.prototype,"left",{get:function(){return this.x},set:function(a){this.x=a}}),Object.defineProperty(b.Ellipse.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=ad+e},b.Ellipse.prototype.getBounds=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Ellipse=b.Ellipse,b.Polygon=function(a){if(this.type=b.POLYGON,a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var c=[],d=0,e=a.length;e>d;d+=2)c.push(new b.Point(a[d],a[d+1]));a=c}this.points=a},b.Polygon.prototype={clone:function(){for(var a=[],c=0;cb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!c)}return c}},b.Polygon.prototype.constructor=b.Polygon,PIXI.Polygon=b.Polygon,b.Camera=function(a,c,d,e,f,g){this.game=a,this.world=a.world,this.id=0,this.view=new b.Rectangle(d,e,f,g),this.screenView=new b.Rectangle(d,e,f,g),this.bounds=new b.Rectangle(d,e,f,g),this.deadzone=null,this.visible=!0,this.atLimit={x:!1,y:!1},this.target=null,this._edge=0,this.displayObject=null,this.scale=null},b.Camera.FOLLOW_LOCKON=0,b.Camera.FOLLOW_PLATFORMER=1,b.Camera.FOLLOW_TOPDOWN=2,b.Camera.FOLLOW_TOPDOWN_TIGHT=3,b.Camera.prototype={follow:function(a,c){"undefined"==typeof c&&(c=b.Camera.FOLLOW_LOCKON),this.target=a;var d;switch(c){case b.Camera.FOLLOW_PLATFORMER:var e=this.width/8,f=this.height/3;this.deadzone=new b.Rectangle((this.width-e)/2,(this.height-f)/2-.25*f,e,f);break;case b.Camera.FOLLOW_TOPDOWN:d=Math.max(this.width,this.height)/4,this.deadzone=new b.Rectangle((this.width-d)/2,(this.height-d)/2,d,d);break;case b.Camera.FOLLOW_TOPDOWN_TIGHT:d=Math.max(this.width,this.height)/8,this.deadzone=new b.Rectangle((this.width-d)/2,(this.height-d)/2,d,d);break;case b.Camera.FOLLOW_LOCKON:this.deadzone=null;break;default:this.deadzone=null}},unfollow:function(){this.target=null},focusOn:function(a){this.setPosition(Math.round(a.x-this.view.halfWidth),Math.round(a.y-this.view.halfHeight))},focusOnXY:function(a,b){this.setPosition(Math.round(a-this.view.halfWidth),Math.round(b-this.view.halfHeight))},update:function(){this.target&&this.updateTarget(),this.bounds&&this.checkBounds(),this.displayObject.position.x=-this.view.x,this.displayObject.position.y=-this.view.y},updateTarget:function(){this.deadzone?(this._edge=this.target.x-this.deadzone.x,this.view.x>this._edge&&(this.view.x=this._edge),this._edge=this.target.x+this.target.width-this.deadzone.x-this.deadzone.width,this.view.xthis._edge&&(this.view.y=this._edge),this._edge=this.target.y+this.target.height-this.deadzone.y-this.deadzone.height,this.view.y=this.bounds.right&&(this.atLimit.x=!0,this.view.x=this.bounds.right-this.width),this.view.y<=this.bounds.top&&(this.atLimit.y=!0,this.view.y=this.bounds.top),this.view.bottom>=this.bounds.bottom&&(this.atLimit.y=!0,this.view.y=this.bounds.bottom-this.height),this.view.floor()},setPosition:function(a,b){this.view.x=a,this.view.y=b,this.bounds&&this.checkBounds()},setSize:function(a,b){this.view.width=a,this.view.height=b},reset:function(){this.target=null,this.view.x=0,this.view.y=0}},b.Camera.prototype.constructor=b.Camera,Object.defineProperty(b.Camera.prototype,"x",{get:function(){return this.view.x},set:function(a){this.view.x=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(b.Camera.prototype,"y",{get:function(){return this.view.y},set:function(a){this.view.y=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(b.Camera.prototype,"width",{get:function(){return this.view.width},set:function(a){this.view.width=a}}),Object.defineProperty(b.Camera.prototype,"height",{get:function(){return this.view.height},set:function(a){this.view.height=a}}),b.State=function(){this.game=null,this.add=null,this.make=null,this.camera=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.sound=null,this.scale=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.particles=null,this.physics=null,this.rnd=null},b.State.prototype={preload:function(){},loadUpdate:function(){},loadRender:function(){},create:function(){},update:function(){},render:function(){},paused:function(){},pauseUpdate:function(){},shutdown:function(){}},b.State.prototype.constructor=b.State,b.StateManager=function(a,b){this.game=a,this.states={},this._pendingState=null,"undefined"!=typeof b&&null!==b&&(this._pendingState=b),this._clearWorld=!1,this._clearCache=!1,this._created=!1,this._args=[],this.current="",this.onInitCallback=null,this.onPreloadCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPreRenderCallback=null,this.onLoadUpdateCallback=null,this.onLoadRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onPauseUpdateCallback=null,this.onShutDownCallback=null},b.StateManager.prototype={boot:function(){this.game.onPause.add(this.pause,this),this.game.onResume.add(this.resume,this),this.game.load.onLoadComplete.add(this.loadComplete,this),null!==this._pendingState&&("string"==typeof this._pendingState?this.start(this._pendingState,!1,!1):this.add("default",this._pendingState,!0))},add:function(a,c,d){"undefined"==typeof d&&(d=!1);var e;return c instanceof b.State?e=c:"object"==typeof c?(e=c,e.game=this.game):"function"==typeof c&&(e=new c(this.game)),this.states[a]=e,d&&(this.game.isBooted?this.start(a):this._pendingState=a),e},remove:function(a){this.current===a&&(this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onPauseUpdateCallback=null),delete this.states[a]},start:function(a,b,c){"undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=!1),this.checkState(a)&&(this._pendingState=a,this._clearWorld=b,this._clearCache=c,arguments.length>3&&(this._args=Array.prototype.splice.call(arguments,3)))},restart:function(a,b){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!1),this._pendingState=this.current,this._clearWorld=a,this._clearCache=b,arguments.length>2&&(this._args=Array.prototype.splice.call(arguments,2))},dummy:function(){},preUpdate:function(){this._pendingState&&this.game.isBooted&&(this.current&&(this.onShutDownCallback.call(this.callbackContext,this.game),this.game.tweens.removeAll(),this.game.camera.reset(),this.game.input.reset(!0),this.game.physics.clear(),this.game.time.removeAll(),this._clearWorld&&(this.game.world.shutdown(),this._clearCache===!0&&this.game.cache.destroy())),this.setCurrentState(this._pendingState),this.onPreloadCallback?(this.game.load.reset(),this.onPreloadCallback.call(this.callbackContext,this.game),0===this.game.load.totalQueuedFiles()?this.loadComplete():this.game.load.start()):this.loadComplete(),this.current===this._pendingState&&(this._pendingState=null))},checkState:function(a){if(this.states[a]){var b=!1;return this.states[a].preload&&(b=!0),this.states[a].create&&(b=!0),this.states[a].update&&(b=!0),this.states[a].render&&(b=!0),b===!1?(console.warn("Invalid Phaser State object given. Must contain at least a one of the required functions: preload, create, update or render"),!1):!0}return console.warn("Phaser.StateManager - No state found with the key: "+a),!1},link:function(a){this.states[a].game=this.game,this.states[a].add=this.game.add,this.states[a].make=this.game.make,this.states[a].camera=this.game.camera,this.states[a].cache=this.game.cache,this.states[a].input=this.game.input,this.states[a].load=this.game.load,this.states[a].math=this.game.math,this.states[a].sound=this.game.sound,this.states[a].scale=this.game.scale,this.states[a].state=this,this.states[a].stage=this.game.stage,this.states[a].time=this.game.time,this.states[a].tweens=this.game.tweens,this.states[a].world=this.game.world,this.states[a].particles=this.game.particles,this.states[a].rnd=this.game.rnd,this.states[a].physics=this.game.physics},setCurrentState:function(a){this.callbackContext=this.states[a],this.link(a),this.onInitCallback=this.states[a].init||this.dummy,this.onPreloadCallback=this.states[a].preload||null,this.onLoadRenderCallback=this.states[a].loadRender||null,this.onLoadUpdateCallback=this.states[a].loadUpdate||null,this.onCreateCallback=this.states[a].create||null,this.onUpdateCallback=this.states[a].update||null,this.onPreRenderCallback=this.states[a].preRender||null,this.onRenderCallback=this.states[a].render||null,this.onPausedCallback=this.states[a].paused||null,this.onResumedCallback=this.states[a].resumed||null,this.onPauseUpdateCallback=this.states[a].pauseUpdate||null,this.onShutDownCallback=this.states[a].shutdown||this.dummy,this.current=a,this._created=!1,this.onInitCallback.apply(this.callbackContext,this._args),this._args=[]},getCurrentState:function(){return this.states[this.current]},loadComplete:function(){this._created===!1&&this.onCreateCallback?(this._created=!0,this.onCreateCallback.call(this.callbackContext,this.game)):this._created=!0},pause:function(){this._created&&this.onPausedCallback&&this.onPausedCallback.call(this.callbackContext,this.game)},resume:function(){this._created&&this.onResumedCallback&&this.onResumedCallback.call(this.callbackContext,this.game)},update:function(){this._created&&this.onUpdateCallback?this.onUpdateCallback.call(this.callbackContext,this.game):this.onLoadUpdateCallback&&this.onLoadUpdateCallback.call(this.callbackContext,this.game)},pauseUpdate:function(){this._created&&this.onPauseUpdateCallback?this.onPauseUpdateCallback.call(this.callbackContext,this.game):this.onLoadUpdateCallback&&this.onLoadUpdateCallback.call(this.callbackContext,this.game)},preRender:function(){this.onPreRenderCallback&&this.onPreRenderCallback.call(this.callbackContext,this.game)},render:function(){this._created&&this.onRenderCallback?(this.game.renderType===b.CANVAS&&(this.game.context.save(),this.game.context.setTransform(1,0,0,1,0,0)),this.onRenderCallback.call(this.callbackContext,this.game),this.game.renderType===b.CANVAS&&this.game.context.restore()):this.onLoadRenderCallback&&this.onLoadRenderCallback.call(this.callbackContext,this.game)},destroy:function(){this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onPauseUpdateCallback=null,this.game=null,this.states={},this._pendingState=null}},b.StateManager.prototype.constructor=b.StateManager,b.LinkedList=function(){this.next=null,this.prev=null,this.first=null,this.last=null,this.total=0},b.LinkedList.prototype={add:function(a){return 0===this.total&&null===this.first&&null===this.last?(this.first=a,this.last=a,this.next=a,a.prev=this,this.total++,a):(this.last.next=a,a.prev=this.last,this.last=a,this.total++,a) +},reset:function(){this.first=null,this.last=null,this.next=null,this.prev=null,this.total=0},remove:function(a){return 1===this.total?(this.reset(),void(a.next=a.prev=null)):(a===this.first?this.first=this.first.next:a===this.last&&(this.last=this.last.prev),a.prev&&(a.prev.next=a.next),a.next&&(a.next.prev=a.prev),a.next=a.prev=null,null===this.first&&(this.last=null),void this.total--)},callAll:function(a){if(this.first&&this.last){var b=this.first;do b&&b[a]&&b[a].call(b),b=b.next;while(b!=this.last.next)}}},b.LinkedList.prototype.constructor=b.LinkedList,b.ArrayList=function(){this.total=0,this.position=0,this.list=[]},b.ArrayList.prototype={add:function(a){return this.exists(a)||(this.list.push(a),this.total++),a},getIndex:function(a){return this.list.indexOf(a)},exists:function(a){return this.list.indexOf(a)>-1},reset:function(){this.list.length=0,this.total=0},remove:function(a){var b=this.list.indexOf(a);return b>-1?(this.list.splice(b,1),this.total--,a):void 0},callAll:function(a){for(var b=Array.prototype.splice.call(arguments,1),c=this.list.length;c--;)this.list[c]&&this.list[c][a]&&this.list[c][a].apply(this.list[c],b)}},Object.defineProperty(b.ArrayList.prototype,"first",{get:function(){return this.position=0,this.total>0?this.list[0]:null}}),Object.defineProperty(b.ArrayList.prototype,"next",{get:function(){return this.position0&&(this.uniforms.mouse.x=a.x.toFixed(2)),a.y>0&&(this.uniforms.mouse.y=a.y.toFixed(2))),this.uniforms.time.value=this.game.time.totalElapsedSeconds()},destroy:function(){this.game=null}},b.Filter.prototype.constructor=b.Filter,Object.defineProperty(b.Filter.prototype,"width",{get:function(){return this.uniforms.resolution.value.x},set:function(a){this.uniforms.resolution.value.x=a}}),Object.defineProperty(b.Filter.prototype,"height",{get:function(){return this.uniforms.resolution.value.y},set:function(a){this.uniforms.resolution.value.y=a}}),b.Plugin=function(a,b){"undefined"==typeof b&&(b=null),this.game=a,this.parent=b,this.active=!1,this.visible=!1,this.hasPreUpdate=!1,this.hasUpdate=!1,this.hasPostUpdate=!1,this.hasRender=!1,this.hasPostRender=!1},b.Plugin.prototype={preUpdate:function(){},update:function(){},render:function(){},postRender:function(){},destroy:function(){this.game=null,this.parent=null,this.active=!1,this.visible=!1}},b.Plugin.prototype.constructor=b.Plugin,b.PluginManager=function(a){this.game=a,this.plugins=[],this._len=0,this._i=0},b.PluginManager.prototype={add:function(a){var b=!1;return"function"==typeof a?a=new a(this.game,this._parent):(a.game=this.game,a.parent=this),"function"==typeof a.preUpdate&&(a.hasPreUpdate=!0,b=!0),"function"==typeof a.update&&(a.hasUpdate=!0,b=!0),"function"==typeof a.postUpdate&&(a.hasPostUpdate=!0,b=!0),"function"==typeof a.render&&(a.hasRender=!0,b=!0),"function"==typeof a.postRender&&(a.hasPostRender=!0,b=!0),b?((a.hasPreUpdate||a.hasUpdate||a.hasPostUpdate)&&(a.active=!0),(a.hasRender||a.hasPostRender)&&(a.visible=!0),this._len=this.plugins.push(a),"function"==typeof a.init&&a.init(),a):null},remove:function(a){for(this._i=this._len;this._i--;)if(this.plugins[this._i]===a)return a.destroy(),this.plugins.splice(this._i,1),void this._len--},removeAll:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].destroy();this.plugins.length=0,this._len=0},preUpdate:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasPreUpdate&&this.plugins[this._i].preUpdate()},update:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasUpdate&&this.plugins[this._i].update()},postUpdate:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasPostUpdate&&this.plugins[this._i].postUpdate()},render:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].visible&&this.plugins[this._i].hasRender&&this.plugins[this._i].render()},postRender:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].visible&&this.plugins[this._i].hasPostRender&&this.plugins[this._i].postRender()},destroy:function(){this.removeAll(),this.game=null}},b.PluginManager.prototype.constructor=b.PluginManager,b.Stage=function(a,c,d){this.game=a,this.offset=new b.Point,PIXI.Stage.call(this,0,!1),this.name="_stage_root",this.interactive=!1,this.disableVisibilityChange=!1,this.checkOffsetInterval=2500,this.exists=!0,this.currentRenderOrderID=0,this._hiddenVar="hidden",this._nextOffsetCheck=0,this._backgroundColor=0,a.config?this.parseConfig(a.config):(this.game.canvas=b.Canvas.create(c,d),this.game.canvas.style["-webkit-full-screen"]="width: 100%; height: 100%")},b.Stage.prototype=Object.create(PIXI.Stage.prototype),b.Stage.prototype.constructor=b.Stage,b.Stage.prototype.preUpdate=function(){this.currentRenderOrderID=0;for(var a=this.children.length,b=0;a>b;b++)this.children[b].preUpdate()},b.Stage.prototype.update=function(){for(var a=this.children.length;a--;)this.children[a].update()},b.Stage.prototype.postUpdate=function(){if(this.game.world.camera.target){this.game.world.camera.target.postUpdate(),this.game.world.camera.update();for(var a=this.children.length;a--;)this.children[a]!==this.game.world.camera.target&&this.children[a].postUpdate()}else{this.game.world.camera.update();for(var a=this.children.length;a--;)this.children[a].postUpdate()}this.checkOffsetInterval!==!1&&this.game.time.now>this._nextOffsetCheck&&(b.Canvas.getOffset(this.game.canvas,this.offset),this._nextOffsetCheck=this.game.time.now+this.checkOffsetInterval)},b.Stage.prototype.parseConfig=function(a){this.game.canvas=a.canvasID?b.Canvas.create(this.game.width,this.game.height,a.canvasID):b.Canvas.create(this.game.width,this.game.height),a.canvasStyle?this.game.canvas.stlye=a.canvasStyle:this.game.canvas.style["-webkit-full-screen"]="width: 100%; height: 100%",a.checkOffsetInterval&&(this.checkOffsetInterval=a.checkOffsetInterval),a.disableVisibilityChange&&(this.disableVisibilityChange=a.disableVisibilityChange),a.fullScreenScaleMode&&(this.fullScreenScaleMode=a.fullScreenScaleMode),a.scaleMode&&(this.scaleMode=a.scaleMode),a.backgroundColor&&(this.backgroundColor=a.backgroundColor)},b.Stage.prototype.boot=function(){b.Canvas.getOffset(this.game.canvas,this.offset),this.bounds=new b.Rectangle(this.offset.x,this.offset.y,this.game.width,this.game.height);var a=this;this._onChange=function(b){return a.visibilityChange(b)},b.Canvas.setUserSelect(this.game.canvas,"none"),b.Canvas.setTouchAction(this.game.canvas,"none"),this.checkVisibility()},b.Stage.prototype.checkVisibility=function(){this._hiddenVar=void 0!==document.webkitHidden?"webkitvisibilitychange":void 0!==document.mozHidden?"mozvisibilitychange":void 0!==document.msHidden?"msvisibilitychange":void 0!==document.hidden?"visibilitychange":null,this._hiddenVar&&document.addEventListener(this._hiddenVar,this._onChange,!1),window.onpagehide=this._onChange,window.onpageshow=this._onChange,window.onblur=this._onChange,window.onfocus=this._onChange},b.Stage.prototype.visibilityChange=function(a){return this.disableVisibilityChange?void 0:"pagehide"===a.type||"blur"===a.type||"pageshow"===a.type||"focus"===a.type?void("pagehide"===a.type||"blur"===a.type?this.game.focusLoss(a):("pageshow"===a.type||"focus"===a.type)&&this.game.focusGain(a)):void(document.hidden||document.mozHidden||document.msHidden||document.webkitHidden?this.game.gamePaused(a):this.game.gameResumed(a))},b.Stage.prototype.setBackgroundColor=function(a){this._backgroundColor=a||0,this.backgroundColorSplit=PIXI.hex2rgb(this.backgroundColor);var b=this._backgroundColor.toString(16);b="000000".substr(0,6-b.length)+b,this.backgroundColorString="#"+b},Object.defineProperty(b.Stage.prototype,"backgroundColor",{get:function(){return this._backgroundColor},set:function(a){this._backgroundColor=a,this.game.transparent===!1&&("string"==typeof a&&(a=b.Color.hexToRGB(a)),this.setBackgroundColor(a))}}),Object.defineProperty(b.Stage.prototype,"smoothed",{get:function(){return!PIXI.scaleModes.LINEAR},set:function(a){PIXI.scaleModes.LINEAR=a?0:1}}),b.Group=function(a,c,d,e,f,g){"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=!1),"undefined"==typeof g&&(g=b.Physics.ARCADE),this.game=a,"undefined"==typeof c&&(c=a.world),this.name=d||"group",PIXI.DisplayObjectContainer.call(this),e?this.game.stage.addChild(this):c&&c.addChild(this),this.z=0,this.type=b.GROUP,this.alive=!0,this.exists=!0,this.classType=b.Sprite,this.scale=new b.Point(1,1),this.cursor=null,this.cameraOffset=new b.Point,this.enableBody=f,this.enableBodyDebug=!1,this.physicsBodyType=g,this._sortProperty="z",this._cache=[0,0,0,0,1,0,1,0,0,0]},b.Group.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),b.Group.prototype.constructor=b.Group,b.Group.RETURN_NONE=0,b.Group.RETURN_TOTAL=1,b.Group.RETURN_CHILD=2,b.Group.SORT_ASCENDING=-1,b.Group.SORT_DESCENDING=1,b.Group.prototype.add=function(a){return a.parent!==this&&(this.enableBody&&this.game.physics.enable(a,this.physicsBodyType),this.addChild(a),a.z=this.children.length,a.events&&a.events.onAddedToGroup.dispatch(a,this),null===this.cursor&&(this.cursor=a)),a},b.Group.prototype.addAt=function(a,b){return a.parent!==this&&(this.enableBody&&this.game.physics.enable(a,this.physicsBodyType),this.addChildAt(a,b),this.updateZ(),a.events&&a.events.onAddedToGroup.dispatch(a,this),null===this.cursor&&(this.cursor=a)),a},b.Group.prototype.getAt=function(a){return 0>a||a>=this.children.length?-1:this.getChildAt(a)},b.Group.prototype.create=function(a,b,c,d,e){"undefined"==typeof e&&(e=!0);var f=new this.classType(this.game,a,b,c,d);return this.enableBody&&this.game.physics.enable(f,this.physicsBodyType),f.exists=e,f.visible=e,f.alive=e,this.addChild(f),f.z=this.children.length,f.events&&f.events.onAddedToGroup.dispatch(f,this),null===this.cursor&&(this.cursor=f),f},b.Group.prototype.createMultiple=function(a,b,c,d){"undefined"==typeof d&&(d=!1);for(var e=0;a>e;e++)this.create(0,0,b,c,d)},b.Group.prototype.updateZ=function(){for(var a=this.children.length;a--;)this.children[a].z=a},b.Group.prototype.resetCursor=function(a){return"undefined"==typeof a&&(a=0),a>this.children.length-1&&(a=0),this.cursor?(this._cache[8]=a,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.next=function(){return this.cursor?(this._cache[8]>=this.children.length-1?this._cache[8]=0:this._cache[8]++,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.previous=function(){return this.cursor?(0===this._cache[8]?this._cache[8]=this.children.length-1:this._cache[8]--,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.swap=function(a,b){var c=this.swapChildren(a,b);return c&&this.updateZ(),c},b.Group.prototype.bringToTop=function(a){return a.parent===this&&this.getIndex(a)0&&(this.remove(a),this.addAt(a,0)),a},b.Group.prototype.moveUp=function(a){if(a.parent===this&&this.getIndex(a)0){var b=this.getIndex(a),c=this.getAt(b-1);c&&this.swap(a,c)}return a},b.Group.prototype.xy=function(a,b,c){return 0>a||a>this.children.length?-1:(this.getChildAt(a).x=b,void(this.getChildAt(a).y=c))},b.Group.prototype.reverse=function(){this.children.reverse(),this.updateZ()},b.Group.prototype.getIndex=function(a){return this.children.indexOf(a)},b.Group.prototype.replace=function(a,c){var d=this.getIndex(a);if(-1!==d){void 0!==c.parent&&(c.events.onRemovedFromGroup.dispatch(c,this),c.parent.removeChild(c),c.parent instanceof b.Group&&c.parent.updateZ());var e=a;return this.remove(e),this.addAt(c,d),e}},b.Group.prototype.setProperty=function(a,b,c,d){d=d||0;var e=b.length;1===e&&a.hasOwnProperty(b[0])?0===d?a[b[0]]=c:1==d?a[b[0]]+=c:2==d?a[b[0]]-=c:3==d?a[b[0]]*=c:4==d&&(a[b[0]]/=c):2===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])?0===d?a[b[0]][b[1]]=c:1==d?a[b[0]][b[1]]+=c:2==d?a[b[0]][b[1]]-=c:3==d?a[b[0]][b[1]]*=c:4==d&&(a[b[0]][b[1]]/=c):3===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])&&a[b[0]][b[1]].hasOwnProperty(b[2])?0===d?a[b[0]][b[1]][b[2]]=c:1==d?a[b[0]][b[1]][b[2]]+=c:2==d?a[b[0]][b[1]][b[2]]-=c:3==d?a[b[0]][b[1]][b[2]]*=c:4==d&&(a[b[0]][b[1]][b[2]]/=c):4===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])&&a[b[0]][b[1]].hasOwnProperty(b[2])&&a[b[0]][b[1]][b[2]].hasOwnProperty(b[3])&&(0===d?a[b[0]][b[1]][b[2]][b[3]]=c:1==d?a[b[0]][b[1]][b[2]][b[3]]+=c:2==d?a[b[0]][b[1]][b[2]][b[3]]-=c:3==d?a[b[0]][b[1]][b[2]][b[3]]*=c:4==d&&(a[b[0]][b[1]][b[2]][b[3]]/=c))},b.Group.prototype.set=function(a,b,c,d,e,f){b=b.split("."),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1),(d===!1||d&&a.alive)&&(e===!1||e&&a.visible)&&this.setProperty(a,b,c,f)},b.Group.prototype.setAll=function(a,b,c,d,e){a=a.split("."),"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1),e=e||0;for(var f=0,g=this.children.length;g>f;f++)(!c||c&&this.children[f].alive)&&(!d||d&&this.children[f].visible)&&this.setProperty(this.children[f],a,b,e)},b.Group.prototype.setAllChildren=function(a,c,d,e,f){"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1),f=f||0;for(var g=0,h=this.children.length;h>g;g++)(!d||d&&this.children[g].alive)&&(!e||e&&this.children[g].visible)&&(this.children[g]instanceof b.Group?this.children[g].setAllChildren(a,c,d,e,f):this.setProperty(this.children[g],a.split("."),c,f))},b.Group.prototype.addAll=function(a,b,c,d){this.setAll(a,b,c,d,1)},b.Group.prototype.subAll=function(a,b,c,d){this.setAll(a,b,c,d,2)},b.Group.prototype.multiplyAll=function(a,b,c,d){this.setAll(a,b,c,d,3)},b.Group.prototype.divideAll=function(a,b,c,d){this.setAll(a,b,c,d,4)},b.Group.prototype.callAllExists=function(a,b){for(var c=Array.prototype.splice.call(arguments,2),d=0,e=this.children.length;e>d;d++)this.children[d].exists===b&&this.children[d][a]&&this.children[d][a].apply(this.children[d],c)},b.Group.prototype.callbackFromArray=function(a,b,c){if(1==c){if(a[b[0]])return a[b[0]]}else if(2==c){if(a[b[0]][b[1]])return a[b[0]][b[1]]}else if(3==c){if(a[b[0]][b[1]][b[2]])return a[b[0]][b[1]][b[2]]}else if(4==c){if(a[b[0]][b[1]][b[2]][b[3]])return a[b[0]][b[1]][b[2]][b[3]]}else if(a[b])return a[b];return!1},b.Group.prototype.callAll=function(a,b){if("undefined"!=typeof a){a=a.split(".");var c=a.length;if("undefined"==typeof b||null===b||""===b)b=null;else if("string"==typeof b){b=b.split(".");var d=b.length}for(var e=Array.prototype.splice.call(arguments,2),f=null,g=null,h=0,i=this.children.length;i>h;h++)f=this.callbackFromArray(this.children[h],a,c),b&&f?(g=this.callbackFromArray(this.children[h],b,d),f&&f.apply(g,e)):f&&f.apply(this.children[h],e)}},b.Group.prototype.preUpdate=function(){if(!this.exists||!this.parent.exists)return this.renderOrderID=-1,!1;for(var a=this.children.length;a--;)this.children[a].preUpdate();return!0},b.Group.prototype.update=function(){for(var a=this.children.length;a--;)this.children[a].update()},b.Group.prototype.postUpdate=function(){1===this._cache[7]&&(this.x=this.game.camera.view.x+this.cameraOffset.x,this.y=this.game.camera.view.y+this.cameraOffset.y);for(var a=this.children.length;a--;)this.children[a].postUpdate()},b.Group.prototype.forEach=function(a,b,c){"undefined"==typeof c&&(c=!1);var d=Array.prototype.splice.call(arguments,3);d.unshift(null);for(var e=0,f=this.children.length;f>e;e++)(!c||c&&this.children[e].exists)&&(d[0]=this.children[e],a.apply(b,d))},b.Group.prototype.forEachExists=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("exists",!0,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.forEachAlive=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("alive",!0,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.forEachDead=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("alive",!1,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.sort=function(a,c){this.children.length<2||("undefined"==typeof a&&(a="z"),"undefined"==typeof c&&(c=b.Group.SORT_ASCENDING),this._sortProperty=a,this.children.sort(c===b.Group.SORT_ASCENDING?this.ascendingSortHandler.bind(this):this.descendingSortHandler.bind(this)),this.updateZ())},b.Group.prototype.customSort=function(a,b){this.children.length<2||(this.children.sort(a.bind(b)),this.updateZ())},b.Group.prototype.ascendingSortHandler=function(a,b){return a[this._sortProperty]b[this._sortProperty]?1:a.zb[this._sortProperty]?-1:0},b.Group.prototype.iterate=function(a,c,d,e,f,g){if(d===b.Group.RETURN_TOTAL&&0===this.children.length)return 0;"undefined"==typeof e&&(e=!1);for(var h=0,i=0,j=this.children.length;j>i;i++)if(this.children[i][a]===c&&(h++,e&&(g[0]=this.children[i],e.apply(f,g)),d===b.Group.RETURN_CHILD))return this.children[i];return d===b.Group.RETURN_TOTAL?h:d===b.Group.RETURN_CHILD?null:void 0},b.Group.prototype.getFirstExists=function(a){return"boolean"!=typeof a&&(a=!0),this.iterate("exists",a,b.Group.RETURN_CHILD)},b.Group.prototype.getFirstAlive=function(){return this.iterate("alive",!0,b.Group.RETURN_CHILD)},b.Group.prototype.getFirstDead=function(){return this.iterate("alive",!1,b.Group.RETURN_CHILD)},b.Group.prototype.getTop=function(){return this.children.length>0?this.children[this.children.length-1]:void 0},b.Group.prototype.getBottom=function(){return this.children.length>0?this.children[0]:void 0},b.Group.prototype.countLiving=function(){return this.iterate("alive",!0,b.Group.RETURN_TOTAL)},b.Group.prototype.countDead=function(){return this.iterate("alive",!1,b.Group.RETURN_TOTAL)},b.Group.prototype.getRandom=function(a,b){return 0===this.children.length?null:(a=a||0,b=b||this.children.length,this.game.math.getRandom(this.children,a,b))},b.Group.prototype.remove=function(a,b){if("undefined"==typeof b&&(b=!1),0===this.children.length||-1===this.children.indexOf(a))return!1;a.events&&!a.destroyPhase&&a.events.onRemovedFromGroup.dispatch(a,this);var c=this.removeChild(a);return this.updateZ(),this.cursor===a&&this.next(),b&&c&&c.destroy(!0),!0},b.Group.prototype.removeAll=function(a){if("undefined"==typeof a&&(a=!1),0!==this.children.length){do{this.children[0].events&&this.children[0].events.onRemovedFromGroup.dispatch(this.children[0],this);var b=this.removeChild(this.children[0]);a&&b&&b.destroy(!0)}while(this.children.length>0);this.cursor=null}},b.Group.prototype.removeBetween=function(a,b,c){if("undefined"==typeof b&&(b=this.children.length),"undefined"==typeof c&&(c=!1),0!==this.children.length){if(a>b||0>a||b>this.children.length)return!1;for(var d=b;d>=a;){this.children[d].events&&this.children[d].events.onRemovedFromGroup.dispatch(this.children[d],this);var e=this.removeChild(this.children[d]);c&&e&&e.destroy(!0),this.cursor===this.children[d]&&(this.cursor=null),d--}this.updateZ()}},b.Group.prototype.destroy=function(a,b){null!==this.game&&("undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!1),this.removeAll(a),this.cursor=null,b||(this.parent&&this.parent.removeChild(this),this.game=null,this.exists=!1))},Object.defineProperty(b.Group.prototype,"total",{get:function(){return this.iterate("exists",!0,b.Group.RETURN_TOTAL)}}),Object.defineProperty(b.Group.prototype,"length",{get:function(){return this.children.length}}),Object.defineProperty(b.Group.prototype,"angle",{get:function(){return b.Math.radToDeg(this.rotation)},set:function(a){this.rotation=b.Math.degToRad(a)}}),Object.defineProperty(b.Group.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),b.World=function(a){b.Group.call(this,a,null,"__world",!1),this.bounds=new b.Rectangle(0,0,a.width,a.height),this.camera=null},b.World.prototype=Object.create(b.Group.prototype),b.World.prototype.constructor=b.World,b.World.prototype.boot=function(){this.camera=new b.Camera(this.game,0,0,0,this.game.width,this.game.height),this.camera.displayObject=this,this.camera.scale=this.scale,this.game.camera=this.camera,this.game.stage.addChild(this)},b.World.prototype.setBounds=function(a,b,c,d){cthis.bounds.right&&(a.x=this.bounds.left),a._currentBounds.bottomthis.bounds.bottom&&(a.y=this.bounds.top)):(a.x+bthis.bounds.right&&(a.x=this.bounds.left-b),a.y+bthis.bounds.bottom&&(a.y=this.bounds.top-b))},Object.defineProperty(b.World.prototype,"width",{get:function(){return this.bounds.width},set:function(a){this.bounds.width=a}}),Object.defineProperty(b.World.prototype,"height",{get:function(){return this.bounds.height},set:function(a){this.bounds.height=a}}),Object.defineProperty(b.World.prototype,"centerX",{get:function(){return this.bounds.halfWidth}}),Object.defineProperty(b.World.prototype,"centerY",{get:function(){return this.bounds.halfHeight}}),Object.defineProperty(b.World.prototype,"randomX",{get:function(){return this.bounds.x<0?this.game.rnd.integerInRange(this.bounds.x,this.bounds.width-Math.abs(this.bounds.x)):this.game.rnd.integerInRange(this.bounds.x,this.bounds.width)}}),Object.defineProperty(b.World.prototype,"randomY",{get:function(){return this.bounds.y<0?this.game.rnd.integerInRange(this.bounds.y,this.bounds.height-Math.abs(this.bounds.y)):this.game.rnd.integerInRange(this.bounds.y,this.bounds.height)}}),b.ScaleManager=function(a,c,d){this.game=a,this.width=c,this.height=d,this.minWidth=null,this.maxWidth=null,this.minHeight=null,this.maxHeight=null,this.forceLandscape=!1,this.forcePortrait=!1,this.incorrectOrientation=!1,this.pageAlignHorizontally=!1,this.pageAlignVertically=!1,this.maxIterations=5,this.orientationSprite=null,this.enterLandscape=new b.Signal,this.enterPortrait=new b.Signal,this.enterIncorrectOrientation=new b.Signal,this.leaveIncorrectOrientation=new b.Signal,this.hasResized=new b.Signal,this.fullScreenTarget=this.game.canvas,this.enterFullScreen=new b.Signal,this.leaveFullScreen=new b.Signal,this.orientation=0,window.orientation?this.orientation=window.orientation:window.outerWidth>window.outerHeight&&(this.orientation=90),this.scaleFactor=new b.Point(1,1),this.scaleFactorInversed=new b.Point(1,1),this.margin=new b.Point(0,0),this.aspectRatio=0,this.sourceAspectRatio=c/d,this.event=null,this.scaleMode=b.ScaleManager.NO_SCALE,this.fullScreenScaleMode=b.ScaleManager.NO_SCALE,this._startHeight=0,this._width=0,this._height=0;var e=this;window.addEventListener("orientationchange",function(a){return e.checkOrientation(a)},!1),window.addEventListener("resize",function(a){return e.checkResize(a)},!1),document.addEventListener("webkitfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("mozfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("fullscreenchange",function(a){return e.fullScreenChange(a)},!1)},b.ScaleManager.EXACT_FIT=0,b.ScaleManager.NO_SCALE=1,b.ScaleManager.SHOW_ALL=2,b.ScaleManager.prototype={startFullScreen:function(a){!this.isFullScreen&&this.game.device.fullscreen&&("undefined"!=typeof a&&this.game.renderType===b.CANVAS&&(this.game.stage.smoothed=a),this._width=this.width,this._height=this.height,this.game.device.fullscreenKeyboard?this.fullScreenTarget[this.game.device.requestFullscreen](Element.ALLOW_KEYBOARD_INPUT):this.fullScreenTarget[this.game.device.requestFullscreen]())},stopFullScreen:function(){this.fullScreenTarget[this.game.device.cancelFullscreen]()},fullScreenChange:function(a){this.event=a,this.isFullScreen?(this.fullScreenScaleMode===b.ScaleManager.EXACT_FIT?(this.fullScreenTarget.style.width="100%",this.fullScreenTarget.style.height="100%",this.width=window.outerWidth,this.height=window.outerHeight,this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height,this.checkResize()):this.fullScreenScaleMode===b.ScaleManager.SHOW_ALL&&(this.setShowAll(),this.refresh()),this.enterFullScreen.dispatch(this.width,this.height)):(this.fullScreenTarget.style.width=this.game.width+"px",this.fullScreenTarget.style.height=this.game.height+"px",this.width=this._width,this.height=this._height,this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height,this.leaveFullScreen.dispatch(this.width,this.height))},forceOrientation:function(a,c,d){"undefined"==typeof c&&(c=!1),this.forceLandscape=a,this.forcePortrait=c,"undefined"!=typeof d&&((null===d||this.game.cache.checkImageKey(d)===!1)&&(d="__default"),this.orientationSprite=new b.Image(this.game,this.game.width/2,this.game.height/2,PIXI.TextureCache[d]),this.orientationSprite.anchor.set(.5),this.checkOrientationState(),this.incorrectOrientation?(this.orientationSprite.visible=!0,this.game.world.visible=!1):(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.game.stage.addChild(this.orientationSprite))},checkOrientationState:function(){this.incorrectOrientation?(this.forceLandscape&&window.innerWidth>window.innerHeight||this.forcePortrait&&window.innerHeight>window.innerWidth)&&(this.incorrectOrientation=!1,this.leaveIncorrectOrientation.dispatch(),this.orientationSprite&&(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.scaleMode!==b.ScaleManager.NO_SCALE&&this.refresh()):(this.forceLandscape&&window.innerWidthwindow.outerHeight?90:0,this.isLandscape?this.enterLandscape.dispatch(this.orientation,!0,!1):this.enterPortrait.dispatch(this.orientation,!1,!0),this.scaleMode!==b.ScaleManager.NO_SCALE&&this.refresh(),this.checkOrientationState()},refresh:function(){if(this.game.device.iPad||this.game.device.webApp||this.game.device.desktop||(this.game.device.android&&!this.game.device.chrome?window.scrollTo(0,1):window.scrollTo(0,0)),null===this._check&&this.maxIterations>0){this._iterations=this.maxIterations;var a=this;this._check=window.setInterval(function(){return a.setScreenSize()},10),this.setScreenSize()}},setScreenSize:function(a){"undefined"==typeof a&&(a=!1),this.game.device.iPad||this.game.device.webApp||this.game.device.desktop||(this.game.device.android&&!this.game.device.chrome?window.scrollTo(0,1):window.scrollTo(0,0)),this._iterations--,(a||window.innerHeight>this._startHeight||this._iterations<0)&&(document.documentElement.style.minHeight=window.innerHeight+"px",this.incorrectOrientation?this.setMaximum():this.isFullScreen?this.fullScreenScaleMode===b.ScaleManager.EXACT_FIT?this.setExactFit():this.fullScreenScaleMode===b.ScaleManager.SHOW_ALL&&this.setShowAll():this.scaleMode===b.ScaleManager.EXACT_FIT?this.setExactFit():this.scaleMode===b.ScaleManager.SHOW_ALL&&this.setShowAll(),this.setSize(),clearInterval(this._check),this._check=null) +},setSize:function(){this.incorrectOrientation||(this.maxWidth&&this.width>this.maxWidth&&(this.width=this.maxWidth),this.maxHeight&&this.height>this.maxHeight&&(this.height=this.maxHeight),this.minWidth&&this.widththis.maxWidth?this.maxWidth:a,this.height=this.maxHeight&&b>this.maxHeight?this.maxHeight:b}},b.ScaleManager.prototype.constructor=b.ScaleManager,Object.defineProperty(b.ScaleManager.prototype,"isFullScreen",{get:function(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement}}),Object.defineProperty(b.ScaleManager.prototype,"isPortrait",{get:function(){return 0===this.orientation||180===this.orientation}}),Object.defineProperty(b.ScaleManager.prototype,"isLandscape",{get:function(){return 90===this.orientation||-90===this.orientation}}),b.Game=function(a,c,d,e,f,g,h,i){this.id=b.GAMES.push(this)-1,this.config=null,this.physicsConfig=i,this.parent="",this.width=800,this.height=600,this.transparent=!1,this.antialias=!0,this.renderer=null,this.renderType=b.AUTO,this.state=null,this.isBooted=!1,this.isRunning=!1,this.raf=null,this.add=null,this.make=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.net=null,this.scale=null,this.sound=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.physics=null,this.rnd=null,this.device=null,this.camera=null,this.canvas=null,this.context=null,this.debug=null,this.particles=null,this.stepping=!1,this.pendingStep=!1,this.stepCount=0,this.onPause=null,this.onResume=null,this.onBlur=null,this.onFocus=null,this._paused=!1,this._codePaused=!1,1===arguments.length&&"object"==typeof arguments[0]?this.parseConfig(arguments[0]):("undefined"!=typeof a&&(this.width=a),"undefined"!=typeof c&&(this.height=c),"undefined"!=typeof d&&(this.renderer=d,this.renderType=d),"undefined"!=typeof e&&(this.parent=e),"undefined"!=typeof g&&(this.transparent=g),"undefined"!=typeof h&&(this.antialias=h),this.rnd=new b.RandomDataGenerator([(Date.now()*Math.random()).toString()]),this.state=new b.StateManager(this,f));var j=this;return this._onBoot=function(){return j.boot()},"complete"===document.readyState||"interactive"===document.readyState?window.setTimeout(this._onBoot,0):(document.addEventListener("DOMContentLoaded",this._onBoot,!1),window.addEventListener("load",this._onBoot,!1)),this},b.Game.prototype={parseConfig:function(a){this.config=a,a.width&&(this.width=b.Utils.parseDimension(a.width,0)),a.height&&(this.height=b.Utils.parseDimension(a.height,1)),a.renderer&&(this.renderer=a.renderer,this.renderType=a.renderer),a.parent&&(this.parent=a.parent),a.transparent&&(this.transparent=a.transparent),a.antialias&&(this.antialias=a.antialias),a.physicsConfig&&(this.physicsConfig=a.physicsConfig);var c=[(Date.now()*Math.random()).toString()];a.seed&&(c=a.seed),this.rnd=new b.RandomDataGenerator(c);var d=null;a.state&&(d=a.state),this.state=new b.StateManager(this,d)},boot:function(){this.isBooted||(document.body?(document.removeEventListener("DOMContentLoaded",this._onBoot),window.removeEventListener("load",this._onBoot),this.onPause=new b.Signal,this.onResume=new b.Signal,this.onBlur=new b.Signal,this.onFocus=new b.Signal,this.isBooted=!0,this.device=new b.Device(this),this.math=b.Math,this.stage=new b.Stage(this,this.width,this.height),this.scale=new b.ScaleManager(this,this.width,this.height),this.setUpRenderer(),this.device.checkFullScreenSupport(),this.world=new b.World(this),this.add=new b.GameObjectFactory(this),this.make=new b.GameObjectCreator(this),this.cache=new b.Cache(this),this.load=new b.Loader(this),this.time=new b.Time(this),this.tweens=new b.TweenManager(this),this.input=new b.Input(this),this.sound=new b.SoundManager(this),this.physics=new b.Physics(this,this.physicsConfig),this.particles=new b.Particles(this),this.plugins=new b.PluginManager(this),this.net=new b.Net(this),this.debug=new b.Utils.Debug(this),this.scratch=new b.BitmapData(this,"__root",1024,1024),this.time.boot(),this.stage.boot(),this.world.boot(),this.input.boot(),this.sound.boot(),this.state.boot(),this.debug.boot(),this.showDebugHeader(),this.isRunning=!0,this.raf=this.config&&this.config.forceSetTimeOut?new b.RequestAnimationFrame(this,this.config.forceSetTimeOut):new b.RequestAnimationFrame(this,!1),this.raf.start()):window.setTimeout(this._onBoot,20))},showDebugHeader:function(){var a=b.VERSION,c="Canvas",d="HTML Audio",e=1;if(this.renderType===b.WEBGL?(c="WebGL",e++):this.renderType==b.HEADLESS&&(c="Headless"),this.device.webAudio&&(d="WebAudio",e++),this.device.chrome){for(var f=["%c %c %c Phaser v"+a+" - "+c+" - "+d+" %c %c http://phaser.io %c %c ♥%c♥%c♥ ","background: #0cf300","background: #00bc17","color: #ffffff; background: #00711f;","background: #00bc17","background: #0cf300","background: #00bc17"],g=0;3>g;g++)f.push(e>g?"color: #ff2424; background: #fff":"color: #959595; background: #fff");console.log.apply(console,f)}else window.console&&console.log("Phaser v"+a+" - Renderer: "+c+" - Audio: "+d+" - http://phaser.io")},setUpRenderer:function(){if(this.device.trident&&(this.renderType=b.CANVAS),this.renderType===b.HEADLESS||this.renderType===b.CANVAS||this.renderType===b.AUTO&&this.device.webGL===!1){if(!this.device.canvas)throw new Error("Phaser.Game - cannot create Canvas or WebGL context, aborting.");this.renderType===b.AUTO&&(this.renderType=b.CANVAS),this.renderer=new PIXI.CanvasRenderer(this.width,this.height,this.canvas,this.transparent),this.context=this.renderer.context}else this.renderType=b.WEBGL,this.renderer=new PIXI.WebGLRenderer(this.width,this.height,this.canvas,this.transparent,this.antialias),this.context=null;this.renderType!==b.HEADLESS&&(this.stage.smoothed=this.antialias,b.Canvas.addToDOM(this.canvas,this.parent,!0),b.Canvas.setTouchAction(this.canvas))},update:function(a){this.time.update(a),this._paused||this.pendingStep?(this.state.pauseUpdate(),this.debug.preUpdate()):(this.stepping&&(this.pendingStep=!0),this.debug.preUpdate(),this.physics.preUpdate(),this.state.preUpdate(),this.plugins.preUpdate(),this.stage.preUpdate(),this.state.update(),this.stage.update(),this.tweens.update(),this.sound.update(),this.input.update(),this.physics.update(),this.particles.update(),this.plugins.update(),this.stage.postUpdate(),this.plugins.postUpdate()),this.renderType!=b.HEADLESS&&(this.renderer.render(this.stage),this.plugins.render(),this.state.render(),this.plugins.postRender())},enableStep:function(){this.stepping=!0,this.pendingStep=!1,this.stepCount=0},disableStep:function(){this.stepping=!1,this.pendingStep=!1},step:function(){this.pendingStep=!1,this.stepCount++},destroy:function(){this.raf.stop(),this.input.destroy(),this.state.destroy(),this.physics.destroy(),this.state=null,this.cache=null,this.input=null,this.load=null,this.sound=null,this.stage=null,this.time=null,this.world=null,this.isBooted=!1},gamePaused:function(a){this._paused||(this._paused=!0,this.time.gamePaused(),this.sound.setMute(),this.onPause.dispatch(a))},gameResumed:function(a){this._paused&&!this._codePaused&&(this._paused=!1,this.time.gameResumed(),this.input.reset(),this.sound.unsetMute(),this.onResume.dispatch(a))},focusLoss:function(a){this.onBlur.dispatch(a),this.gamePaused(a)},focusGain:function(a){this.onFocus.dispatch(a),this.gameResumed(a)}},b.Game.prototype.constructor=b.Game,Object.defineProperty(b.Game.prototype,"paused",{get:function(){return this._paused},set:function(a){a===!0?this._paused===!1&&(this._paused=!0,this._codePaused=!0,this.sound.setMute(),this.time.gamePaused(),this.onPause.dispatch(this)):this._paused&&(this._paused=!1,this._codePaused=!1,this.input.reset(),this.sound.unsetMute(),this.time.gameResumed(),this.onResume.dispatch(this))}}),b.Input=function(a){this.game=a,this.hitCanvas=null,this.hitContext=null,this.moveCallback=null,this.moveCallbackContext=this,this.pollRate=0,this.disabled=!1,this.multiInputOverride=b.Input.MOUSE_TOUCH_COMBINE,this.position=null,this.speed=null,this.circle=null,this.scale=null,this.maxPointers=10,this.currentPointers=0,this.tapRate=200,this.doubleTapRate=300,this.holdRate=2e3,this.justPressedRate=200,this.justReleasedRate=200,this.recordPointerHistory=!1,this.recordRate=100,this.recordLimit=100,this.pointer1=null,this.pointer2=null,this.pointer3=null,this.pointer4=null,this.pointer5=null,this.pointer6=null,this.pointer7=null,this.pointer8=null,this.pointer9=null,this.pointer10=null,this.activePointer=null,this.mousePointer=null,this.mouse=null,this.keyboard=null,this.touch=null,this.mspointer=null,this.gamepad=null,this.resetLocked=!1,this.onDown=null,this.onUp=null,this.onTap=null,this.onHold=null,this.interactiveItems=new b.ArrayList,this._localPoint=new b.Point,this._pollCounter=0,this._oldPosition=null,this._x=0,this._y=0},b.Input.MOUSE_OVERRIDES_TOUCH=0,b.Input.TOUCH_OVERRIDES_MOUSE=1,b.Input.MOUSE_TOUCH_COMBINE=2,b.Input.prototype={boot:function(){this.mousePointer=new b.Pointer(this.game,0),this.pointer1=new b.Pointer(this.game,1),this.pointer2=new b.Pointer(this.game,2),this.mouse=new b.Mouse(this.game),this.keyboard=new b.Keyboard(this.game),this.touch=new b.Touch(this.game),this.mspointer=new b.MSPointer(this.game),this.gamepad=new b.Gamepad(this.game),this.onDown=new b.Signal,this.onUp=new b.Signal,this.onTap=new b.Signal,this.onHold=new b.Signal,this.scale=new b.Point(1,1),this.speed=new b.Point,this.position=new b.Point,this._oldPosition=new b.Point,this.circle=new b.Circle(0,0,44),this.activePointer=this.mousePointer,this.currentPointers=0,this.hitCanvas=document.createElement("canvas"),this.hitCanvas.width=1,this.hitCanvas.height=1,this.hitContext=this.hitCanvas.getContext("2d"),this.mouse.start(),this.keyboard.start(),this.touch.start(),this.mspointer.start(),this.mousePointer.active=!0},destroy:function(){this.mouse.stop(),this.keyboard.stop(),this.touch.stop(),this.mspointer.stop(),this.gamepad.stop(),this.moveCallback=null},setMoveCallback:function(a,b){this.moveCallback=a,this.moveCallbackContext=b},addPointer:function(){for(var a=0,c=10;c>0;c--)null===this["pointer"+c]&&(a=c);return 0===a?(console.warn("You can only have 10 Pointer objects"),null):(this["pointer"+a]=new b.Pointer(this.game,a),this["pointer"+a])},update:function(){return this.keyboard.update(),this.pollRate>0&&this._pollCounter=c;c++)this["pointer"+c]&&this["pointer"+c].reset();this.currentPointers=0,"none"!==this.game.canvas.style.cursor&&(this.game.canvas.style.cursor="inherit"),a&&(this.onDown.dispose(),this.onUp.dispose(),this.onTap.dispose(),this.onHold.dispose(),this.onDown=new b.Signal,this.onUp=new b.Signal,this.onTap=new b.Signal,this.onHold=new b.Signal),this._pollCounter=0}},resetSpeed:function(a,b){this._oldPosition.setTo(a,b),this.speed.setTo(0,0)},startPointer:function(a){if(this.maxPointers<10&&this.totalActivePointers==this.maxPointers)return null;if(this.pointer1.active===!1)return this.pointer1.start(a);if(this.pointer2.active===!1)return this.pointer2.start(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active===!1)return this["pointer"+b].start(a);return null},updatePointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.move(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.move(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].move(a);return null},stopPointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.stop(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.stop(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].stop(a);return null},getPointer:function(a){if(a=a||!1,this.pointer1.active==a)return this.pointer1;if(this.pointer2.active==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active==a)return this["pointer"+b];return null},getPointerFromIdentifier:function(a){if(this.pointer1.identifier==a)return this.pointer1;if(this.pointer2.identifier==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].identifier==a)return this["pointer"+b];return null},getLocalPosition:function(a,c,d){"undefined"==typeof d&&(d=new b.Point);var e=a.worldTransform,f=1/(e.a*e.d+e.b*-e.c);return d.setTo(e.d*f*c.x+-e.b*f*c.y+(e.ty*e.b-e.tx*e.d)*f,e.a*f*c.y+-e.c*f*c.x+(-e.ty*e.a+e.tx*e.c)*f)},hitTest:function(a,c,d){if(!a.worldVisible)return!1;if(this.getLocalPosition(a,c,this._localPoint),d.copyFrom(this._localPoint),a.hitArea&&a.hitArea.contains)return a.hitArea.contains(this._localPoint.x,this._localPoint.y)?!0:!1;if(a instanceof b.TileSprite){var e=a.width,f=a.height,g=-e*a.anchor.x;if(this._localPoint.x>g&&this._localPoint.xh&&this._localPoint.yg&&this._localPoint.xh&&this._localPoint.yi;i++)if(this.hitTest(a.children[i],c,d))return!0;return!1}},b.Input.prototype.constructor=b.Input,Object.defineProperty(b.Input.prototype,"x",{get:function(){return this._x},set:function(a){this._x=Math.floor(a)}}),Object.defineProperty(b.Input.prototype,"y",{get:function(){return this._y},set:function(a){this._y=Math.floor(a)}}),Object.defineProperty(b.Input.prototype,"pollLocked",{get:function(){return this.pollRate>0&&this._pollCounter=a;a++)this["pointer"+a]&&this["pointer"+a].active&&this.currentPointers++;return this.currentPointers}}),Object.defineProperty(b.Input.prototype,"worldX",{get:function(){return this.game.camera.view.x+this.x}}),Object.defineProperty(b.Input.prototype,"worldY",{get:function(){return this.game.camera.view.y+this.y}}),b.Key=function(a,c){this.game=a,this.enabled=!0,this.event=null,this.isDown=!1,this.isUp=!0,this.altKey=!1,this.ctrlKey=!1,this.shiftKey=!1,this.timeDown=0,this.duration=0,this.timeUp=-2500,this.repeats=0,this.keyCode=c,this.onDown=new b.Signal,this.onHoldCallback=null,this.onHoldContext=null,this.onUp=new b.Signal},b.Key.prototype={update:function(){this.enabled&&this.isDown&&(this.duration=this.game.time.now-this.timeDown,this.repeats++,this.onHoldCallback&&this.onHoldCallback.call(this.onHoldContext,this))},processKeyDown:function(a){this.enabled&&(this.event=a,this.isDown||(this.altKey=a.altKey,this.ctrlKey=a.ctrlKey,this.shiftKey=a.shiftKey,this.isDown=!0,this.isUp=!1,this.timeDown=this.game.time.now,this.duration=0,this.repeats=0,this.onDown.dispatch(this)))},processKeyUp:function(a){this.enabled&&(this.event=a,this.isUp||(this.isDown=!1,this.isUp=!0,this.timeUp=this.game.time.now,this.duration=this.game.time.now-this.timeDown,this.onUp.dispatch(this)))},reset:function(a){"undefined"==typeof a&&(a=!0),this.isDown=!1,this.isUp=!0,this.timeUp=this.game.time.now,this.duration=this.game.time.now-this.timeDown,this.enabled=!0,a&&(this.onDown.removeAll(),this.onUp.removeAll(),this.onHoldCallback=null,this.onHoldContext=null)},justPressed:function(a){return"undefined"==typeof a&&(a=2500),this.isDown&&this.duration=this.game.input.holdRate&&((this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&this.game.input.onHold.dispatch(this),this._holdSent=!0),this.game.input.recordPointerHistory&&this.game.time.now>=this._nextDrop&&(this._nextDrop=this.game.time.now+this.game.input.recordRate,this._history.push({x:this.position.x,y:this.position.y}),this._history.length>this.game.input.recordLimit&&this._history.shift()))},move:function(a,c){if(!this.game.input.pollLocked){if("undefined"==typeof c&&(c=!1),"undefined"!=typeof a.button&&(this.button=a.button),this.clientX=a.clientX,this.clientY=a.clientY,this.pageX=a.pageX,this.pageY=a.pageY,this.screenX=a.screenX,this.screenY=a.screenY,this.x=(this.pageX-this.game.stage.offset.x)*this.game.input.scale.x,this.y=(this.pageY-this.game.stage.offset.y)*this.game.input.scale.y,this.position.setTo(this.x,this.y),this.circle.x=this.x,this.circle.y=this.y,(this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.activePointer=this,this.game.input.x=this.x,this.game.input.y=this.y,this.game.input.position.setTo(this.game.input.x,this.game.input.y),this.game.input.circle.x=this.game.input.x,this.game.input.circle.y=this.game.input.y),this.game.paused)return this;if(this.game.input.moveCallback&&this.game.input.moveCallback.call(this.game.input.moveCallbackContext,this,this.x,this.y),null!==this.targetObject&&this.targetObject.isDragged===!0)return this.targetObject.update(this)===!1&&(this.targetObject=null),this;if(this._highestRenderOrderID=Number.MAX_SAFE_INTEGER,this._highestRenderObject=null,this._highestInputPriorityID=-1,this.game.input.interactiveItems.total>0){var d=this.game.input.interactiveItems.first;do d&&d.validForInput(this._highestInputPriorityID,this._highestRenderOrderID)&&(!c&&d.checkPointerOver(this)||c&&d.checkPointerDown(this))&&(this._highestRenderOrderID=d.sprite._cache[3],this._highestInputPriorityID=d.priorityID,this._highestRenderObject=d),d=this.game.input.interactiveItems.next; +while(null!==d)}return null===this._highestRenderObject?this.targetObject&&(this.targetObject._pointerOutHandler(this),this.targetObject=null):null===this.targetObject?(this.targetObject=this._highestRenderObject,this._highestRenderObject._pointerOverHandler(this)):this.targetObject===this._highestRenderObject?this._highestRenderObject.update(this)===!1&&(this.targetObject=null):(this.targetObject._pointerOutHandler(this),this.targetObject=this._highestRenderObject,this.targetObject._pointerOverHandler(this)),this}},leave:function(a){this.withinGame=!1,this.move(a,!1)},stop:function(a){return this._stateReset?void a.preventDefault():(this.timeUp=this.game.time.now,(this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.onUp.dispatch(this,a),this.duration>=0&&this.duration<=this.game.input.tapRate&&(this.timeUp-this.previousTapTime0&&(this.active=!1),this.withinGame=!1,this.isDown=!1,this.isUp=!0,this.positionUp.setTo(this.x,this.y),this.isMouse===!1&&this.game.input.currentPointers--,this.game.input.interactiveItems.callAll("_releasedHandler",this),this.targetObject=null,this)},justPressed:function(a){return a=a||this.game.input.justPressedRate,this.isDown===!0&&this.timeDown+a>this.game.time.now},justReleased:function(a){return a=a||this.game.input.justReleasedRate,this.isUp===!0&&this.timeUp+a>this.game.time.now},reset:function(){this.isMouse===!1&&(this.active=!1),this.identifier=null,this.isDown=!1,this.isUp=!0,this.totalTouches=0,this._holdSent=!1,this._history.length=0,this._stateReset=!0,this.targetObject&&this.targetObject._releasedHandler(this),this.targetObject=null}},b.Pointer.prototype.constructor=b.Pointer,Object.defineProperty(b.Pointer.prototype,"duration",{get:function(){return this.isUp?-1:this.game.time.now-this.timeDown}}),Object.defineProperty(b.Pointer.prototype,"worldX",{get:function(){return this.game.world.camera.x+this.x}}),Object.defineProperty(b.Pointer.prototype,"worldY",{get:function(){return this.game.world.camera.y+this.y}}),b.Touch=function(a){this.game=a,this.disabled=!1,this.callbackContext=this.game,this.touchStartCallback=null,this.touchMoveCallback=null,this.touchEndCallback=null,this.touchEnterCallback=null,this.touchLeaveCallback=null,this.touchCancelCallback=null,this.preventDefault=!0,this.event=null,this._onTouchStart=null,this._onTouchMove=null,this._onTouchEnd=null,this._onTouchEnter=null,this._onTouchLeave=null,this._onTouchCancel=null,this._onTouchMove=null},b.Touch.prototype={start:function(){if(null===this._onTouchStart){var a=this;this.game.device.touch&&(this._onTouchStart=function(b){return a.onTouchStart(b)},this._onTouchMove=function(b){return a.onTouchMove(b)},this._onTouchEnd=function(b){return a.onTouchEnd(b)},this._onTouchEnter=function(b){return a.onTouchEnter(b)},this._onTouchLeave=function(b){return a.onTouchLeave(b)},this._onTouchCancel=function(b){return a.onTouchCancel(b)},this.game.canvas.addEventListener("touchstart",this._onTouchStart,!1),this.game.canvas.addEventListener("touchmove",this._onTouchMove,!1),this.game.canvas.addEventListener("touchend",this._onTouchEnd,!1),this.game.canvas.addEventListener("touchenter",this._onTouchEnter,!1),this.game.canvas.addEventListener("touchleave",this._onTouchLeave,!1),this.game.canvas.addEventListener("touchcancel",this._onTouchCancel,!1))}},consumeDocumentTouches:function(){this._documentTouchMove=function(a){a.preventDefault()},document.addEventListener("touchmove",this._documentTouchMove,!1)},onTouchStart:function(a){if(this.event=a,this.touchStartCallback&&this.touchStartCallback.call(this.callbackContext,a),!this.game.input.disabled&&!this.disabled){this.preventDefault&&a.preventDefault();for(var b=0;b0&&e>this.deadZone||0>e&&e<-this.deadZone?{axis:d,value:e}:{axis:d,value:0})}this._prevTimestamp=this._rawPad.timestamp}},connect:function(a){var b=!this._connected;this._index=a.index,this._connected=!0,this._rawPad=a,this._rawButtons=a.buttons,this._axes=a.axes,b&&this._padParent.onConnectCallback&&this._padParent.onConnectCallback.call(this._padParent.callbackContext,this._index),b&&this.onConnectCallback&&this.onConnectCallback.call(this.callbackContext)},disconnect:function(){var a=this._connected;this._connected=!1,this._rawPad=void 0,this._rawButtons=[],this._buttons=[];var b=this._index;this._index=null,a&&this._padParent.onDisconnectCallback&&this._padParent.onDisconnectCallback.call(this._padParent.callbackContext,b),a&&this.onDisconnectCallback&&this.onDisconnectCallback.call(this.callbackContext)},processAxisChange:function(a){this.game.input.disabled||this.game.input.gamepad.disabled||this._axes[a.axis]!==a.value&&(this._axes[a.axis]=a.value,this._padParent.onAxisCallback&&this._padParent.onAxisCallback.call(this._padParent.callbackContext,a,this._index),this.onAxisCallback&&this.onAxisCallback.call(this.callbackContext,a))},processButtonDown:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onDownCallback&&this._padParent.onDownCallback.call(this._padParent.callbackContext,a,b,this._index),this.onDownCallback&&this.onDownCallback.call(this.callbackContext,a,b),this._buttons[a]&&this._buttons[a].isDown?this._buttons[a].duration=this.game.time.now-this._buttons[a].timeDown:this._buttons[a]?(this._buttons[a].isDown=!0,this._buttons[a].timeDown=this.game.time.now,this._buttons[a].duration=0,this._buttons[a].value=b):this._buttons[a]={isDown:!0,timeDown:this.game.time.now,timeUp:0,duration:0,value:b},this._hotkeys[a]&&this._hotkeys[a].processButtonDown(b))},processButtonUp:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onUpCallback&&this._padParent.onUpCallback.call(this._padParent.callbackContext,a,b,this._index),this.onUpCallback&&this.onUpCallback.call(this.callbackContext,a,b),this._hotkeys[a]&&this._hotkeys[a].processButtonUp(b),this._buttons[a]?(this._buttons[a].isDown=!1,this._buttons[a].timeUp=this.game.time.now,this._buttons[a].value=b):this._buttons[a]={isDown:!1,timeDown:this.game.time.now,timeUp:this.game.time.now,duration:0,value:b})},processButtonFloat:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onFloatCallback&&this._padParent.onFloatCallback.call(this._padParent.callbackContext,a,b,this._index),this.onFloatCallback&&this.onFloatCallback.call(this.callbackContext,a,b),this._buttons[a]?this._buttons[a].value=b:this._buttons[a]={value:b},this._hotkeys[a]&&this._hotkeys[a].processButtonFloat(b))},axis:function(a){return this._axes[a]?this._axes[a]:!1},isDown:function(a){return this._buttons[a]?this._buttons[a].isDown:!1},justReleased:function(a,b){return"undefined"==typeof b&&(b=250),this._buttons[a]&&this._buttons[a].isDown===!1&&this.game.time.now-this._buttons[a].timeUpd;d++)this._pointerData[d]={id:d,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1};this.snapOffset=new b.Point,this.enabled=!0,this._wasEnabled=!0,this.sprite.events&&null===this.sprite.events.onInputOver&&(this.sprite.events.onInputOver=new b.Signal,this.sprite.events.onInputOut=new b.Signal,this.sprite.events.onInputDown=new b.Signal,this.sprite.events.onInputUp=new b.Signal,this.sprite.events.onDragStart=new b.Signal,this.sprite.events.onDragStop=new b.Signal)}return this.sprite.events.onAddedToGroup.add(this.addedToGroup,this),this.sprite.events.onRemovedFromGroup.add(this.removedFromGroup,this),this.sprite},addedToGroup:function(){this._wasEnabled&&!this.enabled&&this.start()},removedFromGroup:function(){this.enabled?(this._wasEnabled=!0,this.stop()):this._wasEnabled=!1},reset:function(){this.enabled=!1;for(var a=0;10>a;a++)this._pointerData[a]={id:a,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1}},stop:function(){this.enabled!==!1&&(this.enabled=!1,this.game.input.interactiveItems.remove(this))},destroy:function(){this.sprite&&(this._setHandCursor&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1),this.enabled=!1,this.game.input.interactiveItems.remove(this),this._pointerData.length=0,this.boundsRect=null,this.boundsSprite=null,this.sprite=null)},validForInput:function(a,b){return 0===this.sprite.scale.x||0===this.sprite.scale.y?!1:this.pixelPerfectClick||this.pixelPerfectOver?!0:this.priorityID>a||this.priorityID===a&&this.sprite._cache[3]b;b++)if(this._pointerData[b].isOver)return!0}return!1},pointerOut:function(a){if(this.enabled){if("undefined"!=typeof a)return this._pointerData[a].isOut;for(var b=0;10>b;b++)if(this._pointerData[b].isOut)return!0}return!1},pointerTimeOver:function(a){return a=a||0,this._pointerData[a].timeOver},pointerTimeOut:function(a){return a=a||0,this._pointerData[a].timeOut},pointerDragged:function(a){return a=a||0,this._pointerData[a].isDragged},checkPointerDown:function(a){return this.enabled&&this.sprite&&this.sprite.parent&&this.sprite.visible&&this.sprite.parent.visible&&this.game.input.hitTest(this.sprite,a,this._tempPoint)?this.pixelPerfectClick?this.checkPixel(this._tempPoint.x,this._tempPoint.y):!0:!1},checkPointerOver:function(a){return this.enabled&&this.sprite&&this.sprite.parent&&this.sprite.visible&&this.sprite.parent.visible&&this.game.input.hitTest(this.sprite,a,this._tempPoint)?this.pixelPerfectOver?this.checkPixel(this._tempPoint.x,this._tempPoint.y):!0:!1},checkPixel:function(a,b,c){if(this.sprite.texture.baseTexture.source){if(this.game.input.hitContext.clearRect(0,0,1,1),null===a&&null===b){this.game.input.getLocalPosition(this.sprite,c,this._tempPoint);var a=this._tempPoint.x,b=this._tempPoint.y}0!==this.sprite.anchor.x&&(a-=-this.sprite.texture.frame.width*this.sprite.anchor.x),0!==this.sprite.anchor.y&&(b-=-this.sprite.texture.frame.height*this.sprite.anchor.y),a+=this.sprite.texture.frame.x,b+=this.sprite.texture.frame.y,this.game.input.hitContext.drawImage(this.sprite.texture.baseTexture.source,a,b,1,1,0,0,1,1);var d=this.game.input.hitContext.getImageData(0,0,1,1);if(d.data[3]>=this.pixelPerfectAlpha)return!0}return!1},update:function(a){return null!==this.sprite&&void 0!==this.sprite.parent?this.enabled&&this.sprite.visible&&this.sprite.parent.visible?this.draggable&&this._draggedPointerID==a.id?this.updateDrag(a):this._pointerData[a.id].isOver===!0?this.checkPointerOver(a)?(this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,!0):(this._pointerOutHandler(a),!1):void 0:(this._pointerOutHandler(a),!1):void 0},_pointerOverHandler:function(a){null!==this.sprite&&this._pointerData[a.id].isOver===!1&&(this._pointerData[a.id].isOver=!0,this._pointerData[a.id].isOut=!1,this._pointerData[a.id].timeOver=this.game.time.now,this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.canvas.style.cursor="pointer",this._setHandCursor=!0),this.sprite&&this.sprite.events&&this.sprite.events.onInputOver.dispatch(this.sprite,a))},_pointerOutHandler:function(a){null!==this.sprite&&(this._pointerData[a.id].isOver=!1,this._pointerData[a.id].isOut=!0,this._pointerData[a.id].timeOut=this.game.time.now,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1),this.sprite&&this.sprite.events&&this.sprite.events.onInputOut.dispatch(this.sprite,a))},_touchedHandler:function(a){if(null!==this.sprite){if(this._pointerData[a.id].isDown===!1&&this._pointerData[a.id].isOver===!0){if(this.pixelPerfectClick&&!this.checkPixel(null,null,a))return;this._pointerData[a.id].isDown=!0,this._pointerData[a.id].isUp=!1,this._pointerData[a.id].timeDown=this.game.time.now,this.sprite&&this.sprite.events&&this.sprite.events.onInputDown.dispatch(this.sprite,a),this.draggable&&this.isDragged===!1&&this.startDrag(a),this.bringToTop&&this.sprite.bringToTop()}return this.consumePointerEvent}},_releasedHandler:function(a){null!==this.sprite&&this._pointerData[a.id].isDown&&a.isUp&&(this._pointerData[a.id].isDown=!1,this._pointerData[a.id].isUp=!0,this._pointerData[a.id].timeUp=this.game.time.now,this._pointerData[a.id].downDuration=this._pointerData[a.id].timeUp-this._pointerData[a.id].timeDown,this.checkPointerOver(a)?this.sprite&&this.sprite.events&&this.sprite.events.onInputUp.dispatch(this.sprite,a,!0):(this.sprite&&this.sprite.events&&this.sprite.events.onInputUp.dispatch(this.sprite,a,!1),this.useHandCursor&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1)),this.draggable&&this.isDragged&&this._draggedPointerID==a.id&&this.stopDrag(a))},updateDrag:function(a){return a.isUp?(this.stopDrag(a),!1):(this.sprite.fixedToCamera?(this.allowHorizontalDrag&&(this.sprite.cameraOffset.x=a.x+this._dragPoint.x+this.dragOffset.x),this.allowVerticalDrag&&(this.sprite.cameraOffset.y=a.y+this._dragPoint.y+this.dragOffset.y),this.boundsRect&&this.checkBoundsRect(),this.boundsSprite&&this.checkBoundsSprite(),this.snapOnDrag&&(this.sprite.cameraOffset.x=Math.round((this.sprite.cameraOffset.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.cameraOffset.y=Math.round((this.sprite.cameraOffset.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)):(this.allowHorizontalDrag&&(this.sprite.x=a.x+this._dragPoint.x+this.dragOffset.x),this.allowVerticalDrag&&(this.sprite.y=a.y+this._dragPoint.y+this.dragOffset.y),this.boundsRect&&this.checkBoundsRect(),this.boundsSprite&&this.checkBoundsSprite(),this.snapOnDrag&&(this.sprite.x=Math.round((this.sprite.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.y=Math.round((this.sprite.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)),!0)},justOver:function(a,b){return a=a||0,b=b||500,this._pointerData[a].isOver&&this.overDuration(a)a;a++)this._pointerData[a].isDragged=!1;this.draggable=!1,this.isDragged=!1,this._draggedPointerID=-1},startDrag:function(a){if(this.isDragged=!0,this._draggedPointerID=a.id,this._pointerData[a.id].isDragged=!0,this.sprite.fixedToCamera)this.dragFromCenter?(this.sprite.centerOn(a.x,a.y),this._dragPoint.setTo(this.sprite.cameraOffset.x-a.x,this.sprite.cameraOffset.y-a.y)):this._dragPoint.setTo(this.sprite.cameraOffset.x-a.x,this.sprite.cameraOffset.y-a.y);else if(this.dragFromCenter){var b=this.sprite.getBounds();this.sprite.x=a.x+(this.sprite.x-b.centerX),this.sprite.y=a.y+(this.sprite.y-b.centerY),this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y)}else this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y);this.updateDrag(a),this.bringToTop&&this.sprite.bringToTop(),this.sprite.events.onDragStart.dispatch(this.sprite,a)},stopDrag:function(a){this.isDragged=!1,this._draggedPointerID=-1,this._pointerData[a.id].isDragged=!1,this.snapOnRelease&&(this.sprite.fixedToCamera?(this.sprite.cameraOffset.x=Math.round((this.sprite.cameraOffset.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.cameraOffset.y=Math.round((this.sprite.cameraOffset.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY):(this.sprite.x=Math.round((this.sprite.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.y=Math.round((this.sprite.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)),this.sprite.events.onDragStop.dispatch(this.sprite,a),this.checkPointerOver(a)===!1&&this._pointerOutHandler(a)},setDragLock:function(a,b){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!0),this.allowHorizontalDrag=a,this.allowVerticalDrag=b},enableSnap:function(a,b,c,d,e,f){"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=0),this.snapX=a,this.snapY=b,this.snapOffsetX=e,this.snapOffsetY=f,this.snapOnDrag=c,this.snapOnRelease=d},disableSnap:function(){this.snapOnDrag=!1,this.snapOnRelease=!1},checkBoundsRect:function(){this.sprite.fixedToCamera?(this.sprite.cameraOffset.xthis.boundsRect.right&&(this.sprite.cameraOffset.x=this.boundsRect.right-this.sprite.width),this.sprite.cameraOffset.ythis.boundsRect.bottom&&(this.sprite.cameraOffset.y=this.boundsRect.bottom-this.sprite.height)):(this.sprite.xthis.boundsRect.right&&(this.sprite.x=this.boundsRect.right-this.sprite.width),this.sprite.ythis.boundsRect.bottom&&(this.sprite.y=this.boundsRect.bottom-this.sprite.height))},checkBoundsSprite:function(){this.sprite.fixedToCamera&&this.boundsSprite.fixedToCamera?(this.sprite.cameraOffset.xthis.boundsSprite.camerOffset.x+this.boundsSprite.width&&(this.sprite.cameraOffset.x=this.boundsSprite.camerOffset.x+this.boundsSprite.width-this.sprite.width),this.sprite.cameraOffset.ythis.boundsSprite.camerOffset.y+this.boundsSprite.height&&(this.sprite.cameraOffset.y=this.boundsSprite.camerOffset.y+this.boundsSprite.height-this.sprite.height)):(this.sprite.xthis.boundsSprite.x+this.boundsSprite.width&&(this.sprite.x=this.boundsSprite.x+this.boundsSprite.width-this.sprite.width),this.sprite.ythis.boundsSprite.y+this.boundsSprite.height&&(this.sprite.y=this.boundsSprite.y+this.boundsSprite.height-this.sprite.height))}},b.InputHandler.prototype.constructor=b.InputHandler,b.Events=function(a){this.parent=a,this.onAddedToGroup=new b.Signal,this.onRemovedFromGroup=new b.Signal,this.onKilled=new b.Signal,this.onRevived=new b.Signal,this.onOutOfBounds=new b.Signal,this.onEnterBounds=new b.Signal,this.onInputOver=null,this.onInputOut=null,this.onInputDown=null,this.onInputUp=null,this.onDragStart=null,this.onDragStop=null,this.onAnimationStart=null,this.onAnimationComplete=null,this.onAnimationLoop=null},b.Events.prototype={destroy:function(){this.parent=null,this.onAddedToGroup.dispose(),this.onRemovedFromGroup.dispose(),this.onKilled.dispose(),this.onRevived.dispose(),this.onOutOfBounds.dispose(),this.onInputOver&&(this.onInputOver.dispose(),this.onInputOut.dispose(),this.onInputDown.dispose(),this.onInputUp.dispose(),this.onDragStart.dispose(),this.onDragStop.dispose()),this.onAnimationStart&&(this.onAnimationStart.dispose(),this.onAnimationComplete.dispose(),this.onAnimationLoop.dispose()) +}},b.Events.prototype.constructor=b.Events,b.GameObjectFactory=function(a){this.game=a,this.world=this.game.world},b.GameObjectFactory.prototype={existing:function(a){return this.world.add(a)},image:function(a,c,d,e,f){return"undefined"==typeof f&&(f=this.world),f.add(new b.Image(this.game,a,c,d,e))},sprite:function(a,b,c,d,e){return"undefined"==typeof e&&(e=this.world),e.create(a,b,c,d)},tween:function(a){return this.game.tweens.create(a)},group:function(a,c,d,e,f){return new b.Group(this.game,a,c,d,e,f)},physicsGroup:function(a,c,d,e){return new b.Group(this.game,c,d,e,!0,a)},spriteBatch:function(a,c,d){return"undefined"==typeof c&&(c="group"),"undefined"==typeof d&&(d=!1),new b.SpriteBatch(this.game,a,c,d)},audio:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},sound:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},tileSprite:function(a,c,d,e,f,g,h){return"undefined"==typeof h&&(h=this.world),h.add(new b.TileSprite(this.game,a,c,d,e,f,g))},text:function(a,c,d,e,f){return"undefined"==typeof f&&(f=this.world),f.add(new b.Text(this.game,a,c,d,e))},button:function(a,c,d,e,f,g,h,i,j,k){return"undefined"==typeof k&&(k=this.world),k.add(new b.Button(this.game,a,c,d,e,f,g,h,i,j))},graphics:function(a,c,d){return"undefined"==typeof d&&(d=this.world),d.add(new b.Graphics(this.game,a,c))},emitter:function(a,c,d){return this.game.particles.add(new b.Particles.Arcade.Emitter(this.game,a,c,d))},retroFont:function(a,c,d,e,f,g,h,i,j){return new b.RetroFont(this.game,a,c,d,e,f,g,h,i,j)},bitmapText:function(a,c,d,e,f,g){return"undefined"==typeof g&&(g=this.world),g.add(new b.BitmapText(this.game,a,c,d,e,f))},tilemap:function(a,c,d,e,f){return new b.Tilemap(this.game,a,c,d,e,f)},renderTexture:function(a,c,d,e){("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid()),"undefined"==typeof e&&(e=!1);var f=new b.RenderTexture(this.game,a,c,d);return e&&this.game.cache.addRenderTexture(d,f),f},bitmapData:function(a,c,d,e){"undefined"==typeof e&&(e=!1),("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid());var f=new b.BitmapData(this.game,d,a,c);return e&&this.game.cache.addBitmapData(d,f),f},filter:function(a){var c=Array.prototype.splice.call(arguments,1),a=new b.Filter[a](this.game);return a.init.apply(a,c),a}},b.GameObjectFactory.prototype.constructor=b.GameObjectFactory,b.GameObjectCreator=function(a){this.game=a,this.world=this.game.world},b.GameObjectCreator.prototype={image:function(a,c,d,e){return new b.Image(this.game,a,c,d,e)},sprite:function(a,c,d,e){return new b.Sprite(this.game,a,c,d,e)},tween:function(a){return new b.Tween(a,this.game)},group:function(a,c,d,e,f){return new b.Group(this.game,null,c,d,e,f)},spriteBatch:function(a,c,d){return"undefined"==typeof c&&(c="group"),"undefined"==typeof d&&(d=!1),new b.SpriteBatch(this.game,a,c,d)},audio:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},sound:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},tileSprite:function(a,c,d,e,f,g){return new b.TileSprite(this.game,a,c,d,e,f,g)},text:function(a,c,d,e){return new b.Text(this.game,a,c,d,e)},button:function(a,c,d,e,f,g,h,i,j){return new b.Button(this.game,a,c,d,e,f,g,h,i,j)},graphics:function(a,c){return new b.Graphics(this.game,a,c)},emitter:function(a,c,d){return new b.Particles.Arcade.Emitter(this.game,a,c,d)},retroFont:function(a,c,d,e,f,g,h,i,j){return new b.RetroFont(this.game,a,c,d,e,f,g,h,i,j)},bitmapText:function(a,c,d,e,f){return new b.BitmapText(this.game,a,c,d,e,f)},tilemap:function(a,c,d,e,f){return new b.Tilemap(this.game,a,c,d,e,f)},renderTexture:function(a,c,d,e){("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid()),"undefined"==typeof e&&(e=!1);var f=new b.RenderTexture(this.game,a,c,d);return e&&this.game.cache.addRenderTexture(d,f),f},bitmapData:function(a,c,d,e){"undefined"==typeof e&&(e=!1),("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid());var f=new b.BitmapData(this.game,d,a,c);return e&&this.game.cache.addBitmapData(d,f),f},filter:function(a){var c=Array.prototype.splice.call(arguments,1),a=new b.Filter[a](this.game);return a.init.apply(a,c),a}},b.GameObjectCreator.prototype.constructor=b.GameObjectCreator,b.BitmapData=function(a,c,d,e){"undefined"==typeof d&&(d=100),"undefined"==typeof e&&(e=100),this.game=a,this.key=c,this.width=d,this.height=e,this.canvas=b.Canvas.create(d,e,"",!0),this.context=this.canvas.getContext("2d"),this.ctx=this.context,this.imageData=this.context.getImageData(0,0,d,e),this.data=this.imageData.data,this.pixels=null,this.imageData.data.buffer?(this.buffer=this.imageData.data.buffer,this.pixels=new Uint32Array(this.buffer)):window.ArrayBuffer?(this.buffer=new ArrayBuffer(this.imageData.data.length),this.pixels=new Uint32Array(this.buffer)):this.pixels=this.imageData.data,this.baseTexture=new PIXI.BaseTexture(this.canvas),this.texture=new PIXI.Texture(this.baseTexture),this.textureFrame=new b.Frame(0,0,0,d,e,"bitmapData",a.rnd.uuid()),this.type=b.BITMAPDATA,this.disableTextureUpload=!1,this.dirty=!1,this.cls=this.clear,this.update=this.refreshBuffer,this._tempR=0,this._tempG=0,this._tempB=0},b.BitmapData.prototype={add:function(a){if(Array.isArray(a))for(var b=0;bm;m++)for(var n=d;h>n;n++)b.Color.unpackPixel(this.getPixel32(n,m),j),k=a.call(c,j,n,m),k!==!1&&null!==k&&(this.setPixel32(n,m,k.r,k.g,k.b,k.a,!1),l=!0);l&&(this.context.putImageData(this.imageData,0,0),this.dirty=!0)},processPixel:function(a,b,c,d,e,f){"undefined"==typeof c&&(c=0),"undefined"==typeof d&&(d=0),"undefined"==typeof e&&(e=this.width),"undefined"==typeof f&&(f=this.height);for(var g=c+e,h=d+f,i=0,j=0,k=!1,l=d;h>l;l++)for(var m=c;g>m;m++)i=this.getPixel32(m,l),j=a.call(b,i,m,l),j!==i&&(this.pixels[l*this.width+m]=j,k=!0);k&&(this.context.putImageData(this.imageData,0,0),this.dirty=!0)},replaceRGB:function(a,c,d,e,f,g,h,i,j){var k=0,l=0,m=this.width,n=this.height,o=b.Color.packPixel(a,c,d,e);void 0!==j&&j instanceof b.Rectangle&&(k=j.x,l=j.y,m=j.width,n=j.height);for(var p=0;n>p;p++)for(var q=0;m>q;q++)this.getPixel32(k+q,l+p)===o&&this.setPixel32(k+q,l+p,f,g,h,i,!1);this.context.putImageData(this.imageData,0,0),this.dirty=!0},setHSL:function(a,c,d,e){if(("undefined"==typeof a||null===a)&&(a=!1),("undefined"==typeof c||null===c)&&(c=!1),("undefined"==typeof d||null===d)&&(d=!1),a||c||d){"undefined"==typeof e&&(e=new b.Rectangle(0,0,this.width,this.height));for(var f=b.Color.createColor(),g=e.y;g=0&&a<=this.width&&c>=0&&c<=this.height&&(this.pixels[c*this.width+a]=b.Device.LITTLE_ENDIAN?g<<24|f<<16|e<<8|d:d<<24|e<<16|f<<8|g,h&&(this.context.putImageData(this.imageData,0,0),this.dirty=!0))},setPixel:function(a,b,c,d,e,f){this.setPixel32(a,b,c,d,e,255,f)},getPixel:function(a,c,d){d||(d=b.Color.createColor());var e=~~(a+c*this.width);return e*=4,this.data[e]&&(d.r=this.data[e],d.g=this.data[++e],d.b=this.data[++e],d.a=this.data[++e]),d},getPixel32:function(a,b){return a>=0&&a<=this.width&&b>=0&&b<=this.height?this.pixels[b*this.width+a]:void 0},getPixelRGB:function(a,c,d,e,f){return b.Color.unpackPixel(this.getPixel32(a,c),d,e,f)},getPixels:function(a){return this.context.getImageData(a.x,a.y,a.width,a.height)},copyPixels:function(a,b,c,d){"string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,b.x,b.y,b.width,b.height,c,d,b.width,b.height),this.dirty=!0},draw:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),"string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,0,0,a.width,a.height,b,c,a.width,a.height),this.dirty=!0},drawSprite:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0);var d=a.texture.frame;this.context.drawImage(a.texture.baseTexture.source,d.x,d.y,d.width,d.height,b,c,d.width,d.height),this.dirty=!0},alphaMask:function(a,b){var c=this.context.globalCompositeOperation;"string"==typeof b&&(b=this.game.cache.getImage(b)),b&&this.context.drawImage(b,0,0),this.context.globalCompositeOperation="source-atop","string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,0,0),this.context.globalCompositeOperation=c,this.dirty=!0},extract:function(a,b,c,d,e){return"undefined"==typeof e&&(e=255),this.processPixelRGB(function(f,g,h){return f.r===b&&f.g===c&&f.b===d&&a.setPixel32(g,h,b,c,d,e,!1),!1},this),a.context.putImageData(a.imageData,0,0),a.dirty=!0,a},circle:function(a,b,c,d){"undefined"!=typeof d&&(this.context.fillStyle=d),this.context.beginPath(),this.context.arc(a,b,c,0,2*Math.PI,!1),this.context.closePath(),this.context.fill()},render:function(){!this.disableTextureUpload&&this.game.renderType===b.WEBGL&&this.dirty&&(PIXI.updateWebGLTexture(this.baseTexture,this.game.renderer.gl),this.dirty=!1)}},b.BitmapData.prototype.constructor=b.BitmapData,b.Sprite=function(a,c,d,e,f){c=c||0,d=d||0,e=e||null,f=f||null,this.game=a,this.name="",this.type=b.SPRITE,this.z=0,this.events=new b.Events(this),this.animations=new b.AnimationManager(this),this.key=e,this._frame=0,this._frameName="",PIXI.Sprite.call(this,PIXI.TextureCache.__default),this.loadTexture(e,f),this.position.set(c,d),this.world=new b.Point(c,d),this.autoCull=!1,this.input=null,this.body=null,this.health=1,this.lifespan=0,this.checkWorldBounds=!1,this.outOfBoundsKill=!1,this.debug=!1,this.cameraOffset=new b.Point,this._cache=[0,0,0,0,1,0,1,0,0],this._bounds=new b.Rectangle},b.Sprite.prototype=Object.create(PIXI.Sprite.prototype),b.Sprite.prototype.constructor=b.Sprite,b.Sprite.prototype.preUpdate=function(){if(1===this._cache[4]&&this.exists)return this.world.setTo(this.parent.position.x+this.position.x,this.parent.position.y+this.position.y),this.worldTransform.tx=this.world.x,this.worldTransform.ty=this.world.y,this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,this.body&&this.body.preUpdate(),this._cache[4]=0,!1;if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this._cache[3]=-1,!1;if(this.lifespan>0&&(this.lifespan-=this.game.time.elapsed,this.lifespan<=0))return this.kill(),!1;if((this.autoCull||this.checkWorldBounds)&&this._bounds.copyFrom(this.getBounds()),this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this._bounds)),this.checkWorldBounds)if(1===this._cache[5]&&this.game.world.bounds.intersects(this._bounds))this._cache[5]=0,this.events.onEnterBounds.dispatch(this);else if(0===this._cache[5]&&!this.game.world.bounds.intersects(this._bounds)&&(this._cache[5]=1,this.events.onOutOfBounds.dispatch(this),this.outOfBoundsKill))return this.kill(),!1;this.world.setTo(this.game.camera.x+this.worldTransform.tx,this.game.camera.y+this.worldTransform.ty),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++),this.animations.update(),this.body&&this.body.preUpdate();for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Sprite.prototype.update=function(){},b.Sprite.prototype.postUpdate=function(){this.key instanceof b.BitmapData&&this.key.render(),this.exists&&this.body&&this.body.postUpdate(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,c=this.children.length;c>a;a++)this.children[a].postUpdate()},b.Sprite.prototype.loadTexture=function(a,c){return c=c||0,a instanceof b.RenderTexture?(this.key=a.key,void this.setTexture(a)):a instanceof b.BitmapData?(this.key=a,void this.setTexture(a.texture)):a instanceof PIXI.Texture?(this.key=a,void this.setTexture(a)):null===a||"undefined"==typeof a?(this.key="__default",void this.setTexture(PIXI.TextureCache[this.key])):"string"!=typeof a||this.game.cache.checkImageKey(a)?this.game.cache.isSpriteSheet(a)?(this.key=a,this.animations.loadFrameData(this.game.cache.getFrameData(a)),"string"==typeof c?this.frameName=c:this.frame=c,void 0):(this.key=a,void this.setTexture(PIXI.TextureCache[a])):(this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]))},b.Sprite.prototype.crop=function(a){if("undefined"==typeof a||null===a)this.texture.hasOwnProperty("sourceWidth")&&this.texture.setFrame(new b.Rectangle(0,0,this.texture.sourceWidth,this.texture.sourceHeight));else if(this.texture instanceof PIXI.Texture){var c={};b.Utils.extend(!0,c,this.texture),c.sourceWidth=c.width,c.sourceHeight=c.height,c.frame=a,c.width=a.width,c.height=a.height,this.texture=c,this.texture.updateFrame=!0,PIXI.Texture.frameUpdates.push(this.texture)}else this.texture.setFrame(a)},b.Sprite.prototype.revive=function(a){return"undefined"==typeof a&&(a=1),this.alive=!0,this.exists=!0,this.visible=!0,this.health=a,this.events&&this.events.onRevived.dispatch(this),this},b.Sprite.prototype.kill=function(){return this.alive=!1,this.exists=!1,this.visible=!1,this.events&&this.events.onKilled.dispatch(this),this},b.Sprite.prototype.destroy=function(a){if(null!==this.game&&1!==this._cache[8]){"undefined"==typeof a&&(a=!0),this._cache[8]=1,this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.input&&this.input.destroy(),this.animations&&this.animations.destroy(),this.body&&this.body.destroy(),this.events&&this.events.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.alive=!1,this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null,this._cache[8]=0}},b.Sprite.prototype.damage=function(a){return this.alive&&(this.health-=a,this.health<=0&&this.kill()),this},b.Sprite.prototype.reset=function(a,b,c){return"undefined"==typeof c&&(c=1),this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.health=c,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this},b.Sprite.prototype.bringToTop=function(){return this.parent&&this.parent.bringToTop(this),this},b.Sprite.prototype.play=function(a,b,c,d){return this.animations?this.animations.play(a,b,c,d):void 0},b.Sprite.prototype.overlap=function(a){return b.Rectangle.intersects(this.getBounds(),a.getBounds())},Object.defineProperty(b.Sprite.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.Sprite.prototype,"deltaX",{get:function(){return this.world.x-this._cache[0]}}),Object.defineProperty(b.Sprite.prototype,"deltaY",{get:function(){return this.world.y-this._cache[1]}}),Object.defineProperty(b.Sprite.prototype,"deltaZ",{get:function(){return this.rotation-this._cache[2]}}),Object.defineProperty(b.Sprite.prototype,"inWorld",{get:function(){return this.game.world.bounds.intersects(this.getBounds())}}),Object.defineProperty(b.Sprite.prototype,"inCamera",{get:function(){return this.game.world.camera.screenView.intersects(this.getBounds())}}),Object.defineProperty(b.Sprite.prototype,"frame",{get:function(){return this.animations.frame},set:function(a){this.animations.frame=a}}),Object.defineProperty(b.Sprite.prototype,"frameName",{get:function(){return this.animations.frameName},set:function(a){this.animations.frameName=a}}),Object.defineProperty(b.Sprite.prototype,"renderOrderID",{get:function(){return this._cache[3]}}),Object.defineProperty(b.Sprite.prototype,"inputEnabled",{get:function(){return this.input&&this.input.enabled},set:function(a){a?null===this.input?(this.input=new b.InputHandler(this),this.input.start()):this.input&&!this.input.enabled&&this.input.start():this.input&&this.input.enabled&&this.input.stop()}}),Object.defineProperty(b.Sprite.prototype,"exists",{get:function(){return!!this._cache[6]},set:function(a){a?(this._cache[6]=1,this.body&&this.body.type===b.Physics.P2JS&&this.body.addToWorld(),this.visible=!0):(this._cache[6]=0,this.body&&this.body.type===b.Physics.P2JS&&this.body.removeFromWorld(),this.visible=!1)}}),Object.defineProperty(b.Sprite.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),Object.defineProperty(b.Sprite.prototype,"smoothed",{get:function(){return!this.texture.baseTexture.scaleMode},set:function(a){a?this.texture&&(this.texture.baseTexture.scaleMode=0):this.texture&&(this.texture.baseTexture.scaleMode=1)}}),Object.defineProperty(b.Sprite.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.Sprite.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.Sprite.prototype,"destroyPhase",{get:function(){return!!this._cache[8]}}),b.Image=function(a,c,d,e,f){c=c||0,d=d||0,e=e||null,f=f||null,this.game=a,this.exists=!0,this.name="",this.type=b.IMAGE,this.z=0,this.events=new b.Events(this),this.key=e,this._frame=0,this._frameName="",PIXI.Sprite.call(this,PIXI.TextureCache.__default),this.loadTexture(e,f),this.position.set(c,d),this.world=new b.Point(c,d),this.autoCull=!1,this.input=null,this.cameraOffset=new b.Point,this._cache=[0,0,0,0,1,0,1,0,0]},b.Image.prototype=Object.create(PIXI.Sprite.prototype),b.Image.prototype.constructor=b.Image,b.Image.prototype.preUpdate=function(){if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this._cache[3]=-1,!1;this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this.getBounds())),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++);for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Image.prototype.update=function(){},b.Image.prototype.postUpdate=function(){this.key instanceof b.BitmapData&&this.key.render(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,c=this.children.length;c>a;a++)this.children[a].postUpdate()},b.Image.prototype.loadTexture=function(a,c){if(c=c||0,a instanceof b.RenderTexture)return this.key=a.key,void this.setTexture(a);if(a instanceof b.BitmapData)return this.key=a,void this.setTexture(a.texture);if(a instanceof PIXI.Texture)return this.key=a,void this.setTexture(a);if(null===a||"undefined"==typeof a)return this.key="__default",void this.setTexture(PIXI.TextureCache[this.key]);if("string"==typeof a&&!this.game.cache.checkImageKey(a))return this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]);if(this.game.cache.isSpriteSheet(a)){this.key=a;var d=this.game.cache.getFrameData(a);return"string"==typeof c?(this._frame=0,this._frameName=c,void this.setTexture(PIXI.TextureCache[d.getFrameByName(c).uuid])):(this._frame=c,this._frameName="",void this.setTexture(PIXI.TextureCache[d.getFrame(c).uuid]))}return this.key=a,void this.setTexture(PIXI.TextureCache[a])},b.Image.prototype.crop=function(a){if("undefined"==typeof a||null===a)this.texture.hasOwnProperty("sourceWidth")&&this.texture.setFrame(new b.Rectangle(0,0,this.texture.sourceWidth,this.texture.sourceHeight));else if(this.texture instanceof PIXI.Texture){var c={};b.Utils.extend(!0,c,this.texture),c.sourceWidth=c.width,c.sourceHeight=c.height,c.frame=a,c.width=a.width,c.height=a.height,this.texture=c,this.texture.updateFrame=!0,PIXI.Texture.frameUpdates.push(this.texture)}else this.texture.setFrame(a)},b.Image.prototype.revive=function(){return this.alive=!0,this.exists=!0,this.visible=!0,this.events&&this.events.onRevived.dispatch(this),this},b.Image.prototype.kill=function(){return this.alive=!1,this.exists=!1,this.visible=!1,this.events&&this.events.onKilled.dispatch(this),this},b.Image.prototype.destroy=function(a){if(null!==this.game&&!this.destroyPhase){"undefined"==typeof a&&(a=!0),this._cache[8]=1,this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.events&&this.events.destroy(),this.input&&this.input.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.alive=!1,this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null,this._cache[8]=0}},b.Image.prototype.reset=function(a,b){return this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this},b.Image.prototype.bringToTop=function(){return this.parent&&this.parent.bringToTop(this),this},Object.defineProperty(b.Image.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.Image.prototype,"deltaX",{get:function(){return this.world.x-this._cache[0]}}),Object.defineProperty(b.Image.prototype,"deltaY",{get:function(){return this.world.y-this._cache[1]}}),Object.defineProperty(b.Image.prototype,"deltaZ",{get:function(){return this.rotation-this._cache[2]}}),Object.defineProperty(b.Image.prototype,"inWorld",{get:function(){return this.game.world.bounds.intersects(this.getBounds())}}),Object.defineProperty(b.Image.prototype,"inCamera",{get:function(){return this.game.world.camera.screenView.intersects(this.getBounds())}}),Object.defineProperty(b.Image.prototype,"frame",{get:function(){return this._frame},set:function(a){if(a!==this.frame&&this.game.cache.isSpriteSheet(this.key)){var b=this.game.cache.getFrameData(this.key);b&&aa;a++)this.children[a].preUpdate();return!0},b.TileSprite.prototype.update=function(){},b.TileSprite.prototype.postUpdate=function(){this.exists&&this.body&&this.body.postUpdate(),1===this._cache[7]&&(this.position.x=this.game.camera.view.x+this.cameraOffset.x,this.position.y=this.game.camera.view.y+this.cameraOffset.y);for(var a=0,b=this.children.length;b>a;a++)this.children[a].postUpdate()},b.TileSprite.prototype.autoScroll=function(a,b){this._scroll.set(a,b)},b.TileSprite.prototype.stopScroll=function(){this._scroll.set(0,0)},b.TileSprite.prototype.loadTexture=function(a,c){return c=c||0,a instanceof b.RenderTexture?(this.key=a.key,void this.setTexture(a)):a instanceof b.BitmapData?(this.key=a,void this.setTexture(a.texture)):a instanceof PIXI.Texture?(this.key=a,void this.setTexture(a)):null===a||"undefined"==typeof a?(this.key="__default",void this.setTexture(PIXI.TextureCache[this.key])):"string"!=typeof a||this.game.cache.checkImageKey(a)?this.game.cache.isSpriteSheet(a)?(this.key=a,this.animations.loadFrameData(this.game.cache.getFrameData(a)),"string"==typeof c?this.frameName=c:this.frame=c,void 0):(this.key=a,void this.setTexture(PIXI.TextureCache[a])):(this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]))},b.TileSprite.prototype.destroy=function(a){if(null!==this.game&&!this.destroyPhase){"undefined"==typeof a&&(a=!0),this._cache[8]=1,this.filters&&(this.filters=null),this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.animations.destroy(),this.events.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null,this._cache[8]=0}},b.TileSprite.prototype.play=function(a,b,c,d){return this.animations.play(a,b,c,d)},b.TileSprite.prototype.reset=function(a,b){return this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.tilePosition.x=0,this.tilePosition.y=0,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this},Object.defineProperty(b.TileSprite.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.TileSprite.prototype,"frame",{get:function(){return this.animations.frame},set:function(a){a!==this.animations.frame&&(this.animations.frame=a)}}),Object.defineProperty(b.TileSprite.prototype,"frameName",{get:function(){return this.animations.frameName},set:function(a){a!==this.animations.frameName&&(this.animations.frameName=a)}}),Object.defineProperty(b.TileSprite.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),Object.defineProperty(b.TileSprite.prototype,"exists",{get:function(){return!!this._cache[6]},set:function(a){a?(this._cache[6]=1,this.body&&this.body.type===b.Physics.P2JS&&this.body.addToWorld(),this.visible=!0):(this._cache[6]=0,this.body&&this.body.type===b.Physics.P2JS&&(this.body.safeRemove=!0),this.visible=!1)}}),Object.defineProperty(b.TileSprite.prototype,"inputEnabled",{get:function(){return this.input&&this.input.enabled},set:function(a){a?null===this.input?(this.input=new b.InputHandler(this),this.input.start()):this.input&&!this.input.enabled&&this.input.start():this.input&&this.input.enabled&&this.input.stop()}}),Object.defineProperty(b.TileSprite.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.TileSprite.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.TileSprite.prototype,"destroyPhase",{get:function(){return!!this._cache[8]}}),b.Text=function(a,c,d,e,f){c=c||0,d=d||0,e=e||" ",f=f||{},e=0===e.length?" ":e.toString(),this.game=a,this.exists=!0,this.name="",this.type=b.TEXT,this.z=0,this.world=new b.Point(c,d),this._text=e,this._font="",this._fontSize=32,this._fontWeight="normal",this._lineSpacing=0,this.events=new b.Events(this),this.input=null,this.cameraOffset=new b.Point,this.setStyle(f),PIXI.Text.call(this,e,this.style),this.position.set(c,d),this._cache=[0,0,0,0,1,0,1,0,0] +},b.Text.prototype=Object.create(PIXI.Text.prototype),b.Text.prototype.constructor=b.Text,b.Text.prototype.preUpdate=function(){if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this.renderOrderID=-1,!1;this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this.getBounds())),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++);for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Text.prototype.update=function(){},b.Text.prototype.postUpdate=function(){1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,b=this.children.length;b>a;a++)this.children[a].postUpdate()},b.Text.prototype.destroy=function(a){if(null!==this.game&&!this.destroyPhase){"undefined"==typeof a&&(a=!0),this._cache[8]=1,this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.texture.destroy(),this.canvas.parentNode?this.canvas.parentNode.removeChild(this.canvas):(this.canvas=null,this.context=null);var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null,this._cache[8]=0}},b.Text.prototype.setShadow=function(a,b,c,d){this.style.shadowOffsetX=a||0,this.style.shadowOffsetY=b||0,this.style.shadowColor=c||"rgba(0,0,0,0)",this.style.shadowBlur=d||0,this.dirty=!0},b.Text.prototype.setStyle=function(a){a=a||{},a.font=a.font||"bold 20pt Arial",a.fill=a.fill||"black",a.align=a.align||"left",a.stroke=a.stroke||"black",a.strokeThickness=a.strokeThickness||0,a.wordWrap=a.wordWrap||!1,a.wordWrapWidth=a.wordWrapWidth||100,a.shadowOffsetX=a.shadowOffsetX||0,a.shadowOffsetY=a.shadowOffsetY||0,a.shadowColor=a.shadowColor||"rgba(0,0,0,0)",a.shadowBlur=a.shadowBlur||0,this.style=a,this.dirty=!0},b.Text.prototype.updateText=function(){this.context.font=this.style.font;var a=this.text;this.style.wordWrap&&(a=this.runWordWrap(this.text));for(var b=a.split(/(?:\r\n|\r|\n)/),c=[],d=0,e=0;ee?(g>0&&(b+="\n"),b+=f[g]+" ",e=this.style.wordWrapWidth-h):(e-=i,b+=f[g]+" ")}d?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",b.RetroFont.TEXT_SET2=" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET3="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ",b.RetroFont.TEXT_SET4="ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789",b.RetroFont.TEXT_SET5="ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/() '!?-*:0123456789",b.RetroFont.TEXT_SET6="ABCDEFGHIJKLMNOPQRSTUVWXYZ!?:;0123456789\"(),-.' ",b.RetroFont.TEXT_SET7="AGMSY+:4BHNTZ!;5CIOU.?06DJPV,(17EKQW\")28FLRX-'39",b.RetroFont.TEXT_SET8="0123456789 .ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET9="ABCDEFGHIJKLMNOPQRSTUVWXYZ()-0123456789.:,'\"?!",b.RetroFont.TEXT_SET10="ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET11="ABCDEFGHIJKLMNOPQRSTUVWXYZ.,\"-+!?()':;0123456789",b.RetroFont.prototype.setFixedWidth=function(a,b){"undefined"==typeof b&&(b="left"),this.fixedWidth=a,this.align=b},b.RetroFont.prototype.setText=function(a,b,c,d,e,f){this.multiLine=b||!1,this.customSpacingX=c||0,this.customSpacingY=d||0,this.align=e||"left",this.autoUpperCase=f?!1:!0,a.length>0&&(this.text=a)},b.RetroFont.prototype.resize=function(a,b){if(this.width=a,this.height=b,this.frame.width=this.width,this.frame.height=this.height,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.renderer.type===PIXI.WEBGL_RENDERER){this.projection.x=this.width/2,this.projection.y=-this.height/2;var c=this.renderer.gl;c.bindTexture(c.TEXTURE_2D,this.baseTexture._glTextures[c.id]),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,this.width,this.height,0,c.RGBA,c.UNSIGNED_BYTE,null)}else this.textureBuffer.resize(this.width,this.height);PIXI.Texture.frameUpdates.push(this)},b.RetroFont.prototype.buildRetroFontText=function(){var a=0,c=0;if(this.multiLine){var d=this._text.split("\n");this.fixedWidth>0?this.resize(this.fixedWidth,d.length*(this.characterHeight+this.customSpacingY)-this.customSpacingY):this.resize(this.getLongestLine()*(this.characterWidth+this.customSpacingX),d.length*(this.characterHeight+this.customSpacingY)-this.customSpacingY),this.textureBuffer.clear();for(var e=0;ea&&(a=0),this.pasteLine(d[e],a,c,this.customSpacingX),c+=this.characterHeight+this.customSpacingY}}else{switch(this.fixedWidth>0?this.resize(this.fixedWidth,this.characterHeight):this.resize(this._text.length*(this.characterWidth+this.customSpacingX),this.characterHeight),this.textureBuffer.clear(),this.align){case b.RetroFont.ALIGN_LEFT:a=0;break;case b.RetroFont.ALIGN_RIGHT:a=this.width-this._text.length*(this.characterWidth+this.customSpacingX);break;case b.RetroFont.ALIGN_CENTER:a=this.width/2-this._text.length*(this.characterWidth+this.customSpacingX)/2,a+=this.customSpacingX/2}this.pasteLine(this._text,a,0,this.customSpacingX)}},b.RetroFont.prototype.pasteLine=function(a,c,d,e){for(var f=new b.Point,g=0;g=0&&(this.stamp.frame=this.grabData[a.charCodeAt(g)],f.set(c,d),this.render(this.stamp,f,!1),c+=this.characterWidth+e,c>this.width))break},b.RetroFont.prototype.getLongestLine=function(){var a=0;if(this._text.length>0)for(var b=this._text.split("\n"),c=0;ca&&(a=b[c].length);return a},b.RetroFont.prototype.removeUnsupportedCharacters=function(a){for(var b="",c=0;c=0||!a&&"\n"===d)&&(b=b.concat(d))}return b},Object.defineProperty(b.RetroFont.prototype,"text",{get:function(){return this._text},set:function(a){var b;b=this.autoUpperCase?a.toUpperCase():a,b!==this._text&&(this._text=b,this.removeUnsupportedCharacters(this.multiLine),this.buildRetroFontText())}}),b.Particle=function(a,c,d,e,f){b.Sprite.call(this,a,c,d,e,f),this.autoScale=!1,this.scaleData=null,this._s=0,this.autoAlpha=!1,this.alphaData=null,this._a=0},b.Particle.prototype=Object.create(b.Sprite.prototype),b.Particle.prototype.constructor=b.Particle,b.Particle.prototype.update=function(){this.autoScale&&(this._s--,this._s?this.scale.set(this.scaleData[this._s].x,this.scaleData[this._s].y):this.autoScale=!1),this.autoAlpha&&(this._a--,this._a?this.alpha=this.alphaData[this._a].v:this.autoAlpha=!1)},b.Particle.prototype.onEmit=function(){},b.Particle.prototype.setAlphaData=function(a){this.alphaData=a,this._a=a.length-1,this.alpha=this.alphaData[this._a].v,this.autoAlpha=!0},b.Particle.prototype.setScaleData=function(a){this.scaleData=a,this._s=a.length-1,this.scale.set(this.scaleData[this._s].x,this.scaleData[this._s].y),this.autoScale=!0},b.Particle.prototype.reset=function(a,b,c){return"undefined"==typeof c&&(c=1),this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.health=c,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this.alpha=1,this.scale.set(1),this.autoScale=!1,this.autoAlpha=!1,this},b.Canvas={create:function(a,b,c,d){if("undefined"==typeof d&&(d=!1),a=a||256,b=b||256,d)var e=document.createElement("canvas");else var e=document.createElement(navigator.isCocoonJS?"screencanvas":"canvas");return"string"==typeof c&&""!==c&&(e.id=c),e.width=a,e.height=b,e.style.display="block",e},getOffset:function(a,c){c=c||new b.Point;var d=a.getBoundingClientRect(),e=a.clientTop||document.body.clientTop||0,f=a.clientLeft||document.body.clientLeft||0,g=0,h=0;return"CSS1Compat"===document.compatMode?(g=window.pageYOffset||document.documentElement.scrollTop||a.scrollTop||0,h=window.pageXOffset||document.documentElement.scrollLeft||a.scrollLeft||0):(g=window.pageYOffset||document.body.scrollTop||a.scrollTop||0,h=window.pageXOffset||document.body.scrollLeft||a.scrollLeft||0),c.x=d.left+h-f,c.y=d.top+g-e,c},getAspectRatio:function(a){return a.width/a.height},setBackgroundColor:function(a,b){return b=b||"rgb(0,0,0)",a.style.backgroundColor=b,a},setTouchAction:function(a,b){return b=b||"none",a.style.msTouchAction=b,a.style["ms-touch-action"]=b,a.style["touch-action"]=b,a},setUserSelect:function(a,b){return b=b||"none",a.style["-webkit-touch-callout"]=b,a.style["-webkit-user-select"]=b,a.style["-khtml-user-select"]=b,a.style["-moz-user-select"]=b,a.style["-ms-user-select"]=b,a.style["user-select"]=b,a.style["-webkit-tap-highlight-color"]="rgba(0, 0, 0, 0)",a},addToDOM:function(a,b,c){var d;return"undefined"==typeof c&&(c=!0),b&&("string"==typeof b?d=document.getElementById(b):"object"==typeof b&&1===b.nodeType&&(d=b)),d||(d=document.body),c&&d.style&&(d.style.overflow="hidden"),d.appendChild(a),a},setTransform:function(a,b,c,d,e,f,g){return a.setTransform(d,f,g,e,b,c),a},setSmoothingEnabled:function(a,b){return a.imageSmoothingEnabled=b,a.mozImageSmoothingEnabled=b,a.oImageSmoothingEnabled=b,a.webkitImageSmoothingEnabled=b,a.msImageSmoothingEnabled=b,a},setImageRenderingCrisp:function(a){return a.style["image-rendering"]="optimizeSpeed",a.style["image-rendering"]="crisp-edges",a.style["image-rendering"]="-moz-crisp-edges",a.style["image-rendering"]="-webkit-optimize-contrast",a.style["image-rendering"]="optimize-contrast",a.style.msInterpolationMode="nearest-neighbor",a},setImageRenderingBicubic:function(a){return a.style["image-rendering"]="auto",a.style.msInterpolationMode="bicubic",a}},b.Device=function(a){this.game=a,this.desktop=!1,this.iOS=!1,this.cocoonJS=!1,this.ejecta=!1,this.crosswalk=!1,this.android=!1,this.chromeOS=!1,this.linux=!1,this.macOS=!1,this.windows=!1,this.windowsPhone=!1,this.canvas=!1,this.file=!1,this.fileSystem=!1,this.localStorage=!1,this.webGL=!1,this.worker=!1,this.touch=!1,this.mspointer=!1,this.css3D=!1,this.pointerLock=!1,this.typedArray=!1,this.vibration=!1,this.getUserMedia=!1,this.quirksMode=!1,this.arora=!1,this.chrome=!1,this.epiphany=!1,this.firefox=!1,this.ie=!1,this.ieVersion=0,this.trident=!1,this.tridentVersion=0,this.mobileSafari=!1,this.midori=!1,this.opera=!1,this.safari=!1,this.webApp=!1,this.silk=!1,this.audioData=!1,this.webAudio=!1,this.ogg=!1,this.opus=!1,this.mp3=!1,this.wav=!1,this.m4a=!1,this.webm=!1,this.iPhone=!1,this.iPhone4=!1,this.iPad=!1,this.pixelRatio=0,this.littleEndian=!1,this.support32bit=!1,this.fullscreen=!1,this.requestFullscreen="",this.cancelFullscreen="",this.fullscreenKeyboard=!1,this._checkAudio(),this._checkBrowser(),this._checkCSS3D(),this._checkDevice(),this._checkFeatures(),this._checkOS()},b.Device.LITTLE_ENDIAN=!1,b.Device.prototype={_checkOS:function(){var a=navigator.userAgent;/Android/.test(a)?this.android=!0:/CrOS/.test(a)?this.chromeOS=!0:/iP[ao]d|iPhone/i.test(a)?this.iOS=!0:/Linux/.test(a)?this.linux=!0:/Mac OS/.test(a)?this.macOS=!0:/Windows/.test(a)&&(this.windows=!0,/Windows Phone/i.test(a)&&(this.windowsPhone=!0)),(this.windows||this.macOS||this.linux&&this.silk===!1)&&(this.desktop=!0),(this.windowsPhone||/Windows NT/i.test(a)&&/Touch/i.test(a))&&(this.desktop=!1)},_checkFeatures:function(){this.canvas=!!window.CanvasRenderingContext2D||this.cocoonJS;try{this.localStorage=!!localStorage.getItem}catch(a){this.localStorage=!1}this.file=!!(window.File&&window.FileReader&&window.FileList&&window.Blob),this.fileSystem=!!window.requestFileSystem,this.webGL=function(){try{var a=document.createElement("canvas");return!!window.WebGLRenderingContext&&(a.getContext("webgl")||a.getContext("experimental-webgl"))}catch(b){return!1}}(),this.webGL=null===this.webGL||this.webGL===!1?!1:!0,this.worker=!!window.Worker,("ontouchstart"in document.documentElement||window.navigator.maxTouchPoints&&window.navigator.maxTouchPoints>1)&&(this.touch=!0),(window.navigator.msPointerEnabled||window.navigator.pointerEnabled)&&(this.mspointer=!0),this.pointerLock="pointerLockElement"in document||"mozPointerLockElement"in document||"webkitPointerLockElement"in document,this.quirksMode="CSS1Compat"===document.compatMode?!1:!0,this.getUserMedia=!!(navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia)},checkFullScreenSupport:function(){for(var a=["requestFullscreen","requestFullScreen","webkitRequestFullscreen","webkitRequestFullScreen","msRequestFullscreen","msRequestFullScreen","mozRequestFullScreen","mozRequestFullscreen"],b=0;b0&&"none"!==a},canPlayAudio:function(a){return"mp3"==a&&this.mp3?!0:"ogg"==a&&(this.ogg||this.opus)?!0:"m4a"==a&&this.m4a?!0:"wav"==a&&this.wav?!0:"webm"==a&&this.webm?!0:!1},isConsoleOpen:function(){return window.console&&window.console.firebug?!0:window.console&&(console.profile(),console.profileEnd(),console.clear&&console.clear(),console.profiles)?console.profiles.length>0:!1}},b.Device.prototype.constructor=b.Device,b.RequestAnimationFrame=function(a,b){"undefined"==typeof b&&(b=!1),this.game=a,this.isRunning=!1,this.forceSetTimeOut=b;for(var c=["ms","moz","webkit","o"],d=0;da},fuzzyGreaterThan:function(a,b,c){return"undefined"==typeof c&&(c=1e-4),a>b-c},fuzzyCeil:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.ceil(a-b)},fuzzyFloor:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.floor(a+b)},average:function(){for(var a=[],b=0;b0?Math.floor(a):Math.ceil(a)},shear:function(a){return a%1},snapTo:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.round(a/b),c+a)},snapToFloor:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.floor(a/b),c+a)},snapToCeil:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.ceil(a/b),c+a)},snapToInArray:function(a,b,c){if("undefined"==typeof c&&(c=!0),c&&b.sort(),a=f-a?f:e},roundTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.round(a*d)/d},floorTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.floor(a*d)/d},ceilTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.ceil(a*d)/d},interpolateFloat:function(a,b,c){return(b-a)*c+a},angleBetween:function(a,b,c,d){return Math.atan2(d-b,c-a)},angleBetweenPoints:function(a,b){return Math.atan2(b.y-a.y,b.x-a.x)},reverseAngle:function(a){return this.normalizeAngle(a+Math.PI,!0)},normalizeAngle:function(a){return a%=2*Math.PI,a>=0?a:a+2*Math.PI},normalizeLatitude:function(a){return Math.max(-90,Math.min(90,a))},normalizeLongitude:function(a){return a%360==180?180:(a%=360,-180>a?a+360:a>180?a-360:a)},nearestAngleBetween:function(a,b,c){"undefined"==typeof c&&(c=!0);var d=c?Math.PI:180;return a=this.normalizeAngle(a,c),b=this.normalizeAngle(b,c),-d/2>a&&b>d/2&&(a+=2*d),-d/2>b&&a>d/2&&(b+=2*d),b-a},interpolateAngles:function(a,b,c,d,e){return"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=null),a=this.normalizeAngle(a,d),b=this.normalizeAngleToAnother(b,a,d),"function"==typeof e?e(c,a,b-a,1):this.interpolateFloat(a,b,c)},chanceRoll:function(a){return"undefined"==typeof a&&(a=50),0>=a?!1:a>=100?!0:100*Math.random()>=a?!1:!0},numberArray:function(a,b){for(var c=[],d=a;b>=d;d++)c.push(d);return c},maxAdd:function(a,b,c){return a+=b,a>c&&(a=c),a},minSub:function(a,b,c){return a-=b,c>a&&(a=c),a},wrap:function(a,b,c){var d=c-b;if(0>=d)return 0;var e=(a-b)%d;return 0>e&&(e+=d),e+b},wrapValue:function(a,b,c){var d;return a=Math.abs(a),b=Math.abs(b),c=Math.abs(c),d=(a+b)%c},limitValue:function(a,b,c){return b>a?b:a>c?c:a},randomSign:function(){return Math.random()>.5?1:-1},isOdd:function(a){return 1&a},isEven:function(a){return 1&a?!1:!0},min:function(){if(1===arguments.length&&"object"==typeof arguments[0])var a=arguments[0];else var a=arguments;for(var b=1,c=0,d=a.length;d>b;b++)a[b]b;b++)a[b]>a[c]&&(c=b);return a[c]},minProperty:function(a){if(2===arguments.length&&"object"==typeof arguments[1])var b=arguments[1];else var b=arguments.slice(1);for(var c=1,d=0,e=b.length;e>c;c++)b[c][a]c;c++)b[c][a]>b[d][a]&&(d=c);return b[d][a]},wrapAngle:function(a,b){var c=b?Math.PI/180:1;return this.wrap(a,-180*c,180*c)},angleLimit:function(a,b,c){var d=a;return a>c?d=c:b>a&&(d=b),d},linearInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return 0>b?this.linear(a[0],a[1],d):b>1?this.linear(a[c],a[c-1],c-d):this.linear(a[e],a[e+1>c?c:e+1],d-e)},bezierInterpolation:function(a,b){for(var c=0,d=a.length-1,e=0;d>=e;e++)c+=Math.pow(1-b,d-e)*Math.pow(b,e)*a[e]*this.bernstein(d,e);return c},catmullRomInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return a[0]===a[c]?(0>b&&(e=Math.floor(d=c*(1+b))),this.catmullRom(a[(e-1+c)%c],a[e],a[(e+1)%c],a[(e+2)%c],d-e)):0>b?a[0]-(this.catmullRom(a[0],a[0],a[1],a[1],-d)-a[0]):b>1?a[c]-(this.catmullRom(a[c],a[c],a[c-1],a[c-1],d-c)-a[c]):this.catmullRom(a[e?e-1:0],a[e],a[e+1>c?c:e+1],a[e+2>c?c:e+2],d-e)},linear:function(a,b,c){return(b-a)*c+a},bernstein:function(a,b){return this.factorial(a)/this.factorial(b)/this.factorial(a-b)},catmullRom:function(a,b,c,d,e){var f=.5*(c-a),g=.5*(d-b),h=e*e,i=e*h;return(2*b-2*c+f+g)*i+(-3*b+3*c-2*f-g)*h+f*e+b},difference:function(a,b){return Math.abs(a-b)},getRandom:function(a,b,c){if("undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),null!=a){var d=c;if((0===d||d>a.length-b)&&(d=a.length-b),d>0)return a[b+Math.floor(Math.random()*d)]}return null},removeRandom:function(a,b,c){if("undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),null!=a){var d=c;if((0===d||d>a.length-b)&&(d=a.length-b),d>0){var e=b+Math.floor(Math.random()*d),f=a.splice(e,1);return f[0]}}return null},floor:function(a){var b=0|a;return a>0?b:b!=a?b-1:b},ceil:function(a){var b=0|a;return a>0&&b!=a?b+1:b},sinCosGenerator:function(a,b,c,d){"undefined"==typeof b&&(b=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1);for(var e=b,f=c,g=d*Math.PI/a,h=[],i=[],j=0;a>j;j++)f-=e*g,e+=f*g,h[j]=f,i[j]=e;return{sin:i,cos:h,length:a}},shift:function(a){var b=a.shift();return a.push(b),b},shuffleArray:function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},distance:function(a,b,c,d){var e=a-c,f=b-d;return Math.sqrt(e*e+f*f)},distancePow:function(a,b,c,d,e){return"undefined"==typeof e&&(e=2),Math.sqrt(Math.pow(c-a,e)+Math.pow(d-b,e))},distanceRounded:function(a,c,d,e){return Math.round(b.Math.distance(a,c,d,e))},clamp:function(a,b,c){return b>a?b:a>c?c:a},clampBottom:function(a,b){return b>a?b:a},within:function(a,b,c){return Math.abs(a-b)<=c},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){return a=Math.max(0,Math.min(1,(a-b)/(c-b))),a*a*(3-2*a)},smootherstep:function(a,b,c){return a=Math.max(0,Math.min(1,(a-b)/(c-b))),a*a*a*(a*(6*a-15)+10)},sign:function(a){return 0>a?-1:a>0?1:0},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}()},b.RandomDataGenerator=function(a){"undefined"==typeof a&&(a=[]),this.c=1,this.s0=0,this.s1=0,this.s2=0,this.sow(a)},b.RandomDataGenerator.prototype={rnd:function(){var a=2091639*this.s0+2.3283064365386963e-10*this.c;return this.c=0|a,this.s0=this.s1,this.s1=this.s2,this.s2=a-this.c,this.s2},sow:function(a){"undefined"==typeof a&&(a=[]),this.s0=this.hash(" "),this.s1=this.hash(this.s0),this.s2=this.hash(this.s1),this.c=1;for(var b,c=0;b=a[c++];)this.s0-=this.hash(b),this.s0+=~~(this.s0<0),this.s1-=this.hash(b),this.s1+=~~(this.s1<0),this.s2-=this.hash(b),this.s2+=~~(this.s2<0)},hash:function(a){var b,c,d;for(d=4022871197,a=a.toString(),c=0;c>>0,b-=d,b*=d,d=b>>>0,b-=d,d+=4294967296*b;return 2.3283064365386963e-10*(d>>>0)},integer:function(){return 4294967296*this.rnd.apply(this)},frac:function(){return this.rnd.apply(this)+1.1102230246251565e-16*(2097152*this.rnd.apply(this)|0)},real:function(){return this.integer()+this.frac()},integerInRange:function(a,b){return Math.floor(this.realInRange(0,b-a+1))+a},realInRange:function(a,b){return this.frac()*(b-a)+a},normal:function(){return 1-2*this.frac()},uuid:function(){var a="",b="";for(b=a="";a++<36;b+=~a%5|3*a&4?(15^a?8^this.frac()*(20^a?16:4):4).toString(16):"-");return b},pick:function(a){return a[this.integerInRange(0,a.length-1)]},weightedPick:function(a){return a[~~(Math.pow(this.frac(),2)*(a.length-1))]},timestamp:function(a,b){return this.realInRange(a||9466848e5,b||1577862e6)},angle:function(){return this.integerInRange(-180,180)}},b.RandomDataGenerator.prototype.constructor=b.RandomDataGenerator,b.QuadTree=function(a,b,c,d,e,f,g){this.maxObjects=10,this.maxLevels=4,this.level=0,this.bounds={},this.objects=[],this.nodes=[],this._empty=[],this.reset(a,b,c,d,e,f,g)},b.QuadTree.prototype={reset:function(a,b,c,d,e,f,g){this.maxObjects=e||10,this.maxLevels=f||4,this.level=g||0,this.bounds={x:Math.round(a),y:Math.round(b),width:c,height:d,subWidth:Math.floor(c/2),subHeight:Math.floor(d/2),right:Math.round(a)+Math.floor(c/2),bottom:Math.round(b)+Math.floor(d/2)},this.objects.length=0,this.nodes.length=0},populate:function(a){a.forEach(this.populateHandler,this,!0)},populateHandler:function(a){a.body&&a.exists&&this.insert(a.body)},split:function(){this.level++,this.nodes[0]=new b.QuadTree(this.bounds.right,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[1]=new b.QuadTree(this.bounds.x,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[2]=new b.QuadTree(this.bounds.x,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[3]=new b.QuadTree(this.bounds.right,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level)},insert:function(a){var b,c=0;if(null!=this.nodes[0]&&(b=this.getIndex(a),-1!==b))return void this.nodes[b].insert(a);if(this.objects.push(a),this.objects.length>this.maxObjects&&this.levelthis.bounds.bottom&&(b=2):a.x>this.bounds.right&&(a.ythis.bounds.bottom&&(b=3)),b},retrieve:function(a){if(!a.body)return this._empty;var b=this.objects,c=this.getIndex(a.body);return this.nodes[0]&&(-1!==c?b=b.concat(this.nodes[c].retrieve(a)):(b=b.concat(this.nodes[0].retrieve(a)),b=b.concat(this.nodes[1].retrieve(a)),b=b.concat(this.nodes[2].retrieve(a)),b=b.concat(this.nodes[3].retrieve(a)))),b},clear:function(){this.objects.length=0;for(var a=this.nodes.length;a--;)this.nodes[a].clear(),this.nodes.splice(a,1);this.nodes.length=0}},b.QuadTree.prototype.constructor=b.QuadTree,b.Net=function(a){this.game=a},b.Net.prototype={getHostName:function(){return window.location&&window.location.hostname?window.location.hostname:null},checkDomainName:function(a){return-1!==window.location.hostname.indexOf(a)},updateQueryString:function(a,b,c,d){"undefined"==typeof c&&(c=!1),("undefined"==typeof d||""===d)&&(d=window.location.href);var e="",f=new RegExp("([?|&])"+a+"=.*?(&|#|$)(.*)","gi");if(f.test(d))e="undefined"!=typeof b&&null!==b?d.replace(f,"$1"+a+"="+b+"$2$3"):d.replace(f,"$1$3").replace(/(&|\?)$/,"");else if("undefined"!=typeof b&&null!==b){var g=-1!==d.indexOf("?")?"&":"?",h=d.split("#");d=h[0]+g+a+"="+b,h[1]&&(d+="#"+h[1]),e=d}else e=d;return c?void(window.location.href=e):e},getQueryString:function(a){"undefined"==typeof a&&(a="");var b={},c=location.search.substring(1).split("&");for(var d in c){var e=c[d].split("=");if(e.length>1){if(a&&a==this.decodeURI(e[0]))return this.decodeURI(e[1]);b[this.decodeURI(e[0])]=this.decodeURI(e[1])}}return b},decodeURI:function(a){return decodeURIComponent(a.replace(/\+/g," "))}},b.Net.prototype.constructor=b.Net,b.TweenManager=function(a){this.game=a,this._tweens=[],this._add=[],this.game.onPause.add(this._pauseAll,this),this.game.onResume.add(this._resumeAll,this)},b.TweenManager.prototype={getAll:function(){return this._tweens},removeAll:function(){for(var a=0;aa;)this._tweens[a].update(this.game.time.now)?a++:(this._tweens.splice(a,1),b--);return this._add.length>0&&(this._tweens=this._tweens.concat(this._add),this._add.length=0),!0},isTweening:function(a){return this._tweens.some(function(b){return b._object===a})},_pauseAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a]._pause()},_resumeAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a]._resume()},pauseAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].pause()},resumeAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].resume(!0)}},b.TweenManager.prototype.constructor=b.TweenManager,b.Tween=function(a,c,d){this._object=a,this.game=c,this._manager=d,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._repeat=0,this._yoyo=!1,this._reversed=!1,this._delayTime=0,this._startTime=null,this._easingFunction=b.Easing.Linear.None,this._interpolationFunction=b.Math.linearInterpolation,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onUpdateCallback=null,this._onUpdateCallbackContext=null,this._paused=!1,this._pausedTime=0,this._codePaused=!1,this.pendingDelete=!1,this.onStart=new b.Signal,this.onLoop=new b.Signal,this.onComplete=new b.Signal,this.isRunning=!1},b.Tween.prototype={to:function(a,b,c,d,e,f,g){b=b||1e3,c=c||null,d=d||!1,e=e||0,f=f||0,g=g||!1,g&&0===f&&(f=1);var h;return this._parent?(h=this._manager.create(this._object),this._lastChild.chain(h),this._lastChild=h):(h=this,this._parent=this,this._lastChild=this),h._repeat=f,h._duration=b,h._valuesEnd=a,null!==c&&(h._easingFunction=c),e>0&&(h._delayTime=e),h._yoyo=g,d?this.start():this},start:function(){if(null!==this.game&&null!==this._object){this._manager.add(this),this.isRunning=!0,this._onStartCallbackFired=!1,this._startTime=this.game.time.now+this._delayTime;for(var a in this._valuesEnd){if(Array.isArray(this._valuesEnd[a])){if(0===this._valuesEnd[a].length)continue;this._valuesEnd[a]=[this._object[a]].concat(this._valuesEnd[a])}this._valuesStart[a]=this._object[a],Array.isArray(this._valuesStart[a])||(this._valuesStart[a]*=1),this._valuesStartRepeat[a]=this._valuesStart[a]||0}return this}},generateData:function(a,b){if(null===this.game||null===this._object)return null;this._startTime=0;for(var c in this._valuesEnd){if(Array.isArray(this._valuesEnd[c])){if(0===this._valuesEnd[c].length)continue;this._valuesEnd[c]=[this._object[c]].concat(this._valuesEnd[c])}this._valuesStart[c]=this._object[c],Array.isArray(this._valuesStart[c])||(this._valuesStart[c]*=1),this._valuesStartRepeat[c]=this._valuesStart[c]||0}for(var d=0,e=Math.floor(a*(this._duration/1e3)),f=this._duration/e,g=[];e--;){var c,h=(d-this._startTime)/this._duration;h=h>1?1:h;var i=this._easingFunction(h),j={};for(c in this._valuesEnd){var k=this._valuesStart[c]||0,l=this._valuesEnd[c];l instanceof Array?j[c]=this._interpolationFunction(l,i):("string"==typeof l&&(l=k+parseFloat(l,10)),"number"==typeof l&&(j[c]=k+(l-k)*i))}g.push(j),d+=f}if(this._yoyo){var m=g.slice();m.reverse(),g=g.concat(m)}return"undefined"!=typeof b?b=b.concat(g):g},stop:function(){return this.isRunning=!1,this._onUpdateCallback=null,this._manager.remove(this),this},delay:function(a){return this._delayTime=a,this},repeat:function(a){return this._repeat=a,this},yoyo:function(a){return this._yoyo=a,a&&0===this._repeat&&(this._repeat=1),this},easing:function(a){return this._easingFunction=a,this},interpolation:function(a){return this._interpolationFunction=a,this},chain:function(){return this._chainedTweens=arguments,this},loop:function(){return this._lastChild.chain(this),this},onUpdateCallback:function(a,b){return this._onUpdateCallback=a,this._onUpdateCallbackContext=b,this},pause:function(){this._codePaused=!0,this._paused=!0,this._pausedTime=this.game.time.now},_pause:function(){this._codePaused||(this._paused=!0,this._pausedTime=this.game.time.now)},resume:function(){this._paused&&(this._paused=!1,this._codePaused=!1,this._startTime+=this.game.time.now-this._pausedTime)},_resume:function(){this._codePaused||(this._startTime+=this.game.time.pauseDuration,this._paused=!1)},update:function(a){if(this.pendingDelete)return!1;if(this._paused||a1?1:c;var d=this._easingFunction(c);for(b in this._valuesEnd){var e=this._valuesStart[b]||0,f=this._valuesEnd[b];f instanceof Array?this._object[b]=this._interpolationFunction(f,d):("string"==typeof f&&(f=e+parseFloat(f,10)),"number"==typeof f&&(this._object[b]=e+(f-e)*d))}if(null!==this._onUpdateCallback&&this._onUpdateCallback.call(this._onUpdateCallbackContext,this,d),1==c){if(this._repeat>0){isFinite(this._repeat)&&this._repeat--;for(b in this._valuesStartRepeat){if("string"==typeof this._valuesEnd[b]&&(this._valuesStartRepeat[b]=this._valuesStartRepeat[b]+parseFloat(this._valuesEnd[b],10)),this._yoyo){var g=this._valuesStartRepeat[b];this._valuesStartRepeat[b]=this._valuesEnd[b],this._valuesEnd[b]=g,this._reversed=!this._reversed}this._valuesStart[b]=this._valuesStartRepeat[b]}return this._startTime=a+this._delayTime,this.onLoop.dispatch(this._object),!0}this.isRunning=!1,this.onComplete.dispatch(this._object);for(var h=0,i=this._chainedTweens.length;i>h;h++)this._chainedTweens[h].start(a);return!1}return!0}},b.Tween.prototype.constructor=b.Tween,b.Easing={Linear:{None:function(a){return a}},Quadratic:{In:function(a){return a*a},Out:function(a){return a*(2-a)},InOut:function(a){return(a*=2)<1?.5*a*a:-.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a:.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return(a*=2)<1?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a*a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:(a*=2)<1?.5*Math.pow(1024,a-1):.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1-Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return(a*=2)<1?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),-(c*Math.pow(2,10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d)))},Out:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),c*Math.pow(2,-10*a)*Math.sin(2*(a-b)*Math.PI/d)+1)},InOut:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),(a*=2)<1?-.5*c*Math.pow(2,10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d):c*Math.pow(2,-10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d)*.5+1)}},Back:{In:function(a){var b=1.70158;return a*a*((b+1)*a-b)},Out:function(a){var b=1.70158;return--a*a*((b+1)*a+b)+1},InOut:function(a){var b=2.5949095;return(a*=2)<1?.5*a*a*((b+1)*a-b):.5*((a-=2)*a*((b+1)*a+b)+2)}},Bounce:{In:function(a){return 1-b.Easing.Bounce.Out(1-a)},Out:function(a){return 1/2.75>a?7.5625*a*a:2/2.75>a?7.5625*(a-=1.5/2.75)*a+.75:2.5/2.75>a?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},InOut:function(a){return.5>a?.5*b.Easing.Bounce.In(2*a):.5*b.Easing.Bounce.Out(2*a-1)+.5}}},b.Time=function(a){this.game=a,this.time=0,this.now=0,this.elapsed=0,this.pausedTime=0,this.advancedTiming=!1,this.fps=0,this.fpsMin=1e3,this.fpsMax=0,this.msMin=1e3,this.msMax=0,this.physicsElapsed=0,this.deltaCap=0,this.timeCap=1e3,this.frames=0,this.pauseDuration=0,this.timeToCall=0,this.lastTime=0,this.events=new b.Timer(this.game,!1),this._started=0,this._timeLastSecond=0,this._pauseStarted=0,this._justResumed=!1,this._timers=[],this._len=0,this._i=0},b.Time.prototype={boot:function(){this._started=Date.now(),this.events.start()},create:function(a){"undefined"==typeof a&&(a=!0);var c=new b.Timer(this.game,a);return this._timers.push(c),c},removeAll:function(){for(var a=0;athis.timeCap&&(this.elapsed=1/60),this.physicsElapsed=this.elapsed/1e3||1/60,this.deltaCap>0&&this.physicsElapsed>this.deltaCap&&(this.physicsElapsed=this.deltaCap),this.advancedTiming&&(this.msMin=this.game.math.min(this.msMin,this.elapsed),this.msMax=this.game.math.max(this.msMax,this.elapsed),this.frames++,this.now>this._timeLastSecond+1e3&&(this.fps=Math.round(1e3*this.frames/(this.now-this._timeLastSecond)),this.fpsMin=this.game.math.min(this.fpsMin,this.fps),this.fpsMax=this.game.math.max(this.fpsMax,this.fps),this._timeLastSecond=this.now,this.frames=0)),this.time=this.now,this.lastTime=a+this.timeToCall,!this.game.paused)for(this.events.update(this.now),this._i=0,this._len=this._timers.length;this._i0&&(this.events.sort(this.sortHandler),this.nextTick=this.events[0].tick)},sortHandler:function(a,b){return a.tickb.tick?1:0},clearPendingEvents:function(){for(this._i=this.events.length;this._i--;)this.events[this._i].pendingDelete&&this.events.splice(this._i,1);this._len=this.events.length,this._i=0},update:function(a){if(this.paused)return!0;if(this.elapsed=a-this._now,this._now=a,this.elapsed>this.timeCap&&this.adjustEvents(a-this.elapsed),this._marked=0,this.clearPendingEvents(),this.running&&this._now>=this.nextTick&&this._len>0){for(;this._i=this.events[this._i].tick;)this._newTick=this._now+this.events[this._i].delay-(this._now-this.events[this._i].tick),this._newTick<0&&(this._newTick=this._now+this.events[this._i].delay),this.events[this._i].loop===!0?(this.events[this._i].tick=this._newTick,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)):this.events[this._i].repeatCount>0?(this.events[this._i].repeatCount--,this.events[this._i].tick=this._newTick,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)):(this._marked++,this.events[this._i].pendingDelete=!0,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)),this._i++;this.events.length>this._marked?this.order():(this.expired=!0,this.onComplete.dispatch(this))}return this.expired&&this.autoDestroy?!1:!0},pause:function(){this.paused||(this._pauseStarted=this.game.time.now,this.paused=!0,this._codePaused=!0)},_pause:function(){this.paused||(this._pauseStarted=this.game.time.now,this.paused=!0)},adjustEvents:function(a){for(var b=0;bc&&(c=0),this.events[b].tick=this._now+c}var d=this.nextTick-a;this.nextTick=0>d?this._now:this._now+d},resume:function(){this.paused&&(this._pauseTotal+=this.game.time.pauseDuration,this._now=this.game.time.now,this.adjustEvents(this._pauseStarted),this.paused=!1,this._codePaused=!1)},_resume:function(){this._codePaused||this.resume()},removeAll:function(){this.onComplete.removeAll(),this.events.length=0,this._len=0,this._i=0},destroy:function(){this.onComplete.removeAll(),this.running=!1,this.events=[],this._len=0,this._i=0}},Object.defineProperty(b.Timer.prototype,"next",{get:function(){return this.nextTick}}),Object.defineProperty(b.Timer.prototype,"duration",{get:function(){return this.running&&this.nextTick>this._now?this.nextTick-this._now:0}}),Object.defineProperty(b.Timer.prototype,"length",{get:function(){return this.events.length}}),Object.defineProperty(b.Timer.prototype,"ms",{get:function(){return this._now-this._started-this._pauseTotal}}),Object.defineProperty(b.Timer.prototype,"seconds",{get:function(){return.001*this.ms}}),b.Timer.prototype.constructor=b.Timer,b.TimerEvent=function(a,b,c,d,e,f,g,h){this.timer=a,this.delay=b,this.tick=c,this.repeatCount=d-1,this.loop=e,this.callback=f,this.callbackContext=g,this.args=h,this.pendingDelete=!1},b.TimerEvent.prototype.constructor=b.TimerEvent,b.AnimationManager=function(a){this.sprite=a,this.game=a.game,this.currentFrame=null,this.currentAnim=null,this.updateIfVisible=!0,this.isLoaded=!1,this._frameData=null,this._anims={},this._outputFrames=[]},b.AnimationManager.prototype={loadFrameData:function(a){this._frameData=a,this.frame=0,this.isLoaded=!0},add:function(a,c,d,e,f){return null==this._frameData?void console.warn("No FrameData available for Phaser.Animation "+a):(c=c||[],d=d||60,"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=c&&"number"==typeof c[0]?!0:!1),null==this.sprite.events.onAnimationStart&&(this.sprite.events.onAnimationStart=new b.Signal,this.sprite.events.onAnimationComplete=new b.Signal,this.sprite.events.onAnimationLoop=new b.Signal),this._outputFrames.length=0,this._frameData.getFrameIndexes(c,f,this._outputFrames),this._anims[a]=new b.Animation(this.game,this.sprite,a,this._frameData,this._outputFrames,d,e),this.currentAnim=this._anims[a],this.currentFrame=this.currentAnim.currentFrame,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1),this._anims[a])},validateFrames:function(a,b){"undefined"==typeof b&&(b=!0);for(var c=0;cthis._frameData.total)return!1}else if(this._frameData.checkFrameName(a[c])===!1)return!1;return!0},play:function(a,b,c,d){if(this._anims[a]){if(this.currentAnim!==this._anims[a])return this.currentAnim&&this.currentAnim.isPlaying&&this.currentAnim.stop(),this.currentAnim=this._anims[a],this.currentAnim.paused=!1,this.currentAnim.play(b,c,d); +if(this.currentAnim.isPlaying===!1)return this.currentAnim.paused=!1,this.currentAnim.play(b,c,d)}},stop:function(a,b){"undefined"==typeof b&&(b=!1),"string"==typeof a?this._anims[a]&&(this.currentAnim=this._anims[a],this.currentAnim.stop(b)):this.currentAnim&&this.currentAnim.stop(b)},update:function(){return this.updateIfVisible&&!this.sprite.visible?!1:this.currentAnim&&this.currentAnim.update()===!0?(this.currentFrame=this.currentAnim.currentFrame,!0):!1},getAnimation:function(a){return"string"==typeof a&&this._anims[a]?this._anims[a]:null},refreshFrame:function(){this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1)},destroy:function(){var a=null;for(var a in this._anims)this._anims.hasOwnProperty(a)&&this._anims[a].destroy();this._anims={},this._frameData=null,this._frameIndex=0,this.currentAnim=null,this.currentFrame=null}},b.AnimationManager.prototype.constructor=b.AnimationManager,Object.defineProperty(b.AnimationManager.prototype,"frameData",{get:function(){return this._frameData}}),Object.defineProperty(b.AnimationManager.prototype,"frameTotal",{get:function(){return this._frameData?this._frameData.total:-1}}),Object.defineProperty(b.AnimationManager.prototype,"paused",{get:function(){return this.currentAnim.isPaused},set:function(a){this.currentAnim.paused=a}}),Object.defineProperty(b.AnimationManager.prototype,"frame",{get:function(){return this.currentFrame?this._frameIndex:void 0},set:function(a){"number"==typeof a&&this._frameData&&null!==this._frameData.getFrame(a)&&(this.currentFrame=this._frameData.getFrame(a),this.currentFrame&&(this._frameIndex=a,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1)))}}),Object.defineProperty(b.AnimationManager.prototype,"frameName",{get:function(){return this.currentFrame?this.currentFrame.name:void 0},set:function(a){"string"==typeof a&&this._frameData&&null!==this._frameData.getFrameByName(a)?(this.currentFrame=this._frameData.getFrameByName(a),this.currentFrame&&(this._frameIndex=this.currentFrame.index,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1))):console.warn("Cannot set frameName: "+a)}}),b.Animation=function(a,c,d,e,f,g,h){this.game=a,this._parent=c,this._frameData=e,this.name=d,this._frames=[],this._frames=this._frames.concat(f),this.delay=1e3/g,this.loop=h,this.loopCount=0,this.killOnComplete=!1,this.isFinished=!1,this.isPlaying=!1,this.isPaused=!1,this._pauseStartTime=0,this._frameIndex=0,this._frameDiff=0,this._frameSkip=1,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.onStart=new b.Signal,this.onComplete=new b.Signal,this.onLoop=new b.Signal,this.game.onPause.add(this.onPause,this),this.game.onResume.add(this.onResume,this)},b.Animation.prototype={play:function(a,b,c){return"number"==typeof a&&(this.delay=1e3/a),"boolean"==typeof b&&(this.loop=b),"undefined"!=typeof c&&(this.killOnComplete=c),this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this.loopCount=0,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]),this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1),this._parent.events.onAnimationStart.dispatch(this._parent,this),this.onStart.dispatch(this._parent,this),this},restart:function(){this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this.loopCount=0,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]),this.onStart.dispatch(this._parent,this)},setFrame:function(a,b){var c;if("undefined"==typeof b&&(b=!1),"string"==typeof a)for(var d=0;d=this._timeNextFrame?(this._frameSkip=1,this._frameDiff=this.game.time.now-this._timeNextFrame,this._timeLastFrame=this.game.time.now,this._frameDiff>this.delay&&(this._frameSkip=Math.floor(this._frameDiff/this.delay),this._frameDiff-=this._frameSkip*this.delay),this._timeNextFrame=this.game.time.now+(this.delay-this._frameDiff),this._frameIndex+=this._frameSkip,this._frameIndex>=this._frames.length?this.loop?(this._frameIndex%=this._frames.length,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&(this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1)),this.loopCount++,this._parent.events.onAnimationLoop.dispatch(this._parent,this),this.onLoop.dispatch(this._parent,this)):this.complete():(this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&(this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1))),!0):!1},destroy:function(){this.game.onPause.remove(this.onPause,this),this.game.onResume.remove(this.onResume,this),this.game=null,this._parent=null,this._frames=null,this._frameData=null,this.currentFrame=null,this.isPlaying=!1,this.onStart.dispose(),this.onLoop.dispose(),this.onComplete.dispose()},complete:function(){this.isPlaying=!1,this.isFinished=!0,this.paused=!1,this._parent.events.onAnimationComplete.dispatch(this._parent,this),this.onComplete.dispatch(this._parent,this),this.killOnComplete&&this._parent.kill()}},b.Animation.prototype.constructor=b.Animation,Object.defineProperty(b.Animation.prototype,"paused",{get:function(){return this.isPaused},set:function(a){this.isPaused=a,a?this._pauseStartTime=this.game.time.now:this.isPlaying&&(this._timeNextFrame=this.game.time.now+this.delay)}}),Object.defineProperty(b.Animation.prototype,"frameTotal",{get:function(){return this._frames.length}}),Object.defineProperty(b.Animation.prototype,"frame",{get:function(){return null!==this.currentFrame?this.currentFrame.index:this._frameIndex},set:function(a){this.currentFrame=this._frameData.getFrame(this._frames[a]),null!==this.currentFrame&&(this._frameIndex=a,this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]))}}),Object.defineProperty(b.Animation.prototype,"speed",{get:function(){return Math.round(1e3/this.delay)},set:function(a){a>=1&&(this.delay=1e3/a)}}),b.Animation.generateFrameNames=function(a,c,d,e,f){"undefined"==typeof e&&(e="");var g=[],h="";if(d>c)for(var i=c;d>=i;i++)h="number"==typeof f?b.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);else for(var i=c;i>=d;i--)h="number"==typeof f?b.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);return g},b.Frame=function(a,c,d,e,f,g,h){this.index=a,this.x=c,this.y=d,this.width=e,this.height=f,this.name=g,this.uuid=h,this.centerX=Math.floor(e/2),this.centerY=Math.floor(f/2),this.distance=b.Math.distance(0,0,e,f),this.rotated=!1,this.rotationDirection="cw",this.trimmed=!1,this.sourceSizeW=e,this.sourceSizeH=f,this.spriteSourceSizeX=0,this.spriteSourceSizeY=0,this.spriteSourceSizeW=0,this.spriteSourceSizeH=0},b.Frame.prototype={setTrim:function(a,b,c,d,e,f,g){this.trimmed=a,a&&(this.width=b,this.height=c,this.sourceSizeW=b,this.sourceSizeH=c,this.centerX=Math.floor(b/2),this.centerY=Math.floor(c/2),this.spriteSourceSizeX=d,this.spriteSourceSizeY=e,this.spriteSourceSizeW=f,this.spriteSourceSizeH=g)},getRect:function(a){return"undefined"==typeof a?a=new b.Rectangle(this.x,this.y,this.width,this.height):a.setTo(this.x,this.y,this.width,this.height),a}},b.Frame.prototype.constructor=b.Frame,b.FrameData=function(){this._frames=[],this._frameNames=[]},b.FrameData.prototype={addFrame:function(a){return a.index=this._frames.length,this._frames.push(a),""!==a.name&&(this._frameNames[a.name]=a.index),a},getFrame:function(a){return a>this._frames.length&&(a=0),this._frames[a]},getFrameByName:function(a){return"number"==typeof this._frameNames[a]?this._frames[this._frameNames[a]]:null},checkFrameName:function(a){return null==this._frameNames[a]?!1:!0},getFrameRange:function(a,b,c){"undefined"==typeof c&&(c=[]);for(var d=a;b>=d;d++)c.push(this._frames[d]);return c},getFrames:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0;dd;d++)c.push(b?this.getFrame(a[d]):this.getFrameByName(a[d]));return c},getFrameIndexes:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0,e=this._frames.length;e>d;d++)c.push(this._frames[d].index);else for(var d=0,e=a.length;e>d;d++)b?c.push(a[d]):this.getFrameByName(a[d])&&c.push(this.getFrameByName(a[d]).index);return c}},b.FrameData.prototype.constructor=b.FrameData,Object.defineProperty(b.FrameData.prototype,"total",{get:function(){return this._frames.length}}),b.AnimationParser={spriteSheet:function(a,c,d,e,f,g,h){var i=a.cache.getImage(c);if(null==i)return null;var j=i.width,k=i.height;0>=d&&(d=Math.floor(-j/Math.min(-1,d))),0>=e&&(e=Math.floor(-k/Math.min(-1,e)));var l=Math.floor((j-g)/(d+h)),m=Math.floor((k-g)/(e+h)),n=l*m;if(-1!==f&&(n=f),0===j||0===k||d>j||e>k||0===n)return console.warn("Phaser.AnimationParser.spriteSheet: width/height zero or width/height < given frameWidth/frameHeight"),null;for(var o=new b.FrameData,p=g,q=g,r=0;n>r;r++){var s=a.rnd.uuid();o.addFrame(new b.Frame(r,p,q,d,e,"",s)),PIXI.TextureCache[s]=new PIXI.Texture(PIXI.BaseTextureCache[c],{x:p,y:q,width:d,height:e}),p+=d+h,p+d>j&&(p=g,q+=e+h)}return o},JSONData:function(a,c,d){if(!c.frames)return console.warn("Phaser.AnimationParser.JSONData: Invalid Texture Atlas JSON given, missing 'frames' array"),void console.log(c);for(var e,f=new b.FrameData,g=c.frames,h=0;h tag");for(var e,f,g,h,i,j,k,l,m,n,o,p,q=new b.FrameData,r=c.getElementsByTagName("SubTexture"),s=0;s0)for(var c=0;c0)for(var c=0;c0)for(var c=0;c0?(this._fileIndex=0,this._progressChunk=100/this._fileList.length,this.loadFile()):(this.progress=100,this.progressFloat=100,this.hasLoaded=!0,this.onLoadComplete.dispatch()))},loadFile:function(){if(!this._fileList[this._fileIndex])return void console.warn("Phaser.Loader loadFile invalid index "+this._fileIndex);var a=this._fileList[this._fileIndex],c=this;switch(this.onFileStart.dispatch(this.progress,a.key),a.type){case"image":case"spritesheet":case"textureatlas":case"bitmapfont":a.data=new Image,a.data.name=a.key,a.data.onload=function(){return c.fileComplete(c._fileIndex)},a.data.onerror=function(){return c.fileError(c._fileIndex)},this.crossOrigin&&(a.data.crossOrigin=this.crossOrigin),a.data.src=this.baseURL+a.url;break;case"audio":a.url=this.getAudioURL(a.url),null!==a.url?this.game.sound.usingWebAudio?(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="arraybuffer",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send()):this.game.sound.usingAudioTag&&(this.game.sound.touchLocked?(a.data=new Audio,a.data.name=a.key,a.data.preload="auto",a.data.src=this.baseURL+a.url,this.fileComplete(this._fileIndex)):(a.data=new Audio,a.data.name=a.key,a.data.onerror=function(){return c.fileError(c._fileIndex)},a.data.preload="auto",a.data.src=this.baseURL+a.url,a.data.addEventListener("canplaythrough",b.GAMES[this.game.id].load.fileComplete(this._fileIndex),!1),a.data.load())):this.fileError(this._fileIndex);break;case"json":window.XDomainRequest?(this._ajax=new window.XDomainRequest,this._ajax.timeout=3e3,this._ajax.onerror=function(){return c.dataLoadError(c._fileIndex)},this._ajax.ontimeout=function(){return c.dataLoadError(c._fileIndex)},this._ajax.onprogress=function(){},this._ajax.onload=function(){return c.jsonLoadComplete(c._fileIndex)},this._ajax.open("GET",this.baseURL+a.url,!0),this._ajax.send()):(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return c.jsonLoadComplete(c._fileIndex)},this._xhr.onerror=function(){return c.dataLoadError(c._fileIndex)},this._xhr.send());break;case"tilemap":if(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",a.format===b.Tilemap.TILED_JSON)this._xhr.onload=function(){return c.jsonLoadComplete(c._fileIndex)};else{if(a.format!==b.Tilemap.CSV)throw new Error("Phaser.Loader. Invalid Tilemap format: "+a.format);this._xhr.onload=function(){return c.csvLoadComplete(c._fileIndex)}}this._xhr.onerror=function(){return c.dataLoadError(c._fileIndex)},this._xhr.send();break;case"text":case"script":case"physics":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send();break;case"binary":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="arraybuffer",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send()}},getAudioURL:function(a){var b;"string"==typeof a&&(a=[a]);for(var c=0;c100&&(this.progress=100),null!==this.preloadSprite&&(0===this.preloadSprite.direction?(this.preloadSprite.rect.width=Math.floor(this.preloadSprite.width/100*this.progress),this.preloadSprite.sprite.crop(this.preloadSprite.rect)):(this.preloadSprite.rect.height=Math.floor(this.preloadSprite.height/100*this.progress),this.preloadSprite.sprite.crop(this.preloadSprite.rect))),this.onFileComplete.dispatch(this.progress,this._fileList[a].key,b,this.totalLoadedFiles(),this._fileList.length),this.totalQueuedFiles()>0?(this._fileIndex++,this.loadFile()):(this.hasLoaded=!0,this.isLoading=!1,this.removeAll(),this.onLoadComplete.dispatch())},totalLoadedFiles:function(){for(var a=0,b=0;b=this.durationMS&&(this.usingWebAudio?this.loop?(this.onLoop.dispatch(this),""===this.currentMarker?(this.currentTime=0,this.startTime=this.game.time.now):(this.onMarkerComplete.dispatch(this.currentMarker,this),this.play(this.currentMarker,0,this.volume,!0,!0))):this.stop():this.loop?(this.onLoop.dispatch(this),this.play(this.currentMarker,0,this.volume,!0,!0)):this.stop()))},play:function(a,b,c,d,e){if("undefined"==typeof a&&(a=""),"undefined"==typeof e&&(e=!0),this.isPlaying!==!0||e!==!1||this.override!==!1){if(this.isPlaying&&this.override&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.currentMarker=a,""!==a){if(!this.markers[a])return void console.warn("Phaser.Sound.play: audio marker "+a+" doesn't exist");this.position=this.markers[a].start,this.volume=this.markers[a].volume,this.loop=this.markers[a].loop,this.duration=this.markers[a].duration,this.durationMS=this.markers[a].durationMS,"undefined"!=typeof c&&(this.volume=c),"undefined"!=typeof d&&(this.loop=d),this._tempMarker=a,this._tempPosition=this.position,this._tempVolume=this.volume,this._tempLoop=this.loop}else b=b||0,"undefined"==typeof c&&(c=this._volume),"undefined"==typeof d&&(d=this.loop),this.position=b,this.volume=c,this.loop=d,this.duration=0,this.durationMS=0,this._tempMarker=a,this._tempPosition=b,this._tempVolume=c,this._tempLoop=d;this.usingWebAudio?this.game.cache.isSoundDecoded(this.key)?(null==this._buffer&&(this._buffer=this.game.cache.getSoundData(this.key)),this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this._sound.connect(this.externalNode?this.externalNode.input:this.gainNode),this.totalDuration=this._sound.buffer.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this.loop&&""===a&&(this._sound.loop=!0),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,this.position,this.duration):this._sound.start(0,this.position,this.duration),this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):(this.pendingPlayback=!0,this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).isDecoding===!1&&this.game.sound.decode(this.key,this)):this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).locked?(this.game.cache.reloadSound(this.key),this.pendingPlayback=!0):this._sound&&(this.game.device.cocoonJS||4===this._sound.readyState)?(this._sound.play(),this.totalDuration=this._sound.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this._sound.currentTime=this.position,this._sound.muted=this._muted,this._sound.volume=this._muted?0:this._volume,this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):this.pendingPlayback=!0}},restart:function(a,b,c,d){a=a||"",b=b||0,c=c||1,"undefined"==typeof d&&(d=!1),this.play(a,b,c,d,!0)},pause:function(){this.isPlaying&&this._sound&&(this.stop(),this.isPlaying=!1,this.paused=!0,this.pausedPosition=this.currentTime,this.pausedTime=this.game.time.now,this.onPause.dispatch(this))},resume:function(){if(this.paused&&this._sound){if(this.usingWebAudio){var a=this.position+this.pausedPosition/1e3;this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this._sound.connect(this.externalNode?this.externalNode.input:this.gainNode),this.loop&&(this._sound.loop=!0),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,a,this.duration):this._sound.start(0,a,this.duration)}else this._sound.play();this.isPlaying=!0,this.paused=!1,this.startTime+=this.game.time.now-this.pausedTime,this.onResume.dispatch(this)}},stop:function(){this.isPlaying&&this._sound&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.isPlaying=!1;var a=this.currentMarker;""!==this.currentMarker&&this.onMarkerComplete.dispatch(this.currentMarker,this),this.currentMarker="",this.onStop.dispatch(this,a)},destroy:function(a){"undefined"==typeof a&&(a=!0),this.stop(),a&&this.game.sound.remove(this),this.markers={},this.context=null,this._buffer=null,this.externalNode=null,this.onDecoded.dispose(),this.onPlay.dispose(),this.onPause.dispose(),this.onResume.dispose(),this.onLoop.dispose(),this.onStop.dispose(),this.onMute.dispose(),this.onMarkerComplete.dispose()}},b.Sound.prototype.constructor=b.Sound,Object.defineProperty(b.Sound.prototype,"isDecoding",{get:function(){return this.game.cache.getSound(this.key).isDecoding}}),Object.defineProperty(b.Sound.prototype,"isDecoded",{get:function(){return this.game.cache.isSoundDecoded(this.key)}}),Object.defineProperty(b.Sound.prototype,"mute",{get:function(){return this._muted||this.game.sound.mute},set:function(a){a=a||null,a?(this._muted=!0,this.usingWebAudio?(this._muteVolume=this.gainNode.gain.value,this.gainNode.gain.value=0):this.usingAudioTag&&this._sound&&(this._muteVolume=this._sound.volume,this._sound.volume=0)):(this._muted=!1,this.usingWebAudio?this.gainNode.gain.value=this._muteVolume:this.usingAudioTag&&this._sound&&(this._sound.volume=this._muteVolume)),this.onMute.dispatch(this)}}),Object.defineProperty(b.Sound.prototype,"volume",{get:function(){return this._volume},set:function(a){this.usingWebAudio?(this._volume=a,this.gainNode.gain.value=a):this.usingAudioTag&&this._sound&&a>=0&&1>=a&&(this._volume=a,this._sound.volume=a)}}),b.SoundManager=function(a){this.game=a,this.onSoundDecode=new b.Signal,this._codeMuted=!1,this._muted=!1,this._unlockSource=null,this._volume=1,this._sounds=[],this.context=null,this.usingWebAudio=!0,this.usingAudioTag=!1,this.noAudio=!1,this.connectToMaster=!0,this.touchLocked=!1,this.channels=32},b.SoundManager.prototype={boot:function(){if(this.game.device.iOS&&this.game.device.webAudio===!1&&(this.channels=1),this.game.device.iOS||window.PhaserGlobal&&window.PhaserGlobal.fakeiOSTouchLock?(this.game.input.touch.callbackContext=this,this.game.input.touch.touchStartCallback=this.unlock,this.game.input.mouse.callbackContext=this,this.game.input.mouse.mouseDownCallback=this.unlock,this.touchLocked=!0):this.touchLocked=!1,window.PhaserGlobal){if(window.PhaserGlobal.disableAudio===!0)return this.usingWebAudio=!1,void(this.noAudio=!0);if(window.PhaserGlobal.disableWebAudio===!0)return this.usingWebAudio=!1,this.usingAudioTag=!0,void(this.noAudio=!1)}if(window.AudioContext)try{this.context=new window.AudioContext}catch(a){this.context=null,this.usingWebAudio=!1,this.noAudio=!0}else if(window.webkitAudioContext)try{this.context=new window.webkitAudioContext}catch(a){this.context=null,this.usingWebAudio=!1,this.noAudio=!0}window.Audio&&null===this.context&&(this.usingWebAudio=!1,this.usingAudioTag=!0,this.noAudio=!1),null!==this.context&&(this.masterGain="undefined"==typeof this.context.createGain?this.context.createGainNode():this.context.createGain(),this.masterGain.gain.value=1,this.masterGain.connect(this.context.destination))},unlock:function(){if(this.touchLocked!==!1)if(this.game.device.webAudio===!1||window.PhaserGlobal&&window.PhaserGlobal.disableWebAudio===!0)this.touchLocked=!1,this._unlockSource=null,this.game.input.touch.callbackContext=null,this.game.input.touch.touchStartCallback=null,this.game.input.mouse.callbackContext=null,this.game.input.mouse.mouseDownCallback=null;else{var a=this.context.createBuffer(1,1,22050);this._unlockSource=this.context.createBufferSource(),this._unlockSource.buffer=a,this._unlockSource.connect(this.context.destination),this._unlockSource.noteOn(0)}},stopAll:function(){for(var a=0;a>>24,c.b=(16711680&a)>>>16,c.g=(65280&a)>>>8,c.r=255&a):(c.r=(4278190080&a)>>>24,c.g=(16711680&a)>>>16,c.b=(65280&a)>>>8,c.a=255&a),c.color=a,c.rgba="rgba("+c.r+","+c.g+","+c.b+","+c.a/255+")",d&&b.Color.RGBtoHSL(c.r,c.g,c.b,c),e&&b.Color.RGBtoHSV(c.r,c.g,c.b,c),c},fromRGBA:function(a,c){return c||(c=b.Color.createColor()),c.r=(4278190080&a)>>>24,c.g=(16711680&a)>>>16,c.b=(65280&a)>>>8,c.a=255&a,c.rgba="rgba("+c.r+","+c.g+","+c.b+","+c.a+")",c},toRGBA:function(a,b,c,d){return a<<24|b<<16|c<<8|d},RGBtoHSL:function(a,c,d,e){e||(e=b.Color.createColor(a,c,d,1)),a/=255,c/=255,d/=255;var f=Math.min(a,c,d),g=Math.max(a,c,d);if(e.h=0,e.s=0,e.l=(g+f)/2,g!==f){var h=g-f;e.s=e.l>.5?h/(2-g-f):h/(g+f),g===a?e.h=(c-d)/h+(d>c?6:0):g===c?e.h=(d-a)/h+2:g===d&&(e.h=(a-c)/h+4),e.h/=6}return e},HSLtoRGB:function(a,c,d,e){if(e?(e.r=d,e.g=d,e.b=d):e=b.Color.createColor(d,d,d),0!==c){var f=.5>d?d*(1+c):d+c-d*c,g=2*d-f;e.r=b.Color.hueToColor(g,f,a+1/3),e.g=b.Color.hueToColor(g,f,a),e.b=b.Color.hueToColor(g,f,a-1/3)}return e.r=Math.floor(255*e.r|0),e.g=Math.floor(255*e.g|0),e.b=Math.floor(255*e.b|0),b.Color.updateColor(e),e},RGBtoHSV:function(a,c,d,e){e||(e=b.Color.createColor(a,c,d,255)),a/=255,c/=255,d/=255;var f=Math.min(a,c,d),g=Math.max(a,c,d),h=g-f;return e.h=0,e.s=0===g?0:h/g,e.v=g,g!==f&&(g===a?e.h=(c-d)/h+(d>c?6:0):g===c?e.h=(d-a)/h+2:g===d&&(e.h=(a-c)/h+4),e.h/=6),e},HSVtoRGB:function(a,c,d,e){"undefined"==typeof e&&(e=b.Color.createColor(0,0,0,1,a,c,0,d));var f,g,h,i=Math.floor(6*a),j=6*a-i,k=d*(1-c),l=d*(1-j*c),m=d*(1-(1-j)*c);switch(i%6){case 0:f=d,g=m,h=k;break;case 1:f=l,g=d,h=k;break;case 2:f=k,g=d,h=m;break;case 3:f=k,g=l,h=d;break;case 4:f=m,g=k,h=d;break;case 5:f=d,g=k,h=l}return e.r=Math.floor(255*f),e.g=Math.floor(255*g),e.b=Math.floor(255*h),b.Color.updateColor(e),e},hueToColor:function(a,b,c){return 0>c&&(c+=1),c>1&&(c-=1),1/6>c?a+6*(b-a)*c:.5>c?b:2/3>c?a+(b-a)*(2/3-c)*6:a},createColor:function(a,b,c,d,e,f,g,h){var i={r:a||0,g:b||0,b:c||0,a:d||1,h:e||0,s:f||0,l:g||0,v:h||0,color:0};return i.rgba="rgba("+i.r+","+i.g+","+i.b+","+i.a+")",i},updateColor:function(a){return a.rgba="rgba("+a.r+","+a.g+","+a.b+","+a.a+")",a},getColor32:function(a,b,c,d){return a<<24|b<<16|c<<8|d},getColor:function(a,b,c){return a<<16|b<<8|c},RGBtoString:function(a,c,d,e,f){return"undefined"==typeof e&&(e=255),"undefined"==typeof f&&(f="#"),"#"===f?"#"+((1<<24)+(a<<16)+(c<<8)+d).toString(16).slice(1):"0x"+b.Color.componentToHex(e)+b.Color.componentToHex(a)+b.Color.componentToHex(c)+b.Color.componentToHex(d)},hexToRGB:function(a){var c=b.Color.hexToColor(a);return c?b.Color.getColor32(c.a,c.r,c.g,c.b):void 0},hexToColor:function(a,c){c||(c=b.Color.createColor());var d=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;a=a.replace(d,function(a,b,c,d){return b+b+c+c+d+d});var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a);return e&&(c.r=parseInt(e[1],16),c.g=parseInt(e[2],16),c.b=parseInt(e[3],16)),c},componentToHex:function(a){var b=a.toString(16);return 1==b.length?"0"+b:b},HSVColorWheel:function(a,c){"undefined"==typeof a&&(a=1),"undefined"==typeof c&&(c=1);for(var d=[],e=0;359>=e;e++)d.push(b.Color.HSVtoRGB(e/359,a,c));return d},HSLColorWheel:function(a,c){"undefined"==typeof a&&(a=.5),"undefined"==typeof c&&(c=.5);for(var d=[],e=0;359>=e;e++)d.push(b.Color.HSLtoRGB(e/359,a,c));return d},interpolateColor:function(a,c,d,e,f){"undefined"==typeof f&&(f=255);var g=b.Color.getRGB(a),h=b.Color.getRGB(c),i=(h.red-g.red)*e/d+g.red,j=(h.green-g.green)*e/d+g.green,k=(h.blue-g.blue)*e/d+g.blue;return b.Color.getColor32(f,i,j,k)},interpolateColorWithRGB:function(a,c,d,e,f,g){var h=b.Color.getRGB(a),i=(c-h.red)*g/f+h.red,j=(d-h.green)*g/f+h.green,k=(e-h.blue)*g/f+h.blue;return b.Color.getColor(i,j,k)},interpolateRGB:function(a,c,d,e,f,g,h,i){var j=(e-a)*i/h+a,k=(f-c)*i/h+c,l=(g-d)*i/h+d;return b.Color.getColor(j,k,l)},getRandomColor:function(a,c,d){if("undefined"==typeof a&&(a=0),"undefined"==typeof c&&(c=255),"undefined"==typeof d&&(d=255),c>255||a>c)return b.Color.getColor(255,255,255);var e=a+Math.round(Math.random()*(c-a)),f=a+Math.round(Math.random()*(c-a)),g=a+Math.round(Math.random()*(c-a));return b.Color.getColor32(d,e,f,g)},getRGB:function(a){return{alpha:a>>>24,red:a>>16&255,green:a>>8&255,blue:255&a}},getWebRGB:function(a){var b=(a>>>24)/255,c=a>>16&255,d=a>>8&255,e=255&a;return"rgba("+c.toString()+","+d.toString()+","+e.toString()+","+b.toString()+")"},getAlpha:function(a){return a>>>24},getAlphaFloat:function(a){return(a>>>24)/255},getRed:function(a){return a>>16&255},getGreen:function(a){return a>>8&255},getBlue:function(a){return 255&a},getColorInfo:function(a){var c=b.Color.getRGB(a),d=b.Color.RGBtoHexstring(a)+"\n"; +return d=d.concat("Alpha: "+c.alpha+" Red: "+c.red+" Green: "+c.green+" Blue: "+c.blue)+"\n"},RGBtoHexstring:function(a){var c=b.Color.getRGB(a);return"0x"+b.Color.colorToHexstring(c.alpha)+b.Color.colorToHexstring(c.red)+b.Color.colorToHexstring(c.green)+b.Color.colorToHexstring(c.blue)},RGBtoWebstring:function(a){var c=b.Color.getRGB(a);return"#"+b.Color.colorToHexstring(c.red)+b.Color.colorToHexstring(c.green)+b.Color.colorToHexstring(c.blue)},colorToHexstring:function(a){var b="0123456789ABCDEF",c=a%16,d=(a-c)/16,e=b.charAt(d)+b.charAt(c);return e}},b.Physics=function(a,b){b=b||{},this.game=a,this.config=b,this.arcade=null,this.p2=null,this.ninja=null,this.box2d=null,this.chipmunk=null,this.parseConfig()},b.Physics.ARCADE=0,b.Physics.P2JS=1,b.Physics.NINJA=2,b.Physics.BOX2D=3,b.Physics.CHIPMUNK=5,b.Physics.prototype={parseConfig:function(){this.config.hasOwnProperty("arcade")&&this.config.arcade!==!0||!b.Physics.hasOwnProperty("Arcade")||(this.arcade=new b.Physics.Arcade(this.game),this.game.time.deltaCap=.2),this.config.hasOwnProperty("ninja")&&this.config.ninja===!0&&b.Physics.hasOwnProperty("Ninja")&&(this.ninja=new b.Physics.Ninja(this.game)),this.config.hasOwnProperty("p2")&&this.config.p2===!0&&b.Physics.hasOwnProperty("P2")&&(this.p2=new b.Physics.P2(this.game,this.config))},startSystem:function(a){if(a===b.Physics.ARCADE?this.arcade=new b.Physics.Arcade(this.game):a===b.Physics.P2JS&&(this.p2=new b.Physics.P2(this.game,this.config)),a===b.Physics.NINJA)this.ninja=new b.Physics.Ninja(this.game);else{if(a===b.Physics.BOX2D&&null===this.box2d)throw new Error("The Box2D physics system has not been implemented yet.");if(a===b.Physics.CHIPMUNK&&null===this.chipmunk)throw new Error("The Chipmunk physics system has not been implemented yet.")}},enable:function(a,c,d){"undefined"==typeof c&&(c=b.Physics.ARCADE),"undefined"==typeof d&&(d=!1),c===b.Physics.ARCADE?this.arcade.enable(a):c===b.Physics.P2JS&&this.p2?this.p2.enable(a,d):c===b.Physics.NINJA&&this.ninja&&this.ninja.enableAABB(a)},preUpdate:function(){this.p2&&this.p2.preUpdate()},update:function(){this.p2&&this.p2.update()},setBoundsToWorld:function(){this.arcade&&this.arcade.setBoundsToWorld(),this.ninja&&this.ninja.setBoundsToWorld(),this.p2&&this.p2.setBoundsToWorld()},clear:function(){this.p2&&this.p2.clear()},destroy:function(){this.p2&&this.p2.destroy(),this.arcade=null,this.ninja=null,this.p2=null}},b.Physics.prototype.constructor=b.Physics,b.Physics.Arcade=function(a){this.game=a,this.gravity=new b.Point,this.bounds=new b.Rectangle(0,0,a.world.width,a.world.height),this.checkCollision={up:!0,down:!0,left:!0,right:!0},this.maxObjects=10,this.maxLevels=4,this.OVERLAP_BIAS=4,this.TILE_BIAS=16,this.forceX=!1,this.quadTree=new b.QuadTree(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels),this._overlap=0,this._maxOverlap=0,this._velocity1=0,this._velocity2=0,this._newVelocity1=0,this._newVelocity2=0,this._average=0,this._mapData=[],this._result=!1,this._total=0,this._angle=0,this._dx=0,this._dy=0},b.Physics.Arcade.prototype.constructor=b.Physics.Arcade,b.Physics.Arcade.prototype={setBounds:function(a,b,c,d){this.bounds.setTo(a,b,c,d)},setBoundsToWorld:function(){this.bounds.setTo(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height)},enable:function(a,c){"undefined"==typeof c&&(c=!0);var d=1;if(Array.isArray(a))for(d=a.length;d--;)a[d]instanceof b.Group?this.enable(a[d].children,c):(this.enableBody(a[d]),c&&a[d].hasOwnProperty("children")&&a[d].children.length>0&&this.enable(a[d],!0));else a instanceof b.Group?this.enable(a.children,c):(this.enableBody(a),c&&a.hasOwnProperty("children")&&a.children.length>0&&this.enable(a.children,!0))},enableBody:function(a){a.hasOwnProperty("body")&&null===a.body&&(a.body=new b.Physics.Arcade.Body(a))},updateMotion:function(a){this._velocityDelta=this.computeVelocity(0,a,a.angularVelocity,a.angularAcceleration,a.angularDrag,a.maxAngular)-a.angularVelocity,a.angularVelocity+=this._velocityDelta,a.rotation+=a.angularVelocity*this.game.time.physicsElapsed,a.velocity.x=this.computeVelocity(1,a,a.velocity.x,a.acceleration.x,a.drag.x,a.maxVelocity.x),a.velocity.y=this.computeVelocity(2,a,a.velocity.y,a.acceleration.y,a.drag.y,a.maxVelocity.y)},computeVelocity:function(a,b,c,d,e,f){return f=f||1e4,1==a&&b.allowGravity?c+=(this.gravity.x+b.gravity.x)*this.game.time.physicsElapsed:2==a&&b.allowGravity&&(c+=(this.gravity.y+b.gravity.y)*this.game.time.physicsElapsed),d?c+=d*this.game.time.physicsElapsed:e&&(this._drag=e*this.game.time.physicsElapsed,c-this._drag>0?c-=this._drag:c+this._drag<0?c+=this._drag:c=0),c>f?c=f:-f>c&&(c=-f),c},overlap:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!0);else this.collideHandler(a,b,c,d,e,!0);return this._total>0},collide:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!1);else this.collideHandler(a,b,c,d,e,!1);return this._total>0},collideHandler:function(a,c,d,e,f,g){return"undefined"!=typeof c||a.type!==b.GROUP&&a.type!==b.EMITTER?void(a&&c&&a.exists&&c.exists&&(a.type==b.SPRITE||a.type==b.TILESPRITE?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsSprite(a,c,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideSpriteVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideSpriteVsTilemapLayer(a,c,d,e,f):a.type==b.GROUP?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsGroup(c,a,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideGroupVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,c,d,e,f):a.type==b.TILEMAPLAYER?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsTilemapLayer(c,a,d,e,f):(c.type==b.GROUP||c.type==b.EMITTER)&&this.collideGroupVsTilemapLayer(c,a,d,e,f):a.type==b.EMITTER&&(c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsGroup(c,a,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideGroupVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,c,d,e,f)))):void this.collideGroupVsSelf(a,d,e,f,g)},collideSpriteVsSprite:function(a,b,c,d,e,f){return a.body&&b.body?(this.separate(a.body,b.body,d,e,f)&&(c&&c.call(e,a,b),this._total++),!0):!1},collideSpriteVsGroup:function(a,b,c,d,e,f){if(0!==b.length&&a.body){this.quadTree.clear(),this.quadTree.reset(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels),this.quadTree.populate(b),this._potentials=this.quadTree.retrieve(a);for(var g=0,h=this._potentials.length;h>g;g++)this.separate(a.body,this._potentials[g],d,e,f)&&(c&&c.call(e,a,this._potentials[g].sprite),this._total++)}},collideGroupVsSelf:function(a,b,c,d,e){if(0!==a.length)for(var f=a.children.length,g=0;f>g;g++)for(var h=g+1;f>=h;h++)a.children[g]&&a.children[h]&&a.children[g].exists&&a.children[h].exists&&this.collideSpriteVsSprite(a.children[g],a.children[h],b,c,d,e)},collideGroupVsGroup:function(a,b,c,d,e,f){if(0!==a.length&&0!==b.length)for(var g=0,h=a.children.length;h>g;g++)a.children[g].exists&&this.collideSpriteVsGroup(a.children[g],b,c,d,e,f)},collideSpriteVsTilemapLayer:function(a,b,c,d,e){if(a.body&&(this._mapData=b.getTiles(a.body.position.x-a.body.tilePadding.x,a.body.position.y-a.body.tilePadding.y,a.body.width+a.body.tilePadding.x,a.body.height+a.body.tilePadding.y,!1,!1),0!==this._mapData.length))for(var f=0;ff;f++)a.children[f].exists&&this.collideSpriteVsTilemapLayer(a.children[f],b,c,d,e)},separate:function(a,b,c,d,e){return this.intersects(a,b)?c&&c.call(d,a.sprite,b.sprite)===!1?!1:e?!0:(this._result=this.forceX||Math.abs(this.gravity.y+a.gravity.y)=b.right?!1:a.position.y>=b.bottom?!1:!0},separateX:function(a,b,c){return a.immovable&&b.immovable?!1:(this._overlap=0,this.intersects(a,b)&&(this._maxOverlap=a.deltaAbsX()+b.deltaAbsX()+this.OVERLAP_BIAS,0===a.deltaX()&&0===b.deltaX()?(a.embedded=!0,b.embedded=!0):a.deltaX()>b.deltaX()?(this._overlap=a.right-b.x,this._overlap>this._maxOverlap||a.checkCollision.right===!1||b.checkCollision.left===!1?this._overlap=0:(a.touching.none=!1,a.touching.right=!0,b.touching.none=!1,b.touching.left=!0)):a.deltaX()this._maxOverlap||a.checkCollision.left===!1||b.checkCollision.right===!1?this._overlap=0:(a.touching.none=!1,a.touching.left=!0,b.touching.none=!1,b.touching.right=!0)),0!==this._overlap)?(a.overlapX=this._overlap,b.overlapX=this._overlap,c||a.customSeparateX||b.customSeparateX?!0:(this._velocity1=a.velocity.x,this._velocity2=b.velocity.x,a.immovable||b.immovable?a.immovable?b.immovable||(b.x+=this._overlap,b.velocity.x=this._velocity1-this._velocity2*b.bounce.x):(a.x=a.x-this._overlap,a.velocity.x=this._velocity2-this._velocity1*a.bounce.x):(this._overlap*=.5,a.x=a.x-this._overlap,b.x+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.x=this._average+this._newVelocity1*a.bounce.x,b.velocity.x=this._average+this._newVelocity2*b.bounce.x),!0)):!1)},separateY:function(a,b,c){return a.immovable&&b.immovable?!1:(this._overlap=0,this.intersects(a,b)&&(this._maxOverlap=a.deltaAbsY()+b.deltaAbsY()+this.OVERLAP_BIAS,0===a.deltaY()&&0===b.deltaY()?(a.embedded=!0,b.embedded=!0):a.deltaY()>b.deltaY()?(this._overlap=a.bottom-b.y,this._overlap>this._maxOverlap||a.checkCollision.down===!1||b.checkCollision.up===!1?this._overlap=0:(a.touching.none=!1,a.touching.down=!0,b.touching.none=!1,b.touching.up=!0)):a.deltaY()this._maxOverlap||a.checkCollision.up===!1||b.checkCollision.down===!1?this._overlap=0:(a.touching.none=!1,a.touching.up=!0,b.touching.none=!1,b.touching.down=!0)),0!==this._overlap)?(a.overlapY=this._overlap,b.overlapY=this._overlap,c||a.customSeparateY||b.customSeparateY?!0:(this._velocity1=a.velocity.y,this._velocity2=b.velocity.y,a.immovable||b.immovable?a.immovable?b.immovable||(b.y+=this._overlap,b.velocity.y=this._velocity1-this._velocity2*b.bounce.y,a.moves&&(b.x+=a.x-a.prev.x)):(a.y=a.y-this._overlap,a.velocity.y=this._velocity2-this._velocity1*a.bounce.y,b.moves&&(a.x+=b.x-b.prev.x)):(this._overlap*=.5,a.y=a.y-this._overlap,b.y+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.y=this._average+this._newVelocity1*a.bounce.y,b.velocity.y=this._average+this._newVelocity2*b.bounce.y),!0)):!1)},separateTile:function(a,b,c){if(!c.intersects(b.position.x,b.position.y,b.right,b.bottom))return!1;if(c.collisionCallback&&!c.collisionCallback.call(c.collisionCallbackContext,b.sprite,c))return!1;if(c.layer.callbacks[c.index]&&!c.layer.callbacks[c.index].callback.call(c.layer.callbacks[c.index].callbackContext,b.sprite,c))return!1;if(!(c.faceLeft||c.faceRight||c.faceTop||c.faceBottom))return!1;var d=0,e=0,f=0,g=1;if(b.deltaAbsX()>b.deltaAbsY()?f=-1:b.deltaAbsX()f){if((c.faceLeft||c.faceRight)&&(d=this.tileCheckX(b,c),0!==d&&!c.intersects(b.position.x,b.position.y,b.right,b.bottom)))return!0;(c.faceTop||c.faceBottom)&&(e=this.tileCheckY(b,c))}else{if((c.faceTop||c.faceBottom)&&(e=this.tileCheckY(b,c),0!==e&&!c.intersects(b.position.x,b.position.y,b.right,b.bottom)))return!0;(c.faceLeft||c.faceRight)&&(d=this.tileCheckX(b,c))}return 0!==d||0!==e},tileCheckX:function(a,b){var c=0;return a.deltaX()<0&&!a.blocked.left&&b.collideRight&&a.checkCollision.left?b.faceRight&&a.x0&&!a.blocked.right&&b.collideLeft&&a.checkCollision.right&&b.faceLeft&&a.right>b.left&&(c=a.right-b.left,c>this.TILE_BIAS&&(c=0)),0!==c&&this.processTileSeparationX(a,c),c},tileCheckY:function(a,b){var c=0;return a.deltaY()<0&&!a.blocked.up&&b.collideDown&&a.checkCollision.up?b.faceBottom&&a.y0&&!a.blocked.down&&b.collideUp&&a.checkCollision.down&&b.faceTop&&a.bottom>b.top&&(c=a.bottom-b.top,c>this.TILE_BIAS&&(c=0)),0!==c&&this.processTileSeparationY(a,c),c},processTileSeparationX:function(a,b){0>b?a.blocked.left=!0:b>0&&(a.blocked.right=!0),a.position.x-=b,a.velocity.x=0===a.bounce.x?0:-a.velocity.x*a.bounce.x},processTileSeparationY:function(a,b){0>b?a.blocked.up=!0:b>0&&(a.blocked.down=!0),a.position.y-=b,a.velocity.y=0===a.bounce.y?0:-a.velocity.y*a.bounce.y},moveToObject:function(a,b,c,d){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=0),this._angle=Math.atan2(b.y-a.y,b.x-a.x),d>0&&(c=this.distanceBetween(a,b)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*c,a.body.velocity.y=Math.sin(this._angle)*c,this._angle},moveToPointer:function(a,b,c,d){return"undefined"==typeof b&&(b=60),c=c||this.game.input.activePointer,"undefined"==typeof d&&(d=0),this._angle=this.angleToPointer(a,c),d>0&&(b=this.distanceToPointer(a,c)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*b,a.body.velocity.y=Math.sin(this._angle)*b,this._angle},moveToXY:function(a,b,c,d,e){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=0),this._angle=Math.atan2(c-a.y,b-a.x),e>0&&(d=this.distanceToXY(a,b,c)/(e/1e3)),a.body.velocity.x=Math.cos(this._angle)*d,a.body.velocity.y=Math.sin(this._angle)*d,this._angle},velocityFromAngle:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(this.game.math.degToRad(a))*c,Math.sin(this.game.math.degToRad(a))*c)},velocityFromRotation:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(a)*c,Math.sin(a)*c)},accelerationFromRotation:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(a)*c,Math.sin(a)*c)},accelerateToObject:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleBetween(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle},accelerateToPointer:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof b&&(b=this.game.input.activePointer),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleToPointer(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle},accelerateToXY:function(a,b,c,d,e,f){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=1e3),"undefined"==typeof f&&(f=1e3),this._angle=this.angleToXY(a,b,c),a.body.acceleration.setTo(Math.cos(this._angle)*d,Math.sin(this._angle)*d),a.body.maxVelocity.setTo(e,f),this._angle},distanceBetween:function(a,b){return this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToXY:function(a,b,c){return this._dx=a.x-b,this._dy=a.y-c,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},angleBetween:function(a,b){return this._dx=b.x-a.x,this._dy=b.y-a.y,Math.atan2(this._dy,this._dx)},angleToXY:function(a,b,c){return this._dx=b-a.x,this._dy=c-a.y,Math.atan2(this._dy,this._dx)},angleToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=b.worldX-a.x,this._dy=b.worldY-a.y,Math.atan2(this._dy,this._dx)}},b.Physics.Arcade.Body=function(a){this.sprite=a,this.game=a.game,this.type=b.Physics.ARCADE,this.offset=new b.Point,this.position=new b.Point(a.x,a.y),this.prev=new b.Point(this.position.x,this.position.y),this.allowRotation=!0,this.rotation=a.rotation,this.preRotation=a.rotation,this.sourceWidth=a.texture.frame.width,this.sourceHeight=a.texture.frame.height,this.width=a.width,this.height=a.height,this.halfWidth=Math.abs(a.width/2),this.halfHeight=Math.abs(a.height/2),this.center=new b.Point(a.x+this.halfWidth,a.y+this.halfHeight),this.velocity=new b.Point,this.newVelocity=new b.Point(0,0),this.deltaMax=new b.Point(0,0),this.acceleration=new b.Point,this.drag=new b.Point,this.allowGravity=!0,this.gravity=new b.Point(0,0),this.bounce=new b.Point,this.maxVelocity=new b.Point(1e4,1e4),this.angularVelocity=0,this.angularAcceleration=0,this.angularDrag=0,this.maxAngular=1e3,this.mass=1,this.angle=0,this.speed=0,this.facing=b.NONE,this.immovable=!1,this.moves=!0,this.customSeparateX=!1,this.customSeparateY=!1,this.overlapX=0,this.overlapY=0,this.embedded=!1,this.collideWorldBounds=!1,this.checkCollision={none:!1,any:!0,up:!0,down:!0,left:!0,right:!0},this.touching={none:!0,up:!1,down:!1,left:!1,right:!1},this.wasTouching={none:!0,up:!1,down:!1,left:!1,right:!1},this.blocked={up:!1,down:!1,left:!1,right:!1},this.tilePadding=new b.Point,this.phase=0,this._reset=!0,this._sx=a.scale.x,this._sy=a.scale.y,this._dx=0,this._dy=0},b.Physics.Arcade.Body.prototype={updateBounds:function(){var a=Math.abs(this.sprite.scale.x),b=Math.abs(this.sprite.scale.y);(a!==this._sx||b!==this._sy)&&(this.width=this.sourceWidth*a,this.height=this.sourceHeight*b,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this._sx=a,this._sy=b,this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight),this._reset=!0)},preUpdate:function(){this.phase=1,this.wasTouching.none=this.touching.none,this.wasTouching.up=this.touching.up,this.wasTouching.down=this.touching.down,this.wasTouching.left=this.touching.left,this.wasTouching.right=this.touching.right,this.touching.none=!0,this.touching.up=!1,this.touching.down=!1,this.touching.left=!1,this.touching.right=!1,this.blocked.up=!1,this.blocked.down=!1,this.blocked.left=!1,this.blocked.right=!1,this.embedded=!1,this.updateBounds(),this.position.x=this.sprite.world.x-this.sprite.anchor.x*this.width+this.offset.x,this.position.y=this.sprite.world.y-this.sprite.anchor.y*this.height+this.offset.y,this.rotation=this.sprite.angle,this.preRotation=this.rotation,(this._reset||1===this.sprite._cache[4])&&(this.prev.x=this.position.x,this.prev.y=this.position.y),this.moves&&(this.game.physics.arcade.updateMotion(this),this.newVelocity.set(this.velocity.x*this.game.time.physicsElapsed,this.velocity.y*this.game.time.physicsElapsed),this.position.x+=this.newVelocity.x,this.position.y+=this.newVelocity.y,(this.position.x!==this.prev.x||this.position.y!==this.prev.y)&&(this.speed=Math.sqrt(this.velocity.x*this.velocity.x+this.velocity.y*this.velocity.y),this.angle=Math.atan2(this.velocity.y,this.velocity.x)),this.collideWorldBounds&&this.checkWorldBounds()),this._dx=this.deltaX(),this._dy=this.deltaY(),this._reset=!1},postUpdate:function(){2!==this.phase&&(this.phase=2,this.deltaX()<0?this.facing=b.LEFT:this.deltaX()>0&&(this.facing=b.RIGHT),this.deltaY()<0?this.facing=b.UP:this.deltaY()>0&&(this.facing=b.DOWN),this.moves&&(this._dx=this.deltaX(),this._dy=this.deltaY(),0!==this.deltaMax.x&&0!==this._dx&&(this._dx<0&&this._dx<-this.deltaMax.x?this._dx=-this.deltaMax.x:this._dx>0&&this._dx>this.deltaMax.x&&(this._dx=this.deltaMax.x)),0!==this.deltaMax.y&&0!==this._dy&&(this._dy<0&&this._dy<-this.deltaMax.y?this._dy=-this.deltaMax.y:this._dy>0&&this._dy>this.deltaMax.y&&(this._dy=this.deltaMax.y)),this.sprite.x+=this._dx,this.sprite.y+=this._dy),this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight),this.allowRotation&&(this.sprite.angle+=this.deltaZ()),this.prev.x=this.position.x,this.prev.y=this.position.y)},destroy:function(){this.sprite=null},checkWorldBounds:function(){this.position.xthis.game.physics.arcade.bounds.right&&this.game.physics.arcade.checkCollision.right&&(this.position.x=this.game.physics.arcade.bounds.right-this.width,this.velocity.x*=-this.bounce.x,this.blocked.right=!0),this.position.ythis.game.physics.arcade.bounds.bottom&&this.game.physics.arcade.checkCollision.down&&(this.position.y=this.game.physics.arcade.bounds.bottom-this.height,this.velocity.y*=-this.bounce.y,this.blocked.down=!0)},setSize:function(a,b,c,d){c=c||this.offset.x,d=d||this.offset.y,this.sourceWidth=a,this.sourceHeight=b,this.width=this.sourceWidth*this._sx,this.height=this.sourceHeight*this._sy,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this.offset.setTo(c,d),this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight)},reset:function(a,b){this.velocity.set(0),this.acceleration.set(0),this.angularVelocity=0,this.angularAcceleration=0,this.position.x=a-this.sprite.anchor.x*this.width+this.offset.x,this.position.y=b-this.sprite.anchor.y*this.height+this.offset.y,this.prev.x=this.position.x,this.prev.y=this.position.y,this.rotation=this.sprite.angle,this.preRotation=this.rotation,this._sx=this.sprite.scale.x,this._sy=this.sprite.scale.y,this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight)},hitTest:function(a,c){return b.Rectangle.contains(this,a,c)},onFloor:function(){return this.blocked.down},onWall:function(){return this.blocked.left||this.blocked.right},deltaAbsX:function(){return this.deltaX()>0?this.deltaX():-this.deltaX()},deltaAbsY:function(){return this.deltaY()>0?this.deltaY():-this.deltaY()},deltaX:function(){return this.position.x-this.prev.x},deltaY:function(){return this.position.y-this.prev.y},deltaZ:function(){return this.rotation-this.preRotation}},Object.defineProperty(b.Physics.Arcade.Body.prototype,"bottom",{get:function(){return this.position.y+this.height}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"right",{get:function(){return this.position.x+this.width}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a}}),b.Physics.Arcade.Body.render=function(a,b,c,d){"undefined"==typeof c&&(c=!0),d=d||"rgba(0,255,0,0.4)",c?(a.fillStyle=d,a.fillRect(b.position.x-b.game.camera.x,b.position.y-b.game.camera.y,b.width,b.height)):(a.strokeStyle=d,a.strokeRect(b.position.x-b.game.camera.x,b.position.y-b.game.camera.y,b.width,b.height))},b.Physics.Arcade.Body.renderBodyInfo=function(a,b){a.line("x: "+b.x.toFixed(2),"y: "+b.y.toFixed(2),"width: "+b.width,"height: "+b.height),a.line("velocity x: "+b.velocity.x.toFixed(2),"y: "+b.velocity.y.toFixed(2),"deltaX: "+b._dx.toFixed(2),"deltaY: "+b._dy.toFixed(2)),a.line("acceleration x: "+b.acceleration.x.toFixed(2),"y: "+b.acceleration.y.toFixed(2),"speed: "+b.speed.toFixed(2),"angle: "+b.angle.toFixed(2)),a.line("gravity x: "+b.gravity.x,"y: "+b.gravity.y,"bounce x: "+b.bounce.x.toFixed(2),"y: "+b.bounce.y.toFixed(2)),a.line("touching left: "+b.touching.left,"right: "+b.touching.right,"up: "+b.touching.up,"down: "+b.touching.down),a.line("blocked left: "+b.blocked.left,"right: "+b.blocked.right,"up: "+b.blocked.up,"down: "+b.blocked.down)},b.Physics.Arcade.Body.prototype.constructor=b.Physics.Arcade.Body,b.Particles=function(a){this.game=a,this.emitters={},this.ID=0},b.Particles.prototype={add:function(a){return this.emitters[a.name]=a,a},remove:function(a){delete this.emitters[a.name]},update:function(){for(var a in this.emitters)this.emitters[a].exists&&this.emitters[a].update()}},b.Particles.prototype.constructor=b.Particles,b.Particles.Arcade={},b.Particles.Arcade.Emitter=function(a,c,d,e){this.maxParticles=e||50,b.Group.call(this,a),this.name="emitter"+this.game.particles.ID++,this.type=b.EMITTER,this.width=1,this.height=1,this.minParticleSpeed=new b.Point(-100,-100),this.maxParticleSpeed=new b.Point(100,100),this.minParticleScale=1,this.maxParticleScale=1,this.scaleData=null,this.minRotation=-360,this.maxRotation=360,this.minParticleAlpha=1,this.maxParticleAlpha=1,this.alphaData=null,this.gravity=100,this.particleClass=b.Particle,this.particleDrag=new b.Point,this.angularDrag=0,this.frequency=100,this.lifespan=2e3,this.bounce=new b.Point,this.on=!1,this.particleAnchor=new b.Point(.5,.5),this.blendMode=b.blendModes.NORMAL,this.emitX=c,this.emitY=d,this.autoScale=!1,this.autoAlpha=!1,this.particleBringToTop=!1,this.particleSendToBack=!1,this._minParticleScale=new b.Point(1,1),this._maxParticleScale=new b.Point(1,1),this._quantity=0,this._timer=0,this._counter=0,this._explode=!0,this._frames=null},b.Particles.Arcade.Emitter.prototype=Object.create(b.Group.prototype),b.Particles.Arcade.Emitter.prototype.constructor=b.Particles.Arcade.Emitter,b.Particles.Arcade.Emitter.prototype.update=function(){if(this.on)if(this._explode){this._counter=0;do this.emitParticle(),this._counter++;while(this._counter=this._timer&&(this.emitParticle(),this._counter++,this._quantity>0&&this._counter>=this._quantity&&(this.on=!1),this._timer=this.game.time.now+this.frequency);for(var a=this.children.length;a--;)this.children[a].exists&&this.children[a].update()},b.Particles.Arcade.Emitter.prototype.makeParticles=function(a,b,c,d,e){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=this.maxParticles),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1);var f,g=0,h=a,i=b;for(this._frames=b;c>g;)"object"==typeof a&&(h=this.game.rnd.pick(a)),"object"==typeof b&&(i=this.game.rnd.pick(b)),f=new this.particleClass(this.game,0,0,h,i),this.game.physics.arcade.enable(f,!1),d?(f.body.checkCollision.any=!0,f.body.checkCollision.none=!1):f.body.checkCollision.none=!0,f.body.collideWorldBounds=e,f.exists=!1,f.visible=!1,f.anchor.copyFrom(this.particleAnchor),this.add(f),g++;return this},b.Particles.Arcade.Emitter.prototype.kill=function(){this.on=!1,this.alive=!1,this.exists=!1},b.Particles.Arcade.Emitter.prototype.revive=function(){this.alive=!0,this.exists=!0},b.Particles.Arcade.Emitter.prototype.start=function(a,b,c,d){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=0),("undefined"==typeof c||null===c)&&(c=250),"undefined"==typeof d&&(d=0),this.revive(),this.visible=!0,this.on=!0,this._explode=a,this.lifespan=b,this.frequency=c,a?this._quantity=d:this._quantity+=d,this._counter=0,this._timer=this.game.time.now+c},b.Particles.Arcade.Emitter.prototype.emitParticle=function(){var a=this.getFirstExists(!1);null!==a&&(this.width>1||this.height>1?a.reset(this.game.rnd.integerInRange(this.left,this.right),this.game.rnd.integerInRange(this.top,this.bottom)):a.reset(this.emitX,this.emitY),a.angle=0,a.lifespan=this.lifespan,this.particleBringToTop?this.bringToTop(a):this.particleSendToBack&&this.sendToBack(a),this.autoScale?a.setScaleData(this.scaleData):1!==this.minParticleScale||1!==this.maxParticleScale?a.scale.set(this.game.rnd.realInRange(this.minParticleScale,this.maxParticleScale)):(this._minParticleScale.x!==this._maxParticleScale.x||this._minParticleScale.y!==this._maxParticleScale.y)&&a.scale.set(this.game.rnd.realInRange(this._minParticleScale.x,this._maxParticleScale.x),this.game.rnd.realInRange(this._minParticleScale.y,this._maxParticleScale.y)),a.frame=Array.isArray("object"===this._frames)?this.game.rnd.pick(this._frames):this._frames,this.autoAlpha?a.setAlphaData(this.alphaData):a.alpha=this.game.rnd.realInRange(this.minParticleAlpha,this.maxParticleAlpha),a.blendMode=this.blendMode,a.body.updateBounds(),a.body.bounce.setTo(this.bounce.x,this.bounce.y),a.body.velocity.x=this.game.rnd.integerInRange(this.minParticleSpeed.x,this.maxParticleSpeed.x),a.body.velocity.y=this.game.rnd.integerInRange(this.minParticleSpeed.y,this.maxParticleSpeed.y),a.body.angularVelocity=this.game.rnd.integerInRange(this.minRotation,this.maxRotation),a.body.gravity.y=this.gravity,a.body.drag.x=this.particleDrag.x,a.body.drag.y=this.particleDrag.y,a.body.angularDrag=this.angularDrag,a.onEmit())},b.Particles.Arcade.Emitter.prototype.setSize=function(a,b){this.width=a,this.height=b},b.Particles.Arcade.Emitter.prototype.setXSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.x=a,this.maxParticleSpeed.x=b},b.Particles.Arcade.Emitter.prototype.setYSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.y=a,this.maxParticleSpeed.y=b},b.Particles.Arcade.Emitter.prototype.setRotation=function(a,b){a=a||0,b=b||0,this.minRotation=a,this.maxRotation=b},b.Particles.Arcade.Emitter.prototype.setAlpha=function(a,c,d,e,f){if("undefined"==typeof a&&(a=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=0),"undefined"==typeof e&&(e=b.Easing.Linear.None),"undefined"==typeof f&&(f=!1),this.minParticleAlpha=a,this.maxParticleAlpha=c,this.autoAlpha=!1,d>0&&a!==c){var g={v:a},h=this.game.make.tween(g).to({v:c},d,e);h.yoyo(f),this.alphaData=h.generateData(60),this.alphaData.reverse(),this.autoAlpha=!0}},b.Particles.Arcade.Emitter.prototype.setScale=function(a,c,d,e,f,g,h){if("undefined"==typeof a&&(a=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1),"undefined"==typeof e&&(e=1),"undefined"==typeof f&&(f=0),"undefined"==typeof g&&(g=b.Easing.Linear.None),"undefined"==typeof h&&(h=!1),this.minParticleScale=1,this.maxParticleScale=1,this._minParticleScale.set(a,d),this._maxParticleScale.set(c,e),this.autoScale=!1,f>0&&a!==c||d!==e){var i={x:a,y:d},j=this.game.make.tween(i).to({x:c,y:e},f,g);j.yoyo(h),this.scaleData=j.generateData(60),this.scaleData.reverse(),this.autoScale=!0}},b.Particles.Arcade.Emitter.prototype.at=function(a){a.center?(this.emitX=a.center.x,this.emitY=a.center.y):(this.emitX=a.world.x+a.anchor.x*a.width,this.emitY=a.world.y+a.anchor.y*a.height)},Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"x",{get:function(){return this.emitX},set:function(a){this.emitX=a}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"y",{get:function(){return this.emitY},set:function(a){this.emitY=a}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"left",{get:function(){return Math.floor(this.x-this.width/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"right",{get:function(){return Math.floor(this.x+this.width/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"top",{get:function(){return Math.floor(this.y-this.height/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"bottom",{get:function(){return Math.floor(this.y+this.height/2)}}),b.Tile=function(a,b,c,d,e,f){this.layer=a,this.index=b,this.x=c,this.y=d,this.worldX=c*e,this.worldY=d*f,this.width=e,this.height=f,this.centerX=Math.abs(e/2),this.centerY=Math.abs(f/2),this.alpha=1,this.properties={},this.scanned=!1,this.faceTop=!1,this.faceBottom=!1,this.faceLeft=!1,this.faceRight=!1,this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.collisionCallback=null,this.collisionCallbackContext=this +},b.Tile.prototype={containsPoint:function(a,b){return!(athis.right||b>this.bottom)},intersects:function(a,b,c,d){return c<=this.worldX?!1:d<=this.worldY?!1:a>=this.worldX+this.width?!1:b>=this.worldY+this.height?!1:!0},setCollisionCallback:function(a,b){this.collisionCallback=a,this.collisionCallbackContext=b},destroy:function(){this.collisionCallback=null,this.collisionCallbackContext=null,this.properties=null},setCollision:function(a,b,c,d){this.collideLeft=a,this.collideRight=b,this.collideUp=c,this.collideDown=d},resetCollision:function(){this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.faceTop=!1,this.faceBottom=!1,this.faceLeft=!1,this.faceRight=!1},isInteresting:function(a,b){return a&&b?this.collideLeft||this.collideRight||this.collideUp||this.collideDown||this.faceTop||this.faceBottom||this.faceLeft||this.faceRight||this.collisionCallback:a?this.collideLeft||this.collideRight||this.collideUp||this.collideDown:b?this.faceTop||this.faceBottom||this.faceLeft||this.faceRight:!1},copy:function(a){this.index=a.index,this.alpha=a.alpha,this.properties=a.properties,this.collideUp=a.collideUp,this.collideDown=a.collideDown,this.collideLeft=a.collideLeft,this.collideRight=a.collideRight,this.collisionCallback=a.collisionCallback,this.collisionCallbackContext=a.collisionCallbackContext}},b.Tile.prototype.constructor=b.Tile,Object.defineProperty(b.Tile.prototype,"collides",{get:function(){return this.collideLeft||this.collideRight||this.collideUp||this.collideDown}}),Object.defineProperty(b.Tile.prototype,"canCollide",{get:function(){return this.collideLeft||this.collideRight||this.collideUp||this.collideDown||this.collisionCallback}}),Object.defineProperty(b.Tile.prototype,"left",{get:function(){return this.worldX}}),Object.defineProperty(b.Tile.prototype,"right",{get:function(){return this.worldX+this.width}}),Object.defineProperty(b.Tile.prototype,"top",{get:function(){return this.worldY}}),Object.defineProperty(b.Tile.prototype,"bottom",{get:function(){return this.worldY+this.height}}),b.Tilemap=function(a,c,d,e,f,g){this.game=a,this.key=c;var h=b.TilemapParser.parse(this.game,c,d,e,f,g);null!==h&&(this.width=h.width,this.height=h.height,this.tileWidth=h.tileWidth,this.tileHeight=h.tileHeight,this.orientation=h.orientation,this.format=h.format,this.version=h.version,this.properties=h.properties,this.widthInPixels=h.widthInPixels,this.heightInPixels=h.heightInPixels,this.layers=h.layers,this.tilesets=h.tilesets,this.tiles=h.tiles,this.objects=h.objects,this.collideIndexes=[],this.collision=h.collision,this.images=h.images,this.currentLayer=0,this.debugMap=[],this._results=[],this._tempA=0,this._tempB=0)},b.Tilemap.CSV=0,b.Tilemap.TILED_JSON=1,b.Tilemap.prototype={create:function(a,b,c,d,e,f){return"undefined"==typeof f&&(f=this.game.world),this.width=b,this.height=c,this.setTileSize(d,e),this.layers.length=0,this.createBlankLayer(a,b,c,d,e,f)},setTileSize:function(a,b){this.tileWidth=a,this.tileHeight=b,this.widthInPixels=this.width*a,this.heightInPixels=this.height*b},addTilesetImage:function(a,c,d,e,f,g,h){if("undefined"==typeof d&&(d=this.tileWidth),"undefined"==typeof e&&(e=this.tileHeight),"undefined"==typeof f&&(f=0),"undefined"==typeof g&&(g=0),"undefined"==typeof h&&(h=0),0===d&&(d=32),0===e&&(e=32),"undefined"==typeof c){if("string"!=typeof a)return null;if(c=a,!this.game.cache.checkImageKey(c))return console.warn('Phaser.Tilemap.addTilesetImage: Invalid image key given: "'+c+'"'),null}if("string"==typeof a&&(a=this.getTilesetIndex(a),null===a&&this.format===b.Tilemap.TILED_JSON))return console.warn('Phaser.Tilemap.addTilesetImage: No data found in the JSON matching the tileset name: "'+c+'"'),null;if(this.tilesets[a])return this.tilesets[a].setImage(this.game.cache.getImage(c)),this.tilesets[a];var i=new b.Tileset(c,h,d,e,f,g,{});i.setImage(this.game.cache.getImage(c)),this.tilesets.push(i);for(var j=this.tilesets.length-1,k=f,l=f,m=0,n=0,o=0,p=h;pl;l++)if(this.objects[a][l].gid===c){k=new i(this.game,this.objects[a][l].x,this.objects[a][l].y,d,e),k.name=this.objects[a][l].name,k.visible=this.objects[a][l].visible,k.autoCull=g,k.exists=f,j&&(k.y-=k.height),h.add(k);for(var n in this.objects[a][l].properties)h.set(k,n,this.objects[a][l].properties[n],!1,!1,0)}},createLayer:function(a,c,d,e){"undefined"==typeof c&&(c=this.game.width),"undefined"==typeof d&&(d=this.game.height),"undefined"==typeof e&&(e=this.game.world);var f=a;return"string"==typeof a&&(f=this.getLayerIndex(a)),null===f||f>this.layers.length?void console.warn("Tilemap.createLayer: Invalid layer ID given: "+f):e.add(new b.TilemapLayer(this.game,this,f,c,d))},createBlankLayer:function(a,c,d,e,f,g){if("undefined"==typeof g&&(g=this.game.world),null!==this.getLayerIndex(a))return void console.warn("Tilemap.createBlankLayer: Layer with matching name already exists");for(var h,i={name:a,x:0,y:0,width:c,height:d,widthInPixels:c*e,heightInPixels:d*f,alpha:1,visible:!0,properties:{},indexes:[],callbacks:[],bodies:[],data:null},j=[],k=0;d>k;k++){h=[];for(var l=0;c>l;l++)h.push(new b.Tile(i,-1,l,k,e,f));j.push(h)}i.data=j,this.layers.push(i),this.currentLayer=this.layers.length-1;var m=i.widthInPixels,n=i.heightInPixels;m>this.game.width&&(m=this.game.width),n>this.game.height&&(n=this.game.height);var j=new b.TilemapLayer(this.game,this,this.layers.length-1,m,n);return j.name=a,g.add(j)},getIndex:function(a,b){for(var c=0;ce;e++)this.layers[d].callbacks[a[e]]={callback:b,callbackContext:c}},setTileLocationCallback:function(a,b,c,d,e,f,g){if(g=this.getLayer(g),this.copy(a,b,c,d,g),!(this._results.length<2))for(var h=1;hd;d++)this.setCollisionByIndex(a[d],b,c,!1);this.calculateFaces(c)},setCollisionBetween:function(a,b,c,d){if("undefined"==typeof c&&(c=!0),d=this.getLayer(d),!(a>b)){for(var e=a;b>=e;e++)this.setCollisionByIndex(e,c,d,!1);this.calculateFaces(d)}},setCollisionByExclusion:function(a,b,c){"undefined"==typeof b&&(b=!0),c=this.getLayer(c);for(var d=0,e=this.tiles.length;e>d;d++)-1===a.indexOf(d)&&this.setCollisionByIndex(d,b,c,!1);this.calculateFaces(c)},setCollisionByIndex:function(a,b,c,d){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=this.currentLayer),"undefined"==typeof d&&(d=!0),b)this.collideIndexes.push(a);else{var e=this.collideIndexes.indexOf(a);e>-1&&this.collideIndexes.splice(e,1)}for(var f=0;ff;f++)for(var h=0,i=this.layers[a].width;i>h;h++){var j=this.layers[a].data[f][h];j&&(b=this.getTileAbove(a,h,f),c=this.getTileBelow(a,h,f),d=this.getTileLeft(a,h,f),e=this.getTileRight(a,h,f),j.collides&&(j.faceTop=!0,j.faceBottom=!0,j.faceLeft=!0,j.faceRight=!0),b&&b.collides&&(j.faceTop=!1),c&&c.collides&&(j.faceBottom=!1),d&&d.collides&&(j.faceLeft=!1),e&&e.collides&&(j.faceRight=!1))}},getTileAbove:function(a,b,c){return c>0?this.layers[a].data[c-1][b]:null},getTileBelow:function(a,b,c){return c0?this.layers[a].data[c][b-1]:null},getTileRight:function(a,b,c){return b=0&&a=0&&b=0&&c=0&&d-1?this.layers[e].data[d][c].setCollision(!0,!0,!0,!0):this.layers[e].data[d][c].resetCollision(),this.layers[e].dirty=!0,this.calculateFaces(e),this.layers[e].data[d][c]}return null},putTileWorldXY:function(a,b,c,d,e,f){return f=this.getLayer(f),b=this.game.math.snapToFloor(b,d)/d,c=this.game.math.snapToFloor(c,e)/e,this.putTile(a,b,c,f)},getTile:function(a,b,c){return c=this.getLayer(c),a>=0&&a=0&&ba&&(a=0),0>b&&(b=0),c>this.layers[e].width&&(c=this.layers[e].width),d>this.layers[e].height&&(d=this.layers[e].height),this._results.length=0,this._results.push({x:a,y:b,width:c,height:d,layer:e});for(var f=b;b+d>f;f++)for(var g=a;a+c>g;g++)this._results.push(this.layers[e].data[f][g]);return this._results},paste:function(a,b,c,d){if("undefined"==typeof a&&(a=0),"undefined"==typeof b&&(b=0),d=this.getLayer(d),c&&!(c.length<2)){for(var e=c[1].x-a,f=c[1].y-b,g=1;g1?this.debugMap[this.layers[this.currentLayer].data[c][d]]?"background: "+this.debugMap[this.layers[this.currentLayer].data[c][d]]:"background: #ffffff":"background: rgb(0, 0, 0)");a+="\n"}b[0]=a,console.log.apply(console,b)},destroy:function(){this.removeAllLayers(),this.data=[],this.game=null}},b.Tilemap.prototype.constructor=b.Tilemap,b.TilemapLayer=function(a,c,d,e,f){this.game=a,this.map=c,this.index=d,this.layer=c.layers[d],this.canvas=b.Canvas.create(e,f,"",!0),this.context=this.canvas.getContext("2d"),this.baseTexture=new PIXI.BaseTexture(this.canvas),this.texture=new PIXI.Texture(this.baseTexture),this.textureFrame=new b.Frame(0,0,0,e,f,"tilemapLayer",a.rnd.uuid()),b.Image.call(this,this.game,0,0,this.texture,this.textureFrame),this.name="",this.type=b.TILEMAPLAYER,this.fixedToCamera=!0,this.cameraOffset=new b.Point(0,0),this.tileColor="rgb(255, 255, 255)",this.debug=!1,this.debugAlpha=.5,this.debugColor="rgba(0, 255, 0, 1)",this.debugFill=!1,this.debugFillColor="rgba(0, 255, 0, 0.2)",this.debugCallbackColor="rgba(255, 0, 0, 1)",this.scrollFactorX=1,this.scrollFactorY=1,this.dirty=!0,this.rayStepRate=4,this._mc={cw:c.tileWidth,ch:c.tileHeight,ga:1,dx:0,dy:0,dw:0,dh:0,tx:0,ty:0,tw:0,th:0,tl:0,maxX:0,maxY:0,startX:0,startY:0,x:0,y:0,prevX:0,prevY:0},this._results=[],this.updateMax()},b.TilemapLayer.prototype=Object.create(b.Image.prototype),b.TilemapLayer.prototype.constructor=b.TilemapLayer,b.TilemapLayer.prototype.postUpdate=function(){b.Image.prototype.postUpdate.call(this),this.scrollX=this.game.camera.x*this.scrollFactorX,this.scrollY=this.game.camera.y*this.scrollFactorY,this.render(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y)},b.TilemapLayer.prototype.resizeWorld=function(){this.game.world.setBounds(0,0,this.layer.widthInPixels,this.layer.heightInPixels)},b.TilemapLayer.prototype._fixX=function(a){return 0>a&&(a=0),1===this.scrollFactorX?a:this._mc.x+(a-this._mc.x/this.scrollFactorX)},b.TilemapLayer.prototype._unfixX=function(a){return 1===this.scrollFactorX?a:this._mc.x/this.scrollFactorX+(a-this._mc.x)},b.TilemapLayer.prototype._fixY=function(a){return 0>a&&(a=0),1===this.scrollFactorY?a:this._mc.y+(a-this._mc.y/this.scrollFactorY)},b.TilemapLayer.prototype._unfixY=function(a){return 1===this.scrollFactorY?a:this._mc.y/this.scrollFactorY+(a-this._mc.y)},b.TilemapLayer.prototype.getTileX=function(a){return this.game.math.snapToFloor(this._fixX(a),this.map.tileWidth)/this.map.tileWidth},b.TilemapLayer.prototype.getTileY=function(a){return this.game.math.snapToFloor(this._fixY(a),this.map.tileHeight)/this.map.tileHeight},b.TilemapLayer.prototype.getTileXY=function(a,b,c){return c.x=this.getTileX(a),c.y=this.getTileY(b),c},b.TilemapLayer.prototype.getRayCastTiles=function(a,b,c,d){("undefined"==typeof b||null===b)&&(b=this.rayStepRate),"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1);var e=this.getTiles(a.x,a.y,a.width,a.height,c,d);if(0===e.length)return[];for(var f=a.coordinatesOnLine(b),g=f.length,h=[],i=0;ij;j++)if(e[i].containsPoint(f[j][0],f[j][1])){h.push(e[i]);break}return h},b.TilemapLayer.prototype.getTiles=function(a,b,c,d,e,f){"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=!1),a=this._fixX(a),b=this._fixY(b),c>this.layer.widthInPixels&&(c=this.layer.widthInPixels),d>this.layer.heightInPixels&&(d=this.layer.heightInPixels),this._mc.tx=this.game.math.snapToFloor(a,this._mc.cw)/this._mc.cw,this._mc.ty=this.game.math.snapToFloor(b,this._mc.ch)/this._mc.ch,this._mc.tw=(this.game.math.snapToCeil(c,this._mc.cw)+this._mc.cw)/this._mc.cw,this._mc.th=(this.game.math.snapToCeil(d,this._mc.ch)+this._mc.ch)/this._mc.ch,this._results.length=0;for(var g=this._mc.ty;gthis.layer.width&&(this._mc.maxX=this.layer.width),this._mc.maxY>this.layer.height&&(this._mc.maxY=this.layer.height)),this.dirty=!0},b.TilemapLayer.prototype.render=function(){if(this.layer.dirty&&(this.dirty=!0),this.dirty&&this.visible){this._mc.prevX=this._mc.dx,this._mc.prevY=this._mc.dy,this._mc.dx=-(this._mc.x-this._mc.startX*this.map.tileWidth),this._mc.dy=-(this._mc.y-this._mc.startY*this.map.tileHeight),this._mc.tx=this._mc.dx,this._mc.ty=this._mc.dy,this.context.clearRect(0,0,this.canvas.width,this.canvas.height),this.context.fillStyle=this.tileColor;var a,c;this.debug&&(this.context.globalAlpha=this.debugAlpha);for(var d=this._mc.startY,e=this._mc.startY+this._mc.maxY;e>d;d++){this._column=this.layer.data[d];for(var f=this._mc.startX,g=this._mc.startX+this._mc.maxX;g>f;f++)this._column[f]&&(a=this._column[f],a.index>-1&&(c=this.map.tilesets[this.map.tiles[a.index][2]],this.debug===!1&&a.alpha!==this.context.globalAlpha&&(this.context.globalAlpha=a.alpha),c.draw(this.context,Math.floor(this._mc.tx),Math.floor(this._mc.ty),a.index),a.debug&&(this.context.fillStyle="rgba(0, 255, 0, 0.4)",this.context.fillRect(Math.floor(this._mc.tx),Math.floor(this._mc.ty),this.map.tileWidth,this.map.tileHeight)))),this._mc.tx+=this.map.tileWidth;this._mc.tx=this._mc.dx,this._mc.ty+=this.map.tileHeight}return this.debug&&(this.context.globalAlpha=1,this.renderDebug()),this.game.renderType===b.WEBGL&&PIXI.updateWebGLTexture(this.baseTexture,this.game.renderer.gl),this.dirty=!1,this.layer.dirty=!1,!0}},b.TilemapLayer.prototype.renderDebug=function(){this._mc.tx=this._mc.dx,this._mc.ty=this._mc.dy,this.context.strokeStyle=this.debugColor,this.context.fillStyle=this.debugFillColor;for(var a=this._mc.startY,b=this._mc.startY+this._mc.maxY;b>a;a++){this._column=this.layer.data[a];for(var c=this._mc.startX,d=this._mc.startX+this._mc.maxX;d>c;c++){var e=this._column[c];e&&(e.faceTop||e.faceBottom||e.faceLeft||e.faceRight)&&(this._mc.tx=Math.floor(this._mc.tx),this.debugFill&&this.context.fillRect(this._mc.tx,this._mc.ty,this._mc.cw,this._mc.ch),this.context.beginPath(),e.faceTop&&(this.context.moveTo(this._mc.tx,this._mc.ty),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty)),e.faceBottom&&(this.context.moveTo(this._mc.tx,this._mc.ty+this._mc.ch),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty+this._mc.ch)),e.faceLeft&&(this.context.moveTo(this._mc.tx,this._mc.ty),this.context.lineTo(this._mc.tx,this._mc.ty+this._mc.ch)),e.faceRight&&(this.context.moveTo(this._mc.tx+this._mc.cw,this._mc.ty),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty+this._mc.ch)),this.context.stroke()),this._mc.tx+=this.map.tileWidth}this._mc.tx=this._mc.dx,this._mc.ty+=this.map.tileHeight}},Object.defineProperty(b.TilemapLayer.prototype,"scrollX",{get:function(){return this._mc.x},set:function(a){a!==this._mc.x&&a>=0&&this.layer.widthInPixels>this.width&&(this._mc.x=a,this._mc.x>this.layer.widthInPixels-this.width&&(this._mc.x=this.layer.widthInPixels-this.width),this._mc.startX=this.game.math.floor(this._mc.x/this.map.tileWidth),this._mc.startX<0&&(this._mc.startX=0),this._mc.startX+this._mc.maxX>this.layer.width&&(this._mc.startX=this.layer.width-this._mc.maxX),this.dirty=!0)}}),Object.defineProperty(b.TilemapLayer.prototype,"scrollY",{get:function(){return this._mc.y},set:function(a){a!==this._mc.y&&a>=0&&this.layer.heightInPixels>this.height&&(this._mc.y=a,this._mc.y>this.layer.heightInPixels-this.height&&(this._mc.y=this.layer.heightInPixels-this.height),this._mc.startY=this.game.math.floor(this._mc.y/this.map.tileHeight),this._mc.startY<0&&(this._mc.startY=0),this._mc.startY+this._mc.maxY>this.layer.height&&(this._mc.startY=this.layer.height-this._mc.maxY),this.dirty=!0)}}),Object.defineProperty(b.TilemapLayer.prototype,"collisionWidth",{get:function(){return this._mc.cw},set:function(a){this._mc.cw=a,this.dirty=!0}}),Object.defineProperty(b.TilemapLayer.prototype,"collisionHeight",{get:function(){return this._mc.ch},set:function(a){this._mc.ch=a,this.dirty=!0}}),b.TilemapParser={parse:function(a,c,d,e,f,g){if("undefined"==typeof d&&(d=32),"undefined"==typeof e&&(e=32),"undefined"==typeof f&&(f=10),"undefined"==typeof g&&(g=10),"undefined"==typeof c)return this.getEmptyData();if(null===c)return this.getEmptyData(d,e,f,g);var h=a.cache.getTilemapData(c);if(h){if(h.format===b.Tilemap.CSV)return this.parseCSV(c,h.data,d,e);if(!h.format||h.format===b.Tilemap.TILED_JSON)return this.parseTiledJSON(h.data)}else console.warn("Phaser.TilemapParser.parse - No map data found for key "+c)},parseCSV:function(a,c,d,e){var f=this.getEmptyData();c=c.trim();for(var g=[],h=c.split("\n"),i=h.length,j=0,k=0;kj;j++)h.push(a.layers[e].data[j]>0?new b.Tile(f,a.layers[e].data[j],g,i.length,a.tilewidth,a.tileheight):new b.Tile(f,-1,g,i.length,a.tilewidth,a.tileheight)),g++,g===a.layers[e].width&&(i.push(h),g=0,h=[]);f.data=i,d.push(f)}c.layers=d;for(var l=[],e=0;es;s++)if(a.layers[e].objects[s].gid){var t={gid:a.layers[e].objects[s].gid,name:a.layers[e].objects[s].name,x:a.layers[e].objects[s].x,y:a.layers[e].objects[s].y,visible:a.layers[e].objects[s].visible,properties:a.layers[e].objects[s].properties};q[a.layers[e].name].push(t)}else if(a.layers[e].objects[s].polyline){var t={name:a.layers[e].objects[s].name,x:a.layers[e].objects[s].x,y:a.layers[e].objects[s].y,width:a.layers[e].objects[s].width,height:a.layers[e].objects[s].height,visible:a.layers[e].objects[s].visible,properties:a.layers[e].objects[s].properties};t.polyline=[];for(var u=0;u=c)&&(c=32),("undefined"==typeof d||0>=d)&&(d=32),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=0),this.name=a,this.firstgid=b,this.tileWidth=c,this.tileHeight=d,this.tileMargin=e,this.tileSpacing=f,this.properties=g,this.image=null,this.rows=0,this.columns=0,this.total=0,this.drawCoords=[]},b.Tileset.prototype={draw:function(a,b,c,d){this.image&&this.drawCoords[d]&&a.drawImage(this.image,this.drawCoords[d][0],this.drawCoords[d][1],this.tileWidth,this.tileHeight,b,c,this.tileWidth,this.tileHeight)},setImage:function(a){this.image=a,this.rows=Math.round((a.height-this.tileMargin)/(this.tileHeight+this.tileSpacing)),this.columns=Math.round((a.width-this.tileMargin)/(this.tileWidth+this.tileSpacing)),this.total=this.rows*this.columns,this.drawCoords.length=0;for(var b=this.tileMargin,c=this.tileMargin,d=this.firstgid,e=0;e spaceLeft) + if(j === 0 || wordWidthWithSpace > spaceLeft) { // Skip printing the newline if it's the first word of the line that is // greater than the word wrap width. @@ -2650,13 +2655,13 @@ PIXI.Text.prototype.wordWrap = function(text) { result += '\n'; } - result += words[j] + ' '; + result += words[j]; spaceLeft = this.style.wordWrapWidth - wordWidth; } else { spaceLeft -= wordWidthWithSpace; - result += words[j] + ' '; + result += ' ' + words[j]; } } @@ -5385,7 +5390,7 @@ PIXI.WebGLMaskManager.prototype.pushMask = function(maskData, renderSession) this.maskStack.push(maskData); - gl.colorMask(false, false, false, true); + gl.colorMask(false, false, false, false); gl.stencilOp(gl.KEEP,gl.KEEP,gl.INCR); PIXI.WebGLGraphics.renderGraphics(maskData, renderSession); @@ -6531,11 +6536,11 @@ PIXI.WebGLFilterManager.prototype.pushFilter = function(filterBlock) var filterArea = filterBlock._filterArea;// filterBlock.target.getBounds();///filterBlock.target.filterArea; - var padidng = filter.padding; - filterArea.x -= padidng; - filterArea.y -= padidng; - filterArea.width += padidng * 2; - filterArea.height += padidng * 2; + var padding = filter.padding; + filterArea.x -= padding; + filterArea.y -= padding; + filterArea.width += padding * 2; + filterArea.height += padding * 2; // cap filter to screen size.. if(filterArea.x < 0)filterArea.x = 0; @@ -6907,9 +6912,10 @@ PIXI.WebGLFilterManager.prototype.destroy = function() * @param gl {WebGLContext} the current WebGL drawing context * @param width {Number} the horizontal range of the filter * @param height {Number} the vertical range of the filter +* @param scaleMode {Number} Should be one of the PIXI.scaleMode consts * @private */ -PIXI.FilterTexture = function(gl, width, height) +PIXI.FilterTexture = function(gl, width, height, scaleMode) { /** * @property gl @@ -6921,9 +6927,11 @@ PIXI.FilterTexture = function(gl, width, height) this.frameBuffer = gl.createFramebuffer(); this.texture = gl.createTexture(); + scaleMode = scaleMode || PIXI.scaleModes.DEFAULT; + gl.bindTexture(gl.TEXTURE_2D, this.texture); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR : gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR : gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer ); @@ -6931,6 +6939,11 @@ PIXI.FilterTexture = function(gl, width, height) gl.bindFramebuffer(gl.FRAMEBUFFER, this.frameBuffer ); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.texture, 0); + // required for masking a mask?? + this.renderBuffer = gl.createRenderbuffer(); + gl.bindRenderbuffer(gl.RENDERBUFFER, this.renderBuffer); + gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, this.renderBuffer); + this.resize(width, height); }; @@ -6966,6 +6979,9 @@ PIXI.FilterTexture.prototype.resize = function(width, height) gl.bindTexture(gl.TEXTURE_2D, this.texture); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + // update the stencil buffer width and height + gl.bindRenderbuffer(gl.RENDERBUFFER, this.renderBuffer); + gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height); }; /** @@ -8009,7 +8025,7 @@ PIXI.Graphics = function() /** * the bounds' padding used for bounds calculation * - * @property bounds + * @property boundsPadding * @type Number */ this.boundsPadding = 10; @@ -8390,28 +8406,24 @@ PIXI.Graphics.prototype.getBounds = function( matrix ) var x4 = a * w1 + c * h0 + tx; var y4 = d * h0 + b * w1 + ty; - var maxX = -Infinity; - var maxY = -Infinity; + var maxX = x1; + var maxY = y1; - var minX = Infinity; - var minY = Infinity; + var minX = x1; + var minY = y1; - minX = x1 < minX ? x1 : minX; minX = x2 < minX ? x2 : minX; minX = x3 < minX ? x3 : minX; minX = x4 < minX ? x4 : minX; - minY = y1 < minY ? y1 : minY; minY = y2 < minY ? y2 : minY; minY = y3 < minY ? y3 : minY; minY = y4 < minY ? y4 : minY; - maxX = x1 > maxX ? x1 : maxX; maxX = x2 > maxX ? x2 : maxX; maxX = x3 > maxX ? x3 : maxX; maxX = x4 > maxX ? x4 : maxX; - maxY = y1 > maxY ? y1 : maxY; maxY = y2 > maxY ? y2 : maxY; maxY = y3 > maxY ? y3 : maxY; maxY = y4 > maxY ? y4 : maxY; @@ -9101,7 +9113,7 @@ PIXI.BaseTexture = function(source, scaleMode) if(!source)return; - if(this.source.complete || this.source.getContext) + if((this.source.complete || this.source.getContext) && this.source.width && this.source.height) { this.hasLoaded = true; this.width = this.source.width; @@ -9179,7 +9191,7 @@ PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin, scaleMode) { var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(crossorigin === undefined)crossorigin = true; + if(crossorigin === undefined && imageUrl.indexOf('data:') === -1) crossorigin = true; if(!baseTexture) { @@ -9508,8 +9520,9 @@ PIXI.TextureUvs = function() * @constructor * @param width {Number} The width of the render texture * @param height {Number} The height of the render texture + * @param scaleMode {Number} Should be one of the PIXI.scaleMode consts */ -PIXI.RenderTexture = function(width, height, renderer) +PIXI.RenderTexture = function(width, height, renderer, scaleMode) { PIXI.EventTarget.call( this ); @@ -9547,6 +9560,8 @@ PIXI.RenderTexture = function(width, height, renderer) this.baseTexture.height = this.height; this.baseTexture._glTextures = []; + this.baseTexture.scaleMode = scaleMode || PIXI.scaleModes.DEFAULT; + this.baseTexture.hasLoaded = true; // each render texture can only belong to one renderer at the moment if its webGL @@ -9556,7 +9571,7 @@ PIXI.RenderTexture = function(width, height, renderer) { var gl = this.renderer.gl; - this.textureBuffer = new PIXI.FilterTexture(gl, this.width, this.height); + this.textureBuffer = new PIXI.FilterTexture(gl, this.width, this.height, this.baseTexture.scaleMode); this.baseTexture._glTextures[gl.id] = this.textureBuffer.texture; this.render = this.renderWebGL; diff --git a/build/custom/pixi.min.js b/build/custom/pixi.min.js index 2901371e79..cddf55b7c2 100644 --- a/build/custom/pixi.min.js +++ b/build/custom/pixi.min.js @@ -1,4 +1,5 @@ /* Pixi.js custom build for Phaser v2.0.4 - http://phaser.io - @photonstorm - (c) 2014 Photon Storm Ltd. */ -(function(){var a=this,b=b||{};b.WEBGL_RENDERER=0,b.CANVAS_RENDERER=1,b.VERSION="v1.5.2",b.blendModes={NORMAL:0,ADD:1,MULTIPLY:2,SCREEN:3,OVERLAY:4,DARKEN:5,LIGHTEN:6,COLOR_DODGE:7,COLOR_BURN:8,HARD_LIGHT:9,SOFT_LIGHT:10,DIFFERENCE:11,EXCLUSION:12,HUE:13,SATURATION:14,COLOR:15,LUMINOSITY:16},b.scaleModes={DEFAULT:0,LINEAR:0,NEAREST:1},b.INTERACTION_FREQUENCY=30,b.AUTO_PREVENT_DEFAULT=!0,b.RAD_TO_DEG=180/Math.PI,b.DEG_TO_RAD=Math.PI/180,b.Point=function(a,b){this.x=a||0,this.y=b||0},b.Point.prototype.clone=function(){return new b.Point(this.x,this.y)},b.Point.prototype.constructor=b.Point,b.Point.prototype.set=function(a,b){this.x=a||0,this.y=b||(0!==b?this.x:0)},b.Rectangle=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},b.Rectangle.prototype.clone=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},b.Rectangle.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=this.x;if(a>=c&&a<=c+this.width){var d=this.y;if(b>=d&&b<=d+this.height)return!0}return!1},b.Rectangle.prototype.constructor=b.Rectangle,b.EmptyRectangle=new b.Rectangle(0,0,0,0),b.Polygon=function(a){if(a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var c=[],d=0,e=a.length;e>d;d+=2)c.push(new b.Point(a[d],a[d+1]));a=c}this.points=a},b.Polygon.prototype.clone=function(){for(var a=[],c=0;cb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!c)}return c},b.Polygon.prototype.constructor=b.Polygon,b.Circle=function(a,b,c){this.x=a||0,this.y=b||0,this.radius=c||0},b.Circle.prototype.clone=function(){return new b.Circle(this.x,this.y,this.radius)},b.Circle.prototype.contains=function(a,b){if(this.radius<=0)return!1;var c=this.x-a,d=this.y-b,e=this.radius*this.radius;return c*=c,d*=d,e>=c+d},b.Circle.prototype.constructor=b.Circle,b.Ellipse=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},b.Ellipse.prototype.clone=function(){return new b.Ellipse(this.x,this.y,this.width,this.height)},b.Ellipse.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=(a-this.x)/this.width,d=(b-this.y)/this.height;return c*=c,d*=d,1>=c+d},b.Ellipse.prototype.getBounds=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},b.Ellipse.prototype.constructor=b.Ellipse,b.determineMatrixArrayType=function(){return"undefined"!=typeof Float32Array?Float32Array:Array},b.Matrix2=b.determineMatrixArrayType(),b.Matrix=function(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0},b.Matrix.prototype.fromArray=function(a){this.a=a[0],this.b=a[1],this.c=a[3],this.d=a[4],this.tx=a[2],this.ty=a[5]},b.Matrix.prototype.toArray=function(a){this.array||(this.array=new Float32Array(9));var b=this.array;return a?(this.array[0]=this.a,this.array[1]=this.c,this.array[2]=0,this.array[3]=this.b,this.array[4]=this.d,this.array[5]=0,this.array[6]=this.tx,this.array[7]=this.ty,this.array[8]=1):(this.array[0]=this.a,this.array[1]=this.b,this.array[2]=this.tx,this.array[3]=this.c,this.array[4]=this.d,this.array[5]=this.ty,this.array[6]=0,this.array[7]=0,this.array[8]=1),b},b.identityMatrix=new b.Matrix,b.DisplayObject=function(){this.position=new b.Point,this.scale=new b.Point(1,1),this.pivot=new b.Point(0,0),this.rotation=0,this.alpha=1,this.visible=!0,this.hitArea=null,this.buttonMode=!1,this.renderable=!1,this.parent=null,this.stage=null,this.worldAlpha=1,this._interactive=!1,this.defaultCursor="pointer",this.worldTransform=new b.Matrix,this.color=[],this.dynamic=!0,this._sr=0,this._cr=1,this.filterArea=null,this._bounds=new b.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this._cacheAsBitmap=!1,this._cacheIsDirty=!1},b.DisplayObject.prototype.constructor=b.DisplayObject,b.DisplayObject.prototype.setInteractive=function(a){this.interactive=a},Object.defineProperty(b.DisplayObject.prototype,"interactive",{get:function(){return this._interactive},set:function(a){this._interactive=a,this.stage&&(this.stage.dirty=!0)}}),Object.defineProperty(b.DisplayObject.prototype,"worldVisible",{get:function(){var a=this;do{if(!a.visible)return!1;a=a.parent}while(a);return!0}}),Object.defineProperty(b.DisplayObject.prototype,"mask",{get:function(){return this._mask},set:function(a){this._mask&&(this._mask.isMask=!1),this._mask=a,this._mask&&(this._mask.isMask=!0)}}),Object.defineProperty(b.DisplayObject.prototype,"filters",{get:function(){return this._filters},set:function(a){if(a){for(var b=[],c=0;c=0&&b<=this.children.length))throw new Error(a+" The index "+b+" supplied is out of bounds "+this.children.length);a.parent&&a.parent.removeChild(a),a.parent=this,this.children.splice(b,0,a),this.stage&&a.setStageReference(this.stage)},b.DisplayObjectContainer.prototype.swapChildren=function(a,b){if(a!==b){var c=this.children.indexOf(a),d=this.children.indexOf(b);if(0>c||0>d)throw new Error("swapChildren: Both the supplied DisplayObjects must be a child of the caller.");this.children[c]=b,this.children[d]=a}},b.DisplayObjectContainer.prototype.getChildAt=function(a){if(a>=0&&a0&&d>=e){for(var f=this.children.splice(c,e),g=0;ga;a++)this.children[a].updateTransform()},b.DisplayObjectContainer.prototype.getBounds=function(a){if(0===this.children.length)return b.EmptyRectangle;if(a){var c=this.worldTransform;this.worldTransform=a,this.updateTransform(),this.worldTransform=c}for(var d,e,f,g=1/0,h=1/0,i=-1/0,j=-1/0,k=!1,l=0,m=this.children.length;m>l;l++){var n=this.children[l];n.visible&&(k=!0,d=this.children[l].getBounds(a),g=ge?i:e,j=j>f?j:f)}if(!k)return b.EmptyRectangle;var o=this._bounds;return o.x=g,o.y=h,o.width=i-g,o.height=j-h,o},b.DisplayObjectContainer.prototype.getLocalBounds=function(){var a=this.worldTransform;this.worldTransform=b.identityMatrix;for(var c=0,d=this.children.length;d>c;c++)this.children[c].updateTransform();var e=this.getBounds();return this.worldTransform=a,e},b.DisplayObjectContainer.prototype.setStageReference=function(a){this.stage=a,this._interactive&&(this.stage.dirty=!0);for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d.setStageReference(a)}},b.DisplayObjectContainer.prototype.removeStageReference=function(){for(var a=0,b=this.children.length;b>a;a++){var c=this.children[a];c.removeStageReference()}this._interactive&&(this.stage.dirty=!0),this.stage=null},b.DisplayObjectContainer.prototype._renderWebGL=function(a){if(this.visible&&!(this.alpha<=0)){if(this._cacheAsBitmap)return void this._renderCachedSprite(a);var b,c;if(this._mask||this._filters){for(this._mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a),a.spriteBatch.start()),this._filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);a.spriteBatch.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),a.spriteBatch.start()}else for(b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},b.DisplayObjectContainer.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){if(this._cacheAsBitmap)return void this._renderCachedSprite(a);this._mask&&a.maskManager.pushMask(this._mask,a.context);for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},b.Sprite=function(a){b.DisplayObjectContainer.call(this),this.anchor=new b.Point,this.texture=a,this._width=0,this._height=0,this.tint=16777215,this.blendMode=b.blendModes.NORMAL,a.baseTexture.hasLoaded?this.onTextureUpdate():(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},b.Sprite.prototype=Object.create(b.DisplayObjectContainer.prototype),b.Sprite.prototype.constructor=b.Sprite,Object.defineProperty(b.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(a){this.scale.x=a/this.texture.frame.width,this._width=a}}),Object.defineProperty(b.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(a){this.scale.y=a/this.texture.frame.height,this._height=a}}),b.Sprite.prototype.setTexture=function(a){this.texture.baseTexture!==a.baseTexture?(this.textureChange=!0,this.texture=a):this.texture=a,this.cachedTint=16777215,this.updateFrame=!0},b.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},b.Sprite.prototype.getBounds=function(a){var b=this.texture.frame.width,c=this.texture.frame.height,d=b*(1-this.anchor.x),e=b*-this.anchor.x,f=c*(1-this.anchor.y),g=c*-this.anchor.y,h=a||this.worldTransform,i=h.a,j=h.c,k=h.b,l=h.d,m=h.tx,n=h.ty,o=i*e+k*g+m,p=l*g+j*e+n,q=i*d+k*g+m,r=l*g+j*d+n,s=i*d+k*f+m,t=l*f+j*d+n,u=i*e+k*f+m,v=l*f+j*e+n,w=-1/0,x=-1/0,y=1/0,z=1/0;y=y>o?o:y,y=y>q?q:y,y=y>s?s:y,y=y>u?u:y,z=z>p?p:z,z=z>r?r:z,z=z>t?t:z,z=z>v?v:z,w=o>w?o:w,w=q>w?q:w,w=s>w?s:w,w=u>w?u:w,x=p>x?p:x,x=r>x?r:x,x=t>x?t:x,x=v>x?v:x;var A=this._bounds;return A.x=y,A.width=w-y,A.y=z,A.height=x-z,this._currentBounds=A,A},b.Sprite.prototype._renderWebGL=function(a){if(this.visible&&!(this.alpha<=0)){var b,c;if(this._mask||this._filters){var d=a.spriteBatch;for(this._mask&&(d.stop(),a.maskManager.pushMask(this.mask,a),d.start()),this._filters&&(d.flush(),a.filterManager.pushFilter(this._filterBlock)),d.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);d.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),d.start()}else for(a.spriteBatch.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},b.Sprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){var c=this.texture.frame,d=a.context,e=this.texture;if(this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,d.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),this._mask&&a.maskManager.pushMask(this._mask,a.context),c&&c.width&&c.height&&e.baseTexture.source){d.globalAlpha=this.worldAlpha;var f=this.worldTransform;if(a.roundPixels?d.setTransform(f.a,f.c,f.b,f.d,0|f.tx,0|f.ty):d.setTransform(f.a,f.c,f.b,f.d,f.tx,f.ty),a.smoothProperty&&a.scaleMode!==this.texture.baseTexture.scaleMode&&(a.scaleMode=this.texture.baseTexture.scaleMode,d[a.smoothProperty]=a.scaleMode===b.scaleModes.LINEAR),16777215!==this.tint){if(this.cachedTint!==this.tint){if(!e.baseTexture.hasLoaded)return;this.cachedTint=this.tint,this.tintedTexture=b.CanvasTinter.getTintedTexture(this,this.tint)}d.drawImage(this.tintedTexture,0,0,c.width,c.height,this.anchor.x*-c.width,this.anchor.y*-c.height,c.width,c.height)}else if(e.trim){var g=e.trim;d.drawImage(this.texture.baseTexture.source,c.x,c.y,c.width,c.height,g.x-this.anchor.x*g.width,g.y-this.anchor.y*g.height,c.width,c.height)}else d.drawImage(this.texture.baseTexture.source,c.x,c.y,c.width,c.height,this.anchor.x*-c.width,this.anchor.y*-c.height,c.width,c.height)}for(var h=0,i=this.children.length;i>h;h++){var j=this.children[h];j._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},b.Sprite.fromFrame=function(a){var c=b.TextureCache[a];if(!c)throw new Error('The frameId "'+a+'" does not exist in the texture cache'+this);return new b.Sprite(c)},b.Sprite.fromImage=function(a,c,d){var e=b.Texture.fromImage(a,c,d);return new b.Sprite(e)},b.SpriteBatch=function(a){b.DisplayObjectContainer.call(this),this.textureThing=a,this.ready=!1},b.SpriteBatch.prototype=Object.create(b.DisplayObjectContainer.prototype),b.SpriteBatch.constructor=b.SpriteBatch,b.SpriteBatch.prototype.initWebGL=function(a){this.fastSpriteBatch=new b.WebGLFastSpriteBatch(a),this.ready=!0},b.SpriteBatch.prototype.updateTransform=function(){b.DisplayObject.prototype.updateTransform.call(this)},b.SpriteBatch.prototype._renderWebGL=function(a){!this.visible||this.alpha<=0||!this.children.length||(this.ready||this.initWebGL(a.gl),a.spriteBatch.stop(),a.shaderManager.activateShader(a.shaderManager.fastShader),this.fastSpriteBatch.begin(this,a),this.fastSpriteBatch.render(this),a.shaderManager.activateShader(a.shaderManager.defaultShader),a.spriteBatch.start())},b.SpriteBatch.prototype._renderCanvas=function(a){var c=a.context;c.globalAlpha=this.worldAlpha,b.DisplayObject.prototype.updateTransform.call(this);for(var d=this.worldTransform,e=!0,f=0;fe?(g>0&&(b+="\n"),b+=f[g]+" ",e=this.style.wordWrapWidth-h):(e-=i,b+=f[g]+" ")}d=2?parseInt(c[c.length-2],10):b.BitmapText.fonts[this.fontName].size,this.dirty=!0,this.tint=a.tint},b.BitmapText.prototype.updateText=function(){for(var a=b.BitmapText.fonts[this.fontName],c=new b.Point,d=null,e=[],f=0,g=[],h=0,i=this.fontSize/a.size,j=0;j=j;j++){var n=0;"right"===this.style.align?n=f-g[j]:"center"===this.style.align&&(n=(f-g[j])/2),m.push(n)}var o=this.children.length,p=e.length,q=this.tint||16777215;for(j=0;p>j;j++){var r=o>j?this.children[j]:this._pool.pop();r?r.setTexture(e[j].texture):r=new b.Sprite(e[j].texture),r.position.x=(e[j].position.x+m[e[j].line])*i,r.position.y=e[j].position.y*i,r.scale.x=r.scale.y=i,r.tint=q,r.parent||this.addChild(r)}for(;this.children.length>p;){var s=this.getChildAt(this.children.length-1);this._pool.push(s),this.removeChild(s)}this.textWidth=f*i,this.textHeight=(c.y+a.lineHeight)*i},b.BitmapText.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.dirty=!1),b.DisplayObjectContainer.prototype.updateTransform.call(this)},b.BitmapText.fonts={},b.Stage=function(a){b.DisplayObjectContainer.call(this),this.worldTransform=new b.Matrix,this.interactive=!0,this.interactionManager=new b.InteractionManager(this),this.dirty=!0,this.stage=this,this.stage.hitArea=new b.Rectangle(0,0,1e5,1e5),this.setBackgroundColor(a)},b.Stage.prototype=Object.create(b.DisplayObjectContainer.prototype),b.Stage.prototype.constructor=b.Stage,b.Stage.prototype.setInteractionDelegate=function(a){this.interactionManager.setTargetDomElement(a)},b.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var a=0,b=this.children.length;b>a;a++)this.children[a].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},b.Stage.prototype.setBackgroundColor=function(a){this.backgroundColor=a||0,this.backgroundColorSplit=b.hex2rgb(this.backgroundColor);var c=this.backgroundColor.toString(16);c="000000".substr(0,6-c.length)+c,this.backgroundColorString="#"+c},b.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global};for(var c=0,d=["ms","moz","webkit","o"],e=0;e>16&255)/255,(a>>8&255)/255,(255&a)/255]},b.rgb2hex=function(a){return(255*a[0]<<16)+(255*a[1]<<8)+255*a[2]},"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),b.AjaxRequest=function(){var a=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new window.XMLHttpRequest:!1;for(var b=0;b0&&0===(a&a-1))return a;for(var b=1;a>b;)b<<=1;return b},b.EventTarget=function(){var a={};this.addEventListener=this.on=function(b,c){void 0===a[b]&&(a[b]=[]),-1===a[b].indexOf(c)&&a[b].push(c)},this.dispatchEvent=this.emit=function(b){if(a[b.type]&&a[b.type].length)for(var c=0,d=a[b.type].length;d>c;c++)a[b.type][c](b)},this.removeEventListener=this.off=function(b,c){var d=a[b].indexOf(c);-1!==d&&a[b].splice(d,1)},this.removeAllEventListeners=function(b){var c=a[b];c&&(c.length=0)}},b.PolyK={},b.PolyK.Triangulate=function(a){var c=!0,d=a.length>>1;if(3>d)return[];for(var e=[],f=[],g=0;d>g;g++)f.push(g);g=0;for(var h=d;h>3;){var i=f[(g+0)%h],j=f[(g+1)%h],k=f[(g+2)%h],l=a[2*i],m=a[2*i+1],n=a[2*j],o=a[2*j+1],p=a[2*k],q=a[2*k+1],r=!1;if(b.PolyK._convex(l,m,n,o,p,q,c)){r=!0;for(var s=0;h>s;s++){var t=f[s];if(t!==i&&t!==j&&t!==k&&b.PolyK._PointInTriangle(a[2*t],a[2*t+1],l,m,n,o,p,q)){r=!1;break}}}if(r)e.push(i,j,k),f.splice((g+1)%h,1),h--,g=0;else if(g++>3*h){if(!c)return window.console.log("PIXI Warning: shape too complex to fill"),[];for(e=[],f=[],g=0;d>g;g++)f.push(g);g=0,h=d,c=!1}}return e.push(f[0],f[1],f[2]),e},b.PolyK._PointInTriangle=function(a,b,c,d,e,f,g,h){var i=g-c,j=h-d,k=e-c,l=f-d,m=a-c,n=b-d,o=i*i+j*j,p=i*k+j*l,q=i*m+j*n,r=k*k+l*l,s=k*m+l*n,t=1/(o*r-p*p),u=(r*q-p*s)*t,v=(o*s-p*q)*t;return u>=0&&v>=0&&1>u+v},b.PolyK._convex=function(a,b,c,d,e,f,g){return(b-d)*(e-c)+(c-a)*(f-d)>=0===g},b.initDefaultShaders=function(){},b.CompileVertexShader=function(a,c){return b._CompileShader(a,c,a.VERTEX_SHADER)},b.CompileFragmentShader=function(a,c){return b._CompileShader(a,c,a.FRAGMENT_SHADER)},b._CompileShader=function(a,b,c){var d=b.join("\n"),e=a.createShader(c);return a.shaderSource(e,d),a.compileShader(e),a.getShaderParameter(e,a.COMPILE_STATUS)?e:(window.console.log(a.getShaderInfoLog(e)),null)},b.compileProgram=function(a,c,d){var e=b.CompileFragmentShader(a,d),f=b.CompileVertexShader(a,c),g=a.createProgram();return a.attachShader(g,f),a.attachShader(g,e),a.linkProgram(g),a.getProgramParameter(g,a.LINK_STATUS)||window.console.log("Could not initialise shaders"),g},b.PixiShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"],this.textureCount=0,this.attributes=[],this.init()},b.PixiShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc||b.PixiShader.defaultVertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.dimensions=a.getUniformLocation(c,"dimensions"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.colorAttribute=a.getAttribLocation(c,"aColor"),-1===this.colorAttribute&&(this.colorAttribute=2),this.attributes=[this.aVertexPosition,this.aTextureCoord,this.colorAttribute];for(var d in this.uniforms)this.uniforms[d].uniformLocation=a.getUniformLocation(c,d);this.initUniforms(),this.program=c},b.PixiShader.prototype.initUniforms=function(){this.textureCount=1;var a,b=this.gl;for(var c in this.uniforms){a=this.uniforms[c];var d=a.type;"sampler2D"===d?(a._init=!1,null!==a.value&&this.initSampler2D(a)):"mat2"===d||"mat3"===d||"mat4"===d?(a.glMatrix=!0,a.glValueLength=1,"mat2"===d?a.glFunc=b.uniformMatrix2fv:"mat3"===d?a.glFunc=b.uniformMatrix3fv:"mat4"===d&&(a.glFunc=b.uniformMatrix4fv)):(a.glFunc=b["uniform"+d],a.glValueLength="2f"===d||"2i"===d?2:"3f"===d||"3i"===d?3:"4f"===d||"4i"===d?4:1)}},b.PixiShader.prototype.initSampler2D=function(a){if(a.value&&a.value.baseTexture&&a.value.baseTexture.hasLoaded){var b=this.gl;if(b.activeTexture(b["TEXTURE"+this.textureCount]),b.bindTexture(b.TEXTURE_2D,a.value.baseTexture._glTextures[b.id]),a.textureData){var c=a.textureData,d=c.magFilter?c.magFilter:b.LINEAR,e=c.minFilter?c.minFilter:b.LINEAR,f=c.wrapS?c.wrapS:b.CLAMP_TO_EDGE,g=c.wrapT?c.wrapT:b.CLAMP_TO_EDGE,h=c.luminance?b.LUMINANCE:b.RGBA;if(c.repeat&&(f=b.REPEAT,g=b.REPEAT),b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL,!!c.flipY),c.width){var i=c.width?c.width:512,j=c.height?c.height:2,k=c.border?c.border:0;b.texImage2D(b.TEXTURE_2D,0,h,i,j,k,h,b.UNSIGNED_BYTE,null)}else b.texImage2D(b.TEXTURE_2D,0,h,b.RGBA,b.UNSIGNED_BYTE,a.value.baseTexture.source);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,d),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,e),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,f),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,g)}b.uniform1i(a.uniformLocation,this.textureCount),a._init=!0,this.textureCount++}},b.PixiShader.prototype.syncUniforms=function(){this.textureCount=1;var a,c=this.gl;for(var d in this.uniforms)a=this.uniforms[d],1===a.glValueLength?a.glMatrix===!0?a.glFunc.call(c,a.uniformLocation,a.transpose,a.value):a.glFunc.call(c,a.uniformLocation,a.value):2===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y):3===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y,a.value.z):4===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y,a.value.z,a.value.w):"sampler2D"===a.type&&(a._init?(c.activeTexture(c["TEXTURE"+this.textureCount]),c.bindTexture(c.TEXTURE_2D,a.value.baseTexture._glTextures[c.id]||b.createWebGLTexture(a.value.baseTexture,c)),c.uniform1i(a.uniformLocation,this.textureCount),this.textureCount++):this.initSampler2D(a))},b.PixiShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attributes=null},b.PixiShader.defaultVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec2 aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","varying vec2 vTextureCoord;","varying vec4 vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {"," gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vec3 color = mod(vec3(aColor.y/65536.0, aColor.y/256.0, aColor.y), 256.0) / 256.0;"," vColor = vec4(color * aColor.x, aColor.x);","}"],b.PixiFastShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform mat3 uMatrix;","varying vec2 vTextureCoord;","varying float vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {"," vec2 v;"," vec2 sv = aVertexPosition * aScale;"," v.x = (sv.x) * cos(aRotation) - (sv.y) * sin(aRotation);"," v.y = (sv.x) * sin(aRotation) + (sv.y) * cos(aRotation);"," v = ( uMatrix * vec3(v + aPositionCoord , 1.0) ).xy ;"," gl_Position = vec4( ( v / projectionVector) + center , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"],this.textureCount=0,this.init() -},b.PixiFastShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.dimensions=a.getUniformLocation(c,"dimensions"),this.uMatrix=a.getUniformLocation(c,"uMatrix"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aPositionCoord=a.getAttribLocation(c,"aPositionCoord"),this.aScale=a.getAttribLocation(c,"aScale"),this.aRotation=a.getAttribLocation(c,"aRotation"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.colorAttribute=a.getAttribLocation(c,"aColor"),-1===this.colorAttribute&&(this.colorAttribute=2),this.attributes=[this.aVertexPosition,this.aPositionCoord,this.aScale,this.aRotation,this.aTextureCoord,this.colorAttribute],this.program=c},b.PixiFastShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attributes=null},b.StripShader=function(){this.program=null,this.fragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform float alpha;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));"," gl_FragColor = gl_FragColor * alpha;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","varying vec2 vTextureCoord;","uniform vec2 offsetVector;","varying float vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition, 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / projectionVector.y + 1.0 , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"]},b.StripShader.prototype.init=function(){var a=b.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.colorAttribute=a.getAttribLocation(c,"aColor"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.translationMatrix=a.getUniformLocation(c,"translationMatrix"),this.alpha=a.getUniformLocation(c,"alpha"),this.program=c},b.PrimitiveShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision mediump float;","varying vec4 vColor;","void main(void) {"," gl_FragColor = vColor;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform float alpha;","uniform vec3 tint;","varying vec4 vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"],this.init()},b.PrimitiveShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.tintColor=a.getUniformLocation(c,"tint"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.colorAttribute=a.getAttribLocation(c,"aColor"),this.attributes=[this.aVertexPosition,this.colorAttribute],this.translationMatrix=a.getUniformLocation(c,"translationMatrix"),this.alpha=a.getUniformLocation(c,"alpha"),this.program=c},b.PrimitiveShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attribute=null},b.WebGLGraphics=function(){},b.WebGLGraphics.renderGraphics=function(a,c){var d=c.gl,e=c.projection,f=c.offset,g=c.shaderManager.primitiveShader;a._webGL[d.id]||(a._webGL[d.id]={points:[],indices:[],lastIndex:0,buffer:d.createBuffer(),indexBuffer:d.createBuffer()});var h=a._webGL[d.id];a.dirty&&(a.dirty=!1,a.clearDirty&&(a.clearDirty=!1,h.lastIndex=0,h.points=[],h.indices=[]),b.WebGLGraphics.updateGraphics(a,d)),c.shaderManager.activatePrimitiveShader(),d.blendFunc(d.ONE,d.ONE_MINUS_SRC_ALPHA),d.uniformMatrix3fv(g.translationMatrix,!1,a.worldTransform.toArray(!0)),d.uniform2f(g.projectionVector,e.x,-e.y),d.uniform2f(g.offsetVector,-f.x,-f.y),d.uniform3fv(g.tintColor,b.hex2rgb(a.tint)),d.uniform1f(g.alpha,a.worldAlpha),d.bindBuffer(d.ARRAY_BUFFER,h.buffer),d.vertexAttribPointer(g.aVertexPosition,2,d.FLOAT,!1,24,0),d.vertexAttribPointer(g.colorAttribute,4,d.FLOAT,!1,24,8),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,h.indexBuffer),d.drawElements(d.TRIANGLE_STRIP,h.indices.length,d.UNSIGNED_SHORT,0),c.shaderManager.deactivatePrimitiveShader()},b.WebGLGraphics.updateGraphics=function(a,c){for(var d=a._webGL[c.id],e=d.lastIndex;e3&&b.WebGLGraphics.buildPoly(f,d),f.lineWidth>0&&b.WebGLGraphics.buildLine(f,d)):f.type===b.Graphics.RECT?b.WebGLGraphics.buildRectangle(f,d):(f.type===b.Graphics.CIRC||f.type===b.Graphics.ELIP)&&b.WebGLGraphics.buildCircle(f,d)}d.lastIndex=a.graphicsData.length,d.glPoints=new Float32Array(d.points),c.bindBuffer(c.ARRAY_BUFFER,d.buffer),c.bufferData(c.ARRAY_BUFFER,d.glPoints,c.STATIC_DRAW),d.glIndicies=new Uint16Array(d.indices),c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,d.indexBuffer),c.bufferData(c.ELEMENT_ARRAY_BUFFER,d.glIndicies,c.STATIC_DRAW)},b.WebGLGraphics.buildRectangle=function(a,c){var d=a.points,e=d[0],f=d[1],g=d[2],h=d[3];if(a.fill){var i=b.hex2rgb(a.fillColor),j=a.fillAlpha,k=i[0]*j,l=i[1]*j,m=i[2]*j,n=c.points,o=c.indices,p=n.length/6;n.push(e,f),n.push(k,l,m,j),n.push(e+g,f),n.push(k,l,m,j),n.push(e,f+h),n.push(k,l,m,j),n.push(e+g,f+h),n.push(k,l,m,j),o.push(p,p,p+1,p+2,p+3,p+3)}if(a.lineWidth){var q=a.points;a.points=[e,f,e+g,f,e+g,f+h,e,f+h,e,f],b.WebGLGraphics.buildLine(a,c),a.points=q}},b.WebGLGraphics.buildCircle=function(a,c){var d=a.points,e=d[0],f=d[1],g=d[2],h=d[3],i=40,j=2*Math.PI/i,k=0;if(a.fill){var l=b.hex2rgb(a.fillColor),m=a.fillAlpha,n=l[0]*m,o=l[1]*m,p=l[2]*m,q=c.points,r=c.indices,s=q.length/6;for(r.push(s),k=0;i+1>k;k++)q.push(e,f,n,o,p,m),q.push(e+Math.sin(j*k)*g,f+Math.cos(j*k)*h,n,o,p,m),r.push(s++,s++);r.push(s-1)}if(a.lineWidth){var t=a.points;for(a.points=[],k=0;i+1>k;k++)a.points.push(e+Math.sin(j*k)*g,f+Math.cos(j*k)*h);b.WebGLGraphics.buildLine(a,c),a.points=t}},b.WebGLGraphics.buildLine=function(a,c){var d=0,e=a.points;if(0!==e.length){if(a.lineWidth%2)for(d=0;dd;d++)l=e[2*(d-1)],m=e[2*(d-1)+1],n=e[2*d],o=e[2*d+1],p=e[2*(d+1)],q=e[2*(d+1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,t=-(o-q),u=n-p,F=Math.sqrt(t*t+u*u),t/=F,u/=F,t*=L,u*=L,x=-s+m-(-s+o),y=-r+n-(-r+l),z=(-r+l)*(-s+o)-(-r+n)*(-s+m),A=-u+q-(-u+o),B=-t+n-(-t+p),C=(-t+p)*(-u+o)-(-t+n)*(-u+q),D=x*B-A*y,Math.abs(D)<.1?(D+=10.1,G.push(n-r,o-s,O,P,Q,N),G.push(n+r,o+s,O,P,Q,N)):(j=(y*C-B*z)/D,k=(A*z-x*C)/D,E=(j-n)*(j-n)+(k-o)+(k-o),E>19600?(v=r-t,w=s-u,F=Math.sqrt(v*v+w*w),v/=F,w/=F,v*=L,w*=L,G.push(n-v,o-w),G.push(O,P,Q,N),G.push(n+v,o+w),G.push(O,P,Q,N),G.push(n-v,o-w),G.push(O,P,Q,N),J++):(G.push(j,k),G.push(O,P,Q,N),G.push(n-(j-n),o-(k-o)),G.push(O,P,Q,N)));for(l=e[2*(I-2)],m=e[2*(I-2)+1],n=e[2*(I-1)],o=e[2*(I-1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,G.push(n-r,o-s),G.push(O,P,Q,N),G.push(n+r,o+s),G.push(O,P,Q,N),H.push(K),d=0;J>d;d++)H.push(K++);H.push(K-1)}},b.WebGLGraphics.buildPoly=function(a,c){var d=a.points;if(!(d.length<6)){var e=c.points,f=c.indices,g=d.length/2,h=b.hex2rgb(a.fillColor),i=a.fillAlpha,j=h[0]*i,k=h[1]*i,l=h[2]*i,m=b.PolyK.Triangulate(d),n=e.length/6,o=0;for(o=0;oo;o++)e.push(d[2*o],d[2*o+1],j,k,l,i)}},b.glContexts=[],b.WebGLRenderer=function(a,c,d,e,f){b.defaultRenderer||(b.defaultRenderer=this),this.type=b.WEBGL_RENDERER,this.transparent=!!e,this.width=a||800,this.height=c||600,this.view=d||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height,this.contextLost=this.handleContextLost.bind(this),this.contextRestoredLost=this.handleContextRestored.bind(this),this.view.addEventListener("webglcontextlost",this.contextLost,!1),this.view.addEventListener("webglcontextrestored",this.contextRestoredLost,!1),this.options={alpha:this.transparent,antialias:!!f,premultipliedAlpha:!!e,stencil:!0};try{this.gl=this.view.getContext("experimental-webgl",this.options)}catch(g){try{this.gl=this.view.getContext("webgl",this.options)}catch(h){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}var i=this.gl;this.glContextId=i.id=b.WebGLRenderer.glContextId++,b.glContexts[this.glContextId]=i,b.blendModesWebGL||(b.blendModesWebGL=[],b.blendModesWebGL[b.blendModes.NORMAL]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.ADD]=[i.SRC_ALPHA,i.DST_ALPHA],b.blendModesWebGL[b.blendModes.MULTIPLY]=[i.DST_COLOR,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SCREEN]=[i.SRC_ALPHA,i.ONE],b.blendModesWebGL[b.blendModes.OVERLAY]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.DARKEN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.LIGHTEN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR_DODGE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR_BURN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.HARD_LIGHT]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SOFT_LIGHT]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.DIFFERENCE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.EXCLUSION]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.HUE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SATURATION]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.LUMINOSITY]=[i.ONE,i.ONE_MINUS_SRC_ALPHA]),this.projection=new b.Point,this.projection.x=this.width/2,this.projection.y=-this.height/2,this.offset=new b.Point(0,0),this.resize(this.width,this.height),this.contextLost=!1,this.shaderManager=new b.WebGLShaderManager(i),this.spriteBatch=new b.WebGLSpriteBatch(i),this.maskManager=new b.WebGLMaskManager(i),this.filterManager=new b.WebGLFilterManager(i,this.transparent),this.renderSession={},this.renderSession.gl=this.gl,this.renderSession.drawCount=0,this.renderSession.shaderManager=this.shaderManager,this.renderSession.maskManager=this.maskManager,this.renderSession.filterManager=this.filterManager,this.renderSession.spriteBatch=this.spriteBatch,this.renderSession.renderer=this,i.useProgram(this.shaderManager.defaultShader.program),i.disable(i.DEPTH_TEST),i.disable(i.CULL_FACE),i.enable(i.BLEND),i.colorMask(!0,!0,!0,this.transparent)},b.WebGLRenderer.prototype.constructor=b.WebGLRenderer,b.WebGLRenderer.prototype.render=function(a){if(!this.contextLost){this.__stage!==a&&(a.interactive&&a.interactionManager.removeEvents(),this.__stage=a),b.WebGLRenderer.updateTextures(),a.updateTransform(),a._interactive&&(a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this)));var c=this.gl;c.viewport(0,0,this.width,this.height),c.bindFramebuffer(c.FRAMEBUFFER,null),this.transparent?c.clearColor(0,0,0,0):c.clearColor(a.backgroundColorSplit[0],a.backgroundColorSplit[1],a.backgroundColorSplit[2],1),c.clear(c.COLOR_BUFFER_BIT),this.renderDisplayObject(a,this.projection),a.interactive?a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this)):a._interactiveEventsAdded&&(a._interactiveEventsAdded=!1,a.interactionManager.setTarget(this))}},b.WebGLRenderer.prototype.renderDisplayObject=function(a,b,c){this.renderSession.drawCount=0,this.renderSession.currentBlendMode=9999,this.renderSession.projection=b,this.renderSession.offset=this.offset,this.spriteBatch.begin(this.renderSession),this.filterManager.begin(this.renderSession,c),a._renderWebGL(this.renderSession),this.spriteBatch.end()},b.WebGLRenderer.updateTextures=function(){var a=0;for(a=0;a=0;c--){var d=a._glTextures[c],e=b.glContexts[c];e&&d&&e.deleteTexture(d)}a._glTextures.length=0},b.WebGLRenderer.updateTextureFrame=function(a){a.updateFrame=!1,a._updateWebGLuvs()},b.WebGLRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b,this.gl.viewport(0,0,this.width,this.height),this.projection.x=this.width/2,this.projection.y=-this.height/2},b.createWebGLTexture=function(a,c){return a.hasLoaded&&(a._glTextures[c.id]=c.createTexture(),c.bindTexture(c.TEXTURE_2D,a._glTextures[c.id]),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,a.source),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),a._powerOf2?(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.REPEAT),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.REPEAT)):(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE)),c.bindTexture(c.TEXTURE_2D,null)),a._glTextures[c.id]},b.updateWebGLTexture=function(a,c){a._glTextures[c.id]&&(c.bindTexture(c.TEXTURE_2D,a._glTextures[c.id]),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,a.source),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),a._powerOf2?(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.REPEAT),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.REPEAT)):(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE)),c.bindTexture(c.TEXTURE_2D,null))},b.WebGLRenderer.prototype.handleContextLost=function(a){a.preventDefault(),this.contextLost=!0},b.WebGLRenderer.prototype.handleContextRestored=function(){try{this.gl=this.view.getContext("experimental-webgl",this.options)}catch(a){try{this.gl=this.view.getContext("webgl",this.options)}catch(c){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}var d=this.gl;d.id=b.WebGLRenderer.glContextId++,this.shaderManager.setContext(d),this.spriteBatch.setContext(d),this.maskManager.setContext(d),this.filterManager.setContext(d),this.renderSession.gl=this.gl,d.disable(d.DEPTH_TEST),d.disable(d.CULL_FACE),d.enable(d.BLEND),d.colorMask(!0,!0,!0,this.transparent),this.gl.viewport(0,0,this.width,this.height);for(var e in b.TextureCache){var f=b.TextureCache[e].baseTexture;f._glTextures=[]}this.contextLost=!1},b.WebGLRenderer.prototype.destroy=function(){this.view.removeEventListener("webglcontextlost",this.contextLost),this.view.removeEventListener("webglcontextrestored",this.contextRestoredLost),b.glContexts[this.glContextId]=null,this.projection=null,this.offset=null,this.shaderManager.destroy(),this.spriteBatch.destroy(),this.maskManager.destroy(),this.filterManager.destroy(),this.shaderManager=null,this.spriteBatch=null,this.maskManager=null,this.filterManager=null,this.gl=null,this.renderSession=null},b.WebGLRenderer.glContextId=0,b.WebGLMaskManager=function(a){this.maskStack=[],this.maskPosition=0,this.setContext(a)},b.WebGLMaskManager.prototype.setContext=function(a){this.gl=a},b.WebGLMaskManager.prototype.pushMask=function(a,c){var d=this.gl;0===this.maskStack.length&&(d.enable(d.STENCIL_TEST),d.stencilFunc(d.ALWAYS,1,1)),this.maskStack.push(a),d.colorMask(!1,!1,!1,!0),d.stencilOp(d.KEEP,d.KEEP,d.INCR),b.WebGLGraphics.renderGraphics(a,c),d.colorMask(!0,!0,!0,!0),d.stencilFunc(d.NOTEQUAL,0,this.maskStack.length),d.stencilOp(d.KEEP,d.KEEP,d.KEEP)},b.WebGLMaskManager.prototype.popMask=function(a){var c=this.gl,d=this.maskStack.pop();d&&(c.colorMask(!1,!1,!1,!1),c.stencilOp(c.KEEP,c.KEEP,c.DECR),b.WebGLGraphics.renderGraphics(d,a),c.colorMask(!0,!0,!0,!0),c.stencilFunc(c.NOTEQUAL,0,this.maskStack.length),c.stencilOp(c.KEEP,c.KEEP,c.KEEP)),0===this.maskStack.length&&c.disable(c.STENCIL_TEST)},b.WebGLMaskManager.prototype.destroy=function(){this.maskStack=null,this.gl=null},b.WebGLShaderManager=function(a){this.maxAttibs=10,this.attribState=[],this.tempAttribState=[];for(var b=0;bd;d+=6,e+=4)this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3;this.drawing=!1,this.currentBatchSize=0,this.currentBaseTexture=null,this.setContext(a)},b.WebGLSpriteBatch.prototype.setContext=function(a){this.gl=a,this.vertexBuffer=a.createBuffer(),this.indexBuffer=a.createBuffer(),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,this.vertices,a.DYNAMIC_DRAW),this.currentBlendMode=99999},b.WebGLSpriteBatch.prototype.begin=function(a){this.renderSession=a,this.shader=this.renderSession.shaderManager.defaultShader,this.start()},b.WebGLSpriteBatch.prototype.end=function(){this.flush()},b.WebGLSpriteBatch.prototype.render=function(a){var b=a.texture;(b.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=b.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode);var c=a._uvs||a.texture._uvs;if(c){var d,e,f,g,h=a.worldAlpha,i=a.tint,j=this.vertices,k=a.anchor.x,l=a.anchor.y;if(a.texture.trim){var m=a.texture.trim;e=m.x-k*m.width,d=e+b.frame.width,g=m.y-l*m.height,f=g+b.frame.height}else d=b.frame.width*(1-k),e=b.frame.width*-k,f=b.frame.height*(1-l),g=b.frame.height*-l;var n=4*this.currentBatchSize*this.vertSize,o=a.worldTransform,p=o.a,q=o.c,r=o.b,s=o.d,t=o.tx,u=o.ty;j[n++]=p*e+r*g+t,j[n++]=s*g+q*e+u,j[n++]=c.x0,j[n++]=c.y0,j[n++]=h,j[n++]=i,j[n++]=p*d+r*g+t,j[n++]=s*g+q*d+u,j[n++]=c.x1,j[n++]=c.y1,j[n++]=h,j[n++]=i,j[n++]=p*d+r*f+t,j[n++]=s*f+q*d+u,j[n++]=c.x2,j[n++]=c.y2,j[n++]=h,j[n++]=i,j[n++]=p*e+r*f+t,j[n++]=s*f+q*e+u,j[n++]=c.x3,j[n++]=c.y3,j[n++]=h,j[n++]=i,this.currentBatchSize++}},b.WebGLSpriteBatch.prototype.renderTilingSprite=function(a){var c=a.tilingTexture;(c.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=c.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode),a._uvs||(a._uvs=new b.TextureUvs);var d=a._uvs;a.tilePosition.x%=c.baseTexture.width*a.tileScaleOffset.x,a.tilePosition.y%=c.baseTexture.height*a.tileScaleOffset.y;var e=a.tilePosition.x/(c.baseTexture.width*a.tileScaleOffset.x),f=a.tilePosition.y/(c.baseTexture.height*a.tileScaleOffset.y),g=a.width/c.baseTexture.width/(a.tileScale.x*a.tileScaleOffset.x),h=a.height/c.baseTexture.height/(a.tileScale.y*a.tileScaleOffset.y);d.x0=0-e,d.y0=0-f,d.x1=1*g-e,d.y1=0-f,d.x2=1*g-e,d.y2=1*h-f,d.x3=0-e,d.y3=1*h-f;var i=a.worldAlpha,j=a.tint,k=this.vertices,l=a.width,m=a.height,n=a.anchor.x,o=a.anchor.y,p=l*(1-n),q=l*-n,r=m*(1-o),s=m*-o,t=4*this.currentBatchSize*this.vertSize,u=a.worldTransform,v=u.a,w=u.c,x=u.b,y=u.d,z=u.tx,A=u.ty;k[t++]=v*q+x*s+z,k[t++]=y*s+w*q+A,k[t++]=d.x0,k[t++]=d.y0,k[t++]=i,k[t++]=j,k[t++]=v*p+x*s+z,k[t++]=y*s+w*p+A,k[t++]=d.x1,k[t++]=d.y1,k[t++]=i,k[t++]=j,k[t++]=v*p+x*r+z,k[t++]=y*r+w*p+A,k[t++]=d.x2,k[t++]=d.y2,k[t++]=i,k[t++]=j,k[t++]=v*q+x*r+z,k[t++]=y*r+w*q+A,k[t++]=d.x3,k[t++]=d.y3,k[t++]=i,k[t++]=j,this.currentBatchSize++},b.WebGLSpriteBatch.prototype.flush=function(){if(0!==this.currentBatchSize){var a=this.gl;if(a.bindTexture(a.TEXTURE_2D,this.currentBaseTexture._glTextures[a.id]||b.createWebGLTexture(this.currentBaseTexture,a)),this.currentBatchSize>.5*this.size)a.bufferSubData(a.ARRAY_BUFFER,0,this.vertices);else{var c=this.vertices.subarray(0,4*this.currentBatchSize*this.vertSize);a.bufferSubData(a.ARRAY_BUFFER,0,c)}a.drawElements(a.TRIANGLES,6*this.currentBatchSize,a.UNSIGNED_SHORT,0),this.currentBatchSize=0,this.renderSession.drawCount++}},b.WebGLSpriteBatch.prototype.stop=function(){this.flush()},b.WebGLSpriteBatch.prototype.start=function(){var a=this.gl;a.activeTexture(a.TEXTURE0),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var c=this.renderSession.projection;a.uniform2f(this.shader.projectionVector,c.x,c.y);var d=4*this.vertSize;a.vertexAttribPointer(this.shader.aVertexPosition,2,a.FLOAT,!1,d,0),a.vertexAttribPointer(this.shader.aTextureCoord,2,a.FLOAT,!1,d,8),a.vertexAttribPointer(this.shader.colorAttribute,2,a.FLOAT,!1,d,16),this.currentBlendMode!==b.blendModes.NORMAL&&this.setBlendMode(b.blendModes.NORMAL)},b.WebGLSpriteBatch.prototype.setBlendMode=function(a){this.flush(),this.currentBlendMode=a;var c=b.blendModesWebGL[this.currentBlendMode];this.gl.blendFunc(c[0],c[1])},b.WebGLSpriteBatch.prototype.destroy=function(){this.vertices=null,this.indices=null,this.gl.deleteBuffer(this.vertexBuffer),this.gl.deleteBuffer(this.indexBuffer),this.currentBaseTexture=null,this.gl=null},b.WebGLFastSpriteBatch=function(a){this.vertSize=10,this.maxSize=6e3,this.size=this.maxSize;var b=4*this.size*this.vertSize,c=6*this.maxSize;this.vertices=new Float32Array(b),this.indices=new Uint16Array(c),this.vertexBuffer=null,this.indexBuffer=null,this.lastIndexCount=0;for(var d=0,e=0;c>d;d+=6,e+=4)this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3;this.drawing=!1,this.currentBatchSize=0,this.currentBaseTexture=null,this.currentBlendMode=0,this.renderSession=null,this.shader=null,this.matrix=null,this.setContext(a)},b.WebGLFastSpriteBatch.prototype.setContext=function(a){this.gl=a,this.vertexBuffer=a.createBuffer(),this.indexBuffer=a.createBuffer(),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,this.vertices,a.DYNAMIC_DRAW),this.currentBlendMode=99999},b.WebGLFastSpriteBatch.prototype.begin=function(a,b){this.renderSession=b,this.shader=this.renderSession.shaderManager.fastShader,this.matrix=a.worldTransform.toArray(!0),this.start()},b.WebGLFastSpriteBatch.prototype.end=function(){this.flush()},b.WebGLFastSpriteBatch.prototype.render=function(a){var b=a.children,c=b[0];if(c.texture._uvs){this.currentBaseTexture=c.texture.baseTexture,c.blendMode!==this.currentBlendMode&&this.setBlendMode(c.blendMode);for(var d=0,e=b.length;e>d;d++)this.renderSprite(b[d]);this.flush()}},b.WebGLFastSpriteBatch.prototype.renderSprite=function(a){if(a.visible&&(a.texture.baseTexture===this.currentBaseTexture||(this.flush(),this.currentBaseTexture=a.texture.baseTexture,a.texture._uvs))){var b,c,d,e,f,g,h,i,j=this.vertices;if(b=a.texture._uvs,c=a.texture.frame.width,d=a.texture.frame.height,a.texture.trim){var k=a.texture.trim;f=k.x-a.anchor.x*k.width,e=f+a.texture.frame.width,h=k.y-a.anchor.y*k.height,g=h+a.texture.frame.height}else e=a.texture.frame.width*(1-a.anchor.x),f=a.texture.frame.width*-a.anchor.x,g=a.texture.frame.height*(1-a.anchor.y),h=a.texture.frame.height*-a.anchor.y;i=4*this.currentBatchSize*this.vertSize,j[i++]=f,j[i++]=h,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x0,j[i++]=b.y1,j[i++]=a.alpha,j[i++]=e,j[i++]=h,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x1,j[i++]=b.y1,j[i++]=a.alpha,j[i++]=e,j[i++]=g,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x2,j[i++]=b.y2,j[i++]=a.alpha,j[i++]=f,j[i++]=g,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x3,j[i++]=b.y3,j[i++]=a.alpha,this.currentBatchSize++,this.currentBatchSize>=this.size&&this.flush()}},b.WebGLFastSpriteBatch.prototype.flush=function(){if(0!==this.currentBatchSize){var a=this.gl;if(this.currentBaseTexture._glTextures[a.id]||b.createWebGLTexture(this.currentBaseTexture,a),a.bindTexture(a.TEXTURE_2D,this.currentBaseTexture._glTextures[a.id]),this.currentBatchSize>.5*this.size)a.bufferSubData(a.ARRAY_BUFFER,0,this.vertices);else{var c=this.vertices.subarray(0,4*this.currentBatchSize*this.vertSize);a.bufferSubData(a.ARRAY_BUFFER,0,c)}a.drawElements(a.TRIANGLES,6*this.currentBatchSize,a.UNSIGNED_SHORT,0),this.currentBatchSize=0,this.renderSession.drawCount++}},b.WebGLFastSpriteBatch.prototype.stop=function(){this.flush()},b.WebGLFastSpriteBatch.prototype.start=function(){var a=this.gl;a.activeTexture(a.TEXTURE0),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var c=this.renderSession.projection;a.uniform2f(this.shader.projectionVector,c.x,c.y),a.uniformMatrix3fv(this.shader.uMatrix,!1,this.matrix);var d=4*this.vertSize;a.vertexAttribPointer(this.shader.aVertexPosition,2,a.FLOAT,!1,d,0),a.vertexAttribPointer(this.shader.aPositionCoord,2,a.FLOAT,!1,d,8),a.vertexAttribPointer(this.shader.aScale,2,a.FLOAT,!1,d,16),a.vertexAttribPointer(this.shader.aRotation,1,a.FLOAT,!1,d,24),a.vertexAttribPointer(this.shader.aTextureCoord,2,a.FLOAT,!1,d,28),a.vertexAttribPointer(this.shader.colorAttribute,1,a.FLOAT,!1,d,36),this.currentBlendMode!==b.blendModes.NORMAL&&this.setBlendMode(b.blendModes.NORMAL)},b.WebGLFastSpriteBatch.prototype.setBlendMode=function(a){this.flush(),this.currentBlendMode=a;var c=b.blendModesWebGL[this.currentBlendMode];this.gl.blendFunc(c[0],c[1])},b.WebGLFilterManager=function(a,b){this.transparent=b,this.filterStack=[],this.offsetX=0,this.offsetY=0,this.setContext(a)},b.WebGLFilterManager.prototype.setContext=function(a){this.gl=a,this.texturePool=[],this.initShaderBuffers()},b.WebGLFilterManager.prototype.begin=function(a,b){this.renderSession=a,this.defaultShader=a.shaderManager.defaultShader;var c=this.renderSession.projection;this.width=2*c.x,this.height=2*-c.y,this.buffer=b},b.WebGLFilterManager.prototype.pushFilter=function(a){var c=this.gl,d=this.renderSession.projection,e=this.renderSession.offset;a._filterArea=a.target.filterArea||a.target.getBounds(),this.filterStack.push(a);var f=a.filterPasses[0];this.offsetX+=a._filterArea.x,this.offsetY+=a._filterArea.y;var g=this.texturePool.pop();g?g.resize(this.width,this.height):g=new b.FilterTexture(this.gl,this.width,this.height),c.bindTexture(c.TEXTURE_2D,g.texture);var h=a._filterArea,i=f.padding;h.x-=i,h.y-=i,h.width+=2*i,h.height+=2*i,h.x<0&&(h.x=0),h.width>this.width&&(h.width=this.width),h.y<0&&(h.y=0),h.height>this.height&&(h.height=this.height),c.bindFramebuffer(c.FRAMEBUFFER,g.frameBuffer),c.viewport(0,0,h.width,h.height),d.x=h.width/2,d.y=-h.height/2,e.x=-h.x,e.y=-h.y,c.uniform2f(this.defaultShader.projectionVector,h.width/2,-h.height/2),c.uniform2f(this.defaultShader.offsetVector,-h.x,-h.y),c.colorMask(!0,!0,!0,!0),c.clearColor(0,0,0,0),c.clear(c.COLOR_BUFFER_BIT),a._glFilterTexture=g},b.WebGLFilterManager.prototype.popFilter=function(){var a=this.gl,c=this.filterStack.pop(),d=c._filterArea,e=c._glFilterTexture,f=this.renderSession.projection,g=this.renderSession.offset;if(c.filterPasses.length>1){a.viewport(0,0,d.width,d.height),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),this.vertexArray[0]=0,this.vertexArray[1]=d.height,this.vertexArray[2]=d.width,this.vertexArray[3]=d.height,this.vertexArray[4]=0,this.vertexArray[5]=0,this.vertexArray[6]=d.width,this.vertexArray[7]=0,a.bufferSubData(a.ARRAY_BUFFER,0,this.vertexArray),a.bindBuffer(a.ARRAY_BUFFER,this.uvBuffer),this.uvArray[2]=d.width/this.width,this.uvArray[5]=d.height/this.height,this.uvArray[6]=d.width/this.width,this.uvArray[7]=d.height/this.height,a.bufferSubData(a.ARRAY_BUFFER,0,this.uvArray);var h=e,i=this.texturePool.pop();i||(i=new b.FilterTexture(this.gl,this.width,this.height)),i.resize(this.width,this.height),a.bindFramebuffer(a.FRAMEBUFFER,i.frameBuffer),a.clear(a.COLOR_BUFFER_BIT),a.disable(a.BLEND);for(var j=0;j0&&(b.Texture.frameUpdates.length=0)},b.CanvasRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b},b.CanvasRenderer.prototype.renderDisplayObject=function(a,b){this.renderSession.context=b||this.context,a._renderCanvas(this.renderSession)},b.CanvasRenderer.prototype.renderStripFlat=function(a){var b=this.context,c=a.verticies,d=c.length/2;this.count++,b.beginPath();for(var e=1;d-2>e;e++){var f=2*e,g=c[f],h=c[f+2],i=c[f+4],j=c[f+1],k=c[f+3],l=c[f+5];b.moveTo(g,j),b.lineTo(h,k),b.lineTo(i,l)}b.fillStyle="#FF0000",b.fill(),b.closePath()},b.CanvasRenderer.prototype.renderStrip=function(a){var b=this.context,c=a.verticies,d=a.uvs,e=c.length/2;this.count++;for(var f=1;e-2>f;f++){var g=2*f,h=c[g],i=c[g+2],j=c[g+4],k=c[g+1],l=c[g+3],m=c[g+5],n=d[g]*a.texture.width,o=d[g+2]*a.texture.width,p=d[g+4]*a.texture.width,q=d[g+1]*a.texture.height,r=d[g+3]*a.texture.height,s=d[g+5]*a.texture.height;b.save(),b.beginPath(),b.moveTo(h,k),b.lineTo(i,l),b.lineTo(j,m),b.closePath(),b.clip();var t=n*r+q*p+o*s-r*p-q*o-n*s,u=h*r+q*j+i*s-r*j-q*i-h*s,v=n*i+h*p+o*j-i*p-h*o-n*j,w=n*r*j+q*i*p+h*o*s-h*r*p-q*o*j-n*i*s,x=k*r+q*m+l*s-r*m-q*l-k*s,y=n*l+k*p+o*m-l*p-k*o-n*m,z=n*r*m+q*l*p+k*o*s-k*r*p-q*o*m-n*l*s;b.transform(u/t,x/t,v/t,y/t,w/t,z/t),b.drawImage(a.texture.baseTexture.source,0,0),b.restore()}},b.CanvasBuffer=function(a,b){this.width=a,this.height=b,this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=a,this.canvas.height=b},b.CanvasBuffer.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},b.CanvasBuffer.prototype.resize=function(a,b){this.width=this.canvas.width=a,this.height=this.canvas.height=b},b.CanvasGraphics=function(){},b.CanvasGraphics.renderGraphics=function(a,c){for(var d=a.worldAlpha,e="",f=0;f1&&(d=1,window.console.log("Pixi.js warning: masks in canvas can only mask using the first path in the graphics object"));for(var e=0;1>e;e++){var f=a.graphicsData[e],g=f.points;if(f.type===b.Graphics.POLY){c.beginPath(),c.moveTo(g[0],g[1]);for(var h=1;hd;d++)this.children[d]._renderWebGL(a);a.spriteBatch.stop()}this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),a.drawCount++,a.spriteBatch.start()}},b.Graphics.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha&&this.isMask!==!0){var c=a.context,d=this.worldTransform;this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,c.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),c.setTransform(d.a,d.c,d.b,d.d,d.tx,d.ty),b.CanvasGraphics.renderGraphics(this,c);for(var e=0,f=this.children.length;f>e;e++)this.children[e]._renderCanvas(a)}},b.Graphics.prototype.getBounds=function(a){this.bounds||this.updateBounds();var b=this.bounds.x,c=this.bounds.width+this.bounds.x,d=this.bounds.y,e=this.bounds.height+this.bounds.y,f=a||this.worldTransform,g=f.a,h=f.c,i=f.b,j=f.d,k=f.tx,l=f.ty,m=g*c+i*e+k,n=j*e+h*c+l,o=g*b+i*e+k,p=j*e+h*b+l,q=g*b+i*d+k,r=j*d+h*b+l,s=g*c+i*d+k,t=j*d+h*c+l,u=-1/0,v=-1/0,w=1/0,x=1/0;w=w>m?m:w,w=w>o?o:w,w=w>q?q:w,w=w>s?s:w,x=x>n?n:x,x=x>p?p:x,x=x>r?r:x,x=x>t?t:x,u=m>u?m:u,u=o>u?o:u,u=q>u?q:u,u=s>u?s:u,v=n>v?n:v,v=p>v?p:v,v=r>v?r:v,v=t>v?t:v;var y=this._bounds;return y.x=w,y.width=u-w,y.y=x,y.height=v-x,y},b.Graphics.prototype.updateBounds=function(){for(var a,c,d,e,f,g=1/0,h=-1/0,i=1/0,j=-1/0,k=0;kc?c:g,h=c+e>h?c+e:h,i=i>d?c:i,j=d+f>j?d+f:j;else if(m===b.Graphics.CIRC||m===b.Graphics.ELIP)c=a[0],d=a[1],e=a[2]+n/2,f=a[3]+n/2,g=g>c-e?c-e:g,h=c+e>h?c+e:h,i=i>d-f?d-f:i,j=d+f>j?d+f:j;else for(var o=0;oc-n?c-n:g,h=c+n>h?c+n:h,i=i>d-n?d-n:i,j=d+n>j?d+n:j}var p=this.boundsPadding;this.bounds=new b.Rectangle(g-p,i-p,h-g+2*p,j-i+2*p)},b.Graphics.prototype._generateCachedSprite=function(){var a=this.getLocalBounds();if(this._cachedSprite)this._cachedSprite.buffer.resize(a.width,a.height);else{var c=new b.CanvasBuffer(a.width,a.height),d=b.Texture.fromCanvas(c.canvas);this._cachedSprite=new b.Sprite(d),this._cachedSprite.buffer=c,this._cachedSprite.worldTransform=this.worldTransform}this._cachedSprite.anchor.x=-(a.x/a.width),this._cachedSprite.anchor.y=-(a.y/a.height),this._cachedSprite.buffer.context.translate(-a.x,-a.y),b.CanvasGraphics.renderGraphics(this,this._cachedSprite.buffer.context),this._cachedSprite.alpha=this.alpha},b.Graphics.prototype.destroyCachedSprite=function(){this._cachedSprite.texture.destroy(!0),this._cachedSprite=null},b.Graphics.POLY=0,b.Graphics.RECT=1,b.Graphics.CIRC=2,b.Graphics.ELIP=3,b.TilingSprite=function(a,c,d){b.Sprite.call(this,a),this.width=c||100,this.height=d||100,this.tileScale=new b.Point(1,1),this.tileScaleOffset=new b.Point(1,1),this.tilePosition=new b.Point(0,0),this.renderable=!0,this.tint=16777215,this.blendMode=b.blendModes.NORMAL},b.TilingSprite.prototype=Object.create(b.Sprite.prototype),b.TilingSprite.prototype.constructor=b.TilingSprite,Object.defineProperty(b.TilingSprite.prototype,"width",{get:function(){return this._width},set:function(a){this._width=a}}),Object.defineProperty(b.TilingSprite.prototype,"height",{get:function(){return this._height},set:function(a){this._height=a}}),b.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},b.TilingSprite.prototype.setTexture=function(a){this.texture!==a&&(this.texture=a,this.refreshTexture=!0,this.cachedTint=16777215)},b.TilingSprite.prototype._renderWebGL=function(a){if(this.visible!==!1&&0!==this.alpha){var c,d;for(this.mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a),a.spriteBatch.start()),this.filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),!this.tilingTexture||this.refreshTexture?(this.generateTilingTexture(!0),this.tilingTexture&&this.tilingTexture.needsUpdate&&(b.updateWebGLTexture(this.tilingTexture.baseTexture,a.gl),this.tilingTexture.needsUpdate=!1)):a.spriteBatch.renderTilingSprite(this),c=0,d=this.children.length;d>c;c++)this.children[c]._renderWebGL(a);a.spriteBatch.stop(),this.filters&&a.filterManager.popFilter(),this.mask&&a.maskManager.popMask(a),a.spriteBatch.start()}},b.TilingSprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){var c=a.context;this._mask&&a.maskManager.pushMask(this._mask,c),c.globalAlpha=this.worldAlpha;var d=this.worldTransform;if(c.setTransform(d.a,d.c,d.b,d.d,d.tx,d.ty),!this.__tilePattern||this.refreshTexture){if(this.generateTilingTexture(!1),!this.tilingTexture)return;this.__tilePattern=c.createPattern(this.tilingTexture.baseTexture.source,"repeat")}this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,c.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),c.beginPath();var e=this.tilePosition,f=this.tileScale;e.x%=this.tilingTexture.baseTexture.width,e.y%=this.tilingTexture.baseTexture.height,c.scale(f.x,f.y),c.translate(e.x,e.y),c.fillStyle=this.__tilePattern,c.fillRect(-e.x+this.anchor.x*-this._width,-e.y+this.anchor.y*-this._height,this._width/f.x,this._height/f.y),c.scale(1/f.x,1/f.y),c.translate(-e.x,-e.y),c.closePath(),this._mask&&a.maskManager.popMask(a.context)}},b.TilingSprite.prototype.getBounds=function(){var a=this._width,b=this._height,c=a*(1-this.anchor.x),d=a*-this.anchor.x,e=b*(1-this.anchor.y),f=b*-this.anchor.y,g=this.worldTransform,h=g.a,i=g.c,j=g.b,k=g.d,l=g.tx,m=g.ty,n=h*d+j*f+l,o=k*f+i*d+m,p=h*c+j*f+l,q=k*f+i*c+m,r=h*c+j*e+l,s=k*e+i*c+m,t=h*d+j*e+l,u=k*e+i*d+m,v=-1/0,w=-1/0,x=1/0,y=1/0;x=x>n?n:x,x=x>p?p:x,x=x>r?r:x,x=x>t?t:x,y=y>o?o:y,y=y>q?q:y,y=y>s?s:y,y=y>u?u:y,v=n>v?n:v,v=p>v?p:v,v=r>v?r:v,v=t>v?t:v,w=o>w?o:w,w=q>w?q:w,w=s>w?s:w,w=u>w?u:w;var z=this._bounds;return z.x=x,z.width=v-x,z.y=y,z.height=w-y,this._currentBounds=z,z},b.TilingSprite.prototype.generateTilingTexture=function(a){var c=this.texture;if(c.baseTexture.hasLoaded){var d,e,f=c.baseTexture,g=c.frame,h=g.width!==f.width||g.height!==f.height,i=!1;if(a?(d=b.getNextPowerOfTwo(g.width),e=b.getNextPowerOfTwo(g.height),g.width!==d&&g.height!==e&&(i=!0)):h&&(d=g.width,e=g.height,i=!0),i){var j;this.tilingTexture&&this.tilingTexture.isTiling?(j=this.tilingTexture.canvasBuffer,j.resize(d,e),this.tilingTexture.baseTexture.width=d,this.tilingTexture.baseTexture.height=e,this.tilingTexture.needsUpdate=!0):(j=new b.CanvasBuffer(d,e),this.tilingTexture=b.Texture.fromCanvas(j.canvas),this.tilingTexture.canvasBuffer=j,this.tilingTexture.isTiling=!0),j.context.drawImage(c.baseTexture.source,g.x,g.y,g.width,g.height,0,0,d,e),this.tileScaleOffset.x=g.width/d,this.tileScaleOffset.y=g.height/e}else this.tilingTexture&&this.tilingTexture.isTiling&&this.tilingTexture.destroy(!0),this.tileScaleOffset.x=1,this.tileScaleOffset.y=1,this.tilingTexture=c;this.refreshTexture=!1,this.tilingTexture.baseTexture._powerOf2=!0}},b.BaseTextureCache={},b.texturesToUpdate=[],b.texturesToDestroy=[],b.BaseTextureCacheIdGenerator=0,b.BaseTexture=function(a,c){if(b.EventTarget.call(this),this.width=100,this.height=100,this.scaleMode=c||b.scaleModes.DEFAULT,this.hasLoaded=!1,this.source=a,this.id=b.BaseTextureCacheIdGenerator++,this._glTextures=[],a){if(this.source.complete||this.source.getContext)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,b.texturesToUpdate.push(this);else{var d=this;this.source.onload=function(){d.hasLoaded=!0,d.width=d.source.width,d.height=d.source.height,b.texturesToUpdate.push(d),d.dispatchEvent({type:"loaded",content:d})}}this.imageUrl=null,this._powerOf2=!1}},b.BaseTexture.prototype.constructor=b.BaseTexture,b.BaseTexture.prototype.destroy=function(){this.imageUrl&&(delete b.BaseTextureCache[this.imageUrl],this.imageUrl=null,this.source.src=null),this.source=null,b.texturesToDestroy.push(this)},b.BaseTexture.prototype.updateSourceImage=function(a){this.hasLoaded=!1,this.source.src=null,this.source.src=a},b.BaseTexture.fromImage=function(a,c,d){var e=b.BaseTextureCache[a];if(void 0===c&&(c=!0),!e){var f=new Image;c&&(f.crossOrigin=""),f.src=a,e=new b.BaseTexture(f,d),e.imageUrl=a,b.BaseTextureCache[a]=e}return e},b.BaseTexture.fromCanvas=function(a,c){a._pixiId||(a._pixiId="canvas_"+b.TextureCacheIdGenerator++);var d=b.BaseTextureCache[a._pixiId];return d||(d=new b.BaseTexture(a,c),b.BaseTextureCache[a._pixiId]=d),d},b.TextureCache={},b.FrameCache={},b.TextureCacheIdGenerator=0,b.Texture=function(a,c){if(b.EventTarget.call(this),c||(this.noFrame=!0,c=new b.Rectangle(0,0,1,1)),a instanceof b.Texture&&(a=a.baseTexture),this.baseTexture=a,this.frame=c,this.trim=null,this.scope=this,this._uvs=null,a.hasLoaded)this.noFrame&&(c=new b.Rectangle(0,0,a.width,a.height)),this.setFrame(c);else{var d=this;a.addEventListener("loaded",function(){d.onBaseTextureLoaded()})}},b.Texture.prototype.constructor=b.Texture,b.Texture.prototype.onBaseTextureLoaded=function(){var a=this.baseTexture;a.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new b.Rectangle(0,0,a.width,a.height)),this.setFrame(this.frame),this.scope.dispatchEvent({type:"update",content:this})},b.Texture.prototype.destroy=function(a){a&&this.baseTexture.destroy()},b.Texture.prototype.setFrame=function(a){if(this.frame=a,this.width=a.width,this.height=a.height,a.x+a.width>this.baseTexture.width||a.y+a.height>this.baseTexture.height)throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,b.Texture.frameUpdates.push(this)},b.Texture.prototype._updateWebGLuvs=function(){this._uvs||(this._uvs=new b.TextureUvs);var a=this.frame,c=this.baseTexture.width,d=this.baseTexture.height;this._uvs.x0=a.x/c,this._uvs.y0=a.y/d,this._uvs.x1=(a.x+a.width)/c,this._uvs.y1=a.y/d,this._uvs.x2=(a.x+a.width)/c,this._uvs.y2=(a.y+a.height)/d,this._uvs.x3=a.x/c,this._uvs.y3=(a.y+a.height)/d},b.Texture.fromImage=function(a,c,d){var e=b.TextureCache[a];return e||(e=new b.Texture(b.BaseTexture.fromImage(a,c,d)),b.TextureCache[a]=e),e},b.Texture.fromFrame=function(a){var c=b.TextureCache[a];if(!c)throw new Error('The frameId "'+a+'" does not exist in the texture cache ');return c},b.Texture.fromCanvas=function(a,c){var d=b.BaseTexture.fromCanvas(a,c);return new b.Texture(d)},b.Texture.addTextureToCache=function(a,c){b.TextureCache[c]=a},b.Texture.removeTextureFromCache=function(a){var c=b.TextureCache[a];return delete b.TextureCache[a],delete b.BaseTextureCache[a],c},b.Texture.frameUpdates=[],b.TextureUvs=function(){this.x0=0,this.y0=0,this.x1=0,this.y1=0,this.x2=0,this.y2=0,this.x3=0,this.y4=0},b.RenderTexture=function(a,c,d){if(b.EventTarget.call(this),this.width=a||100,this.height=c||100,this.frame=new b.Rectangle(0,0,this.width,this.height),this.baseTexture=new b.BaseTexture,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.baseTexture._glTextures=[],this.baseTexture.hasLoaded=!0,this.renderer=d||b.defaultRenderer,this.renderer.type===b.WEBGL_RENDERER){var e=this.renderer.gl;this.textureBuffer=new b.FilterTexture(e,this.width,this.height),this.baseTexture._glTextures[e.id]=this.textureBuffer.texture,this.render=this.renderWebGL,this.projection=new b.Point(this.width/2,-this.height/2)}else this.render=this.renderCanvas,this.textureBuffer=new b.CanvasBuffer(this.width,this.height),this.baseTexture.source=this.textureBuffer.canvas;b.Texture.frameUpdates.push(this)},b.RenderTexture.prototype=Object.create(b.Texture.prototype),b.RenderTexture.prototype.constructor=b.RenderTexture,b.RenderTexture.prototype.resize=function(a,c){if(this.width=a,this.height=c,this.frame.width=this.width,this.frame.height=this.height,this.renderer.type===b.WEBGL_RENDERER){this.projection.x=this.width/2,this.projection.y=-this.height/2;var d=this.renderer.gl;d.bindTexture(d.TEXTURE_2D,this.baseTexture._glTextures[d.id]),d.texImage2D(d.TEXTURE_2D,0,d.RGBA,this.width,this.height,0,d.RGBA,d.UNSIGNED_BYTE,null)}else this.textureBuffer.resize(this.width,this.height);b.Texture.frameUpdates.push(this)},b.RenderTexture.prototype.renderWebGL=function(a,c,d){var e=this.renderer.gl;e.colorMask(!0,!0,!0,!0),e.viewport(0,0,this.width,this.height),e.bindFramebuffer(e.FRAMEBUFFER,this.textureBuffer.frameBuffer),d&&this.textureBuffer.clear();var f=a.children,g=a.worldTransform;a.worldTransform=b.RenderTexture.tempMatrix,a.worldTransform.d=-1,a.worldTransform.ty=-2*this.projection.y,c&&(a.worldTransform.tx=c.x,a.worldTransform.ty-=c.y);for(var h=0,i=f.length;i>h;h++)f[h].updateTransform();b.WebGLRenderer.updateTextures(),this.renderer.renderDisplayObject(a,this.projection,this.textureBuffer.frameBuffer),a.worldTransform=g},b.RenderTexture.prototype.renderCanvas=function(a,c,d){var e=a.children,f=a.worldTransform;a.worldTransform=b.RenderTexture.tempMatrix,c&&(a.worldTransform.tx=c.x,a.worldTransform.ty=c.y);for(var g=0,h=e.length;h>g;g++)e[g].updateTransform();d&&this.textureBuffer.clear();var i=this.textureBuffer.context;this.renderer.renderDisplayObject(a,i),i.setTransform(1,0,0,1,0,0),a.worldTransform=f},b.RenderTexture.tempMatrix=new b.Matrix,"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=b),exports.PIXI=b):"undefined"!=typeof define&&define.amd?define("PIXI",function(){return a.PIXI=b}()):a.PIXI=b}).call(this); \ No newline at end of file +(function(){var a=this,b=b||{};b.WEBGL_RENDERER=0,b.CANVAS_RENDERER=1,b.VERSION="v1.5.2",b.blendModes={NORMAL:0,ADD:1,MULTIPLY:2,SCREEN:3,OVERLAY:4,DARKEN:5,LIGHTEN:6,COLOR_DODGE:7,COLOR_BURN:8,HARD_LIGHT:9,SOFT_LIGHT:10,DIFFERENCE:11,EXCLUSION:12,HUE:13,SATURATION:14,COLOR:15,LUMINOSITY:16},b.scaleModes={DEFAULT:0,LINEAR:0,NEAREST:1},b.INTERACTION_FREQUENCY=30,b.AUTO_PREVENT_DEFAULT=!0,b.RAD_TO_DEG=180/Math.PI,b.DEG_TO_RAD=Math.PI/180,b.Point=function(a,b){this.x=a||0,this.y=b||0},b.Point.prototype.clone=function(){return new b.Point(this.x,this.y)},b.Point.prototype.constructor=b.Point,b.Point.prototype.set=function(a,b){this.x=a||0,this.y=b||(0!==b?this.x:0)},b.Rectangle=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},b.Rectangle.prototype.clone=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},b.Rectangle.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=this.x;if(a>=c&&a<=c+this.width){var d=this.y;if(b>=d&&b<=d+this.height)return!0}return!1},b.Rectangle.prototype.constructor=b.Rectangle,b.EmptyRectangle=new b.Rectangle(0,0,0,0),b.Polygon=function(a){if(a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var c=[],d=0,e=a.length;e>d;d+=2)c.push(new b.Point(a[d],a[d+1]));a=c}this.points=a},b.Polygon.prototype.clone=function(){for(var a=[],c=0;cb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!c)}return c},b.Polygon.prototype.constructor=b.Polygon,b.Circle=function(a,b,c){this.x=a||0,this.y=b||0,this.radius=c||0},b.Circle.prototype.clone=function(){return new b.Circle(this.x,this.y,this.radius)},b.Circle.prototype.contains=function(a,b){if(this.radius<=0)return!1;var c=this.x-a,d=this.y-b,e=this.radius*this.radius;return c*=c,d*=d,e>=c+d},b.Circle.prototype.constructor=b.Circle,b.Ellipse=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},b.Ellipse.prototype.clone=function(){return new b.Ellipse(this.x,this.y,this.width,this.height)},b.Ellipse.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=(a-this.x)/this.width,d=(b-this.y)/this.height;return c*=c,d*=d,1>=c+d},b.Ellipse.prototype.getBounds=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},b.Ellipse.prototype.constructor=b.Ellipse,b.determineMatrixArrayType=function(){return"undefined"!=typeof Float32Array?Float32Array:Array},b.Matrix2=b.determineMatrixArrayType(),b.Matrix=function(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0},b.Matrix.prototype.fromArray=function(a){this.a=a[0],this.b=a[1],this.c=a[3],this.d=a[4],this.tx=a[2],this.ty=a[5]},b.Matrix.prototype.toArray=function(a){this.array||(this.array=new Float32Array(9));var b=this.array;return a?(this.array[0]=this.a,this.array[1]=this.c,this.array[2]=0,this.array[3]=this.b,this.array[4]=this.d,this.array[5]=0,this.array[6]=this.tx,this.array[7]=this.ty,this.array[8]=1):(this.array[0]=this.a,this.array[1]=this.b,this.array[2]=this.tx,this.array[3]=this.c,this.array[4]=this.d,this.array[5]=this.ty,this.array[6]=0,this.array[7]=0,this.array[8]=1),b},b.identityMatrix=new b.Matrix,b.DisplayObject=function(){this.position=new b.Point,this.scale=new b.Point(1,1),this.pivot=new b.Point(0,0),this.rotation=0,this.alpha=1,this.visible=!0,this.hitArea=null,this.buttonMode=!1,this.renderable=!1,this.parent=null,this.stage=null,this.worldAlpha=1,this._interactive=!1,this.defaultCursor="pointer",this.worldTransform=new b.Matrix,this.color=[],this.dynamic=!0,this._sr=0,this._cr=1,this.filterArea=null,this._bounds=new b.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this._cacheAsBitmap=!1,this._cacheIsDirty=!1},b.DisplayObject.prototype.constructor=b.DisplayObject,b.DisplayObject.prototype.setInteractive=function(a){this.interactive=a},Object.defineProperty(b.DisplayObject.prototype,"interactive",{get:function(){return this._interactive},set:function(a){this._interactive=a,this.stage&&(this.stage.dirty=!0)}}),Object.defineProperty(b.DisplayObject.prototype,"worldVisible",{get:function(){var a=this;do{if(!a.visible)return!1;a=a.parent}while(a);return!0}}),Object.defineProperty(b.DisplayObject.prototype,"mask",{get:function(){return this._mask},set:function(a){this._mask&&(this._mask.isMask=!1),this._mask=a,this._mask&&(this._mask.isMask=!0)}}),Object.defineProperty(b.DisplayObject.prototype,"filters",{get:function(){return this._filters},set:function(a){if(a){for(var b=[],c=0;c=0&&b<=this.children.length))throw new Error(a+" The index "+b+" supplied is out of bounds "+this.children.length);a.parent&&a.parent.removeChild(a),a.parent=this,this.children.splice(b,0,a),this.stage&&a.setStageReference(this.stage)},b.DisplayObjectContainer.prototype.swapChildren=function(a,b){if(a!==b){var c=this.children.indexOf(a),d=this.children.indexOf(b);if(0>c||0>d)throw new Error("swapChildren: Both the supplied DisplayObjects must be a child of the caller.");this.children[c]=b,this.children[d]=a}},b.DisplayObjectContainer.prototype.getChildAt=function(a){if(a>=0&&a0&&d>=e){for(var f=this.children.splice(c,e),g=0;ga;a++)this.children[a].updateTransform()},b.DisplayObjectContainer.prototype.getBounds=function(a){if(0===this.children.length)return b.EmptyRectangle;if(a){var c=this.worldTransform;this.worldTransform=a,this.updateTransform(),this.worldTransform=c}for(var d,e,f,g=1/0,h=1/0,i=-1/0,j=-1/0,k=!1,l=0,m=this.children.length;m>l;l++){var n=this.children[l];n.visible&&(k=!0,d=this.children[l].getBounds(a),g=ge?i:e,j=j>f?j:f)}if(!k)return b.EmptyRectangle;var o=this._bounds;return o.x=g,o.y=h,o.width=i-g,o.height=j-h,o},b.DisplayObjectContainer.prototype.getLocalBounds=function(){var a=this.worldTransform;this.worldTransform=b.identityMatrix;for(var c=0,d=this.children.length;d>c;c++)this.children[c].updateTransform();var e=this.getBounds();return this.worldTransform=a,e},b.DisplayObjectContainer.prototype.setStageReference=function(a){this.stage=a,this._interactive&&(this.stage.dirty=!0);for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d.setStageReference(a)}},b.DisplayObjectContainer.prototype.removeStageReference=function(){for(var a=0,b=this.children.length;b>a;a++){var c=this.children[a];c.removeStageReference()}this._interactive&&(this.stage.dirty=!0),this.stage=null},b.DisplayObjectContainer.prototype._renderWebGL=function(a){if(this.visible&&!(this.alpha<=0)){if(this._cacheAsBitmap)return void this._renderCachedSprite(a);var b,c;if(this._mask||this._filters){for(this._mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a),a.spriteBatch.start()),this._filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);a.spriteBatch.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),a.spriteBatch.start()}else for(b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},b.DisplayObjectContainer.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){if(this._cacheAsBitmap)return void this._renderCachedSprite(a);this._mask&&a.maskManager.pushMask(this._mask,a.context);for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},b.Sprite=function(a){b.DisplayObjectContainer.call(this),this.anchor=new b.Point,this.texture=a,this._width=0,this._height=0,this.tint=16777215,this.blendMode=b.blendModes.NORMAL,a.baseTexture.hasLoaded?this.onTextureUpdate():(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},b.Sprite.prototype=Object.create(b.DisplayObjectContainer.prototype),b.Sprite.prototype.constructor=b.Sprite,Object.defineProperty(b.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(a){this.scale.x=a/this.texture.frame.width,this._width=a}}),Object.defineProperty(b.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(a){this.scale.y=a/this.texture.frame.height,this._height=a}}),b.Sprite.prototype.setTexture=function(a){this.texture.baseTexture!==a.baseTexture?(this.textureChange=!0,this.texture=a):this.texture=a,this.cachedTint=16777215,this.updateFrame=!0},b.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},b.Sprite.prototype.getBounds=function(a){var b=this.texture.frame.width,c=this.texture.frame.height,d=b*(1-this.anchor.x),e=b*-this.anchor.x,f=c*(1-this.anchor.y),g=c*-this.anchor.y,h=a||this.worldTransform,i=h.a,j=h.c,k=h.b,l=h.d,m=h.tx,n=h.ty,o=i*e+k*g+m,p=l*g+j*e+n,q=i*d+k*g+m,r=l*g+j*d+n,s=i*d+k*f+m,t=l*f+j*d+n,u=i*e+k*f+m,v=l*f+j*e+n,w=-1/0,x=-1/0,y=1/0,z=1/0;y=y>o?o:y,y=y>q?q:y,y=y>s?s:y,y=y>u?u:y,z=z>p?p:z,z=z>r?r:z,z=z>t?t:z,z=z>v?v:z,w=o>w?o:w,w=q>w?q:w,w=s>w?s:w,w=u>w?u:w,x=p>x?p:x,x=r>x?r:x,x=t>x?t:x,x=v>x?v:x;var A=this._bounds;return A.x=y,A.width=w-y,A.y=z,A.height=x-z,this._currentBounds=A,A},b.Sprite.prototype._renderWebGL=function(a){if(this.visible&&!(this.alpha<=0)){var b,c;if(this._mask||this._filters){var d=a.spriteBatch;for(this._mask&&(d.stop(),a.maskManager.pushMask(this.mask,a),d.start()),this._filters&&(d.flush(),a.filterManager.pushFilter(this._filterBlock)),d.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);d.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),d.start()}else for(a.spriteBatch.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},b.Sprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){var c=this.texture.frame,d=a.context,e=this.texture;if(this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,d.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),this._mask&&a.maskManager.pushMask(this._mask,a.context),c&&c.width&&c.height&&e.baseTexture.source){d.globalAlpha=this.worldAlpha;var f=this.worldTransform;if(a.roundPixels?d.setTransform(f.a,f.c,f.b,f.d,0|f.tx,0|f.ty):d.setTransform(f.a,f.c,f.b,f.d,f.tx,f.ty),a.smoothProperty&&a.scaleMode!==this.texture.baseTexture.scaleMode&&(a.scaleMode=this.texture.baseTexture.scaleMode,d[a.smoothProperty]=a.scaleMode===b.scaleModes.LINEAR),16777215!==this.tint){if(this.cachedTint!==this.tint){if(!e.baseTexture.hasLoaded)return;this.cachedTint=this.tint,this.tintedTexture=b.CanvasTinter.getTintedTexture(this,this.tint)}d.drawImage(this.tintedTexture,0,0,c.width,c.height,this.anchor.x*-c.width,this.anchor.y*-c.height,c.width,c.height)}else if(e.trim){var g=e.trim;d.drawImage(this.texture.baseTexture.source,c.x,c.y,c.width,c.height,g.x-this.anchor.x*g.width,g.y-this.anchor.y*g.height,c.width,c.height)}else d.drawImage(this.texture.baseTexture.source,c.x,c.y,c.width,c.height,this.anchor.x*-c.width,this.anchor.y*-c.height,c.width,c.height)}for(var h=0,i=this.children.length;i>h;h++){var j=this.children[h];j._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},b.Sprite.fromFrame=function(a){var c=b.TextureCache[a];if(!c)throw new Error('The frameId "'+a+'" does not exist in the texture cache'+this);return new b.Sprite(c)},b.Sprite.fromImage=function(a,c,d){var e=b.Texture.fromImage(a,c,d);return new b.Sprite(e)},b.SpriteBatch=function(a){b.DisplayObjectContainer.call(this),this.textureThing=a,this.ready=!1},b.SpriteBatch.prototype=Object.create(b.DisplayObjectContainer.prototype),b.SpriteBatch.constructor=b.SpriteBatch,b.SpriteBatch.prototype.initWebGL=function(a){this.fastSpriteBatch=new b.WebGLFastSpriteBatch(a),this.ready=!0},b.SpriteBatch.prototype.updateTransform=function(){b.DisplayObject.prototype.updateTransform.call(this)},b.SpriteBatch.prototype._renderWebGL=function(a){!this.visible||this.alpha<=0||!this.children.length||(this.ready||this.initWebGL(a.gl),a.spriteBatch.stop(),a.shaderManager.activateShader(a.shaderManager.fastShader),this.fastSpriteBatch.begin(this,a),this.fastSpriteBatch.render(this),a.shaderManager.activateShader(a.shaderManager.defaultShader),a.spriteBatch.start())},b.SpriteBatch.prototype._renderCanvas=function(a){var c=a.context;c.globalAlpha=this.worldAlpha,b.DisplayObject.prototype.updateTransform.call(this);for(var d=this.worldTransform,e=!0,f=0;fe?(g>0&&(b+="\n"),b+=f[g],e=this.style.wordWrapWidth-h):(e-=i,b+=" "+f[g])}d=2?parseInt(c[c.length-2],10):b.BitmapText.fonts[this.fontName].size,this.dirty=!0,this.tint=a.tint},b.BitmapText.prototype.updateText=function(){for(var a=b.BitmapText.fonts[this.fontName],c=new b.Point,d=null,e=[],f=0,g=[],h=0,i=this.fontSize/a.size,j=0;j=j;j++){var n=0;"right"===this.style.align?n=f-g[j]:"center"===this.style.align&&(n=(f-g[j])/2),m.push(n)}var o=this.children.length,p=e.length,q=this.tint||16777215;for(j=0;p>j;j++){var r=o>j?this.children[j]:this._pool.pop();r?r.setTexture(e[j].texture):r=new b.Sprite(e[j].texture),r.position.x=(e[j].position.x+m[e[j].line])*i,r.position.y=e[j].position.y*i,r.scale.x=r.scale.y=i,r.tint=q,r.parent||this.addChild(r)}for(;this.children.length>p;){var s=this.getChildAt(this.children.length-1);this._pool.push(s),this.removeChild(s)}this.textWidth=f*i,this.textHeight=(c.y+a.lineHeight)*i},b.BitmapText.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.dirty=!1),b.DisplayObjectContainer.prototype.updateTransform.call(this)},b.BitmapText.fonts={},b.Stage=function(a){b.DisplayObjectContainer.call(this),this.worldTransform=new b.Matrix,this.interactive=!0,this.interactionManager=new b.InteractionManager(this),this.dirty=!0,this.stage=this,this.stage.hitArea=new b.Rectangle(0,0,1e5,1e5),this.setBackgroundColor(a)},b.Stage.prototype=Object.create(b.DisplayObjectContainer.prototype),b.Stage.prototype.constructor=b.Stage,b.Stage.prototype.setInteractionDelegate=function(a){this.interactionManager.setTargetDomElement(a)},b.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var a=0,b=this.children.length;b>a;a++)this.children[a].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},b.Stage.prototype.setBackgroundColor=function(a){this.backgroundColor=a||0,this.backgroundColorSplit=b.hex2rgb(this.backgroundColor);var c=this.backgroundColor.toString(16);c="000000".substr(0,6-c.length)+c,this.backgroundColorString="#"+c},b.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global};for(var c=0,d=["ms","moz","webkit","o"],e=0;e>16&255)/255,(a>>8&255)/255,(255&a)/255]},b.rgb2hex=function(a){return(255*a[0]<<16)+(255*a[1]<<8)+255*a[2]},"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),b.AjaxRequest=function(){var a=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new window.XMLHttpRequest:!1;for(var b=0;b0&&0===(a&a-1))return a;for(var b=1;a>b;)b<<=1;return b},b.EventTarget=function(){var a={};this.addEventListener=this.on=function(b,c){void 0===a[b]&&(a[b]=[]),-1===a[b].indexOf(c)&&a[b].push(c)},this.dispatchEvent=this.emit=function(b){if(a[b.type]&&a[b.type].length)for(var c=0,d=a[b.type].length;d>c;c++)a[b.type][c](b)},this.removeEventListener=this.off=function(b,c){var d=a[b].indexOf(c);-1!==d&&a[b].splice(d,1)},this.removeAllEventListeners=function(b){var c=a[b];c&&(c.length=0)}},b.PolyK={},b.PolyK.Triangulate=function(a){var c=!0,d=a.length>>1;if(3>d)return[];for(var e=[],f=[],g=0;d>g;g++)f.push(g);g=0;for(var h=d;h>3;){var i=f[(g+0)%h],j=f[(g+1)%h],k=f[(g+2)%h],l=a[2*i],m=a[2*i+1],n=a[2*j],o=a[2*j+1],p=a[2*k],q=a[2*k+1],r=!1;if(b.PolyK._convex(l,m,n,o,p,q,c)){r=!0;for(var s=0;h>s;s++){var t=f[s];if(t!==i&&t!==j&&t!==k&&b.PolyK._PointInTriangle(a[2*t],a[2*t+1],l,m,n,o,p,q)){r=!1;break}}}if(r)e.push(i,j,k),f.splice((g+1)%h,1),h--,g=0;else if(g++>3*h){if(!c)return window.console.log("PIXI Warning: shape too complex to fill"),[];for(e=[],f=[],g=0;d>g;g++)f.push(g);g=0,h=d,c=!1}}return e.push(f[0],f[1],f[2]),e},b.PolyK._PointInTriangle=function(a,b,c,d,e,f,g,h){var i=g-c,j=h-d,k=e-c,l=f-d,m=a-c,n=b-d,o=i*i+j*j,p=i*k+j*l,q=i*m+j*n,r=k*k+l*l,s=k*m+l*n,t=1/(o*r-p*p),u=(r*q-p*s)*t,v=(o*s-p*q)*t;return u>=0&&v>=0&&1>u+v},b.PolyK._convex=function(a,b,c,d,e,f,g){return(b-d)*(e-c)+(c-a)*(f-d)>=0===g},b.initDefaultShaders=function(){},b.CompileVertexShader=function(a,c){return b._CompileShader(a,c,a.VERTEX_SHADER)},b.CompileFragmentShader=function(a,c){return b._CompileShader(a,c,a.FRAGMENT_SHADER)},b._CompileShader=function(a,b,c){var d=b.join("\n"),e=a.createShader(c);return a.shaderSource(e,d),a.compileShader(e),a.getShaderParameter(e,a.COMPILE_STATUS)?e:(window.console.log(a.getShaderInfoLog(e)),null)},b.compileProgram=function(a,c,d){var e=b.CompileFragmentShader(a,d),f=b.CompileVertexShader(a,c),g=a.createProgram();return a.attachShader(g,f),a.attachShader(g,e),a.linkProgram(g),a.getProgramParameter(g,a.LINK_STATUS)||window.console.log("Could not initialise shaders"),g},b.PixiShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"],this.textureCount=0,this.attributes=[],this.init()},b.PixiShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc||b.PixiShader.defaultVertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.dimensions=a.getUniformLocation(c,"dimensions"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.colorAttribute=a.getAttribLocation(c,"aColor"),-1===this.colorAttribute&&(this.colorAttribute=2),this.attributes=[this.aVertexPosition,this.aTextureCoord,this.colorAttribute];for(var d in this.uniforms)this.uniforms[d].uniformLocation=a.getUniformLocation(c,d);this.initUniforms(),this.program=c},b.PixiShader.prototype.initUniforms=function(){this.textureCount=1;var a,b=this.gl;for(var c in this.uniforms){a=this.uniforms[c];var d=a.type;"sampler2D"===d?(a._init=!1,null!==a.value&&this.initSampler2D(a)):"mat2"===d||"mat3"===d||"mat4"===d?(a.glMatrix=!0,a.glValueLength=1,"mat2"===d?a.glFunc=b.uniformMatrix2fv:"mat3"===d?a.glFunc=b.uniformMatrix3fv:"mat4"===d&&(a.glFunc=b.uniformMatrix4fv)):(a.glFunc=b["uniform"+d],a.glValueLength="2f"===d||"2i"===d?2:"3f"===d||"3i"===d?3:"4f"===d||"4i"===d?4:1)}},b.PixiShader.prototype.initSampler2D=function(a){if(a.value&&a.value.baseTexture&&a.value.baseTexture.hasLoaded){var b=this.gl;if(b.activeTexture(b["TEXTURE"+this.textureCount]),b.bindTexture(b.TEXTURE_2D,a.value.baseTexture._glTextures[b.id]),a.textureData){var c=a.textureData,d=c.magFilter?c.magFilter:b.LINEAR,e=c.minFilter?c.minFilter:b.LINEAR,f=c.wrapS?c.wrapS:b.CLAMP_TO_EDGE,g=c.wrapT?c.wrapT:b.CLAMP_TO_EDGE,h=c.luminance?b.LUMINANCE:b.RGBA;if(c.repeat&&(f=b.REPEAT,g=b.REPEAT),b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL,!!c.flipY),c.width){var i=c.width?c.width:512,j=c.height?c.height:2,k=c.border?c.border:0;b.texImage2D(b.TEXTURE_2D,0,h,i,j,k,h,b.UNSIGNED_BYTE,null)}else b.texImage2D(b.TEXTURE_2D,0,h,b.RGBA,b.UNSIGNED_BYTE,a.value.baseTexture.source);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,d),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,e),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,f),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,g)}b.uniform1i(a.uniformLocation,this.textureCount),a._init=!0,this.textureCount++}},b.PixiShader.prototype.syncUniforms=function(){this.textureCount=1;var a,c=this.gl;for(var d in this.uniforms)a=this.uniforms[d],1===a.glValueLength?a.glMatrix===!0?a.glFunc.call(c,a.uniformLocation,a.transpose,a.value):a.glFunc.call(c,a.uniformLocation,a.value):2===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y):3===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y,a.value.z):4===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y,a.value.z,a.value.w):"sampler2D"===a.type&&(a._init?(c.activeTexture(c["TEXTURE"+this.textureCount]),c.bindTexture(c.TEXTURE_2D,a.value.baseTexture._glTextures[c.id]||b.createWebGLTexture(a.value.baseTexture,c)),c.uniform1i(a.uniformLocation,this.textureCount),this.textureCount++):this.initSampler2D(a)) +},b.PixiShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attributes=null},b.PixiShader.defaultVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec2 aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","varying vec2 vTextureCoord;","varying vec4 vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {"," gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vec3 color = mod(vec3(aColor.y/65536.0, aColor.y/256.0, aColor.y), 256.0) / 256.0;"," vColor = vec4(color * aColor.x, aColor.x);","}"],b.PixiFastShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform mat3 uMatrix;","varying vec2 vTextureCoord;","varying float vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {"," vec2 v;"," vec2 sv = aVertexPosition * aScale;"," v.x = (sv.x) * cos(aRotation) - (sv.y) * sin(aRotation);"," v.y = (sv.x) * sin(aRotation) + (sv.y) * cos(aRotation);"," v = ( uMatrix * vec3(v + aPositionCoord , 1.0) ).xy ;"," gl_Position = vec4( ( v / projectionVector) + center , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"],this.textureCount=0,this.init()},b.PixiFastShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.dimensions=a.getUniformLocation(c,"dimensions"),this.uMatrix=a.getUniformLocation(c,"uMatrix"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aPositionCoord=a.getAttribLocation(c,"aPositionCoord"),this.aScale=a.getAttribLocation(c,"aScale"),this.aRotation=a.getAttribLocation(c,"aRotation"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.colorAttribute=a.getAttribLocation(c,"aColor"),-1===this.colorAttribute&&(this.colorAttribute=2),this.attributes=[this.aVertexPosition,this.aPositionCoord,this.aScale,this.aRotation,this.aTextureCoord,this.colorAttribute],this.program=c},b.PixiFastShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attributes=null},b.StripShader=function(){this.program=null,this.fragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform float alpha;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));"," gl_FragColor = gl_FragColor * alpha;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","varying vec2 vTextureCoord;","uniform vec2 offsetVector;","varying float vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition, 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / projectionVector.y + 1.0 , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"]},b.StripShader.prototype.init=function(){var a=b.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.colorAttribute=a.getAttribLocation(c,"aColor"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.translationMatrix=a.getUniformLocation(c,"translationMatrix"),this.alpha=a.getUniformLocation(c,"alpha"),this.program=c},b.PrimitiveShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision mediump float;","varying vec4 vColor;","void main(void) {"," gl_FragColor = vColor;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform float alpha;","uniform vec3 tint;","varying vec4 vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"],this.init()},b.PrimitiveShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.tintColor=a.getUniformLocation(c,"tint"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.colorAttribute=a.getAttribLocation(c,"aColor"),this.attributes=[this.aVertexPosition,this.colorAttribute],this.translationMatrix=a.getUniformLocation(c,"translationMatrix"),this.alpha=a.getUniformLocation(c,"alpha"),this.program=c},b.PrimitiveShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attribute=null},b.WebGLGraphics=function(){},b.WebGLGraphics.renderGraphics=function(a,c){var d=c.gl,e=c.projection,f=c.offset,g=c.shaderManager.primitiveShader;a._webGL[d.id]||(a._webGL[d.id]={points:[],indices:[],lastIndex:0,buffer:d.createBuffer(),indexBuffer:d.createBuffer()});var h=a._webGL[d.id];a.dirty&&(a.dirty=!1,a.clearDirty&&(a.clearDirty=!1,h.lastIndex=0,h.points=[],h.indices=[]),b.WebGLGraphics.updateGraphics(a,d)),c.shaderManager.activatePrimitiveShader(),d.blendFunc(d.ONE,d.ONE_MINUS_SRC_ALPHA),d.uniformMatrix3fv(g.translationMatrix,!1,a.worldTransform.toArray(!0)),d.uniform2f(g.projectionVector,e.x,-e.y),d.uniform2f(g.offsetVector,-f.x,-f.y),d.uniform3fv(g.tintColor,b.hex2rgb(a.tint)),d.uniform1f(g.alpha,a.worldAlpha),d.bindBuffer(d.ARRAY_BUFFER,h.buffer),d.vertexAttribPointer(g.aVertexPosition,2,d.FLOAT,!1,24,0),d.vertexAttribPointer(g.colorAttribute,4,d.FLOAT,!1,24,8),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,h.indexBuffer),d.drawElements(d.TRIANGLE_STRIP,h.indices.length,d.UNSIGNED_SHORT,0),c.shaderManager.deactivatePrimitiveShader()},b.WebGLGraphics.updateGraphics=function(a,c){for(var d=a._webGL[c.id],e=d.lastIndex;e3&&b.WebGLGraphics.buildPoly(f,d),f.lineWidth>0&&b.WebGLGraphics.buildLine(f,d)):f.type===b.Graphics.RECT?b.WebGLGraphics.buildRectangle(f,d):(f.type===b.Graphics.CIRC||f.type===b.Graphics.ELIP)&&b.WebGLGraphics.buildCircle(f,d)}d.lastIndex=a.graphicsData.length,d.glPoints=new Float32Array(d.points),c.bindBuffer(c.ARRAY_BUFFER,d.buffer),c.bufferData(c.ARRAY_BUFFER,d.glPoints,c.STATIC_DRAW),d.glIndicies=new Uint16Array(d.indices),c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,d.indexBuffer),c.bufferData(c.ELEMENT_ARRAY_BUFFER,d.glIndicies,c.STATIC_DRAW)},b.WebGLGraphics.buildRectangle=function(a,c){var d=a.points,e=d[0],f=d[1],g=d[2],h=d[3];if(a.fill){var i=b.hex2rgb(a.fillColor),j=a.fillAlpha,k=i[0]*j,l=i[1]*j,m=i[2]*j,n=c.points,o=c.indices,p=n.length/6;n.push(e,f),n.push(k,l,m,j),n.push(e+g,f),n.push(k,l,m,j),n.push(e,f+h),n.push(k,l,m,j),n.push(e+g,f+h),n.push(k,l,m,j),o.push(p,p,p+1,p+2,p+3,p+3)}if(a.lineWidth){var q=a.points;a.points=[e,f,e+g,f,e+g,f+h,e,f+h,e,f],b.WebGLGraphics.buildLine(a,c),a.points=q}},b.WebGLGraphics.buildCircle=function(a,c){var d=a.points,e=d[0],f=d[1],g=d[2],h=d[3],i=40,j=2*Math.PI/i,k=0;if(a.fill){var l=b.hex2rgb(a.fillColor),m=a.fillAlpha,n=l[0]*m,o=l[1]*m,p=l[2]*m,q=c.points,r=c.indices,s=q.length/6;for(r.push(s),k=0;i+1>k;k++)q.push(e,f,n,o,p,m),q.push(e+Math.sin(j*k)*g,f+Math.cos(j*k)*h,n,o,p,m),r.push(s++,s++);r.push(s-1)}if(a.lineWidth){var t=a.points;for(a.points=[],k=0;i+1>k;k++)a.points.push(e+Math.sin(j*k)*g,f+Math.cos(j*k)*h);b.WebGLGraphics.buildLine(a,c),a.points=t}},b.WebGLGraphics.buildLine=function(a,c){var d=0,e=a.points;if(0!==e.length){if(a.lineWidth%2)for(d=0;dd;d++)l=e[2*(d-1)],m=e[2*(d-1)+1],n=e[2*d],o=e[2*d+1],p=e[2*(d+1)],q=e[2*(d+1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,t=-(o-q),u=n-p,F=Math.sqrt(t*t+u*u),t/=F,u/=F,t*=L,u*=L,x=-s+m-(-s+o),y=-r+n-(-r+l),z=(-r+l)*(-s+o)-(-r+n)*(-s+m),A=-u+q-(-u+o),B=-t+n-(-t+p),C=(-t+p)*(-u+o)-(-t+n)*(-u+q),D=x*B-A*y,Math.abs(D)<.1?(D+=10.1,G.push(n-r,o-s,O,P,Q,N),G.push(n+r,o+s,O,P,Q,N)):(j=(y*C-B*z)/D,k=(A*z-x*C)/D,E=(j-n)*(j-n)+(k-o)+(k-o),E>19600?(v=r-t,w=s-u,F=Math.sqrt(v*v+w*w),v/=F,w/=F,v*=L,w*=L,G.push(n-v,o-w),G.push(O,P,Q,N),G.push(n+v,o+w),G.push(O,P,Q,N),G.push(n-v,o-w),G.push(O,P,Q,N),J++):(G.push(j,k),G.push(O,P,Q,N),G.push(n-(j-n),o-(k-o)),G.push(O,P,Q,N)));for(l=e[2*(I-2)],m=e[2*(I-2)+1],n=e[2*(I-1)],o=e[2*(I-1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,G.push(n-r,o-s),G.push(O,P,Q,N),G.push(n+r,o+s),G.push(O,P,Q,N),H.push(K),d=0;J>d;d++)H.push(K++);H.push(K-1)}},b.WebGLGraphics.buildPoly=function(a,c){var d=a.points;if(!(d.length<6)){var e=c.points,f=c.indices,g=d.length/2,h=b.hex2rgb(a.fillColor),i=a.fillAlpha,j=h[0]*i,k=h[1]*i,l=h[2]*i,m=b.PolyK.Triangulate(d),n=e.length/6,o=0;for(o=0;oo;o++)e.push(d[2*o],d[2*o+1],j,k,l,i)}},b.glContexts=[],b.WebGLRenderer=function(a,c,d,e,f){b.defaultRenderer||(b.defaultRenderer=this),this.type=b.WEBGL_RENDERER,this.transparent=!!e,this.width=a||800,this.height=c||600,this.view=d||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height,this.contextLost=this.handleContextLost.bind(this),this.contextRestoredLost=this.handleContextRestored.bind(this),this.view.addEventListener("webglcontextlost",this.contextLost,!1),this.view.addEventListener("webglcontextrestored",this.contextRestoredLost,!1),this.options={alpha:this.transparent,antialias:!!f,premultipliedAlpha:!!e,stencil:!0};try{this.gl=this.view.getContext("experimental-webgl",this.options)}catch(g){try{this.gl=this.view.getContext("webgl",this.options)}catch(h){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}var i=this.gl;this.glContextId=i.id=b.WebGLRenderer.glContextId++,b.glContexts[this.glContextId]=i,b.blendModesWebGL||(b.blendModesWebGL=[],b.blendModesWebGL[b.blendModes.NORMAL]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.ADD]=[i.SRC_ALPHA,i.DST_ALPHA],b.blendModesWebGL[b.blendModes.MULTIPLY]=[i.DST_COLOR,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SCREEN]=[i.SRC_ALPHA,i.ONE],b.blendModesWebGL[b.blendModes.OVERLAY]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.DARKEN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.LIGHTEN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR_DODGE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR_BURN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.HARD_LIGHT]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SOFT_LIGHT]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.DIFFERENCE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.EXCLUSION]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.HUE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SATURATION]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.LUMINOSITY]=[i.ONE,i.ONE_MINUS_SRC_ALPHA]),this.projection=new b.Point,this.projection.x=this.width/2,this.projection.y=-this.height/2,this.offset=new b.Point(0,0),this.resize(this.width,this.height),this.contextLost=!1,this.shaderManager=new b.WebGLShaderManager(i),this.spriteBatch=new b.WebGLSpriteBatch(i),this.maskManager=new b.WebGLMaskManager(i),this.filterManager=new b.WebGLFilterManager(i,this.transparent),this.renderSession={},this.renderSession.gl=this.gl,this.renderSession.drawCount=0,this.renderSession.shaderManager=this.shaderManager,this.renderSession.maskManager=this.maskManager,this.renderSession.filterManager=this.filterManager,this.renderSession.spriteBatch=this.spriteBatch,this.renderSession.renderer=this,i.useProgram(this.shaderManager.defaultShader.program),i.disable(i.DEPTH_TEST),i.disable(i.CULL_FACE),i.enable(i.BLEND),i.colorMask(!0,!0,!0,this.transparent)},b.WebGLRenderer.prototype.constructor=b.WebGLRenderer,b.WebGLRenderer.prototype.render=function(a){if(!this.contextLost){this.__stage!==a&&(a.interactive&&a.interactionManager.removeEvents(),this.__stage=a),b.WebGLRenderer.updateTextures(),a.updateTransform(),a._interactive&&(a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this)));var c=this.gl;c.viewport(0,0,this.width,this.height),c.bindFramebuffer(c.FRAMEBUFFER,null),this.transparent?c.clearColor(0,0,0,0):c.clearColor(a.backgroundColorSplit[0],a.backgroundColorSplit[1],a.backgroundColorSplit[2],1),c.clear(c.COLOR_BUFFER_BIT),this.renderDisplayObject(a,this.projection),a.interactive?a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this)):a._interactiveEventsAdded&&(a._interactiveEventsAdded=!1,a.interactionManager.setTarget(this))}},b.WebGLRenderer.prototype.renderDisplayObject=function(a,b,c){this.renderSession.drawCount=0,this.renderSession.currentBlendMode=9999,this.renderSession.projection=b,this.renderSession.offset=this.offset,this.spriteBatch.begin(this.renderSession),this.filterManager.begin(this.renderSession,c),a._renderWebGL(this.renderSession),this.spriteBatch.end()},b.WebGLRenderer.updateTextures=function(){var a=0;for(a=0;a=0;c--){var d=a._glTextures[c],e=b.glContexts[c];e&&d&&e.deleteTexture(d)}a._glTextures.length=0},b.WebGLRenderer.updateTextureFrame=function(a){a.updateFrame=!1,a._updateWebGLuvs()},b.WebGLRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b,this.gl.viewport(0,0,this.width,this.height),this.projection.x=this.width/2,this.projection.y=-this.height/2},b.createWebGLTexture=function(a,c){return a.hasLoaded&&(a._glTextures[c.id]=c.createTexture(),c.bindTexture(c.TEXTURE_2D,a._glTextures[c.id]),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,a.source),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),a._powerOf2?(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.REPEAT),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.REPEAT)):(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE)),c.bindTexture(c.TEXTURE_2D,null)),a._glTextures[c.id]},b.updateWebGLTexture=function(a,c){a._glTextures[c.id]&&(c.bindTexture(c.TEXTURE_2D,a._glTextures[c.id]),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,a.source),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),a._powerOf2?(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.REPEAT),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.REPEAT)):(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE)),c.bindTexture(c.TEXTURE_2D,null))},b.WebGLRenderer.prototype.handleContextLost=function(a){a.preventDefault(),this.contextLost=!0},b.WebGLRenderer.prototype.handleContextRestored=function(){try{this.gl=this.view.getContext("experimental-webgl",this.options)}catch(a){try{this.gl=this.view.getContext("webgl",this.options)}catch(c){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}var d=this.gl;d.id=b.WebGLRenderer.glContextId++,this.shaderManager.setContext(d),this.spriteBatch.setContext(d),this.maskManager.setContext(d),this.filterManager.setContext(d),this.renderSession.gl=this.gl,d.disable(d.DEPTH_TEST),d.disable(d.CULL_FACE),d.enable(d.BLEND),d.colorMask(!0,!0,!0,this.transparent),this.gl.viewport(0,0,this.width,this.height);for(var e in b.TextureCache){var f=b.TextureCache[e].baseTexture;f._glTextures=[]}this.contextLost=!1},b.WebGLRenderer.prototype.destroy=function(){this.view.removeEventListener("webglcontextlost",this.contextLost),this.view.removeEventListener("webglcontextrestored",this.contextRestoredLost),b.glContexts[this.glContextId]=null,this.projection=null,this.offset=null,this.shaderManager.destroy(),this.spriteBatch.destroy(),this.maskManager.destroy(),this.filterManager.destroy(),this.shaderManager=null,this.spriteBatch=null,this.maskManager=null,this.filterManager=null,this.gl=null,this.renderSession=null},b.WebGLRenderer.glContextId=0,b.WebGLMaskManager=function(a){this.maskStack=[],this.maskPosition=0,this.setContext(a)},b.WebGLMaskManager.prototype.setContext=function(a){this.gl=a},b.WebGLMaskManager.prototype.pushMask=function(a,c){var d=this.gl;0===this.maskStack.length&&(d.enable(d.STENCIL_TEST),d.stencilFunc(d.ALWAYS,1,1)),this.maskStack.push(a),d.colorMask(!1,!1,!1,!1),d.stencilOp(d.KEEP,d.KEEP,d.INCR),b.WebGLGraphics.renderGraphics(a,c),d.colorMask(!0,!0,!0,!0),d.stencilFunc(d.NOTEQUAL,0,this.maskStack.length),d.stencilOp(d.KEEP,d.KEEP,d.KEEP)},b.WebGLMaskManager.prototype.popMask=function(a){var c=this.gl,d=this.maskStack.pop();d&&(c.colorMask(!1,!1,!1,!1),c.stencilOp(c.KEEP,c.KEEP,c.DECR),b.WebGLGraphics.renderGraphics(d,a),c.colorMask(!0,!0,!0,!0),c.stencilFunc(c.NOTEQUAL,0,this.maskStack.length),c.stencilOp(c.KEEP,c.KEEP,c.KEEP)),0===this.maskStack.length&&c.disable(c.STENCIL_TEST)},b.WebGLMaskManager.prototype.destroy=function(){this.maskStack=null,this.gl=null},b.WebGLShaderManager=function(a){this.maxAttibs=10,this.attribState=[],this.tempAttribState=[];for(var b=0;bd;d+=6,e+=4)this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3;this.drawing=!1,this.currentBatchSize=0,this.currentBaseTexture=null,this.setContext(a)},b.WebGLSpriteBatch.prototype.setContext=function(a){this.gl=a,this.vertexBuffer=a.createBuffer(),this.indexBuffer=a.createBuffer(),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,this.vertices,a.DYNAMIC_DRAW),this.currentBlendMode=99999},b.WebGLSpriteBatch.prototype.begin=function(a){this.renderSession=a,this.shader=this.renderSession.shaderManager.defaultShader,this.start()},b.WebGLSpriteBatch.prototype.end=function(){this.flush()},b.WebGLSpriteBatch.prototype.render=function(a){var b=a.texture;(b.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=b.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode);var c=a._uvs||a.texture._uvs;if(c){var d,e,f,g,h=a.worldAlpha,i=a.tint,j=this.vertices,k=a.anchor.x,l=a.anchor.y;if(a.texture.trim){var m=a.texture.trim;e=m.x-k*m.width,d=e+b.frame.width,g=m.y-l*m.height,f=g+b.frame.height}else d=b.frame.width*(1-k),e=b.frame.width*-k,f=b.frame.height*(1-l),g=b.frame.height*-l;var n=4*this.currentBatchSize*this.vertSize,o=a.worldTransform,p=o.a,q=o.c,r=o.b,s=o.d,t=o.tx,u=o.ty;j[n++]=p*e+r*g+t,j[n++]=s*g+q*e+u,j[n++]=c.x0,j[n++]=c.y0,j[n++]=h,j[n++]=i,j[n++]=p*d+r*g+t,j[n++]=s*g+q*d+u,j[n++]=c.x1,j[n++]=c.y1,j[n++]=h,j[n++]=i,j[n++]=p*d+r*f+t,j[n++]=s*f+q*d+u,j[n++]=c.x2,j[n++]=c.y2,j[n++]=h,j[n++]=i,j[n++]=p*e+r*f+t,j[n++]=s*f+q*e+u,j[n++]=c.x3,j[n++]=c.y3,j[n++]=h,j[n++]=i,this.currentBatchSize++}},b.WebGLSpriteBatch.prototype.renderTilingSprite=function(a){var c=a.tilingTexture;(c.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=c.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode),a._uvs||(a._uvs=new b.TextureUvs);var d=a._uvs;a.tilePosition.x%=c.baseTexture.width*a.tileScaleOffset.x,a.tilePosition.y%=c.baseTexture.height*a.tileScaleOffset.y;var e=a.tilePosition.x/(c.baseTexture.width*a.tileScaleOffset.x),f=a.tilePosition.y/(c.baseTexture.height*a.tileScaleOffset.y),g=a.width/c.baseTexture.width/(a.tileScale.x*a.tileScaleOffset.x),h=a.height/c.baseTexture.height/(a.tileScale.y*a.tileScaleOffset.y);d.x0=0-e,d.y0=0-f,d.x1=1*g-e,d.y1=0-f,d.x2=1*g-e,d.y2=1*h-f,d.x3=0-e,d.y3=1*h-f;var i=a.worldAlpha,j=a.tint,k=this.vertices,l=a.width,m=a.height,n=a.anchor.x,o=a.anchor.y,p=l*(1-n),q=l*-n,r=m*(1-o),s=m*-o,t=4*this.currentBatchSize*this.vertSize,u=a.worldTransform,v=u.a,w=u.c,x=u.b,y=u.d,z=u.tx,A=u.ty;k[t++]=v*q+x*s+z,k[t++]=y*s+w*q+A,k[t++]=d.x0,k[t++]=d.y0,k[t++]=i,k[t++]=j,k[t++]=v*p+x*s+z,k[t++]=y*s+w*p+A,k[t++]=d.x1,k[t++]=d.y1,k[t++]=i,k[t++]=j,k[t++]=v*p+x*r+z,k[t++]=y*r+w*p+A,k[t++]=d.x2,k[t++]=d.y2,k[t++]=i,k[t++]=j,k[t++]=v*q+x*r+z,k[t++]=y*r+w*q+A,k[t++]=d.x3,k[t++]=d.y3,k[t++]=i,k[t++]=j,this.currentBatchSize++},b.WebGLSpriteBatch.prototype.flush=function(){if(0!==this.currentBatchSize){var a=this.gl;if(a.bindTexture(a.TEXTURE_2D,this.currentBaseTexture._glTextures[a.id]||b.createWebGLTexture(this.currentBaseTexture,a)),this.currentBatchSize>.5*this.size)a.bufferSubData(a.ARRAY_BUFFER,0,this.vertices);else{var c=this.vertices.subarray(0,4*this.currentBatchSize*this.vertSize);a.bufferSubData(a.ARRAY_BUFFER,0,c)}a.drawElements(a.TRIANGLES,6*this.currentBatchSize,a.UNSIGNED_SHORT,0),this.currentBatchSize=0,this.renderSession.drawCount++}},b.WebGLSpriteBatch.prototype.stop=function(){this.flush()},b.WebGLSpriteBatch.prototype.start=function(){var a=this.gl;a.activeTexture(a.TEXTURE0),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var c=this.renderSession.projection;a.uniform2f(this.shader.projectionVector,c.x,c.y);var d=4*this.vertSize;a.vertexAttribPointer(this.shader.aVertexPosition,2,a.FLOAT,!1,d,0),a.vertexAttribPointer(this.shader.aTextureCoord,2,a.FLOAT,!1,d,8),a.vertexAttribPointer(this.shader.colorAttribute,2,a.FLOAT,!1,d,16),this.currentBlendMode!==b.blendModes.NORMAL&&this.setBlendMode(b.blendModes.NORMAL)},b.WebGLSpriteBatch.prototype.setBlendMode=function(a){this.flush(),this.currentBlendMode=a;var c=b.blendModesWebGL[this.currentBlendMode];this.gl.blendFunc(c[0],c[1])},b.WebGLSpriteBatch.prototype.destroy=function(){this.vertices=null,this.indices=null,this.gl.deleteBuffer(this.vertexBuffer),this.gl.deleteBuffer(this.indexBuffer),this.currentBaseTexture=null,this.gl=null},b.WebGLFastSpriteBatch=function(a){this.vertSize=10,this.maxSize=6e3,this.size=this.maxSize;var b=4*this.size*this.vertSize,c=6*this.maxSize;this.vertices=new Float32Array(b),this.indices=new Uint16Array(c),this.vertexBuffer=null,this.indexBuffer=null,this.lastIndexCount=0;for(var d=0,e=0;c>d;d+=6,e+=4)this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3;this.drawing=!1,this.currentBatchSize=0,this.currentBaseTexture=null,this.currentBlendMode=0,this.renderSession=null,this.shader=null,this.matrix=null,this.setContext(a)},b.WebGLFastSpriteBatch.prototype.setContext=function(a){this.gl=a,this.vertexBuffer=a.createBuffer(),this.indexBuffer=a.createBuffer(),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,this.vertices,a.DYNAMIC_DRAW),this.currentBlendMode=99999},b.WebGLFastSpriteBatch.prototype.begin=function(a,b){this.renderSession=b,this.shader=this.renderSession.shaderManager.fastShader,this.matrix=a.worldTransform.toArray(!0),this.start()},b.WebGLFastSpriteBatch.prototype.end=function(){this.flush()},b.WebGLFastSpriteBatch.prototype.render=function(a){var b=a.children,c=b[0];if(c.texture._uvs){this.currentBaseTexture=c.texture.baseTexture,c.blendMode!==this.currentBlendMode&&this.setBlendMode(c.blendMode);for(var d=0,e=b.length;e>d;d++)this.renderSprite(b[d]);this.flush()}},b.WebGLFastSpriteBatch.prototype.renderSprite=function(a){if(a.visible&&(a.texture.baseTexture===this.currentBaseTexture||(this.flush(),this.currentBaseTexture=a.texture.baseTexture,a.texture._uvs))){var b,c,d,e,f,g,h,i,j=this.vertices;if(b=a.texture._uvs,c=a.texture.frame.width,d=a.texture.frame.height,a.texture.trim){var k=a.texture.trim;f=k.x-a.anchor.x*k.width,e=f+a.texture.frame.width,h=k.y-a.anchor.y*k.height,g=h+a.texture.frame.height}else e=a.texture.frame.width*(1-a.anchor.x),f=a.texture.frame.width*-a.anchor.x,g=a.texture.frame.height*(1-a.anchor.y),h=a.texture.frame.height*-a.anchor.y;i=4*this.currentBatchSize*this.vertSize,j[i++]=f,j[i++]=h,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x0,j[i++]=b.y1,j[i++]=a.alpha,j[i++]=e,j[i++]=h,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x1,j[i++]=b.y1,j[i++]=a.alpha,j[i++]=e,j[i++]=g,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x2,j[i++]=b.y2,j[i++]=a.alpha,j[i++]=f,j[i++]=g,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x3,j[i++]=b.y3,j[i++]=a.alpha,this.currentBatchSize++,this.currentBatchSize>=this.size&&this.flush()}},b.WebGLFastSpriteBatch.prototype.flush=function(){if(0!==this.currentBatchSize){var a=this.gl;if(this.currentBaseTexture._glTextures[a.id]||b.createWebGLTexture(this.currentBaseTexture,a),a.bindTexture(a.TEXTURE_2D,this.currentBaseTexture._glTextures[a.id]),this.currentBatchSize>.5*this.size)a.bufferSubData(a.ARRAY_BUFFER,0,this.vertices);else{var c=this.vertices.subarray(0,4*this.currentBatchSize*this.vertSize);a.bufferSubData(a.ARRAY_BUFFER,0,c)}a.drawElements(a.TRIANGLES,6*this.currentBatchSize,a.UNSIGNED_SHORT,0),this.currentBatchSize=0,this.renderSession.drawCount++}},b.WebGLFastSpriteBatch.prototype.stop=function(){this.flush()},b.WebGLFastSpriteBatch.prototype.start=function(){var a=this.gl;a.activeTexture(a.TEXTURE0),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var c=this.renderSession.projection;a.uniform2f(this.shader.projectionVector,c.x,c.y),a.uniformMatrix3fv(this.shader.uMatrix,!1,this.matrix);var d=4*this.vertSize;a.vertexAttribPointer(this.shader.aVertexPosition,2,a.FLOAT,!1,d,0),a.vertexAttribPointer(this.shader.aPositionCoord,2,a.FLOAT,!1,d,8),a.vertexAttribPointer(this.shader.aScale,2,a.FLOAT,!1,d,16),a.vertexAttribPointer(this.shader.aRotation,1,a.FLOAT,!1,d,24),a.vertexAttribPointer(this.shader.aTextureCoord,2,a.FLOAT,!1,d,28),a.vertexAttribPointer(this.shader.colorAttribute,1,a.FLOAT,!1,d,36),this.currentBlendMode!==b.blendModes.NORMAL&&this.setBlendMode(b.blendModes.NORMAL)},b.WebGLFastSpriteBatch.prototype.setBlendMode=function(a){this.flush(),this.currentBlendMode=a;var c=b.blendModesWebGL[this.currentBlendMode];this.gl.blendFunc(c[0],c[1])},b.WebGLFilterManager=function(a,b){this.transparent=b,this.filterStack=[],this.offsetX=0,this.offsetY=0,this.setContext(a)},b.WebGLFilterManager.prototype.setContext=function(a){this.gl=a,this.texturePool=[],this.initShaderBuffers()},b.WebGLFilterManager.prototype.begin=function(a,b){this.renderSession=a,this.defaultShader=a.shaderManager.defaultShader;var c=this.renderSession.projection;this.width=2*c.x,this.height=2*-c.y,this.buffer=b},b.WebGLFilterManager.prototype.pushFilter=function(a){var c=this.gl,d=this.renderSession.projection,e=this.renderSession.offset;a._filterArea=a.target.filterArea||a.target.getBounds(),this.filterStack.push(a);var f=a.filterPasses[0];this.offsetX+=a._filterArea.x,this.offsetY+=a._filterArea.y;var g=this.texturePool.pop();g?g.resize(this.width,this.height):g=new b.FilterTexture(this.gl,this.width,this.height),c.bindTexture(c.TEXTURE_2D,g.texture);var h=a._filterArea,i=f.padding;h.x-=i,h.y-=i,h.width+=2*i,h.height+=2*i,h.x<0&&(h.x=0),h.width>this.width&&(h.width=this.width),h.y<0&&(h.y=0),h.height>this.height&&(h.height=this.height),c.bindFramebuffer(c.FRAMEBUFFER,g.frameBuffer),c.viewport(0,0,h.width,h.height),d.x=h.width/2,d.y=-h.height/2,e.x=-h.x,e.y=-h.y,c.uniform2f(this.defaultShader.projectionVector,h.width/2,-h.height/2),c.uniform2f(this.defaultShader.offsetVector,-h.x,-h.y),c.colorMask(!0,!0,!0,!0),c.clearColor(0,0,0,0),c.clear(c.COLOR_BUFFER_BIT),a._glFilterTexture=g},b.WebGLFilterManager.prototype.popFilter=function(){var a=this.gl,c=this.filterStack.pop(),d=c._filterArea,e=c._glFilterTexture,f=this.renderSession.projection,g=this.renderSession.offset;if(c.filterPasses.length>1){a.viewport(0,0,d.width,d.height),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),this.vertexArray[0]=0,this.vertexArray[1]=d.height,this.vertexArray[2]=d.width,this.vertexArray[3]=d.height,this.vertexArray[4]=0,this.vertexArray[5]=0,this.vertexArray[6]=d.width,this.vertexArray[7]=0,a.bufferSubData(a.ARRAY_BUFFER,0,this.vertexArray),a.bindBuffer(a.ARRAY_BUFFER,this.uvBuffer),this.uvArray[2]=d.width/this.width,this.uvArray[5]=d.height/this.height,this.uvArray[6]=d.width/this.width,this.uvArray[7]=d.height/this.height,a.bufferSubData(a.ARRAY_BUFFER,0,this.uvArray); +var h=e,i=this.texturePool.pop();i||(i=new b.FilterTexture(this.gl,this.width,this.height)),i.resize(this.width,this.height),a.bindFramebuffer(a.FRAMEBUFFER,i.frameBuffer),a.clear(a.COLOR_BUFFER_BIT),a.disable(a.BLEND);for(var j=0;j0&&(b.Texture.frameUpdates.length=0)},b.CanvasRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b},b.CanvasRenderer.prototype.renderDisplayObject=function(a,b){this.renderSession.context=b||this.context,a._renderCanvas(this.renderSession)},b.CanvasRenderer.prototype.renderStripFlat=function(a){var b=this.context,c=a.verticies,d=c.length/2;this.count++,b.beginPath();for(var e=1;d-2>e;e++){var f=2*e,g=c[f],h=c[f+2],i=c[f+4],j=c[f+1],k=c[f+3],l=c[f+5];b.moveTo(g,j),b.lineTo(h,k),b.lineTo(i,l)}b.fillStyle="#FF0000",b.fill(),b.closePath()},b.CanvasRenderer.prototype.renderStrip=function(a){var b=this.context,c=a.verticies,d=a.uvs,e=c.length/2;this.count++;for(var f=1;e-2>f;f++){var g=2*f,h=c[g],i=c[g+2],j=c[g+4],k=c[g+1],l=c[g+3],m=c[g+5],n=d[g]*a.texture.width,o=d[g+2]*a.texture.width,p=d[g+4]*a.texture.width,q=d[g+1]*a.texture.height,r=d[g+3]*a.texture.height,s=d[g+5]*a.texture.height;b.save(),b.beginPath(),b.moveTo(h,k),b.lineTo(i,l),b.lineTo(j,m),b.closePath(),b.clip();var t=n*r+q*p+o*s-r*p-q*o-n*s,u=h*r+q*j+i*s-r*j-q*i-h*s,v=n*i+h*p+o*j-i*p-h*o-n*j,w=n*r*j+q*i*p+h*o*s-h*r*p-q*o*j-n*i*s,x=k*r+q*m+l*s-r*m-q*l-k*s,y=n*l+k*p+o*m-l*p-k*o-n*m,z=n*r*m+q*l*p+k*o*s-k*r*p-q*o*m-n*l*s;b.transform(u/t,x/t,v/t,y/t,w/t,z/t),b.drawImage(a.texture.baseTexture.source,0,0),b.restore()}},b.CanvasBuffer=function(a,b){this.width=a,this.height=b,this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=a,this.canvas.height=b},b.CanvasBuffer.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},b.CanvasBuffer.prototype.resize=function(a,b){this.width=this.canvas.width=a,this.height=this.canvas.height=b},b.CanvasGraphics=function(){},b.CanvasGraphics.renderGraphics=function(a,c){for(var d=a.worldAlpha,e="",f=0;f1&&(d=1,window.console.log("Pixi.js warning: masks in canvas can only mask using the first path in the graphics object"));for(var e=0;1>e;e++){var f=a.graphicsData[e],g=f.points;if(f.type===b.Graphics.POLY){c.beginPath(),c.moveTo(g[0],g[1]);for(var h=1;hd;d++)this.children[d]._renderWebGL(a);a.spriteBatch.stop()}this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),a.drawCount++,a.spriteBatch.start()}},b.Graphics.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha&&this.isMask!==!0){var c=a.context,d=this.worldTransform;this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,c.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),c.setTransform(d.a,d.c,d.b,d.d,d.tx,d.ty),b.CanvasGraphics.renderGraphics(this,c);for(var e=0,f=this.children.length;f>e;e++)this.children[e]._renderCanvas(a)}},b.Graphics.prototype.getBounds=function(a){this.bounds||this.updateBounds();var b=this.bounds.x,c=this.bounds.width+this.bounds.x,d=this.bounds.y,e=this.bounds.height+this.bounds.y,f=a||this.worldTransform,g=f.a,h=f.c,i=f.b,j=f.d,k=f.tx,l=f.ty,m=g*c+i*e+k,n=j*e+h*c+l,o=g*b+i*e+k,p=j*e+h*b+l,q=g*b+i*d+k,r=j*d+h*b+l,s=g*c+i*d+k,t=j*d+h*c+l,u=m,v=n,w=m,x=n;w=w>o?o:w,w=w>q?q:w,w=w>s?s:w,x=x>p?p:x,x=x>r?r:x,x=x>t?t:x,u=o>u?o:u,u=q>u?q:u,u=s>u?s:u,v=p>v?p:v,v=r>v?r:v,v=t>v?t:v;var y=this._bounds;return y.x=w,y.width=u-w,y.y=x,y.height=v-x,y},b.Graphics.prototype.updateBounds=function(){for(var a,c,d,e,f,g=1/0,h=-1/0,i=1/0,j=-1/0,k=0;kc?c:g,h=c+e>h?c+e:h,i=i>d?c:i,j=d+f>j?d+f:j;else if(m===b.Graphics.CIRC||m===b.Graphics.ELIP)c=a[0],d=a[1],e=a[2]+n/2,f=a[3]+n/2,g=g>c-e?c-e:g,h=c+e>h?c+e:h,i=i>d-f?d-f:i,j=d+f>j?d+f:j;else for(var o=0;oc-n?c-n:g,h=c+n>h?c+n:h,i=i>d-n?d-n:i,j=d+n>j?d+n:j}var p=this.boundsPadding;this.bounds=new b.Rectangle(g-p,i-p,h-g+2*p,j-i+2*p)},b.Graphics.prototype._generateCachedSprite=function(){var a=this.getLocalBounds();if(this._cachedSprite)this._cachedSprite.buffer.resize(a.width,a.height);else{var c=new b.CanvasBuffer(a.width,a.height),d=b.Texture.fromCanvas(c.canvas);this._cachedSprite=new b.Sprite(d),this._cachedSprite.buffer=c,this._cachedSprite.worldTransform=this.worldTransform}this._cachedSprite.anchor.x=-(a.x/a.width),this._cachedSprite.anchor.y=-(a.y/a.height),this._cachedSprite.buffer.context.translate(-a.x,-a.y),b.CanvasGraphics.renderGraphics(this,this._cachedSprite.buffer.context),this._cachedSprite.alpha=this.alpha},b.Graphics.prototype.destroyCachedSprite=function(){this._cachedSprite.texture.destroy(!0),this._cachedSprite=null},b.Graphics.POLY=0,b.Graphics.RECT=1,b.Graphics.CIRC=2,b.Graphics.ELIP=3,b.TilingSprite=function(a,c,d){b.Sprite.call(this,a),this.width=c||100,this.height=d||100,this.tileScale=new b.Point(1,1),this.tileScaleOffset=new b.Point(1,1),this.tilePosition=new b.Point(0,0),this.renderable=!0,this.tint=16777215,this.blendMode=b.blendModes.NORMAL},b.TilingSprite.prototype=Object.create(b.Sprite.prototype),b.TilingSprite.prototype.constructor=b.TilingSprite,Object.defineProperty(b.TilingSprite.prototype,"width",{get:function(){return this._width},set:function(a){this._width=a}}),Object.defineProperty(b.TilingSprite.prototype,"height",{get:function(){return this._height},set:function(a){this._height=a}}),b.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},b.TilingSprite.prototype.setTexture=function(a){this.texture!==a&&(this.texture=a,this.refreshTexture=!0,this.cachedTint=16777215)},b.TilingSprite.prototype._renderWebGL=function(a){if(this.visible!==!1&&0!==this.alpha){var c,d;for(this.mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a),a.spriteBatch.start()),this.filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),!this.tilingTexture||this.refreshTexture?(this.generateTilingTexture(!0),this.tilingTexture&&this.tilingTexture.needsUpdate&&(b.updateWebGLTexture(this.tilingTexture.baseTexture,a.gl),this.tilingTexture.needsUpdate=!1)):a.spriteBatch.renderTilingSprite(this),c=0,d=this.children.length;d>c;c++)this.children[c]._renderWebGL(a);a.spriteBatch.stop(),this.filters&&a.filterManager.popFilter(),this.mask&&a.maskManager.popMask(a),a.spriteBatch.start()}},b.TilingSprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){var c=a.context;this._mask&&a.maskManager.pushMask(this._mask,c),c.globalAlpha=this.worldAlpha;var d=this.worldTransform;if(c.setTransform(d.a,d.c,d.b,d.d,d.tx,d.ty),!this.__tilePattern||this.refreshTexture){if(this.generateTilingTexture(!1),!this.tilingTexture)return;this.__tilePattern=c.createPattern(this.tilingTexture.baseTexture.source,"repeat")}this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,c.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),c.beginPath();var e=this.tilePosition,f=this.tileScale;e.x%=this.tilingTexture.baseTexture.width,e.y%=this.tilingTexture.baseTexture.height,c.scale(f.x,f.y),c.translate(e.x,e.y),c.fillStyle=this.__tilePattern,c.fillRect(-e.x+this.anchor.x*-this._width,-e.y+this.anchor.y*-this._height,this._width/f.x,this._height/f.y),c.scale(1/f.x,1/f.y),c.translate(-e.x,-e.y),c.closePath(),this._mask&&a.maskManager.popMask(a.context)}},b.TilingSprite.prototype.getBounds=function(){var a=this._width,b=this._height,c=a*(1-this.anchor.x),d=a*-this.anchor.x,e=b*(1-this.anchor.y),f=b*-this.anchor.y,g=this.worldTransform,h=g.a,i=g.c,j=g.b,k=g.d,l=g.tx,m=g.ty,n=h*d+j*f+l,o=k*f+i*d+m,p=h*c+j*f+l,q=k*f+i*c+m,r=h*c+j*e+l,s=k*e+i*c+m,t=h*d+j*e+l,u=k*e+i*d+m,v=-1/0,w=-1/0,x=1/0,y=1/0;x=x>n?n:x,x=x>p?p:x,x=x>r?r:x,x=x>t?t:x,y=y>o?o:y,y=y>q?q:y,y=y>s?s:y,y=y>u?u:y,v=n>v?n:v,v=p>v?p:v,v=r>v?r:v,v=t>v?t:v,w=o>w?o:w,w=q>w?q:w,w=s>w?s:w,w=u>w?u:w;var z=this._bounds;return z.x=x,z.width=v-x,z.y=y,z.height=w-y,this._currentBounds=z,z},b.TilingSprite.prototype.generateTilingTexture=function(a){var c=this.texture;if(c.baseTexture.hasLoaded){var d,e,f=c.baseTexture,g=c.frame,h=g.width!==f.width||g.height!==f.height,i=!1;if(a?(d=b.getNextPowerOfTwo(g.width),e=b.getNextPowerOfTwo(g.height),g.width!==d&&g.height!==e&&(i=!0)):h&&(d=g.width,e=g.height,i=!0),i){var j;this.tilingTexture&&this.tilingTexture.isTiling?(j=this.tilingTexture.canvasBuffer,j.resize(d,e),this.tilingTexture.baseTexture.width=d,this.tilingTexture.baseTexture.height=e,this.tilingTexture.needsUpdate=!0):(j=new b.CanvasBuffer(d,e),this.tilingTexture=b.Texture.fromCanvas(j.canvas),this.tilingTexture.canvasBuffer=j,this.tilingTexture.isTiling=!0),j.context.drawImage(c.baseTexture.source,g.x,g.y,g.width,g.height,0,0,d,e),this.tileScaleOffset.x=g.width/d,this.tileScaleOffset.y=g.height/e}else this.tilingTexture&&this.tilingTexture.isTiling&&this.tilingTexture.destroy(!0),this.tileScaleOffset.x=1,this.tileScaleOffset.y=1,this.tilingTexture=c;this.refreshTexture=!1,this.tilingTexture.baseTexture._powerOf2=!0}},b.BaseTextureCache={},b.texturesToUpdate=[],b.texturesToDestroy=[],b.BaseTextureCacheIdGenerator=0,b.BaseTexture=function(a,c){if(b.EventTarget.call(this),this.width=100,this.height=100,this.scaleMode=c||b.scaleModes.DEFAULT,this.hasLoaded=!1,this.source=a,this.id=b.BaseTextureCacheIdGenerator++,this._glTextures=[],a){if((this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,b.texturesToUpdate.push(this);else{var d=this;this.source.onload=function(){d.hasLoaded=!0,d.width=d.source.width,d.height=d.source.height,b.texturesToUpdate.push(d),d.dispatchEvent({type:"loaded",content:d})}}this.imageUrl=null,this._powerOf2=!1}},b.BaseTexture.prototype.constructor=b.BaseTexture,b.BaseTexture.prototype.destroy=function(){this.imageUrl&&(delete b.BaseTextureCache[this.imageUrl],this.imageUrl=null,this.source.src=null),this.source=null,b.texturesToDestroy.push(this)},b.BaseTexture.prototype.updateSourceImage=function(a){this.hasLoaded=!1,this.source.src=null,this.source.src=a},b.BaseTexture.fromImage=function(a,c,d){var e=b.BaseTextureCache[a];if(void 0===c&&-1===a.indexOf("data:")&&(c=!0),!e){var f=new Image;c&&(f.crossOrigin=""),f.src=a,e=new b.BaseTexture(f,d),e.imageUrl=a,b.BaseTextureCache[a]=e}return e},b.BaseTexture.fromCanvas=function(a,c){a._pixiId||(a._pixiId="canvas_"+b.TextureCacheIdGenerator++);var d=b.BaseTextureCache[a._pixiId];return d||(d=new b.BaseTexture(a,c),b.BaseTextureCache[a._pixiId]=d),d},b.TextureCache={},b.FrameCache={},b.TextureCacheIdGenerator=0,b.Texture=function(a,c){if(b.EventTarget.call(this),c||(this.noFrame=!0,c=new b.Rectangle(0,0,1,1)),a instanceof b.Texture&&(a=a.baseTexture),this.baseTexture=a,this.frame=c,this.trim=null,this.scope=this,this._uvs=null,a.hasLoaded)this.noFrame&&(c=new b.Rectangle(0,0,a.width,a.height)),this.setFrame(c);else{var d=this;a.addEventListener("loaded",function(){d.onBaseTextureLoaded()})}},b.Texture.prototype.constructor=b.Texture,b.Texture.prototype.onBaseTextureLoaded=function(){var a=this.baseTexture;a.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new b.Rectangle(0,0,a.width,a.height)),this.setFrame(this.frame),this.scope.dispatchEvent({type:"update",content:this})},b.Texture.prototype.destroy=function(a){a&&this.baseTexture.destroy()},b.Texture.prototype.setFrame=function(a){if(this.frame=a,this.width=a.width,this.height=a.height,a.x+a.width>this.baseTexture.width||a.y+a.height>this.baseTexture.height)throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,b.Texture.frameUpdates.push(this)},b.Texture.prototype._updateWebGLuvs=function(){this._uvs||(this._uvs=new b.TextureUvs);var a=this.frame,c=this.baseTexture.width,d=this.baseTexture.height;this._uvs.x0=a.x/c,this._uvs.y0=a.y/d,this._uvs.x1=(a.x+a.width)/c,this._uvs.y1=a.y/d,this._uvs.x2=(a.x+a.width)/c,this._uvs.y2=(a.y+a.height)/d,this._uvs.x3=a.x/c,this._uvs.y3=(a.y+a.height)/d},b.Texture.fromImage=function(a,c,d){var e=b.TextureCache[a];return e||(e=new b.Texture(b.BaseTexture.fromImage(a,c,d)),b.TextureCache[a]=e),e},b.Texture.fromFrame=function(a){var c=b.TextureCache[a];if(!c)throw new Error('The frameId "'+a+'" does not exist in the texture cache ');return c},b.Texture.fromCanvas=function(a,c){var d=b.BaseTexture.fromCanvas(a,c);return new b.Texture(d)},b.Texture.addTextureToCache=function(a,c){b.TextureCache[c]=a},b.Texture.removeTextureFromCache=function(a){var c=b.TextureCache[a];return delete b.TextureCache[a],delete b.BaseTextureCache[a],c},b.Texture.frameUpdates=[],b.TextureUvs=function(){this.x0=0,this.y0=0,this.x1=0,this.y1=0,this.x2=0,this.y2=0,this.x3=0,this.y4=0},b.RenderTexture=function(a,c,d,e){if(b.EventTarget.call(this),this.width=a||100,this.height=c||100,this.frame=new b.Rectangle(0,0,this.width,this.height),this.baseTexture=new b.BaseTexture,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.baseTexture._glTextures=[],this.baseTexture.scaleMode=e||b.scaleModes.DEFAULT,this.baseTexture.hasLoaded=!0,this.renderer=d||b.defaultRenderer,this.renderer.type===b.WEBGL_RENDERER){var f=this.renderer.gl;this.textureBuffer=new b.FilterTexture(f,this.width,this.height,this.baseTexture.scaleMode),this.baseTexture._glTextures[f.id]=this.textureBuffer.texture,this.render=this.renderWebGL,this.projection=new b.Point(this.width/2,-this.height/2)}else this.render=this.renderCanvas,this.textureBuffer=new b.CanvasBuffer(this.width,this.height),this.baseTexture.source=this.textureBuffer.canvas;b.Texture.frameUpdates.push(this)},b.RenderTexture.prototype=Object.create(b.Texture.prototype),b.RenderTexture.prototype.constructor=b.RenderTexture,b.RenderTexture.prototype.resize=function(a,c){if(this.width=a,this.height=c,this.frame.width=this.width,this.frame.height=this.height,this.renderer.type===b.WEBGL_RENDERER){this.projection.x=this.width/2,this.projection.y=-this.height/2;var d=this.renderer.gl;d.bindTexture(d.TEXTURE_2D,this.baseTexture._glTextures[d.id]),d.texImage2D(d.TEXTURE_2D,0,d.RGBA,this.width,this.height,0,d.RGBA,d.UNSIGNED_BYTE,null)}else this.textureBuffer.resize(this.width,this.height);b.Texture.frameUpdates.push(this)},b.RenderTexture.prototype.renderWebGL=function(a,c,d){var e=this.renderer.gl; +e.colorMask(!0,!0,!0,!0),e.viewport(0,0,this.width,this.height),e.bindFramebuffer(e.FRAMEBUFFER,this.textureBuffer.frameBuffer),d&&this.textureBuffer.clear();var f=a.children,g=a.worldTransform;a.worldTransform=b.RenderTexture.tempMatrix,a.worldTransform.d=-1,a.worldTransform.ty=-2*this.projection.y,c&&(a.worldTransform.tx=c.x,a.worldTransform.ty-=c.y);for(var h=0,i=f.length;i>h;h++)f[h].updateTransform();b.WebGLRenderer.updateTextures(),this.renderer.renderDisplayObject(a,this.projection,this.textureBuffer.frameBuffer),a.worldTransform=g},b.RenderTexture.prototype.renderCanvas=function(a,c,d){var e=a.children,f=a.worldTransform;a.worldTransform=b.RenderTexture.tempMatrix,c&&(a.worldTransform.tx=c.x,a.worldTransform.ty=c.y);for(var g=0,h=e.length;h>g;g++)e[g].updateTransform();d&&this.textureBuffer.clear();var i=this.textureBuffer.context;this.renderer.renderDisplayObject(a,i),i.setTransform(1,0,0,1,0,0),a.worldTransform=f},b.RenderTexture.tempMatrix=new b.Matrix,"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=b),exports.PIXI=b):"undefined"!=typeof define&&define.amd?define("PIXI",function(){return a.PIXI=b}()):a.PIXI=b}).call(this); \ No newline at end of file diff --git a/build/phaser.js b/build/phaser.js index 9675d640b2..f7a73a038a 100644 --- a/build/phaser.js +++ b/build/phaser.js @@ -7,7 +7,7 @@ * * Phaser - http://phaser.io * -* v2.0.4 "Mos Shirare" - Built: Thu Apr 17 2014 14:58:26 +* v2.0.4 "Mos Shirare" - Built: Tue Apr 29 2014 15:39:24 * * By Richard Davey http://www.photonstorm.com @photonstorm * @@ -314,8 +314,8 @@ PIXI.Polygon.prototype.constructor = PIXI.Polygon; * * @class Circle * @constructor - * @param x {Number} The X coordinate of the upper-left corner of the framing rectangle of this circle - * @param y {Number} The Y coordinate of the upper-left corner of the framing rectangle of this circle + * @param x {Number} The X coordinate of the center of this circle + * @param y {Number} The Y coordinate of the center of this circle * @param radius {Number} The radius of the circle */ PIXI.Circle = function(x, y, radius) @@ -570,7 +570,8 @@ PIXI.identityMatrix = new PIXI.Matrix(); */ /** - * The base class for all objects that are rendered on the screen. + * The base class for all objects that are rendered on the screen. + * This is an abstract class and should not be used on its own rather it should be extended. * * @class DisplayObject * @constructor @@ -1065,7 +1066,7 @@ PIXI.DisplayObject.prototype.generateTexture = function(renderer) var bounds = this.getLocalBounds(); var renderTexture = new PIXI.RenderTexture(bounds.width | 0, bounds.height | 0, renderer); - renderTexture.render(this); + renderTexture.render(this, new PIXI.Point(-bounds.x, -bounds.y) ); return renderTexture; }; @@ -1109,7 +1110,11 @@ PIXI.DisplayObject.prototype._generateCachedSprite = function()//renderSession) this._filters = null; this._cachedSprite.filters = tempFilters; - this._cachedSprite.texture.render(this); + this._cachedSprite.texture.render(this, new PIXI.Point(-bounds.x, -bounds.y) ); + + this._cachedSprite.anchor.x = -( bounds.x / bounds.width ); + this._cachedSprite.anchor.y = -( bounds.y / bounds.height ); + this._filters = tempFilters; @@ -2281,6 +2286,53 @@ PIXI.SpriteBatch.prototype._renderCanvas = function(renderSession) }; +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * This is the base class for creating a pixi.js filter. Currently only webGL supports filters. + * If you want to make a custom filter this should be your base class. + * @class AbstractFilter + * @constructor + * @param fragmentSrc + * @param uniforms + */ +PIXI.AbstractFilter = function(fragmentSrc, uniforms) +{ + /** + * An array of passes - some filters contain a few steps this array simply stores the steps in a liniear fashion. + * For example the blur filter has two passes blurX and blurY. + * @property passes + * @type Array an array of filter objects + * @private + */ + this.passes = [this]; + + /** + * @property shaders + * @type Array an array of shaders + * @private + */ + this.shaders = []; + + this.dirty = true; + this.padding = 0; + + /** + * @property uniforms + * @type object + * @private + */ + this.uniforms = uniforms || {}; + /** + * @property fragmentSrc + * @type Array + * @private + */ + this.fragmentSrc = fragmentSrc || []; +}; + /** * @author Mat Groves http://matgroves.com/ @Doormat23 */ @@ -2432,7 +2484,7 @@ PIXI.Text.prototype.updateText = function() var width = maxLineWidth + this.style.strokeThickness; if(this.style.dropShadow)width += this.style.dropShadowDistance; - this.canvas.width = width; + this.canvas.width = width + this.context.lineWidth; //calculate text height var lineHeight = this.determineFontHeight('font: ' + this.style.font + ';') + this.style.strokeThickness; @@ -2625,7 +2677,7 @@ PIXI.Text.prototype.wordWrap = function(text) { var wordWidth = this.context.measureText(words[j]).width; var wordWidthWithSpace = wordWidth + this.context.measureText(' ').width; - if(wordWidthWithSpace > spaceLeft) + if(j === 0 || wordWidthWithSpace > spaceLeft) { // Skip printing the newline if it's the first word of the line that is // greater than the word wrap width. @@ -2633,13 +2685,13 @@ PIXI.Text.prototype.wordWrap = function(text) { result += '\n'; } - result += words[j] + ' '; + result += words[j]; spaceLeft = this.style.wordWrapWidth - wordWidth; } else { spaceLeft -= wordWidthWithSpace; - result += words[j] + ' '; + result += ' ' + words[j]; } } @@ -5368,7 +5420,7 @@ PIXI.WebGLMaskManager.prototype.pushMask = function(maskData, renderSession) this.maskStack.push(maskData); - gl.colorMask(false, false, false, true); + gl.colorMask(false, false, false, false); gl.stencilOp(gl.KEEP,gl.KEEP,gl.INCR); PIXI.WebGLGraphics.renderGraphics(maskData, renderSession); @@ -6514,11 +6566,11 @@ PIXI.WebGLFilterManager.prototype.pushFilter = function(filterBlock) var filterArea = filterBlock._filterArea;// filterBlock.target.getBounds();///filterBlock.target.filterArea; - var padidng = filter.padding; - filterArea.x -= padidng; - filterArea.y -= padidng; - filterArea.width += padidng * 2; - filterArea.height += padidng * 2; + var padding = filter.padding; + filterArea.x -= padding; + filterArea.y -= padding; + filterArea.width += padding * 2; + filterArea.height += padding * 2; // cap filter to screen size.. if(filterArea.x < 0)filterArea.x = 0; @@ -6890,9 +6942,10 @@ PIXI.WebGLFilterManager.prototype.destroy = function() * @param gl {WebGLContext} the current WebGL drawing context * @param width {Number} the horizontal range of the filter * @param height {Number} the vertical range of the filter +* @param scaleMode {Number} Should be one of the PIXI.scaleMode consts * @private */ -PIXI.FilterTexture = function(gl, width, height) +PIXI.FilterTexture = function(gl, width, height, scaleMode) { /** * @property gl @@ -6904,9 +6957,11 @@ PIXI.FilterTexture = function(gl, width, height) this.frameBuffer = gl.createFramebuffer(); this.texture = gl.createTexture(); + scaleMode = scaleMode || PIXI.scaleModes.DEFAULT; + gl.bindTexture(gl.TEXTURE_2D, this.texture); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR : gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR : gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer ); @@ -6914,6 +6969,11 @@ PIXI.FilterTexture = function(gl, width, height) gl.bindFramebuffer(gl.FRAMEBUFFER, this.frameBuffer ); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.texture, 0); + // required for masking a mask?? + this.renderBuffer = gl.createRenderbuffer(); + gl.bindRenderbuffer(gl.RENDERBUFFER, this.renderBuffer); + gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, this.renderBuffer); + this.resize(width, height); }; @@ -6949,6 +7009,9 @@ PIXI.FilterTexture.prototype.resize = function(width, height) gl.bindTexture(gl.TEXTURE_2D, this.texture); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + // update the stencil buffer width and height + gl.bindRenderbuffer(gl.RENDERBUFFER, this.renderBuffer); + gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height); }; /** @@ -7992,7 +8055,7 @@ PIXI.Graphics = function() /** * the bounds' padding used for bounds calculation * - * @property bounds + * @property boundsPadding * @type Number */ this.boundsPadding = 10; @@ -8373,28 +8436,24 @@ PIXI.Graphics.prototype.getBounds = function( matrix ) var x4 = a * w1 + c * h0 + tx; var y4 = d * h0 + b * w1 + ty; - var maxX = -Infinity; - var maxY = -Infinity; + var maxX = x1; + var maxY = y1; - var minX = Infinity; - var minY = Infinity; + var minX = x1; + var minY = y1; - minX = x1 < minX ? x1 : minX; minX = x2 < minX ? x2 : minX; minX = x3 < minX ? x3 : minX; minX = x4 < minX ? x4 : minX; - minY = y1 < minY ? y1 : minY; minY = y2 < minY ? y2 : minY; minY = y3 < minY ? y3 : minY; minY = y4 < minY ? y4 : minY; - maxX = x1 > maxX ? x1 : maxX; maxX = x2 > maxX ? x2 : maxX; maxX = x3 > maxX ? x3 : maxX; maxX = x4 > maxX ? x4 : maxX; - maxY = y1 > maxY ? y1 : maxY; maxY = y2 > maxY ? y2 : maxY; maxY = y3 > maxY ? y3 : maxY; maxY = y4 > maxY ? y4 : maxY; @@ -9084,7 +9143,7 @@ PIXI.BaseTexture = function(source, scaleMode) if(!source)return; - if(this.source.complete || this.source.getContext) + if((this.source.complete || this.source.getContext) && this.source.width && this.source.height) { this.hasLoaded = true; this.width = this.source.width; @@ -9162,7 +9221,7 @@ PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin, scaleMode) { var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(crossorigin === undefined)crossorigin = true; + if(crossorigin === undefined && imageUrl.indexOf('data:') === -1) crossorigin = true; if(!baseTexture) { @@ -9491,8 +9550,9 @@ PIXI.TextureUvs = function() * @constructor * @param width {Number} The width of the render texture * @param height {Number} The height of the render texture + * @param scaleMode {Number} Should be one of the PIXI.scaleMode consts */ -PIXI.RenderTexture = function(width, height, renderer) +PIXI.RenderTexture = function(width, height, renderer, scaleMode) { PIXI.EventTarget.call( this ); @@ -9530,6 +9590,8 @@ PIXI.RenderTexture = function(width, height, renderer) this.baseTexture.height = this.height; this.baseTexture._glTextures = []; + this.baseTexture.scaleMode = scaleMode || PIXI.scaleModes.DEFAULT; + this.baseTexture.hasLoaded = true; // each render texture can only belong to one renderer at the moment if its webGL @@ -9539,7 +9601,7 @@ PIXI.RenderTexture = function(width, height, renderer) { var gl = this.renderer.gl; - this.textureBuffer = new PIXI.FilterTexture(gl, this.width, this.height); + this.textureBuffer = new PIXI.FilterTexture(gl, this.width, this.height, this.baseTexture.scaleMode); this.baseTexture._glTextures[gl.id] = this.textureBuffer.texture; this.render = this.renderWebGL; @@ -9702,7 +9764,7 @@ PIXI.RenderTexture.tempMatrix = new PIXI.Matrix(); * * Phaser - http://phaser.io * -* v2.0.4 "Mos Shirare" - Built: Thu Apr 17 2014 14:58:26 +* v2.0.4 "Mos Shirare" - Built: Tue Apr 29 2014 15:39:24 * * By Richard Davey http://www.photonstorm.com @photonstorm * @@ -9745,8 +9807,7 @@ PIXI.RenderTexture.tempMatrix = new PIXI.Matrix(); */ var Phaser = Phaser || { - VERSION: '<%= version %>', - DEV_VERSION: '2.0.4', + VERSION: '2.0.4', GAMES: [], AUTO: 0, @@ -10136,6 +10197,61 @@ if (!Array.prototype.forEach) } }; } + +/** +* Low-budget Float32Array knock-off, suitable for use with P2.js in IE9 +* Source: http://www.html5gamedevs.com/topic/5988-phaser-12-ie9/ +* Cameron Foale (http://www.kibibu.com) +*/ +if (typeof window.Uint32Array !== "function") +{ + var CheapArray = function(type) + { + var proto = new Array(); // jshint ignore:line + + window[type] = function(arg) { + + if (typeof(arg) === "number") + { + Array.call(this, arg); + this.length = arg; + + for (var i = 0; i < this.length; i++) + { + this[i] = 0; + } + } + else + { + Array.call(this, arg.length); + + this.length = arg.length; + + for (var i = 0; i < this.length; i++) + { + this[i] = arg[i]; + } + } + }; + + window[type].prototype = proto; + window[type].constructor = window[type]; + }; + + CheapArray('Uint32Array'); // jshint ignore:line + CheapArray('Int16Array'); // jshint ignore:line +} + +/** + * Also fix for the absent console in IE9 + */ +if (!window.console) +{ + window.console = {}; + window.console.log = window.console.assert = function(){}; + window.console.warn = window.console.assert = function(){}; +} + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -10261,7 +10377,7 @@ Phaser.Circle.prototype = { if (round) { - return Phaser.Math.distanceRound(this.x, this.y, dest.x, dest.y); + return Phaser.Math.distanceRounded(this.x, this.y, dest.x, dest.y); } else { @@ -10680,12 +10796,21 @@ PIXI.Circle = Phaser.Circle; */ /** -* Creates a new Point. If you pass no parameters a Point is created set to (0,0). * @class Phaser.Point -* @classdesc The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. +* @classdesc +* The Point object represents a location in a two-dimensional coordinate system, +* where x represents the horizontal axis and y represents the vertical axis. +* The following code creates a point at (0,0): +* `var myPoint = new Phaser.Point();` +* You can also use them as 2D Vectors and you'll find different vector related methods in this class. +*/ + +/** +* Creates a new Point object. If you pass no parameters a Point is created set to (0, 0). +* * @constructor -* @param {number} x The horizontal position of this Point (default 0) -* @param {number} y The vertical position of this Point (default 0) +* @param {number} [x=0] - The horizontal position of this Point. +* @param {number} [y=0] - The vertical position of this Point. */ Phaser.Point = function (x, y) { @@ -10693,12 +10818,12 @@ Phaser.Point = function (x, y) { y = y || 0; /** - * @property {number} x - The x coordinate of the point. + * @property {number} x - The x value of the point. */ this.x = x; /** - * @property {number} y - The y coordinate of the point. + * @property {number} y - The y value of the point. */ this.y = y; @@ -10708,29 +10833,38 @@ Phaser.Point.prototype = { /** * Copies the x and y properties from any given object to this Point. + * * @method Phaser.Point#copyFrom * @param {any} source - The object to copy from. - * @return {Point} This Point object. + * @return {Phaser.Point} This Point object. */ copyFrom: function (source) { + return this.setTo(source.x, source.y); + }, /** * Inverts the x and y values of this Point + * * @method Phaser.Point#invert - * @return {Point} This Point object. + * @return {Phaser.Point} This Point object. */ invert: function () { + return this.setTo(this.y, this.x); + }, /** - * Sets the x and y values of this Point object to the given coordinates. + * Sets the `x` and `y` values of this Point object to the given values. + * If you omit the `y` value then the `x` value will be applied to both, for example: + * `Point.setTo(2)` is the same as `Point.setTo(2, 2)` + * * @method Phaser.Point#setTo - * @param {number} x - The horizontal position of this point. - * @param {number} y - The vertical position of this point. - * @return {Point} This Point object. Useful for chaining method calls. + * @param {number} x - The horizontal value of this point. + * @param {number} [y] - The vertical value of this point. If not given the x value will be used in its place. + * @return {Phaser.Point} This Point object. Useful for chaining method calls. */ setTo: function (x, y) { @@ -10742,11 +10876,14 @@ Phaser.Point.prototype = { }, /** - * Sets the x and y values of this Point object to the given coordinates. + * Sets the `x` and `y` values of this Point object to the given values. + * If you omit the `y` value then the `x` value will be applied to both, for example: + * `Point.setTo(2)` is the same as `Point.setTo(2, 2)` + * * @method Phaser.Point#set - * @param {number} x - The horizontal position of this point. - * @param {number} y - The vertical position of this point. - * @return {Point} This Point object. Useful for chaining method calls. + * @param {number} x - The horizontal value of this point. + * @param {number} [y] - The vertical value of this point. If not given the x value will be used in its place. + * @return {Phaser.Point} This Point object. Useful for chaining method calls. */ set: function (x, y) { @@ -10759,6 +10896,7 @@ Phaser.Point.prototype = { /** * Adds the given x and y values to this Point. + * * @method Phaser.Point#add * @param {number} x - The value to add to Point.x. * @param {number} y - The value to add to Point.y. @@ -10774,6 +10912,7 @@ Phaser.Point.prototype = { /** * Subtracts the given x and y values from this Point. + * * @method Phaser.Point#subtract * @param {number} x - The value to subtract from Point.x. * @param {number} y - The value to subtract from Point.y. @@ -10788,7 +10927,8 @@ Phaser.Point.prototype = { }, /** - * Multiplies Point.x and Point.y by the given x and y values. + * Multiplies Point.x and Point.y by the given x and y values. Sometimes known as `Scale`. + * * @method Phaser.Point#multiply * @param {number} x - The value to multiply Point.x by. * @param {number} y - The value to multiply Point.x by. @@ -10804,6 +10944,7 @@ Phaser.Point.prototype = { /** * Divides Point.x and Point.y by the given x and y values. + * * @method Phaser.Point#divide * @param {number} x - The value to divide Point.x by. * @param {number} y - The value to divide Point.x by. @@ -10819,6 +10960,7 @@ Phaser.Point.prototype = { /** * Clamps the x value of this Point to be between the given min and max. + * * @method Phaser.Point#clampX * @param {number} min - The minimum value to clamp this Point to. * @param {number} max - The maximum value to clamp this Point to. @@ -10833,6 +10975,7 @@ Phaser.Point.prototype = { /** * Clamps the y value of this Point to be between the given min and max + * * @method Phaser.Point#clampY * @param {number} min - The minimum value to clamp this Point to. * @param {number} max - The maximum value to clamp this Point to. @@ -10847,6 +10990,7 @@ Phaser.Point.prototype = { /** * Clamps this Point object values to be between the given min and max. + * * @method Phaser.Point#clamp * @param {number} min - The minimum value to clamp this Point to. * @param {number} max - The maximum value to clamp this Point to. @@ -10862,6 +11006,7 @@ Phaser.Point.prototype = { /** * Creates a copy of the given Point. + * * @method Phaser.Point#clone * @param {Phaser.Point} [output] Optional Point object. If given the values will be set into this object, otherwise a brand new Point object will be created and returned. * @return {Phaser.Point} The new Point object. @@ -10883,11 +11028,12 @@ Phaser.Point.prototype = { /** * Copies the x and y properties from this Point to any given object. + * * @method Phaser.Point#copyTo * @param {any} dest - The object to copy to. * @return {Object} The dest object. */ - copyTo: function(dest) { + copyTo: function (dest) { dest.x = this.x; dest.y = this.y; @@ -10898,66 +11044,121 @@ Phaser.Point.prototype = { /** * Returns the distance of this Point object to the given object (can be a Circle, Point or anything with x/y properties) + * * @method Phaser.Point#distance * @param {object} dest - The target object. Must have visible x and y properties that represent the center of the object. * @param {boolean} [round] - Round the distance to the nearest integer (default false). * @return {number} The distance between this Point object and the destination Point object. */ distance: function (dest, round) { + return Phaser.Point.distance(this, dest, round); + }, /** * Determines whether the given objects x/y values are equal to this Point object. + * * @method Phaser.Point#equals - * @param {Phaser.Point} a - The first object to compare. - * @return {boolean} A value of true if the Points are equal, otherwise false. + * @param {Phaser.Point|any} a - The object to compare with this Point. + * @return {boolean} A value of true if the x and y points are equal, otherwise false. */ equals: function (a) { - return (a.x == this.x && a.y == this.y); + + return (a.x === this.x && a.y === this.y); + + }, + + /** + * Returns the angle between this Point object and another object with public x and y properties. + * + * @method Phaser.Point#angle + * @param {Phaser.Point|any} a - The object to get the angle from this Point to. + * @return {number} The angle between the two objects. + */ + angle: function (a) { + + return Math.atan2(this.x * a.y - this.y * a.x, this.x * a.x + this.y * a.y); + + }, + + /** + * Returns the angle squared between this Point object and another object with public x and y properties. + * + * @method Phaser.Point#angleSq + * @param {Phaser.Point|any} a - The object to get the angleSq from this Point to. + * @return {number} The angleSq between the two objects. + */ + angleSq: function (a) { + + return this.subtract(a).angle(a.subtract(this)); + }, /** * Rotates this Point around the x/y coordinates given to the desired angle. + * * @method Phaser.Point#rotate - * @param {number} x - The x coordinate of the anchor point - * @param {number} y - The y coordinate of the anchor point + * @param {number} x - The x coordinate of the anchor point. + * @param {number} y - The y coordinate of the anchor point. * @param {number} angle - The angle in radians (unless asDegrees is true) to rotate the Point to. * @param {boolean} asDegrees - Is the given rotation in radians (false) or degrees (true)? * @param {number} [distance] - An optional distance constraint between the Point and the anchor. * @return {Phaser.Point} The modified point object. */ rotate: function (x, y, angle, asDegrees, distance) { + return Phaser.Point.rotate(this, x, y, angle, asDegrees, distance); + }, /** - * Calculates the length of the vector + * Calculates the length of the Point object. + * * @method Phaser.Point#getMagnitude - * @return {number} the length of the vector + * @return {number} The length of the Point. */ - getMagnitude: function() { + getMagnitude: function () { + return Math.sqrt((this.x * this.x) + (this.y * this.y)); + }, /** - * Alters the length of the vector without changing the direction + * Calculates the length squared of the Point object. + * + * @method Phaser.Point#getMagnitudeSq + * @return {number} The length ^ 2 of the Point. + */ + getMagnitudeSq: function () { + + return (this.x * this.x) + (this.y * this.y); + + }, + + /** + * Alters the length of the Point without changing the direction. + * * @method Phaser.Point#setMagnitude - * @param {number} magnitude the desired magnitude of the resulting vector - * @return {Phaser.Point} the modified original vector + * @param {number} magnitude - The desired magnitude of the resulting Point. + * @return {Phaser.Point} This Point object. */ - setMagnitude: function(magnitude) { + setMagnitude: function (magnitude) { + return this.normalize().multiply(magnitude, magnitude); + }, /** - * Alters the vector so that its length is 1, but it retains the same direction + * Alters the Point object so that its length is 1, but it retains the same direction. + * * @method Phaser.Point#normalize - * @return {Phaser.Point} the modified original vector + * @return {Phaser.Point} This Point object. */ - normalize: function() { + normalize: function () { - if(!this.isZero()) { + if (!this.isZero()) + { var m = this.getMagnitude(); this.x /= m; this.y /= m; @@ -10968,21 +11169,89 @@ Phaser.Point.prototype = { }, /** - * Determine if this point is at 0,0 + * Determine if this point is at 0,0. + * * @method Phaser.Point#isZero - * @return {boolean} True if this Point is 0,0, otherwise false + * @return {boolean} True if this Point is 0,0, otherwise false. */ - isZero: function() { + isZero: function () { + return (this.x === 0 && this.y === 0); + + }, + + /** + * The dot product of this and another Point object. + * + * @method Phaser.Point#dot + * @param {Phaser.Point} a - The Point object to get the dot product combined with this Point. + * @return {number} The result. + */ + dot: function (a) { + + return ((this.x * a.x) + (this.y * a.y)); + + }, + + /** + * The cross product of this and another Point object. + * + * @method Phaser.Point#cross + * @param {Phaser.Point} a - The Point object to get the cross product combined with this Point. + * @return {number} The result. + */ + cross: function (a) { + + return ((this.x * a.y) - (this.y * a.x)); + + }, + + /** + * Make this Point perpendicular (90 degrees rotation) + * + * @method Phaser.Point#perp + * @return {Phaser.Point} This Point object. + */ + perp: function () { + + return this.setTo(-this.y, this.x); + + }, + + /** + * Make this Point perpendicular (-90 degrees rotation) + * + * @method Phaser.Point#rperp + * @return {Phaser.Point} This Point object. + */ + rperp: function () { + + return this.setTo(this.y, -this.x); + + }, + + /** + * Right-hand normalize (make unit length) this Point. + * + * @method Phaser.Point#normalRightHand + * @return {Phaser.Point} This Point object. + */ + normalRightHand: function () { + + return this.setTo(this.y * -1, this.x); + }, /** * Returns a string representation of this object. + * * @method Phaser.Point#toString * @return {string} A string representation of the instance. */ toString: function () { + return '[{Point (x=' + this.x + ' y=' + this.y + ')}]'; + } }; @@ -10991,6 +11260,7 @@ Phaser.Point.prototype.constructor = Phaser.Point; /** * Adds the coordinates of two points together to create a new point. +* * @method Phaser.Point.add * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. @@ -11010,6 +11280,7 @@ Phaser.Point.add = function (a, b, out) { /** * Subtracts the coordinates of two points to create a new point. +* * @method Phaser.Point.subtract * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. @@ -11029,6 +11300,7 @@ Phaser.Point.subtract = function (a, b, out) { /** * Multiplies the coordinates of two points to create a new point. +* * @method Phaser.Point.multiply * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. @@ -11048,6 +11320,7 @@ Phaser.Point.multiply = function (a, b, out) { /** * Divides the coordinates of two points to create a new point. +* * @method Phaser.Point.divide * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. @@ -11067,17 +11340,133 @@ Phaser.Point.divide = function (a, b, out) { /** * Determines whether the two given Point objects are equal. They are considered equal if they have the same x and y values. +* * @method Phaser.Point.equals * @param {Phaser.Point} a - The first Point object. * @param {Phaser.Point} b - The second Point object. * @return {boolean} A value of true if the Points are equal, otherwise false. */ Phaser.Point.equals = function (a, b) { - return (a.x == b.x && a.y == b.y); + + return (a.x === b.x && a.y === b.y); + +}; + +/** +* Returns the angle between two Point objects. +* +* @method Phaser.Point.angle +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @return {number} The angle between the two Points. +*/ +Phaser.Point.angle = function (a, b) { + + return Math.atan2(a.x * b.y - a.y * b.x, a.x * b.x + a.y * b.y); + +}; + +/** +* Returns the angle squared between two Point objects. +* +* @method Phaser.Point.angleSq +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @return {number} The angle squared between the two Points. +*/ +Phaser.Point.angleSq = function (a, b) { + + return a.subtract(b).angle(b.subtract(a)); + +}; + +/** +* Creates a negative Point. +* +* @method Phaser.Point.negative +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.negative = function (a, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(-a.x, -a.y); + +}; + +/** +* Adds two 2D Points together and multiplies the result by the given scalar. +* +* @method Phaser.Point.multiplyAdd +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @param {number} s - The scaling value. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.multiplyAdd = function (a, b, s, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(a.x + b.x * s, a.y + b.y * s); + +}; + +/** +* Interpolates the two given Points, based on the `f` value (between 0 and 1) and returns a new Point. +* +* @method Phaser.Point.interpolate +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @param {number} f - The level of interpolation between the two points. Indicates where the new point will be, along the line between pt1 and pt2. If f=1, pt1 is returned; if f=0, pt2 is returned. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.interpolate = function (a, b, f, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(a.x + (b.x - a.x) * f, a.y + (b.y - a.y) * f); + +}; + +/** +* Return a perpendicular vector (90 degrees rotation) +* +* @method Phaser.Point.perp +* @param {Phaser.Point} a - The Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.perp = function (a, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(-a.y, a.x); + +}; + +/** +* Return a perpendicular vector (-90 degrees rotation) +* +* @method Phaser.Point.rperp +* @param {Phaser.Point} a - The Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.rperp = function (a, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(a.y, -a.x); + }; /** * Returns the distance of this Point object to the given object (can be a Circle, Point or anything with x/y properties). +* * @method Phaser.Point.distance * @param {object} a - The target object. Must have visible x and y properties that represent the center of the object. * @param {object} b - The target object. Must have visible x and y properties that represent the center of the object. @@ -11090,7 +11479,7 @@ Phaser.Point.distance = function (a, b, round) { if (round) { - return Phaser.Math.distanceRound(a.x, a.y, b.x, b.y); + return Phaser.Math.distanceRounded(a.x, a.y, b.x, b.y); } else { @@ -11099,15 +11488,103 @@ Phaser.Point.distance = function (a, b, round) { }; +/** +* Project two Points onto another Point. +* +* @method Phaser.Point.project +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.project = function (a, b, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + var amt = a.dot(b) / b.getMagnitudeSq(); + + if (amt !== 0) + { + out.setTo(amt * b.x, amt * b.y); + } + + return out; + +}; + +/** +* Project two Points onto a Point of unit length. +* +* @method Phaser.Point.projectUnit +* @param {Phaser.Point} a - The first Point object. +* @param {Phaser.Point} b - The second Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.projectUnit = function (a, b, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + var amt = a.dot(b); + + if (amt !== 0) + { + out.setTo(amt * b.x, amt * b.y); + } + + return out; + +}; + +/** +* Right-hand normalize (make unit length) a Point. +* +* @method Phaser.Point.normalRightHand +* @param {Phaser.Point} a - The Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.normalRightHand = function (a, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + return out.setTo(a.y * -1, a.x); + +}; + +/** +* Normalize (make unit length) a Point. +* +* @method Phaser.Point.normalize +* @param {Phaser.Point} a - The Point object. +* @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. +* @return {Phaser.Point} The new Point object. +*/ +Phaser.Point.normalize = function (a, out) { + + if (typeof out === "undefined") { out = new Phaser.Point(); } + + var m = a.getMagnitude(); + + if (m !== 0) + { + out.setTo(a.x / m, a.y / m); + } + + return out; + +}; + /** * Rotates a Point around the x/y coordinates given to the desired angle. +* * @method Phaser.Point.rotate * @param {Phaser.Point} a - The Point object to rotate. * @param {number} x - The x coordinate of the anchor point * @param {number} y - The y coordinate of the anchor point * @param {number} angle - The angle in radians (unless asDegrees is true) to rotate the Point to. -* @param {boolean} asDegrees - Is the given rotation in radians (false) or degrees (true)? -* @param {number} distance - An optional distance constraint between the Point and the anchor. +* @param {boolean} [asDegrees=false] - Is the given rotation in radians (false) or degrees (true)? +* @param {number} [distance] - An optional distance constraint between the Point and the anchor. * @return {Phaser.Point} The modified point object. */ Phaser.Point.rotate = function (a, x, y, angle, asDegrees, distance) { @@ -11132,6 +11609,7 @@ Phaser.Point.rotate = function (a, x, y, angle, asDegrees, distance) { /** * Calculates centroid (or midpoint) from an array of points. If only one point is provided, that point is returned. +* * @method Phaser.Point.centroid * @param {Phaser.Point[]} points - The array of one or more points. * @param {Phaser.Point} [out] - Optional Point to store the value in, if not supplied a new Point object will be created. @@ -12769,7 +13247,7 @@ Phaser.Polygon.prototype = { if (intersect) { - inside = true; + inside = !inside; } } @@ -12953,6 +13431,17 @@ Phaser.Camera.prototype = { }, + /** + * Sets the Camera follow target to null, stopping it from following an object if it's doing so. + * + * @method Phaser.Camera#unfollow + */ + unfollow: function () { + + this.target = null; + + }, + /** * Move the camera focus on a display object instantly. * @method Phaser.Camera#focusOn @@ -13237,87 +13726,87 @@ Object.defineProperty(Phaser.Camera.prototype, "height", { Phaser.State = function () { /** - * @property {Phaser.Game} game - A reference to the currently running Game. + * @property {Phaser.Game} game - This is a reference to the currently running Game. */ this.game = null; /** - * @property {Phaser.GameObjectFactory} add - Reference to the GameObjectFactory. + * @property {Phaser.GameObjectFactory} add - A reference to the GameObjectFactory which can be used to add new objects to the World. */ this.add = null; /** - * @property {Phaser.GameObjectCreator} make - Reference to the GameObjectCreator. + * @property {Phaser.GameObjectCreator} make - A reference to the GameObjectCreator which can be used to make new objects. */ this.make = null; /** - * @property {Phaser.Camera} camera - A handy reference to world.camera. + * @property {Phaser.Camera} camera - A handy reference to World.camera. */ this.camera = null; /** - * @property {Phaser.Cache} cache - Reference to the assets cache. + * @property {Phaser.Cache} cache - A reference to the game cache which contains any loaded or generated assets, such as images, sound and more. */ this.cache = null; /** - * @property {Phaser.Input} input - Reference to the input manager + * @property {Phaser.Input} input - A reference to the Input Manager. */ this.input = null; /** - * @property {Phaser.Loader} load - Reference to the assets loader. + * @property {Phaser.Loader} load - A reference to the Loader, which you mostly use in the preload method of your state to load external assets. */ this.load = null; /** - * @property {Phaser.Math} math - Reference to the math helper. + * @property {Phaser.Math} math - A reference to Math class with lots of helpful functions. */ this.math = null; /** - * @property {Phaser.SoundManager} sound - Reference to the sound manager. + * @property {Phaser.SoundManager} sound - A reference to the Sound Manager which can create, play and stop sounds, as well as adjust global volume. */ this.sound = null; /** - * @property {Phaser.ScaleManager} scale - Reference to the game scale manager. + * @property {Phaser.ScaleManager} scale - A reference to the Scale Manager which controls the way the game scales on different displays. */ this.scale = null; /** - * @property {Phaser.Stage} stage - Reference to the stage. + * @property {Phaser.Stage} stage - A reference to the Stage. */ this.stage = null; /** - * @property {Phaser.Time} time - Reference to the core game clock. + * @property {Phaser.Time} time - A reference to the game clock and timed events system. */ this.time = null; /** - * @property {Phaser.TweenManager} tweens - Reference to the tween manager. + * @property {Phaser.TweenManager} tweens - A reference to the tween manager. */ this.tweens = null; /** - * @property {Phaser.World} world - Reference to the world. + * @property {Phaser.World} world - A reference to the game world. All objects live in the Game World and its size is not bound by the display resolution. */ this.world = null; /** - * @property {Phaser.Particles} particles - The Particle Manager for the game. It is called during the game update loop and in turn updates any Emitters attached to it. + * @property {Phaser.Particles} particles - The Particle Manager. It is called during the core gameloop and updates any Particle Emitters it has created. */ this.particles = null; /** - * @property {Phaser.Physics} physics - Reference to the physics manager. + * @property {Phaser.Physics} physics - A reference to the physics manager which looks after the different physics systems available within Phaser. */ this.physics = null; /** - * @property {Phaser.RandomDataGenerator} rnd - Reference to the random data generator. + * @property {Phaser.RandomDataGenerator} rnd - A reference to the seeded and repeatable random data generator. */ this.rnd = null; @@ -13326,8 +13815,9 @@ Phaser.State = function () { Phaser.State.prototype = { /** - * Override this method to add some load operations. - * If you need to use the loader, you may need to use them here. + * preload is called first. Normally you'd use this to load your game assets (or those needed for the current State) + * You shouldn't create any objects in this method that require assets that you're also loading in this method, as + * they won't yet be available. * * @method Phaser.State#preload */ @@ -13335,7 +13825,7 @@ Phaser.State.prototype = { }, /** - * Put update logic here. + * loadUpdate is called during the Loader process. This only happens if you've set one or more assets to load in the preload method. * * @method Phaser.State#loadUpdate */ @@ -13343,7 +13833,8 @@ Phaser.State.prototype = { }, /** - * Put render operations here. + * loadRender is called during the Loader process. This only happens if you've set one or more assets to load in the preload method. + * The difference between loadRender and render is that any objects you render in this method you must be sure their assets exist. * * @method Phaser.State#loadRender */ @@ -13351,8 +13842,8 @@ Phaser.State.prototype = { }, /** - * This method is called after the game engine successfully switches states. - * Feel free to add any setup code here (do not load anything here, override preload() instead). + * create is called once preload has completed, this includes the loading of any assets from the Loader. + * If you don't have a preload method then create is the first method called in your State. * * @method Phaser.State#create */ @@ -13360,7 +13851,9 @@ Phaser.State.prototype = { }, /** - * Put update logic here. + * The update method is left empty for your own use. + * It is called during the core game loop AFTER debug, physics, plugins and the Stage have had their preUpdate methods called. + * If is called BEFORE Stage, Tweens, Sounds, Input, Physics, Particles and Plugins have had their postUpdate methods called. * * @method Phaser.State#update */ @@ -13368,7 +13861,9 @@ Phaser.State.prototype = { }, /** - * Put render operations here. + * Nearly all display objects in Phaser render automatically, you don't need to tell them to render. + * However the render method is called AFTER the game renderer and plugins have rendered, so you're able to do any + * final post-processing style effects here. Note that this happens before plugins postRender takes place. * * @method Phaser.State#render */ @@ -13376,7 +13871,7 @@ Phaser.State.prototype = { }, /** - * This method will be called when game paused. + * This method will be called if the core game loop is paused. * * @method Phaser.State#paused */ @@ -13384,7 +13879,16 @@ Phaser.State.prototype = { }, /** - * This method will be called when the state is shut down (i.e. you switch to another state from this one). + * pauseUpdate is called while the game is paused instead of preUpdate, update and postUpdate. + * + * @method Phaser.State#pauseUpdate + */ + pauseUpdate: function () { + }, + + /** + * This method will be called when the State is shutdown (i.e. you switch to another state from this one). + * * @method Phaser.State#shutdown */ shutdown: function () { @@ -13503,15 +14007,20 @@ Phaser.StateManager = function (game, pendingState) { this.onLoadRenderCallback = null; /** - * @property {function} onPausedCallback - This will be called when the state is paused. + * @property {function} onPausedCallback - This will be called once each time the game is paused. */ this.onPausedCallback = null; /** - * @property {function} onResumedCallback - This will be called when the state is resumed from a paused state. + * @property {function} onResumedCallback - This will be called once each time the game is resumed from a paused state. */ this.onResumedCallback = null; + /** + * @property {function} onPauseUpdateCallback - This will be called every frame while the game is paused. + */ + this.onPauseUpdateCallback = null; + /** * @property {function} onShutDownCallback - This will be called when the state is shut down (i.e. swapped to another state). */ @@ -13617,7 +14126,7 @@ Phaser.StateManager.prototype = { this.onRenderCallback = null; this.onPausedCallback = null; this.onResumedCallback = null; - this.onDestroyCallback = null; + this.onPauseUpdateCallback = null; } delete this.states[key]; @@ -13789,6 +14298,7 @@ Phaser.StateManager.prototype = { /** * Links game properties to the State given by the key. + * * @method Phaser.StateManager#link * @param {string} key - State key. * @protected @@ -13818,6 +14328,7 @@ Phaser.StateManager.prototype = { /** * Sets the current State. Should not be called directly (use StateManager.start) + * * @method Phaser.StateManager#setCurrentState * @param {string} key - State key. * @private @@ -13840,6 +14351,7 @@ Phaser.StateManager.prototype = { this.onRenderCallback = this.states[key]['render'] || null; this.onPausedCallback = this.states[key]['paused'] || null; this.onResumedCallback = this.states[key]['resumed'] || null; + this.onPauseUpdateCallback = this.states[key]['pauseUpdate'] || null; // Used when the state is no longer the current active state this.onShutDownCallback = this.states[key]['shutdown'] || this.dummy; @@ -13928,6 +14440,26 @@ Phaser.StateManager.prototype = { }, + /** + * @method Phaser.StateManager#pauseUpdate + * @protected + */ + pauseUpdate: function () { + + if (this._created && this.onPauseUpdateCallback) + { + this.onPauseUpdateCallback.call(this.callbackContext, this.game); + } + else + { + if (this.onLoadUpdateCallback) + { + this.onLoadUpdateCallback.call(this.callbackContext, this.game); + } + } + + }, + /** * @method Phaser.StateManager#preRender * @protected @@ -13992,7 +14524,7 @@ Phaser.StateManager.prototype = { this.onRenderCallback = null; this.onPausedCallback = null; this.onResumedCallback = null; - this.onDestroyCallback = null; + this.onPauseUpdateCallback = null; this.game = null; this.states = {}; @@ -14043,7 +14575,7 @@ Phaser.LinkedList = function () { this.last = null; /** - * @property {object} game - Number of elements in the list. + * @property {number} total - Number of elements in the list. * @default */ this.total = 0; @@ -14062,7 +14594,7 @@ Phaser.LinkedList.prototype = { add: function (child) { // If the list is empty - if (this.total === 0 && this.first == null && this.last == null) + if (this.total === 0 && this.first === null && this.last === null) { this.first = child; this.last = child; @@ -14072,7 +14604,7 @@ Phaser.LinkedList.prototype = { return child; } - // Get gets appended to the end of the list, regardless of anything, and it won't have any children of its own (non-nested list) + // Gets appended to the end of the list, regardless of anything, and it won't have any children of its own (non-nested list) this.last.next = child; child.prev = this.last; @@ -14085,6 +14617,21 @@ Phaser.LinkedList.prototype = { }, + /** + * Resets the first, last, next and previous node pointers in this list. + * + * @method Phaser.LinkedList#reset + */ + reset: function () { + + this.first = null; + this.last = null; + this.next = null; + this.prev = null; + this.total = 0; + + }, + /** * Removes the given element from this linked list if it exists. * @@ -14093,12 +14640,19 @@ Phaser.LinkedList.prototype = { */ remove: function (child) { - if (child == this.first) + if (this.total === 1) + { + this.reset(); + child.next = child.prev = null; + return; + } + + if (child === this.first) { // It was 'first', make 'first' point to first.next this.first = this.first.next; } - else if (child == this.last) + else if (child === this.last) { // It was 'last', make 'last' point to last.prev this.last = this.last.prev; @@ -14118,7 +14672,7 @@ Phaser.LinkedList.prototype = { child.next = child.prev = null; - if (this.first == null ) + if (this.first === null ) { this.last = null; } @@ -14167,6 +14721,196 @@ Phaser.LinkedList.prototype.constructor = Phaser.LinkedList; * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} */ +/** +* A set data structure. Allows items to add themselves to and remove themselves from the set. Items can only exist once in the set. +* +* @class Phaser.ArrayList +* @constructor +*/ +Phaser.ArrayList = function () { + + /** + * @property {number} total - Number of objects in the list. + * @default + */ + this.total = 0; + + /** + * @property {number} position - Current cursor position. + * @default + */ + this.position = 0; + + /** + * @property {array} list - The list. + */ + this.list = []; + +}; + +Phaser.ArrayList.prototype = { + + /** + * Adds a new element to this list. The item can only exist in the list once. + * + * @method Phaser.ArrayList#add + * @param {object} child - The element to add to this list. Can be a Phaser.Sprite or any other object you need to quickly iterate through. + * @return {object} The child that was added. + */ + add: function (child) { + + if (!this.exists(child)) + { + this.list.push(child); + this.total++; + } + + return child; + + }, + + /** + * Gets the index of the child in the list, or -1 if it isn't in the list. + * + * @method Phaser.ArrayList#getIndex + * @param {object} child - The element to get the list index for. + * @return {number} The index of the child or -1 if not found. + */ + getIndex: function (child) { + + return this.list.indexOf(child); + + }, + + /** + * Checks for the child within this list. + * + * @method Phaser.ArrayList#exists + * @param {object} child - The element to get the list index for. + * @return {boolean} True if the child is found in the list, otherwise false. + */ + exists: function (child) { + + return (this.list.indexOf(child) > -1); + + }, + + /** + * Resets the list length and drops all items in the list. + * + * @method Phaser.ArrayList#reset + */ + reset: function () { + + this.list.length = 0; + this.total = 0; + + }, + + /** + * Removes the given element from this list if it exists. + * + * @method Phaser.ArrayList#remove + * @param {object} child - The child to be removed from the list. + * @return {object} child - The child that was removed. + */ + remove: function (child) { + + var idx = this.list.indexOf(child); + + if (idx > -1) + { + this.list.splice(idx, 1); + this.total--; + return child; + } + + }, + + /** + * Calls a function on all members of this list, using the member as the context for the callback. + * The function must exist on the member. + * + * @method Phaser.ArrayList#callAll + * @param {function} callback - The function to call. + * @param {...*} parameter - Additional parameters that will be passed to the callback. + */ + callAll: function (callback) { + + var args = Array.prototype.splice.call(arguments, 1); + + var i = this.list.length; + + while (i--) + { + if (this.list[i] && this.list[i][callback]) + { + this.list[i][callback].apply(this.list[i], args); + } + } + + } + +}; + +/** +* Resets the cursor to the first item in the list and returns it. +* +* @name Phaser.ArrayList#first +* @property {object} first - The first item in the list. +*/ +Object.defineProperty(Phaser.ArrayList.prototype, "first", { + + get: function () { + + this.position = 0; + + if (this.total > 0) + { + return this.list[0]; + } + else + { + return null; + } + + } + +}); + +/** +* Gets the next item in the list and returns it, advancing the cursor. +* +* @name Phaser.ArrayList#next +* @property {object} next - Advanced the cursor and return. +*/ +Object.defineProperty(Phaser.ArrayList.prototype, "next", { + + get: function () { + + if (this.position < this.total) + { + this.position++; + + return this.list[this.position]; + } + else + { + return null; + } + + } + +}); + +Phaser.ArrayList.prototype.constructor = Phaser.ArrayList; + +/** +* @author Richard Davey +* @copyright 2014 Photon Storm Ltd. +* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} +*/ + /** * @class Phaser.Signal * @classdesc A Signal is used for object communication via a custom broadcaster instead of Events. @@ -15685,6 +16429,14 @@ Phaser.Group = function (game, parent, name, addToStage, enableBody, physicsBody */ this.exists = true; + /** + * The type of objects that will be created when you use Group.create or Group.createMultiple. Defaults to Phaser.Sprite. + * When a new object is created it is passed the following parameters to its constructor: game, x, y, key, frame. + * @property {object} classType + * @default + */ + this.classType = Phaser.Sprite; + /** * @property {Phaser.Group|Phaser.Sprite} parent - The parent of this Group. */ @@ -15882,7 +16634,7 @@ Phaser.Group.prototype.getAt = function (index) { /** * Automatically creates a new Phaser.Sprite object and adds it to the top of this Group. -* Useful if you don't need to create the Sprite instances before-hand. +* You can change Group.classType to any object and this call will create an object of that type instead, but it should extend either Sprite or Image. * * @method Phaser.Group#create * @param {number} x - The x coordinate to display the newly created Sprite at. The value is in relation to the Group.x point. @@ -15890,13 +16642,13 @@ Phaser.Group.prototype.getAt = function (index) { * @param {string} key - The Game.cache key of the image that this Sprite will use. * @param {number|string} [frame] - If the Sprite image contains multiple frames you can specify which one to use here. * @param {boolean} [exists=true] - The default exists state of the Sprite. -* @return {Phaser.Sprite} The child that was created. +* @return {Phaser.Sprite|object} The child that was created. Will be a Phaser.Sprite unless Group.classType has been changed. */ Phaser.Group.prototype.create = function (x, y, key, frame, exists) { if (typeof exists === 'undefined') { exists = true; } - var child = new Phaser.Sprite(this.game, x, y, key, frame); + var child = new this.classType(this.game, x, y, key, frame); if (this.enableBody) { @@ -15929,6 +16681,7 @@ Phaser.Group.prototype.create = function (x, y, key, frame, exists) { * Automatically creates multiple Phaser.Sprite objects and adds them to the top of this Group. * Useful if you need to quickly generate a pool of identical sprites, such as bullets. By default the sprites will be set to not exist * and will be positioned at 0, 0 (relative to the Group.x/y) +* You can change Group.classType to any object and this call will create an object of that type instead, but it should extend either Sprite or Image. * * @method Phaser.Group#createMultiple * @param {number} quantity - The number of Sprites to create. @@ -17041,7 +17794,7 @@ Phaser.Group.prototype.remove = function (child, destroy) { return false; } - if (child.events) + if (child.events && !child.destroyPhase) { child.events.onRemovedFromGroup.dispatch(child, this); } @@ -17731,7 +18484,7 @@ Phaser.ScaleManager = function (game, width, height) { this.scaleFactorInversed = new Phaser.Point(1, 1); /** - * @property {Phaser.Point} margin - If the game canvas is seto to align by adjusting the margin, the margin calculation values are stored in this Point. + * @property {Phaser.Point} margin - If the game canvas is set to align by adjusting the margin, the margin calculation values are stored in this Point. * @readonly */ this.margin = new Phaser.Point(0, 0); @@ -17939,7 +18692,7 @@ Phaser.ScaleManager.prototype = { if (typeof orientationImage !== 'undefined') { - if (orientationImage == null || this.game.cache.checkImageKey(orientationImage) === false) + if (orientationImage === null || this.game.cache.checkImageKey(orientationImage) === false) { orientationImage = '__default'; } @@ -18084,9 +18837,12 @@ Phaser.ScaleManager.prototype = { refresh: function () { // We can't do anything about the status bars in iPads, web apps or desktops - if (this.game.device.iPad === false && this.game.device.webApp === false && this.game.device.desktop === false) + if (!this.game.device.iPad && !this.game.device.webApp && !this.game.device.desktop) { - if (this.game.device.android && this.game.device.chrome === false) + // TODO - Test this + // this._startHeight = window.innerHeight; + + if (this.game.device.android && !this.game.device.chrome) { window.scrollTo(0, 1); } @@ -18096,7 +18852,7 @@ Phaser.ScaleManager.prototype = { } } - if (this._check == null && this.maxIterations > 0) + if (this._check === null && this.maxIterations > 0) { this._iterations = this.maxIterations; @@ -18117,14 +18873,14 @@ Phaser.ScaleManager.prototype = { */ setScreenSize: function (force) { - if (typeof force == 'undefined') + if (typeof force === 'undefined') { force = false; } - if (this.game.device.iPad === false && this.game.device.webApp === false && this.game.device.desktop === false) + if (!this.game.device.iPad && !this.game.device.webApp && !this.game.device.desktop) { - if (this.game.device.android && this.game.device.chrome === false) + if (this.game.device.android && !this.game.device.chrome) { window.scrollTo(0, 1); } @@ -18141,28 +18897,28 @@ Phaser.ScaleManager.prototype = { // Set minimum height of content to new window height document.documentElement['style'].minHeight = window.innerHeight + 'px'; - if (this.incorrectOrientation === true) + if (this.incorrectOrientation) { this.setMaximum(); } else if (!this.isFullScreen) { - if (this.scaleMode == Phaser.ScaleManager.EXACT_FIT) + if (this.scaleMode === Phaser.ScaleManager.EXACT_FIT) { this.setExactFit(); } - else if (this.scaleMode == Phaser.ScaleManager.SHOW_ALL) + else if (this.scaleMode === Phaser.ScaleManager.SHOW_ALL) { this.setShowAll(); } } else { - if (this.fullScreenScaleMode == Phaser.ScaleManager.EXACT_FIT) + if (this.fullScreenScaleMode === Phaser.ScaleManager.EXACT_FIT) { this.setExactFit(); } - else if (this.fullScreenScaleMode == Phaser.ScaleManager.SHOW_ALL) + else if (this.fullScreenScaleMode === Phaser.ScaleManager.SHOW_ALL) { this.setShowAll(); } @@ -18181,7 +18937,7 @@ Phaser.ScaleManager.prototype = { */ setSize: function () { - if (this.incorrectOrientation === false) + if (!this.incorrectOrientation) { if (this.maxWidth && this.width > this.maxWidth) { @@ -18211,7 +18967,7 @@ Phaser.ScaleManager.prototype = { if (this.pageAlignHorizontally) { - if (this.width < window.innerWidth && this.incorrectOrientation === false) + if (this.width < window.innerWidth && !this.incorrectOrientation) { this.margin.x = Math.round((window.innerWidth - this.width) / 2); this.game.canvas.style.marginLeft = this.margin.x + 'px'; @@ -18225,7 +18981,7 @@ Phaser.ScaleManager.prototype = { if (this.pageAlignVertically) { - if (this.height < window.innerHeight && this.incorrectOrientation === false) + if (this.height < window.innerHeight && !this.incorrectOrientation) { this.margin.y = Math.round((window.innerHeight - this.height) / 2); this.game.canvas.style.marginTop = this.margin.y + 'px'; @@ -18333,7 +19089,7 @@ Object.defineProperty(Phaser.ScaleManager.prototype, "isFullScreen", { Object.defineProperty(Phaser.ScaleManager.prototype, "isPortrait", { get: function () { - return this.orientation === 0 || this.orientation == 180; + return (this.orientation === 0 || this.orientation === 180); } }); @@ -18346,7 +19102,7 @@ Object.defineProperty(Phaser.ScaleManager.prototype, "isPortrait", { Object.defineProperty(Phaser.ScaleManager.prototype, "isLandscape", { get: function () { - return this.orientation === 90 || this.orientation === -90; + return (this.orientation === 90 || this.orientation === -90); } }); @@ -18798,6 +19554,7 @@ Phaser.Game.prototype = { this.plugins = new Phaser.PluginManager(this); this.net = new Phaser.Net(this); this.debug = new Phaser.Utils.Debug(this); + this.scratch = new Phaser.BitmapData(this, '__root', 1024, 1024); this.time.boot(); this.stage.boot(); @@ -18833,7 +19590,7 @@ Phaser.Game.prototype = { */ showDebugHeader: function () { - var v = Phaser.DEV_VERSION; + var v = Phaser.VERSION; var r = 'Canvas'; var a = 'HTML Audio'; var c = 1; @@ -18880,7 +19637,7 @@ Phaser.Game.prototype = { console.log.apply(console, args); } - else + else if (window['console']) { console.log('Phaser v' + v + ' - Renderer: ' + r + ' - Audio: ' + a + ' - http://phaser.io'); } @@ -18966,7 +19723,6 @@ Phaser.Game.prototype = { this.tweens.update(); this.sound.update(); this.input.update(); - // this.state.update(); this.physics.update(); this.particles.update(); this.plugins.update(); @@ -18976,6 +19732,8 @@ Phaser.Game.prototype = { } else { + this.state.pauseUpdate(); + // this.input.update(); this.debug.preUpdate(); } @@ -19148,7 +19906,7 @@ Object.defineProperty(Phaser.Game.prototype, "paused", { { this._paused = true; this._codePaused = true; - this.sound.mute = true; + this.sound.setMute(); this.time.gamePaused(); this.onPause.dispatch(this); } @@ -19160,7 +19918,7 @@ Object.defineProperty(Phaser.Game.prototype, "paused", { this._paused = false; this._codePaused = false; this.input.reset(); - this.sound.mute = false; + this.sound.unsetMute(); this.time.gameResumed(); this.onResume.dispatch(this); } @@ -19444,10 +20202,10 @@ Phaser.Input = function (game) { this.onHold = null; /** - * A linked list of interactive objects; the InputHandler components (belonging to Sprites) register themselves with this. - * @property {Phaser.LinkedList} interactiveItems + * A list of interactive objects. Te InputHandler components add and remove themselves from this. + * @property {Phaser.ArrayList} interactiveItems */ - this.interactiveItems = new Phaser.LinkedList(); + this.interactiveItems = new Phaser.ArrayList(); /** * @property {Phaser.Point} _localPoint - Internal cache var. @@ -19697,8 +20455,6 @@ Phaser.Input.prototype = { this.onUp = new Phaser.Signal(); this.onTap = new Phaser.Signal(); this.onHold = new Phaser.Signal(); - - this.interactiveItems.callAll('reset'); } this._pollCounter = 0; @@ -20346,7 +21102,10 @@ Phaser.Key.prototype.constructor = Phaser.Key; */ /** -* The Keyboard class handles looking after keyboard input for your game. It will recognise and respond to key presses and dispatch the required events. +* The Keyboard class handles looking after keyboard input for your game. +* It will recognise and respond to key presses and dispatch the required events. +* Please be aware that lots of keyboards are unable to process certain combinations of keys due to hardware +* limitations known as ghosting. Full details here: http://www.html5gamedevs.com/topic/4876-impossible-to-use-more-than-2-keyboard-input-buttons-at-the-same-time/ * * @class Phaser.Keyboard * @constructor @@ -21763,15 +22522,15 @@ Phaser.Pointer.prototype = { this._highestRenderObject = null; this._highestInputPriorityID = -1; - // Just run through the linked list + // Run through the list if (this.game.input.interactiveItems.total > 0) { - var currentNode = this.game.input.interactiveItems.next; + var currentNode = this.game.input.interactiveItems.first; do { // If the object is using pixelPerfect checks, or has a higher InputManager.PriorityID OR if the priority ID is the same as the current highest AND it has a higher renderOrderID, then set it to the top - if (currentNode.validForInput(this._highestInputPriorityID, this._highestRenderOrderID)) + if (currentNode && currentNode.validForInput(this._highestInputPriorityID, this._highestRenderOrderID)) { if ((!fromClick && currentNode.checkPointerOver(this)) || (fromClick && currentNode.checkPointerDown(this))) { @@ -21780,9 +22539,9 @@ Phaser.Pointer.prototype = { this._highestRenderObject = currentNode; } } - currentNode = currentNode.next; + currentNode = this.game.input.interactiveItems.next; } - while (currentNode != null); + while (currentNode !== null); } if (this._highestRenderObject === null) @@ -21901,28 +22660,10 @@ Phaser.Pointer.prototype = { this.game.input.currentPointers--; } - if (this.game.input.interactiveItems.total > 0) - { - var currentNode = this.game.input.interactiveItems.next; - - do - { - if (currentNode) - { - currentNode._releasedHandler(this); - } - - currentNode = currentNode.next; - } - while (currentNode != null); - } - - if (this.targetObject) - { - this.targetObject._releasedHandler(this); - } + this.game.input.interactiveItems.callAll('_releasedHandler', this); this.targetObject = null; + return this; }, @@ -23969,7 +24710,7 @@ Phaser.InputHandler.prototype = { start: function (priority, useHandCursor) { priority = priority || 0; - if (typeof useHandCursor == 'undefined') { useHandCursor = false; } + if (typeof useHandCursor === 'undefined') { useHandCursor = false; } // Turning on if (this.enabled === false) @@ -24110,7 +24851,7 @@ Phaser.InputHandler.prototype = { */ destroy: function () { - if (this.enabled) + if (this.sprite) { if (this._setHandCursor) { @@ -24526,10 +25267,13 @@ Phaser.InputHandler.prototype = { if (this.useHandCursor && this._pointerData[pointer.id].isDragged === false) { this.game.canvas.style.cursor = "pointer"; - this._setHandCursor = false; + this._setHandCursor = true; } - this.sprite.events.onInputOver.dispatch(this.sprite, pointer); + if (this.sprite && this.sprite.events) + { + this.sprite.events.onInputOver.dispatch(this.sprite, pointer); + } } }, @@ -24589,7 +25333,11 @@ Phaser.InputHandler.prototype = { this._pointerData[pointer.id].isDown = true; this._pointerData[pointer.id].isUp = false; this._pointerData[pointer.id].timeDown = this.game.time.now; - this.sprite.events.onInputDown.dispatch(this.sprite, pointer); + + if (this.sprite && this.sprite.events) + { + this.sprite.events.onInputDown.dispatch(this.sprite, pointer); + } // Start drag if (this.draggable && this.isDragged === false) @@ -24634,12 +25382,18 @@ Phaser.InputHandler.prototype = { if (this.checkPointerOver(pointer)) { // Release the inputUp signal and provide optional parameter if pointer is still over the sprite or not - this.sprite.events.onInputUp.dispatch(this.sprite, pointer, true); + if (this.sprite && this.sprite.events) + { + this.sprite.events.onInputUp.dispatch(this.sprite, pointer, true); + } } else { // Release the inputUp signal and provide optional parameter if pointer is still over the sprite or not - this.sprite.events.onInputUp.dispatch(this.sprite, pointer, false); + if (this.sprite && this.sprite.events) + { + this.sprite.events.onInputUp.dispatch(this.sprite, pointer, false); + } // Pointer outside the sprite? Reset the cursor if (this.useHandCursor) @@ -26064,20 +26818,39 @@ Phaser.BitmapData = function (game, key, width, height) { this.ctx = this.context; /** - * @property {array} imageData - The canvas image data. + * @property {ImageData} imageData - The context image data. */ this.imageData = this.context.getImageData(0, 0, width, height); /** - * @property {UInt8Clamped} pixels - A reference to the context imageData buffer. + * @property {Uint8ClampedArray} data - A Uint8ClampedArray view into BitmapData.buffer. + */ + this.data = this.imageData.data; + + /** + * @property {Uint32Array} pixels - An Uint32Array view into BitmapData.buffer. + */ + this.pixels = null; + + /** + * @property {ArrayBuffer} buffer - An ArrayBuffer the same size as the context ImageData. */ if (this.imageData.data.buffer) { - this.pixels = this.imageData.data.buffer; + this.buffer = this.imageData.data.buffer; + this.pixels = new Uint32Array(this.buffer); } else { - this.pixels = this.imageData.data; + if (window['ArrayBuffer']) + { + this.buffer = new ArrayBuffer(this.imageData.data.length); + this.pixels = new Uint32Array(this.buffer); + } + else + { + this.pixels = this.imageData.data; + } } /** @@ -26104,11 +26877,38 @@ Phaser.BitmapData = function (game, key, width, height) { */ this.type = Phaser.BITMAPDATA; + /** + * @property {boolean} disableTextureUpload - If disableTextureUpload is true this BitmapData will never send its image data to the GPU when its dirty flag is true. + */ + this.disableTextureUpload = false; + /** * @property {boolean} dirty - If dirty this BitmapData will be re-rendered. */ this.dirty = false; + // Aliases + this.cls = this.clear; + this.update = this.refreshBuffer; + + /** + * @property {number} _tempR - Internal cache var. + * @private + */ + this._tempR = 0; + + /** + * @property {number} _tempG - Internal cache var. + * @private + */ + this._tempG = 0; + + /** + * @property {number} _tempB - Internal cache var. + * @private + */ + this._tempB = 0; + }; Phaser.BitmapData.prototype = { @@ -26139,7 +26939,14 @@ Phaser.BitmapData.prototype = { }, /** - * Clears the BitmapData. + * Clears the BitmapData context using a clearRect. + * + * @method Phaser.BitmapData#cls + */ + + /** + * Clears the BitmapData context using a clearRect. + * * @method Phaser.BitmapData#clear */ clear: function () { @@ -26151,7 +26958,27 @@ Phaser.BitmapData.prototype = { }, /** - * Resizes the BitmapData. + * Fills the BitmapData with the given color. + * + * @method Phaser.BitmapData#fill + * @param {number} r - The red color value, between 0 and 0xFF (255). + * @param {number} g - The green color value, between 0 and 0xFF (255). + * @param {number} b - The blue color value, between 0 and 0xFF (255). + * @param {number} [a=1] - The alpha color value, between 0 and 1. + */ + fill: function (r, g, b, a) { + + if (typeof a === 'undefined') { a = 1; } + + this.context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + this.context.fillRect(0, 0, this.width, this.height); + this.dirty = true; + + }, + + /** + * Resizes the BitmapData. This changes the size of the underlying canvas and refreshes the buffer. + * * @method Phaser.BitmapData#resize */ resize: function (width, height) { @@ -26164,7 +26991,7 @@ Phaser.BitmapData.prototype = { this.canvas.height = height; this.textureFrame.width = width; this.textureFrame.height = height; - this.imageData = this.context.getImageData(0, 0, width, height); + this.refreshBuffer(); } this.dirty = true; @@ -26172,50 +26999,363 @@ Phaser.BitmapData.prototype = { }, /** + * This re-creates the BitmapData.imageData from the current context. + * It then re-builds the ArrayBuffer, the data Uint8ClampedArray reference and the pixels Int32Array. + * If not given the dimensions defaults to the full size of the context. + * + * @method Phaser.BitmapData#update + * @param {number} [x=0] - The x coordinate of the top-left of the image data area to grab from. + * @param {number} [y=0] - The y coordinate of the top-left of the image data area to grab from. + * @param {number} [width] - The width of the image data area. + * @param {number} [height] - The height of the image data area. + */ + + /** + * DEPRECATED: This method will be removed in Phaser 2.1. Please use BitmapData.update instead. + * + * This re-creates the BitmapData.imageData from the current context. + * It then re-builds the ArrayBuffer, the data Uint8ClampedArray reference and the pixels Int32Array. + * If not given the dimensions defaults to the full size of the context. + * * @method Phaser.BitmapData#refreshBuffer + * @param {number} [x=0] - The x coordinate of the top-left of the image data area to grab from. + * @param {number} [y=0] - The y coordinate of the top-left of the image data area to grab from. + * @param {number} [width] - The width of the image data area. + * @param {number} [height] - The height of the image data area. + */ + refreshBuffer: function (x, y, width, height) { + + if (typeof x === 'undefined') { x = 0; } + if (typeof y === 'undefined') { y = 0; } + if (typeof width === 'undefined') { width = this.width; } + if (typeof height === 'undefined') { height = this.height; } + + this.imageData = this.context.getImageData(x, y, width, height); + this.data = this.imageData.data; + + if (this.imageData.data.buffer) + { + this.buffer = this.imageData.data.buffer; + this.pixels = new Uint32Array(this.buffer); + } + else + { + if (window['ArrayBuffer']) + { + this.buffer = new ArrayBuffer(this.imageData.data.length); + this.pixels = new Uint32Array(this.buffer); + } + else + { + this.pixels = this.imageData.data; + } + } + + }, + + /** + * Scans through the area specified in this BitmapData and sends a color object for every pixel to the given callback. + * The callback will be sent a color object with 6 properties: `{ r: number, g: number, b: number, a: number, color: number, rgba: string }`. + * Where r, g, b and a are integers between 0 and 255 representing the color component values for red, green, blue and alpha. + * The `color` property is an Int32 of the full color. Note the endianess of this will change per system. + * The `rgba` property is a CSS style rgba() string which can be used with context.fillStyle calls, among others. + * The callback will also be sent the pixels x and y coordinates respectively. + * The callback must return either `false`, in which case no change will be made to the pixel, or a new color object. + * If a new color object is returned the pixel will be set to the r, g, b and a color values given within it. + * + * @method Phaser.BitmapData#processPixelRGB + * @param {function} callback - The callback that will be sent each pixel color object to be processed. + * @param {object} callbackContext - The context under which the callback will be called. + * @param {number} [x=0] - The x coordinate of the top-left of the region to process from. + * @param {number} [y=0] - The y coordinate of the top-left of the region to process from. + * @param {number} [width] - The width of the region to process. + * @param {number} [height] - The height of the region to process. + */ + processPixelRGB: function (callback, callbackContext, x, y, width, height) { + + if (typeof x === 'undefined') { x = 0; } + if (typeof y === 'undefined') { y = 0; } + if (typeof width === 'undefined') { width = this.width; } + if (typeof height === 'undefined') { height = this.height; } + + var w = x + width; + var h = y + height; + var pixel = Phaser.Color.createColor(); + var result = { r: 0, g: 0, b: 0, a: 0 }; + var dirty = false; + + for (var ty = y; ty < h; ty++) + { + for (var tx = x; tx < w; tx++) + { + Phaser.Color.unpackPixel(this.getPixel32(tx, ty), pixel); + + result = callback.call(callbackContext, pixel, tx, ty); + + if (result !== false && result !== null) + { + this.setPixel32(tx, ty, result.r, result.g, result.b, result.a, false); + dirty = true; + } + } + } + + if (dirty) + { + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; + } + + }, + + /** + * Scans through the area specified in this BitmapData and sends the color for every pixel to the given callback along with its x and y coordinates. + * Whatever value the callback returns is set as the new color for that pixel, unless it returns the same color, in which case it's skipped. + * Note that the format of the color received will be different depending on if the system is big or little endian. + * It is expected that your callback will deal with endianess. If you'd rather Phaser did it then use processPixelRGB instead. + * The callback will also be sent the pixels x and y coordinates respectively. + * + * @method Phaser.BitmapData#processPixel + * @param {function} callback - The callback that will be sent each pixel color to be processed. + * @param {object} callbackContext - The context under which the callback will be called. + * @param {number} [x=0] - The x coordinate of the top-left of the region to process from. + * @param {number} [y=0] - The y coordinate of the top-left of the region to process from. + * @param {number} [width] - The width of the region to process. + * @param {number} [height] - The height of the region to process. */ - refreshBuffer: function () { + processPixel: function (callback, callbackContext, x, y, width, height) { + + if (typeof x === 'undefined') { x = 0; } + if (typeof y === 'undefined') { y = 0; } + if (typeof width === 'undefined') { width = this.width; } + if (typeof height === 'undefined') { height = this.height; } - this.imageData = this.context.getImageData(0, 0, this.width, this.height); - this.pixels = new Int32Array(this.imageData.data.buffer); + var w = x + width; + var h = y + height; + var pixel = 0; + var result = 0; + var dirty = false; - // this.data8 = new Uint8ClampedArray(this.imageData.buffer); - // this.data32 = new Uint32Array(this.imageData.buffer); + for (var ty = y; ty < h; ty++) + { + for (var tx = x; tx < w; tx++) + { + pixel = this.getPixel32(tx, ty); + result = callback.call(callbackContext, pixel, tx, ty); + + if (result !== pixel) + { + this.pixels[ty * this.width + tx] = result; + dirty = true; + } + } + } + + if (dirty) + { + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; + } + + }, + + /** + * Replaces all pixels matching one color with another. The color values are given as two sets of RGBA values. + * An optional region parameter controls if the replacement happens in just a specific area of the BitmapData or the entire thing. + * + * @method Phaser.BitmapData#replaceRGB + * @param {number} r1 - The red color value to be replaced. Between 0 and 255. + * @param {number} g1 - The green color value to be replaced. Between 0 and 255. + * @param {number} b1 - The blue color value to be replaced. Between 0 and 255. + * @param {number} a1 - The alpha color value to be replaced. Between 0 and 255. + * @param {number} r2 - The red color value that is the replacement color. Between 0 and 255. + * @param {number} g2 - The green color value that is the replacement color. Between 0 and 255. + * @param {number} b2 - The blue color value that is the replacement color. Between 0 and 255. + * @param {number} a2 - The alpha color value that is the replacement color. Between 0 and 255. + * @param {Phaser.Rectangle} [region] - The area to perform the search over. If not given it will replace over the whole BitmapData. + */ + replaceRGB: function (r1, g1, b1, a1, r2, g2, b2, a2, region) { + + var sx = 0; + var sy = 0; + var w = this.width; + var h = this.height; + var source = Phaser.Color.packPixel(r1, g1, b1, a1); + + if (region !== undefined && region instanceof Phaser.Rectangle) + { + sx = region.x; + sy = region.y; + w = region.width; + h = region.height; + } + + for (var y = 0; y < h; y++) + { + for (var x = 0; x < w; x++) + { + if (this.getPixel32(sx + x, sy + y) === source) + { + this.setPixel32(sx + x, sy + y, r2, g2, b2, a2, false); + } + } + } + + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; + + }, + + /** + * Sets the hue, saturation and lightness values on every pixel in the given region, or the whole BitmapData if no region was specified. + * + * @method Phaser.BitmapData#setHSL + * @param {number} [h=null] - The hue, in the range 0 - 1. + * @param {number} [s=null] - The saturation, in the range 0 - 1. + * @param {number} [l=null] - The lightness, in the range 0 - 1. + * @param {Phaser.Rectangle} [region] - The area to perform the operation on. If not given it will run over the whole BitmapData. + */ + setHSL: function (h, s, l, region) { + + if (typeof h === 'undefined' || h === null) { h = false; } + if (typeof s === 'undefined' || s === null) { s = false; } + if (typeof l === 'undefined' || l === null) { l = false; } + + if (!h && !s && !l) + { + return; + } + + if (typeof region === 'undefined') + { + region = new Phaser.Rectangle(0, 0, this.width, this.height); + } + + var pixel = Phaser.Color.createColor(); + + for (var y = region.y; y < region.bottom; y++) + { + for (var x = region.x; x < region.right; x++) + { + Phaser.Color.unpackPixel(this.getPixel32(x, y), pixel, true); + + if (h) + { + pixel.h = h; + } + + if (s) + { + pixel.s = s; + } + + if (l) + { + pixel.l = l; + } + + Phaser.Color.HSLtoRGB(pixel.h, pixel.s, pixel.l, pixel); + this.setPixel32(x, y, pixel.r, pixel.g, pixel.b, pixel.a, false); + } + } + + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; + + }, + + /** + * Shifts any or all of the hue, saturation and lightness values on every pixel in the given region, or the whole BitmapData if no region was specified. + * Shifting will add the given value onto the current h, s and l values, not replace them. + * The hue is wrapped to keep it within the range 0 to 1. Saturation and lightness are clamped to not exceed 1. + * + * @method Phaser.BitmapData#shiftHSL + * @param {number} [h=null] - The amount to shift the hue by. + * @param {number} [s=null] - The amount to shift the saturation by. + * @param {number} [l=null] - The amount to shift the lightness by. + * @param {Phaser.Rectangle} [region] - The area to perform the operation on. If not given it will run over the whole BitmapData. + */ + shiftHSL: function (h, s, l, region) { + + if (typeof h === 'undefined' || h === null) { h = false; } + if (typeof s === 'undefined' || s === null) { s = false; } + if (typeof l === 'undefined' || l === null) { l = false; } + + if (!h && !s && !l) + { + return; + } + + if (typeof region === 'undefined') + { + region = new Phaser.Rectangle(0, 0, this.width, this.height); + } + + var pixel = Phaser.Color.createColor(); + + for (var y = region.y; y < region.bottom; y++) + { + for (var x = region.x; x < region.right; x++) + { + Phaser.Color.unpackPixel(this.getPixel32(x, y), pixel, true); + + if (h) + { + pixel.h = this.game.math.wrap(pixel.h + h, 0, 1); + } + + if (s) + { + pixel.s = this.game.math.limitValue(pixel.s + s, 0, 1); + } + + if (l) + { + pixel.l = this.game.math.limitValue(pixel.l + l, 0, 1); + } + + Phaser.Color.HSLtoRGB(pixel.h, pixel.s, pixel.l, pixel); + this.setPixel32(x, y, pixel.r, pixel.g, pixel.b, pixel.a, false); + } + } + + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; }, /** * Sets the color of the given pixel to the specified red, green, blue and alpha values. + * * @method Phaser.BitmapData#setPixel32 - * @param {number} x - The X coordinate of the pixel to be set. - * @param {number} y - The Y coordinate of the pixel to be set. + * @param {number} x - The x coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} y - The y coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. * @param {number} red - The red color value, between 0 and 0xFF (255). * @param {number} green - The green color value, between 0 and 0xFF (255). * @param {number} blue - The blue color value, between 0 and 0xFF (255). * @param {number} alpha - The alpha color value, between 0 and 0xFF (255). + * @param {boolean} [immediate=true] - If `true` the context.putImageData will be called and the dirty flag set. */ - setPixel32: function (x, y, red, green, blue, alpha) { + setPixel32: function (x, y, red, green, blue, alpha, immediate) { + + if (typeof immediate === 'undefined') { immediate = true; } if (x >= 0 && x <= this.width && y >= 0 && y <= this.height) { - this.pixels[y * this.width + x] = (alpha << 24) | (blue << 16) | (green << 8) | red; - - /* - if (this.isLittleEndian) + if (Phaser.Device.LITTLE_ENDIAN) { - this.data32[y * this.width + x] = (alpha << 24) | (blue << 16) | (green << 8) | red; + this.pixels[y * this.width + x] = (alpha << 24) | (blue << 16) | (green << 8) | red; } else { - this.data32[y * this.width + x] = (red << 24) | (green << 16) | (blue << 8) | alpha; + this.pixels[y * this.width + x] = (red << 24) | (green << 16) | (blue << 8) | alpha; } - */ - - // this.imageData.data.set(this.data8); - this.context.putImageData(this.imageData, 0, 0); - - this.dirty = true; + if (immediate) + { + this.context.putImageData(this.imageData, 0, 0); + this.dirty = true; + } } }, @@ -26224,55 +27364,93 @@ Phaser.BitmapData.prototype = { * Sets the color of the given pixel to the specified red, green and blue values. * * @method Phaser.BitmapData#setPixel - * @param {number} x - The X coordinate of the pixel to be set. - * @param {number} y - The Y coordinate of the pixel to be set. - * @param {number} red - The red color value (between 0 and 255) - * @param {number} green - The green color value (between 0 and 255) - * @param {number} blue - The blue color value (between 0 and 255) + * @param {number} x - The x coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} y - The y coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} red - The red color value, between 0 and 0xFF (255). + * @param {number} green - The green color value, between 0 and 0xFF (255). + * @param {number} blue - The blue color value, between 0 and 0xFF (255). + * @param {number} alpha - The alpha color value, between 0 and 0xFF (255). + * @param {boolean} [immediate=true] - If `true` the context.putImageData will be called and the dirty flag set. */ - setPixel: function (x, y, red, green, blue) { + setPixel: function (x, y, red, green, blue, immediate) { - this.setPixel32(x, y, red, green, blue, 255); + this.setPixel32(x, y, red, green, blue, 255, immediate); }, /** - * Get the color of a specific pixel. + * Get the color of a specific pixel in the context into a color object. * - * @param {number} x - The X coordinate of the pixel to get. - * @param {number} y - The Y coordinate of the pixel to get. - * @return {number} A native color value integer (format: 0xRRGGBB) + * @method Phaser.BitmapData#getPixel + * @param {number} x - The x coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} y - The y coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {object} [out] - An object into which 4 properties will be created: r, g, b and a. If not provided a new object will be created. + * @return {object} An object with the red, green, blue and alpha values set in the r, g, b and a properties. */ - getPixel: function (x, y) { + getPixel: function (x, y, out) { - if (x >= 0 && x <= this.width && y >= 0 && y <= this.height) + if (!out) + { + out = Phaser.Color.createColor(); + } + + var index = ~~(x + (y * this.width)); + + index *= 4; + + if (this.data[index]) { - return this.data32[y * this.width + x]; + out.r = this.data[index]; + out.g = this.data[++index]; + out.b = this.data[++index]; + out.a = this.data[++index]; } + return out; + }, /** * Get the color of a specific pixel including its alpha value. + * Note that on little-endian systems the format is 0xAABBGGRR and on big-endian the format is 0xRRGGBBAA. * - * @param {number} x - The X coordinate of the pixel to get. - * @param {number} y - The Y coordinate of the pixel to get. + * @method Phaser.BitmapData#getPixel32 + * @param {number} x - The x coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} y - The y coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. * @return {number} A native color value integer (format: 0xAARRGGBB) */ getPixel32: function (x, y) { if (x >= 0 && x <= this.width && y >= 0 && y <= this.height) { - return this.data32[y * this.width + x]; + return this.pixels[y * this.width + x]; } }, + /** + * Get the color of a specific pixel including its alpha value as a color object containing r,g,b,a and rgba properties. + * + * @method Phaser.BitmapData#getPixelRGB + * @param {number} x - The x coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {number} y - The y coordinate of the pixel to be set. Must lay within the dimensions of this BitmapData. + * @param {object} [out] - An object into which 3 properties will be created: r, g and b. If not provided a new object will be created. + * @param {boolean} [hsl=false] - Also convert the rgb values into hsl? + * @param {boolean} [hsv=false] - Also convert the rgb values into hsv? + * @return {object} An object with the red, green and blue values set in the r, g and b properties. + */ + getPixelRGB: function (x, y, out, hsl, hsv) { + + return Phaser.Color.unpackPixel(this.getPixel32(x, y), out, hsl, hsv); + + }, + /** * Gets all the pixels from the region specified by the given Rectangle object. * + * @method Phaser.BitmapData#getPixels * @param {Phaser.Rectangle} rect - The Rectangle region to get. - * @return {array} CanvasPixelArray. + * @return {ImageData} Returns a ImageData object containing a Uint8ClampedArray data property. */ getPixels: function (rect) { @@ -26283,6 +27461,7 @@ Phaser.BitmapData.prototype = { /** * Copies the pixels from the source image to this BitmapData based on the given area and destination. * + * @method Phaser.BitmapData#copyPixels * @param {HTMLImage|string} source - The Image to draw. If you give a key it will try and find the Image in the Game.Cache. * @param {Phaser.Rectangle} area - The Rectangle region to copy from the source image. * @param {number} destX - The destination x coordinate to copy the image to. @@ -26300,16 +27479,22 @@ Phaser.BitmapData.prototype = { this.context.drawImage(source, area.x, area.y, area.width, area.height, destX, destY, area.width, area.height); } + this.dirty = true; + }, /** * Draws the given image to this BitmapData at the coordinates specified. If you need to only draw a part of the image use BitmapData.copyPixels instead. * - * @param {HTMLImage|string} source - The Image to draw. If you give a key it will try and find the Image in the Game.Cache. - * @param {number} destX - The destination x coordinate to draw the image to. - * @param {number} destY - The destination y coordinate to draw the image to. + * @method Phaser.BitmapData#draw + * @param {HTMLImage|string} source - The Image to draw. If you give a string it will try and find the Image in the Game.Cache. + * @param {number} [x=0] - The x coordinate to draw the image to. + * @param {number} [y=0] - The y coordinate to draw the image to. */ - draw: function (source, destX, destY) { + draw: function (source, x, y) { + + if (typeof x === 'undefined') { x = 0; } + if (typeof y === 'undefined') { y = 0; } if (typeof source === 'string') { @@ -26318,14 +27503,38 @@ Phaser.BitmapData.prototype = { if (source) { - this.context.drawImage(source, 0, 0, source.width, source.height, destX, destY, source.width, source.height); + this.context.drawImage(source, 0, 0, source.width, source.height, x, y, source.width, source.height); } + this.dirty = true; + + }, + + /** + * Draws the given image to this BitmapData at the coordinates specified. If you need to only draw a part of the image use BitmapData.copyPixels instead. + * + * @method Phaser.BitmapData#drawSprite + * @param {Phaser.Sprite|Phaser.Image} sprite - The Sprite to draw. Must have a loaded texture and frame. + * @param {number} [x=0] - The x coordinate to draw the Sprite to. + * @param {number} [y=0] - The y coordinate to draw the Sprite to. + */ + drawSprite: function (sprite, x, y) { + + if (typeof x === 'undefined') { x = 0; } + if (typeof y === 'undefined') { y = 0; } + + var frame = sprite.texture.frame; + + this.context.drawImage(sprite.texture.baseTexture.source, frame.x, frame.y, frame.width, frame.height, x, y, frame.width, frame.height); + + this.dirty = true; + }, /** * Draws the given image onto this BitmapData using an image as an alpha mask. * + * @method Phaser.BitmapData#alphaMask * @param {HTMLImage|string} source - The Image to draw. If you give a key it will try and find the Image in the Game.Cache. * @param {HTMLImage|string} mask - The Image to use as the alpha mask. If you give a key it will try and find the Image in the Game.Cache. */ @@ -26357,17 +27566,79 @@ Phaser.BitmapData.prototype = { this.context.globalCompositeOperation = temp; + this.dirty = true; + + }, + + /** + * Scans this BitmapData for all pixels matching the given r,g,b values and then draws them into the given destination BitmapData. + * The destination BitmapData must be large enough to receive all of the pixels that are scanned. + * Although the destination BitmapData is returned from this method, it's actually modified directly in place, meaning this call is perfectly valid: + * `picture.extract(mask, r, g, b)` + * + * @method Phaser.BitmapData#extract + * @param {Phaser.BitmapData} destination - The BitmapData that the extracts pixels will be drawn to. + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {number} [a=255] - The alpha color component, in the range 0 - 255. + * @returns {Phaser.BitmapData} The BitmapData that the extract pixels were drawn on. + */ + extract: function (destination, r, g, b, a) { + + if (typeof a === 'undefined') { a = 255; } + + this.processPixelRGB( + function(pixel, x, y){ + if (pixel.r === r && pixel.g === g && pixel.b === b) + { + destination.setPixel32(x, y, r, g, b, a, false); + } + return false; + }, + this); + + destination.context.putImageData(destination.imageData, 0, 0); + destination.dirty = true; + + return destination; + + }, + + /** + * Draws a filled Circle to the BitmapData at the given x, y coordinates and radius in size. + * + * @method Phaser.BitmapData#circle + * @param {number} x - The x coordinate to draw the Circle at. + * @param {number} y - The y coordinate to draw the Circle at. + * @param {number} radius - The radius of the Circle. + * @param {string} [fillStyle] - If set the context fillStyle will be set to this value before the circle is drawn. + */ + circle: function (x, y, radius, fillStyle) { + + if (typeof fillStyle !== 'undefined') + { + this.context.fillStyle = fillStyle; + } + + this.context.beginPath(); + this.context.arc(x, y, radius, 0, Math.PI * 2, false); + this.context.closePath(); + + this.context.fill(); + }, /** * If the game is running in WebGL this will push the texture up to the GPU if it's dirty. * This is called automatically if the BitmapData is being used by a Sprite, otherwise you need to remember to call it in your render function. + * If you wish to suppress this functionality set BitmapData.disableTextureUpload to `true`. * * @method Phaser.BitmapData#render */ render: function () { - if (this.game.renderType === Phaser.WEBGL && this.dirty) + if (!this.disableTextureUpload && this.game.renderType === Phaser.WEBGL && this.dirty) { // Only needed if running in WebGL, otherwise this array will never get cleared down // should use the rendersession @@ -26549,10 +27820,11 @@ Phaser.Sprite = function (game, x, y, key, frame) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0 ]; + this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0, 0 ]; /** * @property {Phaser.Rectangle} _bounds - Internal cache var. @@ -26900,10 +28172,12 @@ Phaser.Sprite.prototype.kill = function() { */ Phaser.Sprite.prototype.destroy = function(destroyChildren) { - if (this.game === null) { return; } + if (this.game === null || this._cache[8] === 1) { return; } if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + if (this.parent) { if (this.parent instanceof Phaser.Group) @@ -26961,6 +28235,8 @@ Phaser.Sprite.prototype.destroy = function(destroyChildren) { this.mask = null; this.game = null; + this._cache[8] = 0; + }; /** @@ -27445,6 +28721,20 @@ Object.defineProperty(Phaser.Sprite.prototype, "y", { }); +/** +* @name Phaser.Sprite#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.Sprite.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -27562,10 +28852,11 @@ Phaser.Image = function (game, x, y, key, frame) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0 ]; + this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0, 0 ]; }; @@ -27834,10 +29125,12 @@ Phaser.Image.prototype.kill = function() { */ Phaser.Image.prototype.destroy = function(destroyChildren) { - if (this.game === null) { return; } + if (this.game === null || this.destroyPhase) { return; } if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + if (this.parent) { if (this.parent instanceof Phaser.Group) @@ -27885,6 +29178,8 @@ Phaser.Image.prototype.destroy = function(destroyChildren) { this.mask = null; this.game = null; + this._cache[8] = 0; + }; /** @@ -28216,6 +29511,20 @@ Object.defineProperty(Phaser.Image.prototype, "smoothed", { }); +/** +* @name Phaser.Image#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.Image.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -28363,10 +29672,11 @@ Phaser.TileSprite = function (game, x, y, width, height, key, frame) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0 ]; + this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0, 0 ]; }; @@ -28620,10 +29930,12 @@ Phaser.TileSprite.prototype.loadTexture = function (key, frame) { */ Phaser.TileSprite.prototype.destroy = function(destroyChildren) { - if (this.game === null) { return; } + if (this.game === null || this.destroyPhase) { return; } if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + if (this.filters) { this.filters = null; @@ -28669,6 +29981,8 @@ Phaser.TileSprite.prototype.destroy = function(destroyChildren) { this.mask = null; this.game = null; + this._cache[8] = 0; + }; /** @@ -28964,6 +30278,20 @@ Object.defineProperty(Phaser.TileSprite.prototype, "y", { }); +/** +* @name Phaser.TileSprite#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.TileSprite.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -29094,10 +30422,11 @@ Phaser.Text = function (game, x, y, text, style) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0 ]; + this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0, 0 ]; }; @@ -29179,10 +30508,12 @@ Phaser.Text.prototype.postUpdate = function () { */ Phaser.Text.prototype.destroy = function (destroyChildren) { - if (this.game === null) { return; } + if (this.game === null || this.destroyPhase) { return; } if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + if (this.parent) { if (this.parent instanceof Phaser.Group) @@ -29231,6 +30562,8 @@ Phaser.Text.prototype.destroy = function (destroyChildren) { this.mask = null; this.game = null; + this._cache[8] = 0; + }; /** @@ -29341,6 +30674,7 @@ Phaser.Text.prototype.updateText = function () { this.context.shadowBlur = this.style.shadowBlur; this.context.textBaseline = 'top'; + this.context.lineCap = 'round'; this.context.lineJoin = 'round'; //draw lines line by line @@ -29853,6 +31187,20 @@ Object.defineProperty(Phaser.Text.prototype, "fixedToCamera", { }); +/** +* @name Phaser.Text#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.Text.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -29978,10 +31326,11 @@ Phaser.BitmapText = function (game, x, y, font, text, size) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [0, 0, 0, 0, 1, 0, 1, 0]; + this._cache = [0, 0, 0, 0, 1, 0, 1, 0, 0]; }; @@ -30065,10 +31414,12 @@ Phaser.BitmapText.prototype.postUpdate = function () { */ Phaser.BitmapText.prototype.destroy = function(destroyChildren) { - if (this.game === null) { return; } + if (this.game === null || this.destroyPhase) { return; } if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + if (this.parent) { if (this.parent instanceof Phaser.Group) @@ -30112,6 +31463,8 @@ Phaser.BitmapText.prototype.destroy = function(destroyChildren) { this.mask = null; this.game = null; + this._cache[8] = 0; + }; /** @@ -30320,6 +31673,20 @@ Object.defineProperty(Phaser.BitmapText.prototype, "fixedToCamera", { }); +/** +* @name Phaser.BitmapText#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.BitmapText.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -31031,10 +32398,11 @@ Phaser.Graphics = function (game, x, y) { * 5 = outOfBoundsFired (0 = no, 1 = yes) * 6 = exists (0 = no, 1 = yes) * 7 = fixed to camera (0 = no, 1 = yes) + * 8 = destroy phase? (0 = no, 1 = yes) * @property {Array} _cache * @private */ - this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0 ]; + this._cache = [ 0, 0, 0, 0, 1, 0, 1, 0, 0 ]; }; @@ -31107,8 +32475,12 @@ Phaser.Graphics.prototype.postUpdate = function () { */ Phaser.Graphics.prototype.destroy = function(destroyChildren) { + if (this.game === null || this.destroyPhase) { return; } + if (typeof destroyChildren === 'undefined') { destroyChildren = true; } + this._cache[8] = 1; + this.clear(); if (this.parent) @@ -31145,6 +32517,8 @@ Phaser.Graphics.prototype.destroy = function(destroyChildren) { this.game = null; + this._cache[8] = 0; + }; /* @@ -31215,6 +32589,20 @@ Object.defineProperty(Phaser.Graphics.prototype, "fixedToCamera", { }); +/** +* @name Phaser.Graphics#destroyPhase +* @property {boolean} destroyPhase - True if this object is currently being destroyed. +*/ +Object.defineProperty(Phaser.Graphics.prototype, "destroyPhase", { + + get: function () { + + return !!this._cache[8]; + + } + +}); + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -32730,6 +34118,12 @@ Phaser.Device = function (game) { */ this.littleEndian = false; + /** + * @property {boolean} support32bit - Does the device context support 32bit pixel manipulation using array buffer views? + * @default + */ + this.support32bit = false; + /** * @property {boolean} fullscreen - Does the browser support the Full Screen API? * @default @@ -32764,6 +34158,8 @@ Phaser.Device = function (game) { }; +Phaser.Device.LITTLE_ENDIAN = false; + Phaser.Device.prototype = { /** @@ -33052,7 +34448,7 @@ Phaser.Device.prototype = { }, /** - * Check PixelRatio of devices. + * Check PixelRatio, iOS device, Vibration API, ArrayBuffers and endianess. * @method Phaser.Device#_checkDevice * @private */ @@ -33065,15 +34461,21 @@ Phaser.Device.prototype = { if (typeof Int8Array !== 'undefined') { - this.littleEndian = new Int8Array(new Int16Array([1]).buffer)[0] > 0; this.typedArray = true; } else { - this.littleEndian = false; this.typedArray = false; } + if (typeof ArrayBuffer !== 'undefined' && typeof Uint8Array !== 'undefined' && typeof Uint32Array !== 'undefined') + { + this.littleEndian = this._checkIsLittleEndian(); + Phaser.Device.LITTLE_ENDIAN = this.littleEndian; + } + + this.support32bit = (typeof ArrayBuffer !== "undefined" && typeof Uint8ClampedArray !== "undefined" && typeof Int32Array !== "undefined" && this.littleEndian !== null && this._checkIsUint8ClampedImageData()); + navigator.vibrate = navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate; if (navigator.vibrate) @@ -33083,6 +34485,67 @@ Phaser.Device.prototype = { }, + /** + * Check Little or Big Endian system. + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Device#_checkIsLittleEndian + * @private + */ + _checkIsLittleEndian: function () { + + var a = new ArrayBuffer(4); + var b = new Uint8Array(a); + var c = new Uint32Array(a); + + b[0] = 0xa1; + b[1] = 0xb2; + b[2] = 0xc3; + b[3] = 0xd4; + + if (c[0] == 0xd4c3b2a1) + { + return true; + } + + if (c[0] == 0xa1b2c3d4) + { + return false; + } + else + { + // Could not determine endianness + return null; + } + + }, + + /** + * Test to see if ImageData uses CanvasPixelArray or Uint8ClampedArray. + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Device#_checkIsUint8ClampedImageData + * @private + */ + _checkIsUint8ClampedImageData: function () { + + if (typeof Uint8ClampedArray === "undefined") + { + return false; + } + + var elem = document.createElement('canvas'); + var ctx = elem.getContext('2d'); + + if (!ctx) + { + return false; + } + + var image = ctx.createImageData(1, 1); + + return image.data instanceof Uint8ClampedArray; + + }, + /** * Check whether the host environment support 3D CSS. * @method Phaser.Device#_checkCSS3D @@ -33964,6 +35427,21 @@ Phaser.Math = { }, + /** + * Ensures the given value is between min and max inclusive. + * + * @method Phaser.Math#limitValue + * @param {number} value - The value to limit. + * @param {number} min - The minimum the value can be. + * @param {number} max - The maximum the value can be. + * @return {number} The limited value. + */ + limitValue: function(value, min, max) { + + return value < min ? min : value > max ? max : value; + + }, + /** * Randomly returns either a 1 or -1. * @@ -33971,7 +35449,9 @@ Phaser.Math = { * @return {number} 1 or -1 */ randomSign: function () { + return (Math.random() > 0.5) ? 1 : -1; + }, /** @@ -34606,18 +36086,7 @@ Phaser.Math = { */ smoothstep: function ( x, min, max ) { - if (x <= min) - { - return 0; - } - - if (x >= max) - { - return 1; - } - - x = (x - min) / (max - min); - + x = Math.max(0, Math.min(1, (x - min) / (max - min))); return x * x * (3 - 2 * x); }, @@ -34633,18 +36102,7 @@ Phaser.Math = { */ smootherstep: function ( x, min, max ) { - if (x <= min) - { - return 0; - } - - if (x >= max) - { - return 1; - } - - x = (x - min) / (max - min); - + x = Math.max(0, Math.min(1, (x - min) / (max - min))); return x * x * x * (x * (x * 6 - 15) + 10); }, @@ -34756,6 +36214,7 @@ Phaser.RandomDataGenerator.prototype = { /** * Private random helper. + * * @method Phaser.RandomDataGenerator#rnd * @private * @return {number} @@ -34803,9 +36262,10 @@ Phaser.RandomDataGenerator.prototype = { /** * Internal method that creates a seed hash. + * * @method Phaser.RandomDataGenerator#hash - * @param {Any} data * @private + * @param {Any} data * @return {number} hashed value. */ hash: function (data) { @@ -34831,29 +36291,38 @@ Phaser.RandomDataGenerator.prototype = { /** * Returns a random integer between 0 and 2^32. + * * @method Phaser.RandomDataGenerator#integer * @return {number} A random integer between 0 and 2^32. */ integer: function() { + return this.rnd.apply(this) * 0x100000000;// 2^32 + }, /** * Returns a random real number between 0 and 1. + * * @method Phaser.RandomDataGenerator#frac * @return {number} A random real number between 0 and 1. */ frac: function() { - return this.rnd.apply(this) + (this.rnd.apply(this) * 0x200000 | 0) * 1.1102230246251565e-16;// 2^-53 + + return this.rnd.apply(this) + (this.rnd.apply(this) * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53 + }, /** * Returns a random real number between 0 and 2^32. + * * @method Phaser.RandomDataGenerator#real * @return {number} A random real number between 0 and 2^32. */ real: function() { + return this.integer() + this.frac(); + }, /** @@ -34865,11 +36334,14 @@ Phaser.RandomDataGenerator.prototype = { * @return {number} A random number between min and max. */ integerInRange: function (min, max) { - return Math.round(this.realInRange(min, max)); + + return Math.floor(this.realInRange(0, max - min + 1)) + min; + }, /** * Returns a random real number between min and max. + * * @method Phaser.RandomDataGenerator#realInRange * @param {number} min - The minimum value in the range. * @param {number} max - The maximum value in the range. @@ -34883,15 +36355,19 @@ Phaser.RandomDataGenerator.prototype = { /** * Returns a random real number between -1 and 1. + * * @method Phaser.RandomDataGenerator#normal * @return {number} A random real number between -1 and 1. */ normal: function () { + return 1 - 2 * this.frac(); + }, /** * Returns a valid RFC4122 version4 ID hex string from https://gist.github.com/1308368 + * * @method Phaser.RandomDataGenerator#uuid * @return {string} A valid RFC4122 version4 ID hex string */ @@ -34910,42 +36386,54 @@ Phaser.RandomDataGenerator.prototype = { /** * Returns a random member of `array`. + * * @method Phaser.RandomDataGenerator#pick * @param {Array} ary - An Array to pick a random member of. * @return {any} A random member of the array. */ pick: function (ary) { + return ary[this.integerInRange(0, ary.length - 1)]; + }, /** * Returns a random member of `array`, favoring the earlier entries. + * * @method Phaser.RandomDataGenerator#weightedPick * @param {Array} ary - An Array to pick a random member of. * @return {any} A random member of the array. */ weightedPick: function (ary) { + return ary[~~(Math.pow(this.frac(), 2) * (ary.length - 1))]; + }, /** * Returns a random timestamp between min and max, or between the beginning of 2000 and the end of 2020 if min and max aren't specified. + * * @method Phaser.RandomDataGenerator#timestamp * @param {number} min - The minimum value in the range. * @param {number} max - The maximum value in the range. * @return {number} A random timestamp between min and max. */ timestamp: function (min, max) { + return this.realInRange(min || 946684800000, max || 1577862000000); + }, /** * Returns a random angle between -180 and 180. + * * @method Phaser.RandomDataGenerator#angle * @return {number} A random number between -180 and 180. */ angle: function() { + return this.integerInRange(-180, 180); + } }; @@ -35916,6 +37404,11 @@ Phaser.Tween.prototype = { repeat = repeat || 0; yoyo = yoyo || false; + if (yoyo && repeat === 0) + { + repeat = 1; + } + var self; if (this._parent) @@ -36160,6 +37653,7 @@ Phaser.Tween.prototype = { repeat: function (times) { this._repeat = times; + return this; }, @@ -36175,6 +37669,12 @@ Phaser.Tween.prototype = { yoyo: function(yoyo) { this._yoyo = yoyo; + + if (yoyo && this._repeat === 0) + { + this._repeat = 1; + } + return this; }, @@ -36421,7 +37921,6 @@ Phaser.Tween.prototype = { this.onLoop.dispatch(this._object); return true; - } else { @@ -37098,6 +38597,11 @@ Phaser.Time = function (game) { */ this.deltaCap = 0; + /** + * @property {number} timeCap - If the difference in time between two frame updates exceeds this value, the frame time is reset to avoid huge elapsed counts. + */ + this.timeCap = 1000; + /** * @property {number} frames - The number of frames record in the last second. Only calculated if Time.advancedTiming is true. */ @@ -37224,29 +38728,27 @@ Phaser.Time.prototype = { * * @method Phaser.Time#update * @protected - * @param {number} time - The current timestamp, either performance.now or Date.now depending on the browser. + * @param {number} time - The current timestamp. */ update: function (time) { this.now = time; - if (this._justResumed) - { - this.time = this.now; - this._justResumed = false; + this.timeToCall = this.game.math.max(0, 16 - (time - this.lastTime)); - this.events.resume(); + this.elapsed = this.now - this.time; - for (var i = 0; i < this._timers.length; i++) - { - this._timers[i]._resume(); - } + // spike-dislike + if (this.elapsed > this.timeCap) + { + // For some reason the time between now and the last time the game was updated was larger than our timeCap + // This can happen if the Stage.disableVisibilityChange is true and you swap tabs, which makes the raf pause. + // In this case we'll drop to some default values to stop the game timers going nuts. + this.elapsed = 1 / 60; } - this.timeToCall = this.game.math.max(0, 16 - (time - this.lastTime)); - - this.elapsed = this.now - this.time; - this.physicsElapsed = this.elapsed / 1000; + // Calculate physics elapsed, ensure it's > 0, use 1/60 as a fallback + this.physicsElapsed = this.elapsed / 1000 || 1 / 60; if (this.deltaCap > 0 && this.physicsElapsed > this.deltaCap) { @@ -37329,12 +38831,19 @@ Phaser.Time.prototype = { */ gameResumed: function () { - this.pauseDuration = Date.now() - this._pauseStarted; - // Level out the elapsed timer to avoid spikes - this.time = Date.now(); + this.time = this.now = Date.now(); + + this.pauseDuration = this.time - this._pauseStarted; + + this.events.resume(); + + var i = this._timers.length; - this._justResumed = true; + while (i--) + { + this._timers[i]._resume(); + } }, @@ -37430,6 +38939,12 @@ Phaser.Timer = function (game, autoDestroy) { */ this.expired = false; + /** + * @property {number} elapsed - Elapsed time since the last frame (in ms). + * @protected + */ + this.elapsed = 0; + /** * @property {array} events - An array holding all of this timers Phaser.TimerEvent objects. Use the methods add, repeat and loop to populate it. */ @@ -37447,6 +38962,11 @@ Phaser.Timer = function (game, autoDestroy) { */ this.nextTick = 0; + /** + * @property {number} timeCap - If the difference in time between two frame updates exceeds this value, the event times are reset to avoid catch-up situations. + */ + this.timeCap = 1000; + /** * @property {boolean} paused - The paused state of the Timer. You can pause the timer by calling Timer.pause() and Timer.resume() or by the game pausing. * @readonly @@ -37483,7 +39003,7 @@ Phaser.Timer = function (game, autoDestroy) { * @property {number} _now - The current start-time adjusted time. * @private */ - this._now = 0; + this._now = Date.now(); /** * @property {number} _len - Temp. array length variable. @@ -37599,7 +39119,7 @@ Phaser.Timer.prototype = { }, /** - * Adds a new Event to this Timer that will repeat for the given number of iterations. + * Adds a new TimerEvent that will always play through once and then repeat for the given number of iterations. * The event will fire after the given amount of 'delay' milliseconds has passed once the Timer has started running. * Call Timer.start() once you have added all of the Events you require for this Timer. The delay is in relation to when the Timer starts, not the time it was added. * If the Timer is already running the delay will be calculated based on the timers current time. @@ -37757,7 +39277,8 @@ Phaser.Timer.prototype = { }, /** - * The main Timer update event, called automatically by the Game clock. + * The main Timer update event, called automatically by Phaser.Time.update. + * * @method Phaser.Timer#update * @protected * @param {number} time - The time from the core game clock. @@ -37770,7 +39291,18 @@ Phaser.Timer.prototype = { return true; } + this.elapsed = time - this._now; this._now = time; + + // spike-dislike + if (this.elapsed > this.timeCap) + { + // For some reason the time between now and the last time the game was updated was larger than our timeCap. + // This can happen if the Stage.disableVisibilityChange is true and you swap tabs, which makes the raf pause. + // In this case we need to adjust the TimerEvents and nextTick. + this.adjustEvents(time - this.elapsed); + } + this._marked = 0; // Clears events marked for deletion and resets _len and _i to 0. @@ -37845,14 +39377,16 @@ Phaser.Timer.prototype = { */ pause: function () { - if (this.running && !this.expired) + if (this.paused) { - this._pauseStarted = this.game.time.now; - - this.paused = true; - this._codePaused = true; + return; } + this._pauseStarted = this.game.time.now; + + this.paused = true; + this._codePaused = true; + }, /** @@ -37862,37 +39396,73 @@ Phaser.Timer.prototype = { */ _pause: function () { - if (this.running && !this.expired) + if (this.paused) { - this._pauseStarted = this.game.time.now; + return; + } - this.paused = true; + this._pauseStarted = this.game.time.now; + + this.paused = true; + + }, + + /** + * Adjusts the time of all pending events and the nextTick by the given baseTime. + * + * @method Phaser.Timer#adjustEvents + */ + adjustEvents: function (baseTime) { + + for (var i = 0; i < this.events.length; i++) + { + if (!this.events[i].pendingDelete) + { + // Work out how long there would have been from when the game paused until the events next tick + var t = this.events[i].tick - baseTime; + + if (t < 0) + { + t = 0; + } + + // Add the difference on to the time now + this.events[i].tick = this._now + t; + } + } + + var d = this.nextTick - baseTime; + + if (d < 0) + { + this.nextTick = this._now; + } + else + { + this.nextTick = this._now + d; } }, /** * Resumes the Timer and updates all pending events. + * * @method Phaser.Timer#resume */ resume: function () { - if (this.running && !this.expired) + if (!this.paused) { - var pauseDuration = this.game.time.now - this._pauseStarted; - - this._pauseTotal += pauseDuration; + return; + } - for (var i = 0; i < this.events.length; i++) - { - this.events[i].tick += pauseDuration; - } + this._pauseTotal += this.game.time.pauseDuration; + this._now = this.game.time.now; - this.nextTick += pauseDuration; + this.adjustEvents(this._pauseStarted); - this.paused = false; - this._codePaused = false; - } + this.paused = false; + this._codePaused = false; }, @@ -38129,6 +39699,12 @@ Phaser.AnimationManager = function (sprite) { */ this.currentFrame = null; + /** + * @property {Phaser.Animation} currentAnim - The currently displayed animation, if any. + * @default + */ + this.currentAnim = null; + /** * @property {boolean} updateIfVisible - Should the animation data continue to update even if the Sprite.visible is set to false. * @default @@ -38797,6 +40373,64 @@ Phaser.Animation.prototype = { }, + /** + * Sets this animations playback to a given frame with the given ID. + * + * @method Phaser.Animation#setFrame + * @param {string|number} [frameId] - The identifier of the frame to set. Can be the name of the frame, the sprite index of the frame, or the animation-local frame index. + * @param {boolean} [useLocalFrameIndex=false] - If you provide a number for frameId, should it use the numeric indexes of the frameData, or the 0-indexed frame index local to the animation. + */ + setFrame: function(frameId, useLocalFrameIndex) { + + var frameIndex; + + if (typeof useLocalFrameIndex === 'undefined') + { + useLocalFrameIndex = false; + } + + // Find the index to the desired frame. + if (typeof frameId === "string") + { + for (var i = 0; i < this._frames.length; i++) + { + if (this._frameData.getFrame(this._frames[i]).name === frameId) + { + frameIndex = i; + } + } + } + else if (typeof frameId === "number") + { + if (useLocalFrameIndex) + { + frameIndex = frameId; + } + else + { + for (var i = 0; i < this._frames.length; i++) + { + if (this.frames[i] === frameIndex) + { + frameIndex = i; + } + } + } + } + + if (frameIndex) + { + // Set the current frame index to the found index. Subtract 1 so that it animates to the desired frame on update. + this._frameIndex = frameIndex - 1; + + // Make the animation update at next update + this._timeNextFrame = this.game.time.now; + + this.update(); + } + + }, + /** * Stops playback of this animation and set it to a finished state. If a resetFrame is provided it will stop playback and set frame to the first in the animation. * If `dispatchComplete` is true it will dispatch the complete events, otherwise they'll be ignored. @@ -39102,6 +40736,7 @@ Object.defineProperty(Phaser.Animation.prototype, 'speed', { * @param {number} stop - The number to count to. If your frames are named 'explosion_0001' to 'explosion_0034' the stop value is 34. * @param {string} [suffix=''] - The end of the filename. If the filename was 'explosion_0001-large' the prefix would be '-large'. * @param {number} [zeroPad=0] - The number of zeroes to pad the min and max values with. If your frames are named 'explosion_0001' to 'explosion_0034' then the zeroPad is 4. +* @return {array} An array of framenames. */ Phaser.Animation.generateFrameNames = function (prefix, start, stop, suffix, zeroPad) { @@ -41151,6 +42786,12 @@ Phaser.Loader = function (game) { */ this._xhr = new XMLHttpRequest(); + /** + * @property {XDomainRequest} - An ajax request used specifically by IE9 for CORs loading issues. + * @private + */ + this._ajax = null; + /** * @property {boolean} isLoading - True if the Loader is in the process of loading the queue. * @default @@ -42067,12 +43708,50 @@ Phaser.Loader.prototype = { break; case 'json': - this._xhr.open("GET", this.baseURL + file.url, true); - this._xhr.responseType = "text"; - this._xhr.onload = function () { - return _this.jsonLoadComplete(_this._fileIndex); - }; - this._xhr.send(); + + if (window.XDomainRequest) + { + this._ajax = new window.XDomainRequest(); + + // XDomainRequest has a few querks. Occasionally it will abort requests + // A way to avoid this is to make sure ALL callbacks are set even if not used + // More info here: http://stackoverflow.com/questions/15786966/xdomainrequest-aborts-post-on-ie-9 + this._ajax.timeout = 3000; + + this._ajax.onerror = function () { + return _this.dataLoadError(_this._fileIndex); + }; + + this._ajax.ontimeout = function () { + return _this.dataLoadError(_this._fileIndex); + }; + + this._ajax.onprogress = function() {}; + + this._ajax.onload = function(){ + return _this.jsonLoadComplete(_this._fileIndex); + }; + + this._ajax.open('GET', this.baseURL + file.url, true); + + this._ajax.send(); + } + else + { + this._xhr.open("GET", this.baseURL + file.url, true); + this._xhr.responseType = "text"; + + this._xhr.onload = function () { + return _this.jsonLoadComplete(_this._fileIndex); + }; + + this._xhr.onerror = function () { + return _this.dataLoadError(_this._fileIndex); + }; + + this._xhr.send(); + } + break; case 'tilemap': @@ -42596,21 +44275,6 @@ Phaser.LoaderParser = { */ bitmapFont: function (game, xml, cacheKey, xSpacing, ySpacing) { - if (!xml || /MSIE 9/i.test(navigator.userAgent)) - { - if (typeof(window.DOMParser) === 'function') - { - var domparser = new DOMParser(); - xml = domparser.parseFromString(this.ajaxRequest.responseText, 'text/xml'); - } - else - { - var div = document.createElement('div'); - div.innerHTML = this.ajaxRequest.responseText; - xml = div; - } - } - var data = {}; var info = xml.getElementsByTagName('info')[0]; var common = xml.getElementsByTagName('common')[0]; @@ -42700,15 +44364,14 @@ Phaser.Sound = function (game, key, volume, loop, connect) { this.key = key; /** - * @property {boolean} loop - Whether or not the sound will loop. + * @property {boolean} loop - Whether or not the sound or current sound marker will loop. */ this.loop = loop; /** - * @property {number} _volume - The global audio volume. A value between 0 (silence) and 1 (full volume). - * @private + * @property {number} volume - The sound or sound marker volume. A value between 0 (silence) and 1 (full volume). */ - this._volume = volume; + this.volume = volume; /** * @property {object} markers - The sound markers. @@ -42720,26 +44383,13 @@ Phaser.Sound = function (game, key, volume, loop, connect) { */ this.context = null; - /** - * @property {Description} _buffer - Decoded data buffer / Audio tag. - * @private - */ - this._buffer = null; - - /** - * @property {boolean} _muted - Boolean indicating whether the sound is muted or not. - * @private - * @default - */ - this._muted = false; - /** * @property {boolean} autoplay - Boolean indicating whether the sound should start automatically. */ this.autoplay = false; /** - * @property {number} totalDuration - The total duration of the sound, in milliseconds + * @property {number} totalDuration - The total duration of the sound in seconds. */ this.totalDuration = 0; @@ -42755,10 +44405,20 @@ Phaser.Sound = function (game, key, volume, loop, connect) { this.currentTime = 0; /** - * @property {number} duration - The duration of the sound. + * @property {number} duration - The duration of the current sound marker in seconds. */ this.duration = 0; + /** + * @property {number} durationMS - The duration of the current sound marker in ms. + */ + this.durationMS = 0; + + /** + * @property {number} position - The position of the current sound marker. + */ + this.position = 0; + /** * @property {number} stopTime - The time the sound stopped. */ @@ -42820,6 +44480,16 @@ Phaser.Sound = function (game, key, volume, loop, connect) { */ this.externalNode = null; + /** + * @property {object} masterGainNode - The master gain node in a Web Audio system. + */ + this.masterGainNode = null; + + /** + * @property {object} gainNode - The gain node in a Web Audio system. + */ + this.gainNode = null; + if (this.usingWebAudio) { this.context = this.game.sound.context; @@ -42899,6 +44569,54 @@ Phaser.Sound = function (game, key, volume, loop, connect) { */ this.onMarkerComplete = new Phaser.Signal(); + /** + * @property {number} _volume - The global audio volume. A value between 0 (silence) and 1 (full volume). + * @private + */ + this._volume = volume; + + /** + * @property {any} _buffer - Decoded data buffer / Audio tag. + * @private + */ + this._buffer = null; + + /** + * @property {boolean} _muted - Boolean indicating whether the sound is muted or not. + * @private + */ + this._muted = false; + + /** + * @property {number} _tempMarker - Internal marker var. + * @private + */ + this._tempMarker = 0; + + /** + * @property {number} _tempPosition - Internal marker var. + * @private + */ + this._tempPosition = 0; + + /** + * @property {number} _tempVolume - Internal marker var. + * @private + */ + this._tempVolume = 0; + + /** + * @property {boolean} _tempLoop - Internal marker var. + * @private + */ + this._tempLoop = 0; + + /** + * @property {boolean} _paused - Was this sound paused via code or a game event? + * @private + */ + this._paused = false; + }; Phaser.Sound.prototype = { @@ -43235,6 +44953,7 @@ Phaser.Sound.prototype = { /** * Restart the sound, or a marked section of it. + * * @method Phaser.Sound#restart * @param {string} [marker=''] - If you want to play a marker then give the key here, otherwise leave blank to play the full sound. * @param {number} [position=0] - The starting position to play the sound from - this is ignored if you provide a marker. @@ -43253,7 +44972,8 @@ Phaser.Sound.prototype = { }, /** - * Pauses the sound + * Pauses the sound. + * * @method Phaser.Sound#pause */ pause: function () { @@ -43271,7 +44991,8 @@ Phaser.Sound.prototype = { }, /** - * Resumes the sound + * Resumes the sound. + * * @method Phaser.Sound#resume */ resume: function () { @@ -43431,7 +45152,9 @@ Object.defineProperty(Phaser.Sound.prototype, "isDecoded", { Object.defineProperty(Phaser.Sound.prototype, "mute", { get: function () { - return this._muted; + + return (this._muted || this.game.sound.mute); + }, set: function (value) { @@ -43739,6 +45462,7 @@ Phaser.SoundManager.prototype = { /** * Stops all the sounds in the game. + * * @method Phaser.SoundManager#stopAll */ stopAll: function () { @@ -43755,6 +45479,7 @@ Phaser.SoundManager.prototype = { /** * Pauses all the sounds in the game. + * * @method Phaser.SoundManager#pauseAll */ pauseAll: function () { @@ -43770,7 +45495,8 @@ Phaser.SoundManager.prototype = { }, /** - * resumes every sound in the game. + * Resumes every sound in the game. + * * @method Phaser.SoundManager#resumeAll */ resumeAll: function () { @@ -43787,6 +45513,7 @@ Phaser.SoundManager.prototype = { /** * Decode a sound by its assets key. + * * @method Phaser.SoundManager#decode * @param {string} key - Assets key of the sound to be decoded. * @param {Phaser.Sound} [sound] - Its buffer will be set to decoded data. @@ -43819,6 +45546,7 @@ Phaser.SoundManager.prototype = { /** * Updates every sound in the game. + * * @method Phaser.SoundManager#update */ update: function () { @@ -43846,6 +45574,7 @@ Phaser.SoundManager.prototype = { /** * Adds a new Sound into the SoundManager. + * * @method Phaser.SoundManager#add * @param {string} key - Asset key for the sound. * @param {number} [volume=1] - Default value for the volume. @@ -44033,7 +45762,7 @@ Object.defineProperty(Phaser.SoundManager.prototype, "mute", { } else { - if (this._muted === false) + if (!this._muted) { return; } @@ -44334,7 +46063,7 @@ Phaser.Utils.Debug.prototype = { if (sound.currentMarker !== '') { - this.line('Marker: ' + sound.currentMarker + ' Duration: ' + sound.duration); + this.line('Marker: ' + sound.currentMarker + ' Duration: ' + sound.duration + ' (ms: ' + sound.durationMS + ')'); this.line('Start: ' + sound.markers[sound.currentMarker].start + ' Stop: ' + sound.markers[sound.currentMarker].stop); this.line('Position: ' + sound.position); } @@ -44363,6 +46092,25 @@ Phaser.Utils.Debug.prototype = { }, + /** + * Render Timer information. + * + * @method Phaser.Utils.Debug#timer + * @param {Phaser.Timer} timer - The Phaser.Timer to show the debug information for. + * @param {number} x - X position of the debug info to be rendered. + * @param {number} y - Y position of the debug info to be rendered. + * @param {string} [color='rgb(255,255,255)'] - color of the debug info to be rendered. (format is css color string). + */ + timer: function (timer, x, y, color) { + + this.start(x, y, color); + this.line('Timer (running: ' + timer.running + ' expired: ' + timer.expired + ')'); + this.line('Next Tick: ' + timer.next + ' Duration: ' + timer.duration); + this.line('Paused: ' + timer.paused + ' Length: ' + timer.length); + this.stop(); + + }, + /** * Renders the Pointer.circle object onto the stage in green if down or red if up along with debug text. * @@ -44815,25 +46563,479 @@ Phaser.Utils.Debug.prototype.constructor = Phaser.Utils.Debug; */ /** -* A collection of methods useful for manipulating and comparing colors. +* The Phaser.Color class is a set of static methods that assist in color manipulation and conversion. * * @class Phaser.Color */ Phaser.Color = { + /** + * Packs the r, g, b, a components into a single integer, for use with Int32Array. + * If device is little endian then ABGR order is used. Otherwise RGBA order is used. + * + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Color.packPixel + * @static + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {number} a - The alpha color component, in the range 0 - 255. + * @return {number} The packed color + */ + packPixel: function (r, g, b, a) { + + if (Phaser.Device.LITTLE_ENDIAN) + { + return (a << 24) | (b << 16) | (g << 8) | r; + } + else + { + return (r << 24) | (g << 16) | (b << 8) | a; + } + + }, + + /** + * Unpacks the r, g, b, a components into the specified color object, or a new + * object, for use with Int32Array. If little endian, then ABGR order is used when + * unpacking, otherwise, RGBA order is used. The resulting color object has the + * `r, g, b, a` properties which are unrelated to endianness. + * + * Note that the integer is assumed to be packed in the correct endianness. On little-endian + * the format is 0xAABBGGRR and on big-endian the format is 0xRRGGBBAA. If you want a + * endian-independent method, use fromRGBA(rgba) and toRGBA(r, g, b, a). + * + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Color.unpackPixel + * @static + * @param {number} rgba - The integer, packed in endian order by packPixel. + * @param {object} [out] - An object into which 3 properties will be created: r, g and b. If not provided a new object will be created. + * @param {boolean} [hsl=false] - Also convert the rgb values into hsl? + * @param {boolean} [hsv=false] - Also convert the rgb values into hsv? + * @return {object} An object with the red, green and blue values set in the r, g and b properties. + */ + unpackPixel: function (rgba, out, hsl, hsv) { + + if (typeof out === 'undefined' || out === null) { out = Phaser.Color.createColor(); } + if (typeof hsl === 'undefined' || hsl === null) { hsl = false; } + if (typeof hsv === 'undefined' || hsv === null) { hsv = false; } + + if (Phaser.Device.LITTLE_ENDIAN) + { + out.a = ((rgba & 0xff000000) >>> 24); + out.b = ((rgba & 0x00ff0000) >>> 16); + out.g = ((rgba & 0x0000ff00) >>> 8); + out.r = ((rgba & 0x000000ff)); + } + else + { + out.r = ((rgba & 0xff000000) >>> 24); + out.g = ((rgba & 0x00ff0000) >>> 16); + out.b = ((rgba & 0x0000ff00) >>> 8); + out.a = ((rgba & 0x000000ff)); + } + + out.color = rgba; + out.rgba = 'rgba(' + out.r + ',' + out.g + ',' + out.b + ',' + (out.a / 255) + ')'; + + if (hsl) + { + Phaser.Color.RGBtoHSL(out.r, out.g, out.b, out); + } + + if (hsv) + { + Phaser.Color.RGBtoHSV(out.r, out.g, out.b, out); + } + + return out; + + }, + + /** + * A utility to convert an integer in 0xRRGGBBAA format to a color object. + * This does not rely on endianness. + * + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Color.fromRGBA + * @static + * @param {number} rgba - An RGBA hex + * @param {object} [out] - The object to use, optional. + * @return {object} A color object. + */ + fromRGBA: function (rgba, out) { + + if (!out) + { + out = Phaser.Color.createColor(); + } + + out.r = ((rgba & 0xff000000) >>> 24); + out.g = ((rgba & 0x00ff0000) >>> 16); + out.b = ((rgba & 0x0000ff00) >>> 8); + out.a = ((rgba & 0x000000ff)); + + out.rgba = 'rgba(' + out.r + ',' + out.g + ',' + out.b + ',' + out.a + ')'; + + return out; + + }, + + /** + * A utility to convert RGBA components to a 32 bit integer in RRGGBBAA format. + * + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Color.toRGBA + * @static + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {number} a - The alpha color component, in the range 0 - 255. + * @return {number} A RGBA-packed 32 bit integer + */ + toRGBA: function (r, g, b, a) { + + return (r << 24) | (g << 16) | (b << 8) | a; + + }, + + /** + * Converts an RGB color value to HSL (hue, saturation and lightness). + * Conversion forumla from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes RGB values are contained in the set [0, 255] and returns h, s and l in the set [0, 1]. + * Based on code by Michael Jackson (https://github.com/mjijackson) + * + * @method Phaser.Color.RGBtoHSL + * @static + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {object} [out] - An object into which 3 properties will be created, h, s and l. If not provided a new object will be created. + * @return {object} An object with the hue, saturation and lightness values set in the h, s and l properties. + */ + RGBtoHSL: function (r, g, b, out) { + + if (!out) + { + out = Phaser.Color.createColor(r, g, b, 1); + } + + r /= 255; + g /= 255; + b /= 255; + + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + + // achromatic by default + out.h = 0; + out.s = 0; + out.l = (max + min) / 2; + + if (max !== min) + { + var d = max - min; + + out.s = out.l > 0.5 ? d / (2 - max - min) : d / (max + min); + + if (max === r) + { + out.h = (g - b) / d + (g < b ? 6 : 0); + } + else if (max === g) + { + out.h = (b - r) / d + 2; + } + else if (max === b) + { + out.h = (r - g) / d + 4; + } + + out.h /= 6; + } + + return out; + + }, + + /** + * Converts an HSL (hue, saturation and lightness) color value to RGB. + * Conversion forumla from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes HSL values are contained in the set [0, 1] and returns r, g and b values in the set [0, 255]. + * Based on code by Michael Jackson (https://github.com/mjijackson) + * + * @method Phaser.Color.HSLtoRGB + * @static + * @param {number} h - The hue, in the range 0 - 1. + * @param {number} s - The saturation, in the range 0 - 1. + * @param {number} l - The lightness, in the range 0 - 1. + * @param {object} [out] - An object into which 3 properties will be created: r, g and b. If not provided a new object will be created. + * @return {object} An object with the red, green and blue values set in the r, g and b properties. + */ + HSLtoRGB: function (h, s, l, out) { + + if (!out) + { + out = Phaser.Color.createColor(l, l, l); + } + else + { + // achromatic by default + out.r = l; + out.g = l; + out.b = l; + } + + if (s !== 0) + { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + out.r = Phaser.Color.hueToColor(p, q, h + 1 / 3); + out.g = Phaser.Color.hueToColor(p, q, h); + out.b = Phaser.Color.hueToColor(p, q, h - 1 / 3); + } + + // out.r = (out.r * 255 | 0); + // out.g = (out.g * 255 | 0); + // out.b = (out.b * 255 | 0); + + out.r = Math.floor((out.r * 255 | 0)); + out.g = Math.floor((out.g * 255 | 0)); + out.b = Math.floor((out.b * 255 | 0)); + + Phaser.Color.updateColor(out); + + return out; + + }, + + /** + * Converts an RGB color value to HSV (hue, saturation and value). + * Conversion forumla from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes RGB values are contained in the set [0, 255] and returns h, s and v in the set [0, 1]. + * Based on code by Michael Jackson (https://github.com/mjijackson) + * + * @method Phaser.Color.RGBtoHSV + * @static + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {object} [out] - An object into which 3 properties will be created, h, s and v. If not provided a new object will be created. + * @return {object} An object with the hue, saturation and value set in the h, s and v properties. + */ + RGBtoHSV: function (r, g, b, out) { + + if (!out) + { + out = Phaser.Color.createColor(r, g, b, 255); + } + + r /= 255; + g /= 255; + b /= 255; + + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var d = max - min; + + // achromatic by default + out.h = 0; + out.s = max === 0 ? 0 : d / max; + out.v = max; + + if (max !== min) + { + if (max === r) + { + out.h = (g - b) / d + (g < b ? 6 : 0); + } + else if (max === g) + { + out.h = (b - r) / d + 2; + } + else if (max === b) + { + out.h = (r - g) / d + 4; + } + + out.h /= 6; + } + + return out; + + }, + + /** + * Converts an HSV (hue, saturation and value) color value to RGB. + * Conversion forumla from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes HSV values are contained in the set [0, 1] and returns r, g and b values in the set [0, 255]. + * Based on code by Michael Jackson (https://github.com/mjijackson) + * + * @method Phaser.Color.HSVtoRGB + * @static + * @param {number} h - The hue, in the range 0 - 1. + * @param {number} s - The saturation, in the range 0 - 1. + * @param {number} v - The value, in the range 0 - 1. + * @param {object} [out] - An object into which 3 properties will be created: r, g and b. If not provided a new object will be created. + * @return {object} An object with the red, green and blue values set in the r, g and b properties. + */ + HSVtoRGB: function (h, s, v, out) { + + if (typeof out === 'undefined') { out = Phaser.Color.createColor(0, 0, 0, 1, h, s, 0, v); } + + var r, g, b; + var i = Math.floor(h * 6); + var f = h * 6 - i; + var p = v * (1 - s); + var q = v * (1 - f * s); + var t = v * (1 - (1 - f) * s); + + switch (i % 6) + { + case 0: + r = v; + g = t; + b = p; + break; + case 1: + r = q; + g = v; + b = p; + break; + case 2: + r = p; + g = v; + b = t; + break; + case 3: + r = p; + g = q; + b = v; + break; + case 4: + r = t; + g = p; + b = v; + break; + case 5: + r = v; + g = p; + b = q; + break; + } + + out.r = Math.floor(r * 255); + out.g = Math.floor(g * 255); + out.b = Math.floor(b * 255); + + Phaser.Color.updateColor(out); + + return out; + + }, + + /** + * Converts a hue to an RGB color. + * Based on code by Michael Jackson (https://github.com/mjijackson) + * + * @method Phaser.Color.hueToColor + * @static + * @param {number} p + * @param {number} q + * @param {number} t + * @return {number} The color component value. + */ + hueToColor: function (p, q, t) { + + if (t < 0) + { + t += 1; + } + + if (t > 1) + { + t -= 1; + } + + if (t < 1 / 6) + { + return p + (q - p) * 6 * t; + } + + if (t < 1 / 2) + { + return q; + } + + if (t < 2 / 3) + { + return p + (q - p) * (2 / 3 - t) * 6; + } + + return p; + + }, + + /** + * A utility function to create a lightweight 'color' object with the default components. + * Any components that are not specified will default to zero. + * + * This is useful when you want to use a shared color object for the getPixel and getPixelAt methods. + * + * @author Matt DesLauriers (@mattdesl) + * @method Phaser.Color.createColor + * @static + * @param {number} [r=0] - The red color component, in the range 0 - 255. + * @param {number} [g=0] - The green color component, in the range 0 - 255. + * @param {number} [b=0] - The blue color component, in the range 0 - 255. + * @param {number} [a=1] - The alpha color component, in the range 0 - 1. + * @param {number} [h=0] - The hue, in the range 0 - 1. + * @param {number} [s=0] - The saturation, in the range 0 - 1. + * @param {number} [l=0] - The lightness, in the range 0 - 1. + * @param {number} [v=0] - The value, in the range 0 - 1. + * @return {object} The resulting object with r, g, b, a properties and h, s, l and v. + */ + createColor: function (r, g, b, a, h, s, l, v) { + + var out = { r: r || 0, g: g || 0, b: b || 0, a: a || 1, h: h || 0, s: s || 0, l: l || 0, v: v || 0, color: 0 }; + + out.rgba = 'rgba(' + out.r + ',' + out.g + ',' + out.b + ',' + out.a + ')'; + + return out; + + }, + + /** + * Takes a color object and updates the rgba property. + * + * @method Phaser.Color.updateColor + * @static + * @param {object} out - The color object to update. + * @returns {number} A native color value integer (format: 0xAARRGGBB). + */ + updateColor: function (out) { + + out.rgba = 'rgba(' + out.r + ',' + out.g + ',' + out.b + ',' + out.a + ')'; + + return out; + + }, + /** * Given an alpha and 3 color values this will return an integer representation of it. * * @method Phaser.Color.getColor32 * @static - * @param {number} alpha - The Alpha value (between 0 and 255). - * @param {number} red - The Red channel value (between 0 and 255). - * @param {number} green - The Green channel value (between 0 and 255). - * @param {number} blue - The Blue channel value (between 0 and 255). + * @param {number} a - The alpha color component, in the range 0 - 255. + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. * @returns {number} A native color value integer (format: 0xAARRGGBB). */ - getColor32: function (alpha, red, green, blue) { - return alpha << 24 | red << 16 | green << 8 | blue; + getColor32: function (a, r, g, b) { + + return a << 24 | r << 16 | g << 8 | b; + }, /** @@ -44841,119 +47043,169 @@ Phaser.Color = { * * @method Phaser.Color.getColor * @static - * @param {number} red - The Red channel value (between 0 and 255). - * @param {number} green - The Green channel value (between 0 and 255). - * @param {number} blue - The Blue channel value (between 0 and 255). + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. * @returns {number} A native color value integer (format: 0xRRGGBB). */ - getColor: function (red, green, blue) { - return red << 16 | green << 8 | blue; + getColor: function (r, g, b) { + + return r << 16 | g << 8 | b; + }, /** - * Converts the given hex string into an integer color value. + * Converts the given color values into a string. + * If prefix was '#' it will be in the format `#RRGGBB` otherwise `0xAARRGGBB`. * - * @method Phaser.Color.hexToRGB + * @method Phaser.Color.RGBtoString * @static - * @param {string} h - The string hex color to convert. - * @returns {number} The rgb color value. + * @param {number} r - The red color component, in the range 0 - 255. + * @param {number} g - The green color component, in the range 0 - 255. + * @param {number} b - The blue color component, in the range 0 - 255. + * @param {number} [a=255] - The alpha color component, in the range 0 - 255. + * @param {string} [prefix='#'] - The prefix used in the return string. If '#' it will return `#RRGGBB`, else `0xAARRGGBB`. + * @return {string} A string containing the color values. If prefix was '#' it will be in the format `#RRGGBB` otherwise `0xAARRGGBB`. */ - hexToRGB: function (h) { + RGBtoString: function (r, g, b, a, prefix) { - var hex16 = (h.charAt(0) == "#") ? h.substring(1, 7) : h; + if (typeof a === 'undefined') { a = 255; } + if (typeof prefix === 'undefined') { prefix = '#'; } - if (hex16.length == 3) + if (prefix === '#') { - hex16 = hex16.charAt(0) + hex16.charAt(0) + hex16.charAt(1) + hex16.charAt(1) + hex16.charAt(2) + hex16.charAt(2); + return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); } + else + { + return '0x' + Phaser.Color.componentToHex(a) + Phaser.Color.componentToHex(r) + Phaser.Color.componentToHex(g) + Phaser.Color.componentToHex(b); + } + + }, + + /** + * Converts a hex string into an integer color value. + * + * @method Phaser.Color.hexToRGB + * @static + * @param {string} hex - The hex string to convert. Can be in the short-hand format `#03f` or `#0033ff`. + * @return {number} The rgb color value in the format 0xAARRGGBB. + */ + hexToRGB: function (hex) { - var red = parseInt(hex16.substring(0, 2), 16); - var green = parseInt(hex16.substring(2, 4), 16); - var blue = parseInt(hex16.substring(4, 6), 16); + var rgb = Phaser.Color.hexToColor(hex); - return red << 16 | green << 8 | blue; + if (rgb) + { + return Phaser.Color.getColor32(rgb.a, rgb.r, rgb.g, rgb.b); + } }, /** - * Returns a string containing handy information about the given color including string hex value, - * RGB format information and HSL information. Each section starts on a newline, 3 lines in total. + * Converts a hex string into a Phaser Color object. * - * @method Phaser.Color.getColorInfo + * @method Phaser.Color.hexToColor * @static - * @param {number} color - A color value in the format 0xAARRGGBB. - * @returns {string} String containing the 3 lines of information. + * @param {string} hex - The hex string to convert. Can be in the short-hand format `#03f` or `#0033ff`. + * @param {object} [out] - An object into which 3 properties will be created: r, g and b. If not provided a new object will be created. + * @return {object} An object with the red, green and blue values set in the r, g and b properties. */ - getColorInfo: function (color) { + hexToColor: function (hex, out) { - var argb = Phaser.Color.getRGB(color); - var hsl = Phaser.Color.RGBtoHSV(color); + if (!out) + { + out = Phaser.Color.createColor(); + } - // Hex format - var result = Phaser.Color.RGBtoHexstring(color) + "\n"; + // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") + var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; - // RGB format - result = result.concat("Alpha: " + argb.alpha + " Red: " + argb.red + " Green: " + argb.green + " Blue: " + argb.blue) + "\n"; + hex = hex.replace(shorthandRegex, function(m, r, g, b) { + return r + r + g + g + b + b; + }); - // HSL info - result = result.concat("Hue: " + hsl.hue + " Saturation: " + hsl.saturation + " Lightnes: " + hsl.lightness); + var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); - return result; + if (result) + { + out.r = parseInt(result[1], 16); + out.g = parseInt(result[2], 16); + out.b = parseInt(result[3], 16); + } + + return out; }, /** - * Return a string representation of the color in the format 0xAARRGGBB. + * Return a string containing a hex representation of the given color component. * - * @method Phaser.Color.RGBtoHexstring + * @method Phaser.Color.componentToHex * @static - * @param {number} color - The color to get the string representation for - * @returns {string} A string of length 10 characters in the format 0xAARRGGBB + * @param {number} color - The color channel to get the hex value for, must be a value between 0 and 255. + * @returns {string} A string of length 2 characters, i.e. 255 = ff, 100 = 64. */ - RGBtoHexstring: function (color) { - - var argb = Phaser.Color.getRGB(color); + componentToHex: function (color) { - return "0x" + Phaser.Color.colorToHexstring(argb.alpha) + Phaser.Color.colorToHexstring(argb.red) + Phaser.Color.colorToHexstring(argb.green) + Phaser.Color.colorToHexstring(argb.blue); + var hex = color.toString(16); + return hex.length == 1 ? "0" + hex : hex; }, /** - * Return a string representation of the color in the format #RRGGBB. + * Get HSV color wheel values in an array which will be 360 elements in size. * - * @method Phaser.Color.RGBtoWebstring + * @method Phaser.Color.HSVColorWheel * @static - * @param {number} color - The color to get the string representation for. - * @returns {string} A string of length 10 characters in the format 0xAARRGGBB. + * @param {number} [s=1] - The saturation, in the range 0 - 1. + * @param {number} [v=1] - The value, in the range 0 - 1. + * @return {array} An array containing 360 elements corresponding to the HSV color wheel. */ - RGBtoWebstring: function (color) { + HSVColorWheel: function (s, v) { - var argb = Phaser.Color.getRGB(color); + if (typeof s === 'undefined') { s = 1.0; } + if (typeof v === 'undefined') { v = 1.0; } - return "#" + Phaser.Color.colorToHexstring(argb.red) + Phaser.Color.colorToHexstring(argb.green) + Phaser.Color.colorToHexstring(argb.blue); + var colors = []; + + for (var c = 0; c <= 359; c++) + { + colors.push(Phaser.Color.HSVtoRGB(c / 359, s, v)); + } + + return colors; }, /** - * Return a string containing a hex representation of the given color. + * Get HSL color wheel values in an array which will be 360 elements in size. * - * @method Phaser.Color.colorToHexstring + * @method Phaser.Color.HSLColorWheel * @static - * @param {number} color - The color channel to get the hex value for, must be a value between 0 and 255). - * @returns {string} A string of length 2 characters, i.e. 255 = FF, 0 = 00. + * @param {number} [s=0.5] - The saturation, in the range 0 - 1. + * @param {number} [l=0.5] - The lightness, in the range 0 - 1. + * @return {array} An array containing 360 elements corresponding to the HSL color wheel. */ - colorToHexstring: function (color) { + HSLColorWheel: function (s, l) { - var digits = "0123456789ABCDEF"; - var lsd = color % 16; - var msd = (color - lsd) / 16; - var hexified = digits.charAt(msd) + digits.charAt(lsd); - return hexified; + if (typeof s === 'undefined') { s = 0.5; } + if (typeof l === 'undefined') { l = 0.5; } + + var colors = []; + + for (var c = 0; c <= 359; c++) + { + colors.push(Phaser.Color.HSLtoRGB(c / 359, s, l)); + } + + return colors; }, /** * Interpolates the two given colours based on the supplied step and currentStep properties. + * * @method Phaser.Color.interpolateColor * @static * @param {number} color1 - The first color value. @@ -45043,11 +47295,8 @@ Phaser.Color = { if (typeof alpha === "undefined") { alpha = 255; } // Sanity checks - if (max > 255) { - return Phaser.Color.getColor(255, 255, 255); - } - - if (min > max) { + if (max > 255 || min > max) + { return Phaser.Color.getColor(255, 255, 255); } @@ -45156,6 +47405,85 @@ Phaser.Color = { */ getBlue: function (color) { return color & 0xFF; + }, + + // The following are all DEPRECATED + + /** + * DEPRECATED: This method will be removed in Phaser 2.1. + * Returns a string containing handy information about the given color including string hex value, + * RGB format information. Each section starts on a newline, 3 lines in total. + * + * @method Phaser.Color.getColorInfo + * @static + * @param {number} color - A color value in the format 0xAARRGGBB. + * @returns {string} String containing the 3 lines of information. + */ + getColorInfo: function (color) { + + var argb = Phaser.Color.getRGB(color); + + // Hex format + var result = Phaser.Color.RGBtoHexstring(color) + "\n"; + + // RGB format + result = result.concat("Alpha: " + argb.alpha + " Red: " + argb.red + " Green: " + argb.green + " Blue: " + argb.blue) + "\n"; + + return result; + + }, + + /** + * DEPRECATED: This method will be removed in Phaser 2.1. Please use Phaser.Color.RGBtoString instead. + * Return a string representation of the color in the format 0xAARRGGBB. + * + * @method Phaser.Color.RGBtoHexstring + * @static + * @param {number} color - The color to get the string representation for + * @returns {string} A string of length 10 characters in the format 0xAARRGGBB + */ + RGBtoHexstring: function (color) { + + var argb = Phaser.Color.getRGB(color); + + return "0x" + Phaser.Color.colorToHexstring(argb.alpha) + Phaser.Color.colorToHexstring(argb.red) + Phaser.Color.colorToHexstring(argb.green) + Phaser.Color.colorToHexstring(argb.blue); + + }, + + /** + * DEPRECATED: This method will be removed in Phaser 2.1. Please use Phaser.Color.RGBtoString instead. + * Return a string representation of the color in the format #RRGGBB. + * + * @method Phaser.Color.RGBtoWebstring + * @static + * @param {number} color - The color to get the string representation for. + * @returns {string} A string of length 10 characters in the format 0xAARRGGBB. + */ + RGBtoWebstring: function (color) { + + var argb = Phaser.Color.getRGB(color); + + return "#" + Phaser.Color.colorToHexstring(argb.red) + Phaser.Color.colorToHexstring(argb.green) + Phaser.Color.colorToHexstring(argb.blue); + + }, + + /** + * DEPRECATED: This method will be removed in Phaser 2.1. Please use Phaser.Color.componentToHex instead. + * Return a string containing a hex representation of the given color. + * + * @method Phaser.Color.colorToHexstring + * @static + * @param {number} color - The color channel to get the hex value for, must be a value between 0 and 255). + * @returns {string} A string of length 2 characters, i.e. 255 = FF, 0 = 00. + */ + colorToHexstring: function (color) { + + var digits = "0123456789ABCDEF"; + var lsd = color % 16; + var msd = (color - lsd) / 16; + var hexified = digits.charAt(msd) + digits.charAt(lsd); + return hexified; + } }; @@ -48508,7 +50836,7 @@ Phaser.Particles.Arcade.Emitter.prototype.emitParticle = function () { { particle.setScaleData(this.scaleData); } - else if (this.minParticleScale !== this.maxParticleScale) + else if (this.minParticleScale !== 1 || this.maxParticleScale !== 1) { particle.scale.set(this.game.rnd.realInRange(this.minParticleScale, this.maxParticleScale)); } @@ -48838,7 +51166,7 @@ Phaser.Tile = function (layer, index, x, y, width, height) { this.layer = layer; /** - * @property {number} index - The index of this tile within the map data corresponding to the tileset. + * @property {number} index - The index of this tile within the map data corresponding to the tileset, or -1 if this represents a blank/null tile. */ this.index = index; @@ -49273,6 +51601,11 @@ Phaser.Tilemap = function (game, key, tileWidth, tileHeight, width, height) { */ this.orientation = data.orientation; + /** + * @property {number} format - The format of the map data, either Phaser.Tilemap.CSV or Phaser.Tilemap.TILED_JSON. + */ + this.format = data.format; + /** * @property {number} version - The version of the map data (as specified in Tiled, usually 1). */ @@ -49453,6 +51786,12 @@ Phaser.Tilemap.prototype = { if (typeof tileset === 'string') { key = tileset; + + if (!this.game.cache.checkImageKey(key)) + { + console.warn('Phaser.Tilemap.addTilesetImage: Invalid image key given: "' + key + '"'); + return null; + } } else { @@ -49463,6 +51802,12 @@ Phaser.Tilemap.prototype = { if (typeof tileset === 'string') { tileset = this.getTilesetIndex(tileset); + + if (tileset === null && this.format === Phaser.Tilemap.TILED_JSON) + { + console.warn('Phaser.Tilemap.addTilesetImage: No data found in the JSON matching the tileset name: "' + key + '"'); + return null; + } } if (this.tilesets[tileset]) @@ -49644,21 +51989,6 @@ Phaser.Tilemap.prototype = { return; } - var row; - var output = []; - - for (var y = 0; y < height; y++) - { - row = []; - - for (var x = 0; x < width; x++) - { - row.push(null); - } - - output.push(row); - } - var layer = { name: name, @@ -49674,10 +52004,28 @@ Phaser.Tilemap.prototype = { indexes: [], callbacks: [], bodies: [], - data: output + data: null }; + var row; + var output = []; + + for (var y = 0; y < height; y++) + { + row = []; + + for (var x = 0; x < width; x++) + { + // row.push(null); + row.push(new Phaser.Tile(layer, -1, x, y, tileWidth, tileHeight)); + } + + output.push(row); + } + + layer.data = output; + this.layers.push(layer); this.currentLayer = this.layers.length - 1; @@ -50787,7 +53135,8 @@ Phaser.Tilemap.prototype = { }, /** - * Removes all layers from this tile map and nulls the game reference. + * Removes all layer data from this tile map and nulls the game reference. + * Note: You are responsible for destroying any TilemapLayer objects you generated yourself, as Tilemap doesn't keep a reference to them. * * @method Phaser.Tilemap#destroy */ @@ -51366,19 +53715,22 @@ Phaser.TilemapLayer.prototype.render = function () { { tile = this._column[x]; - set = this.map.tilesets[this.map.tiles[tile.index][2]]; - - if (this.debug === false && tile.alpha !== this.context.globalAlpha) + if (tile.index > -1) { - this.context.globalAlpha = tile.alpha; - } + set = this.map.tilesets[this.map.tiles[tile.index][2]]; - set.draw(this.context, Math.floor(this._mc.tx), Math.floor(this._mc.ty), tile.index); + if (this.debug === false && tile.alpha !== this.context.globalAlpha) + { + this.context.globalAlpha = tile.alpha; + } - if (tile.debug) - { - this.context.fillStyle = 'rgba(0, 255, 0, 0.4)'; - this.context.fillRect(Math.floor(this._mc.tx), Math.floor(this._mc.ty), this.map.tileWidth, this.map.tileHeight); + set.draw(this.context, Math.floor(this._mc.tx), Math.floor(this._mc.ty), tile.index); + + if (tile.debug) + { + this.context.fillStyle = 'rgba(0, 255, 0, 0.4)'; + this.context.fillRect(Math.floor(this._mc.tx), Math.floor(this._mc.ty), this.map.tileWidth, this.map.tileHeight); + } } } @@ -51691,7 +54043,7 @@ Phaser.TilemapParser = { for (var x = 0; x < column.length; x++) { - output[y][x] = new Phaser.Tile(0, parseInt(column[x], 10), x, y, tileWidth, tileHeight); + output[y][x] = new Phaser.Tile(map.layers[0], parseInt(column[x], 10), x, y, tileWidth, tileHeight); } if (width === 0) @@ -51700,6 +54052,7 @@ Phaser.TilemapParser = { } } + map.format = Phaser.Tilemap.CSV; map.name = key; map.width = width; map.height = height; @@ -51720,6 +54073,7 @@ Phaser.TilemapParser = { /** * Returns an empty map data object. + * * @method Phaser.TilemapParser.getEmptyData * @return {object} Generated map data. */ @@ -51800,6 +54154,7 @@ Phaser.TilemapParser = { map.tileWidth = json.tilewidth; map.tileHeight = json.tileheight; map.orientation = json.orientation; + map.format = Phaser.Tilemap.TILED_JSON; map.version = json.version; map.properties = json.properties; map.widthInPixels = map.width * map.tileWidth; @@ -51844,7 +54199,7 @@ Phaser.TilemapParser = { // Loop through the data field in the JSON. - // This is an array containing the tile indexes, one after the other. null = no tile, everything else = the tile index (starting at 1 for Tiled, 0 for CSV) + // This is an array containing the tile indexes, one after the other. -1 = no tile, everything else = the tile index (starting at 1 for Tiled, 0 for CSV) // If the map contains multiple tilesets then the indexes are relative to that which the set starts from. // Need to set which tileset in the cache = which tileset in the JSON, if you do this manually it means you can use the same map data but a new tileset. @@ -51857,7 +54212,7 @@ Phaser.TilemapParser = { } else { - row.push(null); + row.push(new Phaser.Tile(layer, -1, x, output.length, json.tilewidth, json.tileheight)); } x++; @@ -52254,6 +54609,10 @@ Phaser.Tileset.prototype.constructor = Phaser.Tileset; } }).call(this); +/* +* "Don't follow strange women who lure you into woods with beautiful poetry." - @djfood +*/ + /** * @author Richard Davey * @copyright 2014 Photon Storm Ltd. @@ -59071,11 +61430,12 @@ module.exports={ "grunt-contrib-jshint": "~0.9.2", "grunt-contrib-nodeunit": "~0.1.2", "grunt-contrib-uglify": "~0.4.0", + "grunt-contrib-watch": "~0.5.0", "grunt-browserify": "~2.0.1", "z-schema": "~2.4.6" }, "dependencies": { - "poly-decomp": "git://github.com/schteppe/poly-decomp.js", + "poly-decomp": "0.1.0", "gl-matrix": "2.1.0" } } @@ -59205,7 +61565,7 @@ AABB.prototype.overlaps = function(aabb){ ((l2[1] <= u1[1] && u1[1] <= u2[1]) || (l1[1] <= u2[1] && u2[1] <= u1[1])); }; -},{"../math/vec2":30,"../utils/Utils":45}],9:[function(require,module,exports){ +},{"../math/vec2":30,"../utils/Utils":47}],9:[function(require,module,exports){ var vec2 = require('../math/vec2') var Body = require('../objects/Body') @@ -59398,10 +61758,9 @@ module.exports = GridBroadphase; * @todo Should have an option for dynamic scene size */ function GridBroadphase(options){ - options = options || {}; Broadphase.apply(this); - Utils.extend(options,{ + options = Utils.defaults(options,{ xmin: -100, xmax: 100, ymin: -100, @@ -59493,7 +61852,7 @@ GridBroadphase.prototype.getCollisionPairs = function(world){ return result; }; -},{"../collision/Broadphase":9,"../math/vec2":30,"../shapes/Circle":35,"../shapes/Particle":39,"../shapes/Plane":40,"../utils/Utils":45}],11:[function(require,module,exports){ +},{"../collision/Broadphase":9,"../math/vec2":30,"../shapes/Circle":35,"../shapes/Particle":39,"../shapes/Plane":40,"../utils/Utils":47}],11:[function(require,module,exports){ var Circle = require('../shapes/Circle'), Plane = require('../shapes/Plane'), Shape = require('../shapes/Shape'), @@ -59548,12 +61907,15 @@ var vec2 = require('../math/vec2') , add = vec2.add , dot = vec2.dot , Utils = require('../utils/Utils') +, TupleDictionary = require('../utils/TupleDictionary') +, Equation = require('../equations/Equation') , ContactEquation = require('../equations/ContactEquation') , FrictionEquation = require('../equations/FrictionEquation') , Circle = require('../shapes/Circle') +, Convex = require('../shapes/Convex') , Shape = require('../shapes/Shape') , Body = require('../objects/Body') -, Rectangle = require('../shapes/Rectangle') +, Rectangle = require('../shapes/Rectangle'); module.exports = Narrowphase; @@ -59578,7 +61940,7 @@ var tmp1 = vec2.fromValues(0,0) , tmp16 = vec2.fromValues(0,0) , tmp17 = vec2.fromValues(0,0) , tmp18 = vec2.fromValues(0,0) -, tmpArray = [] +, tmpArray = []; /** * Narrowphase. Creates contacts and friction given shapes and transforms. @@ -59641,32 +62003,32 @@ function Narrowphase(){ * The stiffness value to use in the next contact equations. * @property {Number} stiffness */ - this.stiffness = 1e7; + this.stiffness = Equation.DEFAULT_STIFFNESS; /** * The stiffness value to use in the next contact equations. * @property {Number} stiffness */ - this.relaxation = 3; + this.relaxation = Equation.DEFAULT_RELAXATION; /** * The stiffness value to use in the next friction equations. * @property frictionStiffness * @type {Number} */ - this.frictionStiffness = 1e7; + this.frictionStiffness = Equation.DEFAULT_STIFFNESS; /** * The relaxation value to use in the next friction equations. * @property frictionRelaxation * @type {Number} */ - this.frictionRelaxation = 3; + this.frictionRelaxation = Equation.DEFAULT_RELAXATION; // Keep track of the colliding bodies last step - this.collidingBodiesLastStep = { keys:[] }; -}; + this.collidingBodiesLastStep = new TupleDictionary(); +} /** * Check if the bodies were in contact since the last reset(). @@ -59676,27 +62038,19 @@ function Narrowphase(){ * @return {Boolean} */ Narrowphase.prototype.collidedLastStep = function(bi,bj){ - var id1 = bi.id, - id2 = bj.id; - if(id1 > id2){ - var tmp = id1; - id1 = id2; - id2 = tmp; - } - return !!this.collidingBodiesLastStep[id1 + " " + id2]; + var id1 = bi.id|0, + id2 = bj.id|0; + return !!this.collidingBodiesLastStep.get(id1, id2); }; // "for in" loops aren't optimised in chrome... is there a better way to handle last-step collision memory? // Maybe do this: http://jsperf.com/reflection-vs-array-of-keys function clearObject(obj){ - for(var i = 0, l = obj.keys.length; i < l; i++) { - delete obj[obj.keys[i]]; + var l = obj.keys.length; + while(l--){ + delete obj[obj.keys[l]]; } obj.keys.length = 0; - /* - for(var key in this.collidingBodiesLastStep) - delete this.collidingBodiesLastStep[key]; - */ } /** @@ -59705,23 +62059,12 @@ function clearObject(obj){ * @param {World} world */ Narrowphase.prototype.reset = function(world){ - - // Save the colliding bodies data - clearObject(this.collidingBodiesLastStep); + this.collidingBodiesLastStep.reset(); for(var i=0; i!==this.contactEquations.length; i++){ var eq = this.contactEquations[i], - id1 = eq.bodyA.id, - id2 = eq.bodyB.id; - if(id1 > id2){ - var tmp = id1; - id1 = id2; - id2 = tmp; - } - var key = id1 + " " + id2; - if(!this.collidingBodiesLastStep[key]){ - this.collidingBodiesLastStep[key] = true; - this.collidingBodiesLastStep.keys.push(key); - } + id1 = eq.bodyA.id|0, + id2 = eq.bodyB.id|0; + this.collidingBodiesLastStep.set(id1, id2, true); } if(this.reuseObjects){ @@ -59793,7 +62136,7 @@ Narrowphase.prototype.createFrictionFromContact = function(c){ var eq = this.createFrictionEquation(c.bodyA, c.bodyB, c.shapeA, c.shapeB); vec2.copy(eq.contactPointA, c.contactPointA); vec2.copy(eq.contactPointB, c.contactPointB); - vec2.rotate(eq.t, c.normalA, -Math.PI / 2); + vec2.rotate90cw(eq.t, c.normalA); eq.contactEquation = c; return eq; }; @@ -60049,7 +62392,7 @@ Narrowphase.prototype.planeLine = function(planeBody, planeShape, planeOffset, p vec2.normalize(worldEdgeUnit, worldEdge); // Get tangent to the edge. - vec2.rotate(worldTangent, worldEdgeUnit, -Math.PI/2); + vec2.rotate90cw(worldTangent, worldEdgeUnit); vec2.rotate(worldNormal, yAxis, planeAngle); @@ -60167,7 +62510,7 @@ Narrowphase.prototype.circleLine = function(bi,si,xi,ai, bj,sj,xj,aj, justTest, vec2.normalize(worldEdgeUnit, worldEdge); // Get tangent to the edge. - vec2.rotate(worldTangent, worldEdgeUnit, -Math.PI/2); + vec2.rotate90cw(worldTangent, worldEdgeUnit); // Check distance from the plane spanned by the edge vs the circle sub(dist, circleOffset, worldVertex0); @@ -60352,7 +62695,7 @@ Narrowphase.prototype.circleConvex = function( bi,si,xi,ai, bj,sj,xj,aj, justTe vec2.normalize(worldEdgeUnit, worldEdge); // Get tangent to the edge. Points out of the Convex - vec2.rotate(worldTangent, worldEdgeUnit, -Math.PI/2); + vec2.rotate90cw(worldTangent, worldEdgeUnit); // Get point on circle, closest to the polygon vec2.scale(candidate,worldTangent,-circleShape.radius); @@ -60586,8 +62929,9 @@ Narrowphase.prototype.particleConvex = function( bi,si,xi,ai, bj,sj,xj,aj, just verts = convexShape.vertices; // Check if the particle is in the polygon at all - if(!pointInConvex(particleOffset,convexShape,convexOffset,convexAngle)) + if(!pointInConvex(particleOffset,convexShape,convexOffset,convexAngle)){ return 0; + } if(justTest) return true; @@ -60608,7 +62952,7 @@ Narrowphase.prototype.particleConvex = function( bi,si,xi,ai, bj,sj,xj,aj, just vec2.normalize(worldEdgeUnit, worldEdge); // Get tangent to the edge. Points out of the Convex - vec2.rotate(worldTangent, worldEdgeUnit, -Math.PI/2); + vec2.rotate90cw(worldTangent, worldEdgeUnit); // Check distance from the infinite line (spanned by the edge) to the particle sub(dist, particleOffset, worldVertex0); @@ -61130,7 +63474,7 @@ Narrowphase.prototype.convexConvex = function( bi,si,xi,ai, bj,sj,xj,aj, justTe sub(worldEdge, worldPoint1, worldPoint0); - vec2.rotate(worldNormal, worldEdge, -Math.PI/2); // Normal points out of convex 1 + vec2.rotate90cw(worldNormal, worldEdge); // Normal points out of convex 1 vec2.normalize(worldNormal,worldNormal); sub(dist, worldPoint, worldPoint0); @@ -61167,7 +63511,7 @@ Narrowphase.prototype.convexConvex = function( bi,si,xi,ai, bj,sj,xj,aj, justTe sub(worldEdge, worldPoint1, worldPoint0); - vec2.rotate(c.normalA, worldEdge, -Math.PI/2); // Normal points out of convex A + vec2.rotate90cw(c.normalA, worldEdge); // Normal points out of convex A vec2.normalize(c.normalA,c.normalA); sub(dist, worldPoint, worldPoint0); // From edge point to the penetrating point @@ -61286,7 +63630,7 @@ Narrowphase.findSeparatingAxis = function(c1,offset1,angle1,c2,offset2,angle2,se sub(edge, worldPoint1, worldPoint0); // Get normal - just rotate 90 degrees since vertices are given in CCW - vec2.rotate(normal, edge, -Math.PI / 2); + vec2.rotate90cw(normal, edge); vec2.normalize(normal,normal); // Project hulls onto that normal @@ -61345,14 +63689,13 @@ Narrowphase.getClosestEdge = function(c,angle,axis,flip){ } var closestEdge = -1, - N = c.vertices.length, - halfPi = Math.PI / 2; + N = c.vertices.length; for(var i=0; i!==N; i++){ // Get the edge sub(edge, c.vertices[(i+1)%N], c.vertices[i%N]); // Get normal - just rotate 90 degrees since vertices are given in CCW - vec2.rotate(normal, edge, -halfPi); + vec2.rotate90cw(normal, edge); vec2.normalize(normal,normal); var d = dot(normal,localAxis); @@ -61428,8 +63771,7 @@ Narrowphase.prototype.circleHeightfield = function( circleBody,circleShape,circl // 2. 1. Get point on circle that is closest to the edge (scale normal with -radius) // 2. 2. Check if point is inside. - var found = false, - minDist = false; + var found = false; // Check all edges first for(var i=idxA; i= v0[0] && candidate[0] < v1[0] && d <= 0){ - if(minDist === false || Math.abs(d) < minDist){ - - // Store the candidate point, projected to the edge - vec2.scale(dist,worldNormal,-d); - vec2.add(minCandidate,candidate,dist); - vec2.copy(minCandidateNormal,worldNormal); - - found = true; - minDist = Math.abs(d); - - if(justTest) - return true; + if(justTest){ + return true; } - } - } - if(found){ + found = true; - var c = this.createContactEquation(hfBody,circleBody,hfShape,circleShape); + // Store the candidate point, projected to the edge + vec2.scale(dist,worldNormal,-d); + vec2.add(minCandidate,candidate,dist); + vec2.copy(minCandidateNormal,worldNormal); - // Normal is out of the heightfield - vec2.copy(c.normalA, minCandidateNormal); + var c = this.createContactEquation(hfBody,circleBody,hfShape,circleShape); - // Vector from circle to heightfield - vec2.scale(c.contactPointB, c.normalA, -radius); - add(c.contactPointB, c.contactPointB, circlePos); - sub(c.contactPointB, c.contactPointB, circleBody.position); + // Normal is out of the heightfield + vec2.copy(c.normalA, minCandidateNormal); - vec2.copy(c.contactPointA, minCandidate); - //vec2.sub(c.contactPointA, c.contactPointA, hfPos); - vec2.sub(c.contactPointA, c.contactPointA, hfBody.position); + // Vector from circle to heightfield + vec2.scale(c.contactPointB, c.normalA, -radius); + add(c.contactPointB, c.contactPointB, circlePos); + sub(c.contactPointB, c.contactPointB, circleBody.position); - this.contactEquations.push(c); + vec2.copy(c.contactPointA, minCandidate); + vec2.sub(c.contactPointA, c.contactPointA, hfBody.position); - if(this.enableFriction) - this.frictionEquations.push( this.createFrictionFromContact(c) ); + this.contactEquations.push(c); - return 1; + if(this.enableFriction){ + this.frictionEquations.push( this.createFrictionFromContact(c) ); + } + } } - // Check all vertices + found = false; if(radius > 0){ for(var i=idxA; i<=idxB; i++){ @@ -61511,6 +63845,8 @@ Narrowphase.prototype.circleHeightfield = function( circleBody,circleShape,circl if(justTest) return true; + found = true; + var c = this.createContactEquation(hfBody,circleBody,hfShape,circleShape); // Construct normal - out of heightfield @@ -61530,24 +63866,95 @@ Narrowphase.prototype.circleHeightfield = function( circleBody,circleShape,circl if(this.enableFriction){ this.frictionEquations.push(this.createFrictionFromContact(c)); } - - return 1; } } } + if(found){ + return 1; + } + return 0; }; -},{"../equations/ContactEquation":21,"../equations/FrictionEquation":23,"../math/vec2":30,"../objects/Body":31,"../shapes/Circle":35,"../shapes/Rectangle":41,"../shapes/Shape":42,"../utils/Utils":45}],13:[function(require,module,exports){ -var Circle = require('../shapes/Circle') -, Plane = require('../shapes/Plane') -, Shape = require('../shapes/Shape') -, Particle = require('../shapes/Particle') -, Utils = require('../utils/Utils') -, Broadphase = require('../collision/Broadphase') -, vec2 = require('../math/vec2') +var convexHeightfield_v0 = vec2.create(), + convexHeightfield_v1 = vec2.create(), + convexHeightfield_tilePos = vec2.create(), + convexHeightfield_tempConvexShape = new Convex([vec2.create(),vec2.create(),vec2.create(),vec2.create()]); +/** + * @method circleHeightfield + * @param {Body} bi + * @param {Circle} si + * @param {Array} xi + * @param {Body} bj + * @param {Heightfield} sj + * @param {Array} xj + * @param {Number} aj + */ +Narrowphase.prototype[Shape.RECTANGLE | Shape.HEIGHTFIELD] = +Narrowphase.prototype[Shape.CONVEX | Shape.HEIGHTFIELD] = +Narrowphase.prototype.convexHeightfield = function( convexBody,convexShape,convexPos,convexAngle, + hfBody,hfShape,hfPos,hfAngle, justTest ){ + var data = hfShape.data, + w = hfShape.elementWidth, + v0 = convexHeightfield_v0, + v1 = convexHeightfield_v1, + tilePos = convexHeightfield_tilePos, + tileConvex = convexHeightfield_tempConvexShape; + + // Get the index of the points to test against + var idxA = Math.floor( (convexBody.aabb.lowerBound[0] - hfPos[0]) / w ), + idxB = Math.ceil( (convexBody.aabb.upperBound[0] - hfPos[0]) / w ); + + if(idxA < 0) idxA = 0; + if(idxB >= data.length) idxB = data.length-1; + + // Get max and min + var max = data[idxA], + min = data[idxB]; + for(var i=idxA; i max) max = data[i]; + } + + if(convexBody.aabb.lowerBound[1] > max){ + return justTest ? false : 0; + } + + var found = false; + var numContacts = 0; + + // Loop over all edges + for(var i=idxA; i=0;j--) { - if(a[j].aabb.lowerBound[0] <= v.aabb.lowerBound[0]) - break; - a[j+1] = a[j]; - } - a[j+1] = v; - } - return a; -}; - -/** - * Sorts bodies along the Y axis. - * @method sortAxisListY + * Sorts bodies along an axis. + * @method sortAxisList * @param {Array} a + * @param {number} axisIndex * @return {Array} */ -SAPBroadphase.sortAxisListY = function(a){ - for(var i=1,l=a.length;i=0;j--) { - if(a[j].aabb.lowerBound[1] <= v.aabb.lowerBound[1]) + if(a[j].aabb.lowerBound[axisIndex] <= v.aabb.lowerBound[axisIndex]){ break; + } a[j+1] = a[j]; } a[j+1] = v; @@ -61664,8 +64050,6 @@ SAPBroadphase.sortAxisListY = function(a){ return a; }; -var preliminaryList = { keys:[] }; - /** * Get the colliding pairs * @method getCollisionPairs @@ -61673,102 +64057,52 @@ var preliminaryList = { keys:[] }; * @return {Array} */ SAPBroadphase.prototype.getCollisionPairs = function(world){ - var bodiesX = this.axisListX, - bodiesY = this.axisListY, + var bodies = this.axisList, result = this.result, axisIndex = this.axisIndex; result.length = 0; // Update all AABBs if needed - for(var i=0; i!==bodiesX.length; i++){ - var b = bodiesX[i]; - if(b.aabbNeedsUpdate) b.updateAABB(); + var l = bodies.length; + while(l--){ + var b = bodies[l]; + if(b.aabbNeedsUpdate){ + b.updateAABB(); + } } // Sort the lists - SAPBroadphase.sortAxisListX(bodiesX); - SAPBroadphase.sortAxisListY(bodiesY); + SAPBroadphase.sortAxisList(bodies, axisIndex); // Look through the X list - for(var i=0, N=bodiesX.length; i!==N; i++){ - var bi = bodiesX[i]; + for(var i=0, N=bodies.length|0; i!==N; i++){ + var bi = bodies[i]; for(var j=i+1; j G = [-n -rixn n rjxn] + var r = vec2.create(); + var ri = vec2.create(); // worldAnchorA + var rj = vec2.create(); // worldAnchorB + var that = this; normal.computeGq = function(){ + var bodyA = this.bodyA, + bodyB = this.bodyB, + xi = bodyA.position, + xj = bodyB.position; + + // Transform local anchors to world + vec2.rotate(ri, localAnchorA, bodyA.angle); + vec2.rotate(rj, localAnchorB, bodyB.angle); + + vec2.add(r, xi, rj); + vec2.sub(r, r, ri); + vec2.sub(r, r, xi); + vec2.sub(r, bodyB.position, bodyA.position); - return vec2.length(r)-distance; + return vec2.length(r) - that.distance; }; // Make the contact constraint bilateral @@ -61921,13 +64312,35 @@ DistanceConstraint.prototype = new Constraint(); * @method update */ var n = vec2.create(); +var ri = vec2.create(); // worldAnchorA +var rj = vec2.create(); // worldAnchorB DistanceConstraint.prototype.update = function(){ var normal = this.equations[0], bodyA = this.bodyA, bodyB = this.bodyB, distance = this.distance, + xi = bodyA.position, + xj = bodyB.position, G = normal.G; + // Transform local anchors to world + vec2.rotate(ri, this.localAnchorA, bodyA.angle); + vec2.rotate(rj, this.localAnchorB, bodyB.angle); + + // Caluclate cross products + var rixn = vec2.crossLength(ri, n), + rjxn = vec2.crossLength(rj, n); + + /* + // G = [-n -rixn n rjxn] + G[0] = -n[0]; + G[1] = -n[1]; + G[2] = -rixn; + G[3] = n[0]; + G[4] = n[1]; + G[5] = rjxn; + */ + vec2.sub(n, bodyB.position, bodyA.position); vec2.normalize(n,n); G[0] = -n[0]; @@ -62536,6 +64949,7 @@ var worldPivotA = vec2.create(), * @param {Number} [options.maxForce] The maximum force that should be applied to constrain the bodies. * @extends Constraint * @todo Ability to specify world points + * @todo put pivot parameters in the options object? */ function RevoluteConstraint(bodyA, pivotA, bodyB, pivotB, options){ options = options || {}; @@ -62546,12 +64960,12 @@ function RevoluteConstraint(bodyA, pivotA, bodyB, pivotB, options){ /** * @property {Array} pivotA */ - this.pivotA = pivotA; + this.pivotA = vec2.fromValues(pivotA[0],pivotA[1]); /** * @property {Array} pivotB */ - this.pivotB = pivotB; + this.pivotB = vec2.fromValues(pivotB[0],pivotB[1]); // Equations to be fed to the solver var eqs = this.equations = [ @@ -63127,35 +65541,9 @@ Equation.prototype.computeGq = function(){ ai = bi.angle, aj = bj.angle; - // Transform to the given body frames - /* - vec2.rotate(qi,this.xi,ai); - vec2.rotate(qj,this.xj,aj); - vec2.add(qi,qi,xi); - vec2.add(qj,qj,xj); - */ - return Gmult(G, qi, ai, qj, aj) + this.offset; }; -var tmp_i = vec2.create(), - tmp_j = vec2.create(); -Equation.prototype.transformedGmult = function(G,vi,wi,vj,wj){ - // Transform velocity to the given body frames - // v_p = v + w x r - /* - vec2.rotate(tmp_i,this.xi,Math.PI / 2 + this.bi.angle); // Get r, and rotate 90 degrees. We get the "x r" part - vec2.rotate(tmp_j,this.xj,Math.PI / 2 + this.bj.angle); - vec2.scale(tmp_i,tmp_i,wi); // Temp vectors are now (w x r) - vec2.scale(tmp_j,tmp_j,wj); - vec2.add(tmp_i,tmp_i,vi); - vec2.add(tmp_j,tmp_j,vj); - */ - - // Note: angular velocity is same - return Gmult(G,vi,wi,vj,wj); -}; - /** * Computes G*W, where W are the body velocities * @method computeGW @@ -63169,7 +65557,7 @@ Equation.prototype.computeGW = function(){ vj = bj.velocity, wi = bi.angularVelocity, wj = bj.angularVelocity; - return this.transformedGmult(G,vi,wi,vj,wj) + this.relativeVelocity; + return Gmult(G,vi,wi,vj,wj) + this.relativeVelocity; }; /** @@ -63211,7 +65599,7 @@ Equation.prototype.computeGiMf = function(){ vec2.scale(iMfi, fi,invMassi); vec2.scale(iMfj, fj,invMassj); - return this.transformedGmult(G,iMfi,ti*invIi,iMfj,tj*invIj); + return Gmult(G,iMfi,ti*invIi,iMfj,tj*invIj); }; function getBodyInvMass(body){ @@ -63309,7 +65697,7 @@ Equation.prototype.computeInvC = function(eps){ return 1.0 / (this.computeGiMGt() + eps); }; -},{"../math/vec2":30,"../objects/Body":31,"../utils/Utils":45}],23:[function(require,module,exports){ +},{"../math/vec2":30,"../objects/Body":31,"../utils/Utils":47}],23:[function(require,module,exports){ var vec2 = require('../math/vec2') , Equation = require('./Equation') , Utils = require('../utils/Utils'); @@ -63428,7 +65816,7 @@ FrictionEquation.prototype.computeB = function(a,b,h){ return B; }; -},{"../math/vec2":30,"../utils/Utils":45,"./Equation":22}],24:[function(require,module,exports){ +},{"../math/vec2":30,"../utils/Utils":47,"./Equation":22}],24:[function(require,module,exports){ var Equation = require("./Equation"), vec2 = require('../math/vec2'); @@ -63453,7 +65841,7 @@ function RotationalLockEquation(bodyA, bodyB, options){ var G = this.G; G[2] = 1; G[5] = -1; -}; +} RotationalLockEquation.prototype = new Equation(); RotationalLockEquation.prototype.constructor = RotationalLockEquation; @@ -63544,9 +65932,16 @@ EventEmitter.prototype = { has: function ( type, listener ) { if ( this._listeners === undefined ) return false; var listeners = this._listeners; - if ( listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1 ) { - return true; + if(listener){ + if ( listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1 ) { + return true; + } + } else { + if ( listeners[ type ] !== undefined ) { + return true; + } } + return false; }, @@ -64256,6 +66651,19 @@ vec2.rotate = function(out,a,angle){ out[1] = s*x +c*y; }; +/** + * Rotate a vector 90 degrees clockwise + * @method rotate90cw + * @static + * @param {Float32Array} out + * @param {Float32Array} a + * @param {Number} angle + */ +vec2.rotate90cw = function(out, a) { + out[0] = a[1]; + out[1] = -a[0]; +}; + /** * Transform a point position to local frame. * @method toLocalFrame @@ -64655,6 +67063,8 @@ function Body(options){ this.lastAngularDampingScale = 1; this.lastDampingTimeStep = -1; + this._wakeUpAfterNarrowphase = false; + this.updateMassProperties(); } Body.prototype = new EventEmitter(); @@ -65216,6 +67626,7 @@ Body.SLEEPING = 2; },{"../collision/AABB":8,"../events/EventEmitter":26,"../math/vec2":30,"../shapes/Convex":36,"poly-decomp":6}],32:[function(require,module,exports){ var vec2 = require('../math/vec2'); +var Utils = require('../utils/Utils'); module.exports = Spring; @@ -65230,34 +67641,40 @@ module.exports = Spring; * @param {number} [options.restLength=1] A number > 0. Default: 1 * @param {number} [options.stiffness=100] Spring constant (see Hookes Law). A number >= 0. * @param {number} [options.damping=1] A number >= 0. Default: 1 - * @param {Array} [options.worldAnchorA] Where to hook the spring to body A, in world coordinates. Overrides the option "localAnchorA" if given. - * @param {Array} [options.worldAnchorB] * @param {Array} [options.localAnchorA] Where to hook the spring to body A, in local body coordinates. Defaults to the body center. * @param {Array} [options.localAnchorB] + * @param {Array} [options.worldAnchorA] Where to hook the spring to body A, in world coordinates. Overrides the option "localAnchorA" if given. + * @param {Array} [options.worldAnchorB] */ function Spring(bodyA,bodyB,options){ - options = options || {}; + options = Utils.defaults(options,{ + restLength: 1, + stiffness: 100, + damping: 1, + localAnchorA: [0,0], + localAnchorB: [0,0], + }); /** * Rest length of the spring. * @property restLength * @type {number} */ - this.restLength = typeof(options.restLength)=="number" ? options.restLength : 1; + this.restLength = options.restLength; /** * Stiffness of the spring. * @property stiffness * @type {number} */ - this.stiffness = options.stiffness || 100; + this.stiffness = options.stiffness; /** * Damping of the spring. * @property damping * @type {number} */ - this.damping = options.damping || 1; + this.damping = options.damping; /** * First connected body. @@ -65278,20 +67695,24 @@ function Spring(bodyA,bodyB,options){ * @property localAnchorA * @type {Array} */ - this.localAnchorA = vec2.fromValues(0,0); + this.localAnchorA = vec2.create(); + vec2.copy(this.localAnchorA, options.localAnchorA); /** * Anchor for bodyB in local bodyB coordinates. * @property localAnchorB * @type {Array} */ - this.localAnchorB = vec2.fromValues(0,0); + this.localAnchorB = vec2.create(); + vec2.copy(this.localAnchorB, options.localAnchorB); - if(options.localAnchorA) vec2.copy(this.localAnchorA, options.localAnchorA); - if(options.localAnchorB) vec2.copy(this.localAnchorB, options.localAnchorB); - if(options.worldAnchorA) this.setWorldAnchorA(options.worldAnchorA); - if(options.worldAnchorB) this.setWorldAnchorB(options.worldAnchorB); -}; + if(options.worldAnchorA){ + this.setWorldAnchorA(options.worldAnchorA); + } + if(options.worldAnchorB){ + this.setWorldAnchorB(options.worldAnchorB); + } +} /** * Set the anchor point on body A, using world coordinates. @@ -65397,7 +67818,7 @@ Spring.prototype.applyForce = function(){ bodyB.angularForce += rj_x_f; }; -},{"../math/vec2":30}],33:[function(require,module,exports){ +},{"../math/vec2":30,"../utils/Utils":47}],33:[function(require,module,exports){ // Export p2 classes module.exports = { AABB : require('./collision/AABB'), @@ -65439,7 +67860,7 @@ module.exports = { version : require('../package.json').version, }; -},{"../package.json":7,"./collision/AABB":8,"./collision/Broadphase":9,"./collision/GridBroadphase":10,"./collision/NaiveBroadphase":11,"./collision/Narrowphase":12,"./collision/SAPBroadphase":13,"./constraints/Constraint":14,"./constraints/DistanceConstraint":15,"./constraints/GearConstraint":16,"./constraints/LockConstraint":17,"./constraints/PrismaticConstraint":18,"./constraints/RevoluteConstraint":19,"./equations/AngleLockEquation":20,"./equations/ContactEquation":21,"./equations/Equation":22,"./equations/FrictionEquation":23,"./equations/RotationalVelocityEquation":25,"./events/EventEmitter":26,"./material/ContactMaterial":27,"./material/Material":28,"./math/vec2":30,"./objects/Body":31,"./objects/Spring":32,"./shapes/Capsule":34,"./shapes/Circle":35,"./shapes/Convex":36,"./shapes/Heightfield":37,"./shapes/Line":38,"./shapes/Particle":39,"./shapes/Plane":40,"./shapes/Rectangle":41,"./shapes/Shape":42,"./solver/GSSolver":43,"./solver/Solver":44,"./utils/Utils":45,"./world/World":49}],34:[function(require,module,exports){ +},{"../package.json":7,"./collision/AABB":8,"./collision/Broadphase":9,"./collision/GridBroadphase":10,"./collision/NaiveBroadphase":11,"./collision/Narrowphase":12,"./collision/SAPBroadphase":13,"./constraints/Constraint":14,"./constraints/DistanceConstraint":15,"./constraints/GearConstraint":16,"./constraints/LockConstraint":17,"./constraints/PrismaticConstraint":18,"./constraints/RevoluteConstraint":19,"./equations/AngleLockEquation":20,"./equations/ContactEquation":21,"./equations/Equation":22,"./equations/FrictionEquation":23,"./equations/RotationalVelocityEquation":25,"./events/EventEmitter":26,"./material/ContactMaterial":27,"./material/Material":28,"./math/vec2":30,"./objects/Body":31,"./objects/Spring":32,"./shapes/Capsule":34,"./shapes/Circle":35,"./shapes/Convex":36,"./shapes/Heightfield":37,"./shapes/Line":38,"./shapes/Particle":39,"./shapes/Plane":40,"./shapes/Rectangle":41,"./shapes/Shape":42,"./solver/GSSolver":43,"./solver/Solver":44,"./utils/Utils":47,"./world/World":51}],34:[function(require,module,exports){ var Shape = require('./Shape') , vec2 = require('../math/vec2'); @@ -65453,7 +67874,7 @@ module.exports = Capsule; * @param {Number} [length] The distance between the end points * @param {Number} [radius] Radius of the capsule */ -function Capsule(length,radius){ +function Capsule(length, radius){ /** * The distance between the end points. @@ -65827,7 +68248,8 @@ Convex.prototype.computeAABB = function(out, position, angle){ },{"../math/polyk":29,"../math/vec2":30,"./Shape":42,"poly-decomp":6}],37:[function(require,module,exports){ var Shape = require('./Shape') -, vec2 = require('../math/vec2'); +, vec2 = require('../math/vec2') +, Utils = require('../utils/Utils'); module.exports = Heightfield; @@ -65842,7 +68264,26 @@ module.exports = Heightfield; * @todo Should take maxValue as an option and also be able to compute it itself if not given. * @todo Should be possible to use along all axes, not just y */ -function Heightfield(data,maxValue,elementWidth){ +function Heightfield(data, options){ + options = Utils.defaults(options, { + maxValue : null, + minValue : null, + elementWidth : 0.1 + }); + + if(options.minValue === null || options.maxValue === null){ + options.maxValue = data[0]; + options.minValue = data[0]; + for(var i=0; i !== data.length; i++){ + var v = data[i]; + if(v > options.maxValue){ + options.maxValue = v; + } + if(v < options.minValue){ + options.minValue = v; + } + } + } /** * An array of numbers, or height values, that are spread out along the x axis. @@ -65854,13 +68295,19 @@ function Heightfield(data,maxValue,elementWidth){ * Max value of the data * @property {number} maxValue */ - this.maxValue = maxValue; + this.maxValue = options.maxValue; + + /** + * Max value of the data + * @property {number} minValue + */ + this.minValue = options.minValue; /** * The width of each element * @property {number} elementWidth */ - this.elementWidth = elementWidth; + this.elementWidth = options.elementWidth; Shape.call(this,Shape.HEIGHTFIELD); } @@ -65902,7 +68349,7 @@ Heightfield.prototype.computeAABB = function(out, position, angle){ out.lowerBound[1] = -Number.MAX_VALUE; // Infinity }; -},{"../math/vec2":30,"./Shape":42}],38:[function(require,module,exports){ +},{"../math/vec2":30,"../utils/Utils":47,"./Shape":42}],38:[function(require,module,exports){ var Shape = require('./Shape') , vec2 = require('../math/vec2') @@ -65922,10 +68369,10 @@ function Line(length){ * @property length * @type {Number} */ - this.length = length; + this.length = length || 1; Shape.call(this,Shape.LINE); -}; +} Line.prototype = new Shape(); Line.prototype.computeMomentOfInertia = function(mass){ return mass * Math.pow(this.length,2) / 12; @@ -66064,10 +68511,10 @@ Plane.prototype.updateArea = function(){ }; -},{"../math/vec2":30,"../utils/Utils":45,"./Shape":42}],41:[function(require,module,exports){ +},{"../math/vec2":30,"../utils/Utils":47,"./Shape":42}],41:[function(require,module,exports){ var vec2 = require('../math/vec2') , Shape = require('./Shape') -, Convex = require('./Convex') +, Convex = require('./Convex'); module.exports = Rectangle; @@ -66075,34 +68522,37 @@ module.exports = Rectangle; * Rectangle shape class. * @class Rectangle * @constructor - * @param {Number} w Width - * @param {Number} h Height + * @param {Number} width Width + * @param {Number} height Height * @extends Convex */ -function Rectangle(w,h){ - var verts = [ vec2.fromValues(-w/2, -h/2), - vec2.fromValues( w/2, -h/2), - vec2.fromValues( w/2, h/2), - vec2.fromValues(-w/2, h/2)]; +function Rectangle(width, height){ + width = width || 1; + height = height || 1; + + var verts = [ vec2.fromValues(-width/2, -height/2), + vec2.fromValues( width/2, -height/2), + vec2.fromValues( width/2, height/2), + vec2.fromValues(-width/2, height/2)]; /** * Total width of the rectangle * @property width * @type {Number} */ - this.width = w; + this.width = width; /** * Total height of the rectangle * @property height * @type {Number} */ - this.height = h; + this.height = height; Convex.call(this,verts); this.type = Shape.RECTANGLE; -}; +} Rectangle.prototype = new Convex([]); /** @@ -66403,8 +68853,9 @@ function GSSolver(options){ GSSolver.prototype = new Solver(); function setArrayZero(array){ - for(var i=0; i!==array.length; i++){ - array[i] = 0.0; + var l = array.length; + while(l--){ + array[l] = +0.0; } } @@ -66489,6 +68940,8 @@ GSSolver.prototype.solve = function(h, world){ } } + GSSolver.updateMultipliers(equations, lambda, 1/h); + // Set computed friction force for(j=0; j!==Neq; j++){ var eq = equations[j]; @@ -66525,6 +68978,17 @@ GSSolver.prototype.solve = function(h, world){ for(i=0; i!==Nbodies; i++){ bodies[i].addConstraintVelocity(); } + + GSSolver.updateMultipliers(equations, lambda, 1/h); + } +}; + +// Sets the .multiplier property of each equation +GSSolver.updateMultipliers = function(equations, lambda, invDt){ + // Set the .multiplier property of each equation + var l = equations.length; + while(l--){ + equations[l].multiplier = lambda[l] * invDt; } }; @@ -66552,13 +69016,12 @@ GSSolver.iterateEquation = function(j,eq,eps,Bs,invCs,lambda,useZeroRHS,dt,iter) deltalambda = maxForce*dt - lambdaj; } lambda[j] += deltalambda; - eq.multiplier = lambda[j] / dt; eq.addToWlambda(deltalambda); return deltalambda; }; -},{"../equations/FrictionEquation":23,"../math/vec2":30,"../utils/Utils":45,"./Solver":44}],44:[function(require,module,exports){ +},{"../equations/FrictionEquation":23,"../math/vec2":30,"../utils/Utils":47,"./Solver":44}],44:[function(require,module,exports){ var Utils = require('../utils/Utils') , EventEmitter = require('../events/EventEmitter') @@ -66692,7 +69155,300 @@ Solver.prototype.removeAllEquations = function(){ Solver.GS = 1; Solver.ISLAND = 2; -},{"../events/EventEmitter":26,"../utils/Utils":45}],45:[function(require,module,exports){ +},{"../events/EventEmitter":26,"../utils/Utils":47}],45:[function(require,module,exports){ +var TupleDictionary = require('./TupleDictionary'); +var Utils = require('./Utils'); + +module.exports = OverlapKeeper; + +/** + * Keeps track of overlaps in the current state and the last step state. + * @class OverlapKeeper + * @constructor + */ +function OverlapKeeper() { + this.overlappingLastState = new TupleDictionary(); + this.overlappingCurrentState = new TupleDictionary(); + this.recordPool = []; + this.tmpDict = new TupleDictionary(); + this.tmpArray1 = []; +} + +/** + * @method tick + */ +OverlapKeeper.prototype.tick = function() { + var last = this.overlappingLastState; + var current = this.overlappingCurrentState; + + // Save old objects into pool + var l = current.keys.length; + while(l--){ + var key = current.keys[l]; + this.recordPool.push(current.getByKey(key)); + } + + // Clear last object + last.reset(); + + // Transfer from new object to old + last.copy(current); + + // Clear current object + current.reset(); +}; + +/** + * @method setOverlapping + */ +OverlapKeeper.prototype.setOverlapping = function(bodyA, shapeA, bodyB, shapeB) { + var last = this.overlappingLastState; + var current = this.overlappingCurrentState; + + // Store current contact state + if(!current.get(shapeA.id, shapeB.id)){ + + var data; + if(this.recordPool.length){ + data = this.recordPool.pop(); + } else { + data = new OverlapKeeperRecord(bodyA, shapeA, bodyB, shapeB); + } + + current.set(shapeA.id, shapeB.id, data); + } +}; + +OverlapKeeper.prototype.getNewOverlaps = function(result){ + return this.getDiff(this.overlappingLastState, this.overlappingCurrentState, result); +}; + +OverlapKeeper.prototype.getEndOverlaps = function(result){ + return this.getDiff(this.overlappingCurrentState, this.overlappingLastState, result); +}; + +OverlapKeeper.prototype.getDiff = function(dictA, dictB, result){ + var result = result || []; + var last = dictA; + var current = dictB; + + result.length = 0; + + var l = current.keys.length; + while(l--){ + var key = current.keys[l]; + var data = current.data[key]; + + if(!data){ + throw new Error('Key '+key+' had no data!'); + } + + var lastData = last.data[key]; + if(!lastData){ + // Not overlapping in last state, but in current. + result.push(data); + } + } + + return result; +}; + +OverlapKeeper.prototype.isNewOverlap = function(shapeA, shapeB){ + var idA = shapeA.id|0, + idB = shapeB.id|0; + return !!!this.overlappingLastState.get(idA, idB) && !!this.overlappingCurrentState.get(idA, idB); +}; + +OverlapKeeper.prototype.getNewBodyOverlaps = function(result){ + this.tmpArray1.length = 0; + var overlaps = this.getNewOverlaps(this.tmpArray1); + return this.getBodyDiff(overlaps, result); +}; + +OverlapKeeper.prototype.getEndBodyOverlaps = function(result){ + this.tmpArray1.length = 0; + var overlaps = this.getEndOverlaps(this.tmpArray1); + return this.getBodyDiff(overlaps, result); +}; + +OverlapKeeper.prototype.getBodyDiff = function(overlaps, result){ + result = result || []; + var accumulator = this.tmpDict; + + var l = overlaps.length; + + while(l--){ + var data = overlaps[l]; + + // Since we use body id's for the accumulator, these will be a subset of the original one + accumulator.set(data.bodyA.id|0, data.bodyB.id|0, data); + } + + l = accumulator.keys.length; + while(l--){ + var data = accumulator.keys[l]; + result.push(data.bodyA, data.bodyB); + } + + accumulator.reset(); + + return result; +}; + +/** + * Overlap data container for the OverlapKeeper + * @param {Body} bodyA + * @param {Shape} shapeA + * @param {Body} bodyB + * @param {Shape} shapeB [description] + */ +function OverlapKeeperRecord(bodyA, shapeA, bodyB, shapeB){ + /** + * @property {Shape} shapeA + */ + this.shapeA = shapeA; + /** + * @property {Shape} shapeB + */ + this.shapeB = shapeB; + /** + * @property {Body} bodyA + */ + this.bodyA = bodyA; + /** + * @property {Body} bodyB + */ + this.bodyB = bodyB; +} + +OverlapKeeperRecord.prototype.set = function(bodyA, shapeA, bodyB, shapeB){ + OverlapKeeperRecord.call(this, bodyA, shapeA, bodyB, shapeB); +}; + +},{"./TupleDictionary":46,"./Utils":47}],46:[function(require,module,exports){ +var Utils = require('./Utils'); + +module.exports = TupleDictionary; + +/** + * @class TupleDictionary + * @constructor + */ +function TupleDictionary() { + + /** + * The data storage + * @property data + * @type {Array} + */ + this.data = []; + + /** + * Keys that are currently used. + * @type {Array} + */ + this.keys = []; +} + +/** + * Generate a key given two integers + * @param {number} i + * @param {number} j + * @return {string} + */ +TupleDictionary.prototype.getKey = function(id1, id2) { + id1 = id1|0; + id2 = id2|0; + + if ( (id1|0) === (id2|0) ){ + return -1; + } + + // valid for values < 2^16 + return ((id1|0) > (id2|0) ? + (id1 << 16) | (id2 & 0xFFFF) : + (id2 << 16) | (id1 & 0xFFFF))|0 + ; +}; + +/** + * @method getByKey + * @param {Number} key + * @return {Object} + */ +TupleDictionary.prototype.getByKey = function(key) { + key = key|0; + return this.data[key]; +}; + +/** + * @method get + * @param {Number} i + * @param {Number} j + * @return {Number} + */ +TupleDictionary.prototype.get = function(i, j) { + i = i|0; + j = j|0; + var key = this.getKey(i, j)|0; + return this.data[key]; +}; + +/** + * @method set + * @param {Number} i + * @param {Number} j + * @param {Number} value + */ +TupleDictionary.prototype.set = function(i, j, value) { + if(!value){ + throw new Error("No data!"); + } + + i = i|0; + j = j|0; + var key = this.getKey(i, j)|0; + + // Check if key already exists + if(!this.get(i, j)){ + this.keys.push(key); + } + + this.data[key] = value; + + return key; +}; + +/** + * @method reset + */ +TupleDictionary.prototype.reset = function() { + var data = this.data, + keys = this.keys; + + var l = keys.length|0; + while(l--){ + var key = keys[l]|0; + data[key] = undefined; + } + + keys.length = 0; +}; + +/** + * @method copy + */ +TupleDictionary.prototype.copy = function(dict) { + this.reset(); + Utils.appendArray(this.keys, dict.keys); + var l = dict.keys.length|0; + while(l--){ + var key = dict.keys[l]|0; + this.data[key] = dict.data[key]; + } +}; + +},{"./Utils":47}],47:[function(require,module,exports){ module.exports = Utils; /** @@ -66741,7 +69497,7 @@ Utils.splice = function(array,index,howmany){ * @static * @property ARRAY_TYPE */ -Utils.ARRAY_TYPE = Float32Array || Array; +Utils.ARRAY_TYPE = window.Float32Array || Array; /** * Extend an object with the properties of another @@ -66756,7 +69512,24 @@ Utils.extend = function(a,b){ } }; -},{}],46:[function(require,module,exports){ +/** + * Extend an object with the properties of another + * @static + * @method extend + * @param {object} a + * @param {object} b + */ +Utils.defaults = function(options, defaults){ + options = options || {}; + for(var key in defaults){ + if(!(key in options)){ + options[key] = defaults[key]; + } + } + return options; +}; + +},{}],48:[function(require,module,exports){ var Body = require('../objects/Body'); module.exports = Island; @@ -66843,7 +69616,7 @@ Island.prototype.sleep = function(){ return true; }; -},{"../objects/Body":31}],47:[function(require,module,exports){ +},{"../objects/Body":31}],49:[function(require,module,exports){ var vec2 = require('../math/vec2') , Island = require('./Island') , IslandNode = require('./IslandNode') @@ -67030,7 +69803,7 @@ IslandManager.prototype.split = function(world){ return islands; }; -},{"../math/vec2":30,"../objects/Body":31,"./Island":46,"./IslandNode":48}],48:[function(require,module,exports){ +},{"../math/vec2":30,"../objects/Body":31,"./Island":48,"./IslandNode":50}],50:[function(require,module,exports){ module.exports = IslandNode; /** @@ -67078,7 +69851,7 @@ IslandNode.prototype.reset = function(){ this.body = null; }; -},{}],49:[function(require,module,exports){ +},{}],51:[function(require,module,exports){ var GSSolver = require('../solver/GSSolver') , Solver = require('../solver/Solver') , NaiveBroadphase = require('../collision/NaiveBroadphase') @@ -67107,6 +69880,7 @@ var GSSolver = require('../solver/GSSolver') , SAPBroadphase = require('../collision/SAPBroadphase') , Narrowphase = require('../collision/Narrowphase') , Utils = require('../utils/Utils') +, OverlapKeeper = require('../utils/OverlapKeeper') , IslandManager = require('./IslandManager') module.exports = World; @@ -67130,11 +69904,11 @@ if(!performance.now){ * @class World * @constructor * @param {Object} [options] - * @param {Solver} options.solver Defaults to GSSolver. - * @param {Array} options.gravity Defaults to [0,-9.78] - * @param {Broadphase} options.broadphase Defaults to NaiveBroadphase - * @param {Boolean} options.islandSplit - * @param {Boolean} options.doProfiling + * @param {Solver} [options.solver] Defaults to GSSolver. + * @param {Array} [options.gravity] Defaults to [0,-9.78] + * @param {Broadphase} [options.broadphase] Defaults to NaiveBroadphase + * @param {Boolean} [options.islandSplit=false] + * @param {Boolean} [options.doProfiling=false] * @extends EventEmitter */ function World(options){ @@ -67189,7 +69963,10 @@ function World(options){ * @property gravity * @type {Array} */ - this.gravity = options.gravity || vec2.fromValues(0, -9.78); + this.gravity = vec2.fromValues(0, -9.78); + if(options.gravity){ + vec2.copy(this.gravity, options.gravity); + } /** * Gravity to use when approximating the friction max force (mu*mass*gravity). @@ -67463,7 +70240,8 @@ function World(options){ // For keeping track of overlapping shapes this.overlappingShapesLastState = { keys:[] }; this.overlappingShapesCurrentState = { keys:[] }; - this.overlappingShapeLookup = { keys:[] }; + + this.overlapKeeper = new OverlapKeeper(); } World.prototype = new Object(EventEmitter.prototype); @@ -67579,7 +70357,7 @@ World.prototype.step = function(dt,timeSinceLastCalled,maxSubSteps){ internalSteps = Math.min(internalSteps,maxSubSteps); // Do some fixed steps to catch up - for(var i=0; i= speedLimitSquaredB*2 + bj.motionState !== Body.STATIC ){ - wakeUpA = true; + var speedSquaredB = vec2.squaredLength(bj.velocity) + Math.pow(bj.angularVelocity,2); + var speedLimitSquaredB = Math.pow(bj.sleepSpeedLimit,2); + if(speedSquaredB >= speedLimitSquaredB*2){ + bi._wakeUpAfterNarrowphase = true; + } } + if( bj.allowSleep && bj.motionState === Body.DYNAMIC && bj.sleepState === Body.SLEEPING && bi.sleepState === Body.AWAKE && - bi.motionState !== Body.STATIC && - speedSquaredA >= speedLimitSquaredA*2 + bi.motionState !== Body.STATIC ){ - wakeUpB = true; - } - if(wakeUpA){ - bi.wakeUp(); - } - if(wakeUpB){ - bj.wakeUp(); + var speedSquaredA = vec2.squaredLength(bi.velocity) + Math.pow(bi.angularVelocity,2); + var speedLimitSquaredA = Math.pow(bi.sleepSpeedLimit,2); + if(speedSquaredA >= speedLimitSquaredA*2){ + bj._wakeUpAfterNarrowphase = true; + } } - var key = si.id < sj.id ? si.id+" "+ sj.id : sj.id+" "+ si.id; - if(!this.overlappingShapesLastState[key]){ + this.overlapKeeper.setOverlapping(bi, si, bj, sj); + if(this.has('beginContact') && this.overlapKeeper.isNewOverlap(si, sj)){ // Report new shape overlap var e = this.beginContactEvent; @@ -68057,24 +70814,6 @@ World.prototype.runNarrowphase = function(np,bi,si,xi,ai,bj,sj,xj,aj,cm,glen){ this.emit(e); } - // Store current contact state - var current = this.overlappingShapesCurrentState; - if(!current[key]){ - - current[key] = true; - current.keys.push(key); - - // Also store shape & body data - current[key+"_shapeA"] = si; - current.keys.push(key+"_shapeA"); - current[key+"_shapeB"] = sj; - current.keys.push(key+"_shapeB"); - current[key+"_bodyA"] = bi; - current.keys.push(key+"_bodyA"); - current[key+"_bodyB"] = bj; - current.keys.push(key+"_bodyB"); - } - // divide the max friction force by the number of contacts if(typeof(numContacts)==="number" && numFrictionEquations > 1){ // Why divide by 1? for(var i=np.frictionEquations.length-numFrictionEquations; i} materials - A local array of all created Materials. * @protected @@ -69552,10 +72297,40 @@ Phaser.Physics.P2.prototype = { }, /** + * Pauses the P2 World independent of the game pause state. + * + * @method Phaser.Physics.P2#pause + */ + pause: function() { + + this.paused = true; + + }, + + /** + * Resumes a paused P2 World. + * + * @method Phaser.Physics.P2#resume + */ + resume: function() { + + this.paused = false; + + }, + + /** + * Internal P2 update loop. + * * @method Phaser.Physics.P2#update */ update: function () { + // Do nothing when the pysics engine was paused before + if (this.paused) + { + return; + } + if (this.useElapsedTime) { this.world.step(this.game.time.physicsElapsed); @@ -69913,7 +72688,7 @@ Phaser.Physics.P2.prototype = { while (i--) { - bodies.setMaterial(material); + bodies[i].setMaterial(material); } }, @@ -72258,7 +75033,7 @@ Phaser.Physics.P2.Body.prototype = { }, /** - * Add a polygon fixture. This is used during #loadPhaserPolygon. + * Add a polygon fixture. This is used during #loadPolygon. * * @method Phaser.Physics.P2.Body#addFixture * @param {string} fixtureData - The data for the fixture. It contains: isSensor, filter (collision) and the actual polygon shapes. @@ -72335,97 +75110,70 @@ Phaser.Physics.P2.Body.prototype = { * @method Phaser.Physics.P2.Body#loadPolygon * @param {string} key - The key of the Physics Data file as stored in Game.Cache. * @param {string} object - The key of the object within the Physics data file that you wish to load the shape data from. - * @param {object} options - An object containing the build options. Note that this isn't used if the data file contains multiple shapes. - * @param {boolean} [options.optimalDecomp=false] - Set to true if you need optimal decomposition. Warning: very slow for polygons with more than 10 vertices. - * @param {boolean} [options.skipSimpleCheck=false] - Set to true if you already know that the path is not intersecting itself. - * @param {boolean|number} [options.removeCollinearPoints=false] - Set to a number (angle threshold value) to remove collinear points, or false to keep all points. * @return {boolean} True on success, else false. */ - loadPolygon: function (key, object, options) { + loadPolygon: function (key, object) { var data = this.game.cache.getPhysicsData(key, object); - if (data.length === 1) + // We've multiple Convex shapes, they should be CCW automatically + var cm = p2.vec2.create(); + + for (var i = 0; i < data.length; i++) { - var temp = []; - var localData = data[data.length - 1]; + var vertices = []; - // We've a list of numbers - for (var i = 0, len = localData.shape.length; i < len; i += 2) + for (var s = 0; s < data[i].shape.length; s += 2) { - temp.push([localData.shape[i], localData.shape[i + 1]]); + vertices.push([ this.world.pxmi(data[i].shape[s]), this.world.pxmi(data[i].shape[s + 1]) ]); } - return this.addPolygon(options, temp); - } - else - { - // We've multiple Convex shapes, they should be CCW automatically - var cm = p2.vec2.create(); + var c = new p2.Convex(vertices); - for (var i = 0; i < data.length; i++) + // Move all vertices so its center of mass is in the local center of the convex + for (var j = 0; j !== c.vertices.length; j++) { - var vertices = []; - - for (var s = 0; s < data[i].shape.length; s += 2) - { - vertices.push([ this.world.pxmi(data[i].shape[s]), this.world.pxmi(data[i].shape[s + 1]) ]); - } - - var c = new p2.Convex(vertices); - - // Move all vertices so its center of mass is in the local center of the convex - for (var j = 0; j !== c.vertices.length; j++) - { - var v = c.vertices[j]; - p2.vec2.sub(v, v, c.centerOfMass); - } - - p2.vec2.scale(cm, c.centerOfMass, 1); - - cm[0] -= this.world.pxmi(this.sprite.width / 2); - cm[1] -= this.world.pxmi(this.sprite.height / 2); - - c.updateTriangles(); - c.updateCenterOfMass(); - c.updateBoundingRadius(); - - this.data.addShape(c, cm); + var v = c.vertices[j]; + p2.vec2.sub(v, v, c.centerOfMass); } - this.data.aabbNeedsUpdate = true; - this.shapeChanged(); + p2.vec2.scale(cm, c.centerOfMass, 1); - return true; + cm[0] -= this.world.pxmi(this.sprite.width / 2); + cm[1] -= this.world.pxmi(this.sprite.height / 2); + + c.updateTriangles(); + c.updateCenterOfMass(); + c.updateBoundingRadius(); + this.data.addShape(c, cm); } - return false; + this.data.aabbNeedsUpdate = true; + this.shapeChanged(); + + return true; }, /** + * DEPRECATED: This method will soon be removed from the API. Please avoid using. * Reads the physics data from a physics data file stored in the Game.Cache. - * It will add the shape data to this Body, as well as set the density (mass), friction and bounce (restitution) values. + * It will add the shape data to this Body, as well as set the density (mass). * - * @method Phaser.Physics.P2.Body#loadPolygon + * @method Phaser.Physics.P2.Body#loadData * @param {string} key - The key of the Physics Data file as stored in Game.Cache. * @param {string} object - The key of the object within the Physics data file that you wish to load the shape data from. - * @param {object} options - An object containing the build options: - * @param {boolean} [options.optimalDecomp=false] - Set to true if you need optimal decomposition. Warning: very slow for polygons with more than 10 vertices. - * @param {boolean} [options.skipSimpleCheck=false] - Set to true if you already know that the path is not intersecting itself. - * @param {boolean|number} [options.removeCollinearPoints=false] - Set to a number (angle threshold value) to remove collinear points, or false to keep all points. * @return {boolean} True on success, else false. */ - loadData: function (key, object, options) { + loadData: function (key, object) { var data = this.game.cache.getPhysicsData(key, object); if (data && data.shape) { this.mass = data.density; - this.loadPolygon(key, object, options); - // TODO set friction + bounce here + return this.loadPolygon(key, object); } } diff --git a/build/phaser.map b/build/phaser.map index 57f8234b7e..ddf9dd87e1 100644 --- a/build/phaser.map +++ b/build/phaser.map @@ -1 +1 @@ -{"version":3,"file":"phaser.min.js","sources":["phaser.js"],"names":["root","this","PIXI","WEBGL_RENDERER","CANVAS_RENDERER","VERSION","blendModes","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","scaleModes","DEFAULT","LINEAR","NEAREST","INTERACTION_FREQUENCY","AUTO_PREVENT_DEFAULT","RAD_TO_DEG","Math","PI","DEG_TO_RAD","Point","x","y","prototype","clone","constructor","set","Rectangle","width","height","contains","x1","y1","EmptyRectangle","Polygon","points","Array","slice","call","arguments","p","i","il","length","push","inside","j","xi","yi","xj","yj","intersect","Circle","radius","dx","dy","r2","Ellipse","normx","normy","getBounds","determineMatrixArrayType","Float32Array","Matrix2","Matrix","a","b","c","d","tx","ty","fromArray","array","toArray","transpose","identityMatrix","DisplayObject","position","scale","pivot","rotation","alpha","visible","hitArea","buttonMode","renderable","parent","stage","worldAlpha","_interactive","defaultCursor","worldTransform","color","dynamic","_sr","_cr","filterArea","_bounds","_currentBounds","_mask","_cacheAsBitmap","_cacheIsDirty","setInteractive","interactive","Object","defineProperty","get","value","dirty","item","isMask","_filters","passes","filterPasses","_filterBlock","target","_generateCachedSprite","_destroyCachedSprite","updateTransform","rotationCache","sin","cos","parentTransform","px","py","a00","a01","a10","a11","a02","a12","b00","b01","b10","b11","matrix","getLocalBounds","setStageReference","generateTexture","renderer","bounds","renderTexture","RenderTexture","render","updateCache","_renderCachedSprite","renderSession","gl","Sprite","_renderWebGL","_cachedSprite","_renderCanvas","texture","resize","tempFilters","filters","destroy","DisplayObjectContainer","children","create","addChild","child","addChildAt","index","Error","removeChild","splice","swapChildren","child2","index1","indexOf","index2","getChildAt","removeChildAt","removeStageReference","undefined","removeChildren","beginIndex","endIndex","begin","end","range","removed","matrixCache","childBounds","childMaxX","childMaxY","minX","Infinity","minY","maxX","maxY","childVisible","spriteBatch","stop","maskManager","pushMask","mask","start","flush","filterManager","pushFilter","popFilter","popMask","context","anchor","_width","_height","tint","blendMode","baseTexture","hasLoaded","onTextureUpdate","onTextureUpdateBind","bind","addEventListener","frame","setTexture","textureChange","cachedTint","updateFrame","w0","w1","h0","h1","x2","y2","x3","y3","x4","y4","currentBlendMode","globalCompositeOperation","blendModesCanvas","source","globalAlpha","transform","roundPixels","setTransform","smoothProperty","scaleMode","tintedTexture","CanvasTinter","getTintedTexture","drawImage","trim","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","Texture","SpriteBatch","textureThing","ready","initWebGL","fastSpriteBatch","WebGLFastSpriteBatch","shaderManager","activateShader","fastShader","defaultShader","isRotated","childTransform","FilterBlock","Text","text","style","canvas","document","createElement","getContext","fromCanvas","setText","setStyle","updateText","font","fill","align","stroke","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowColor","toString","outputText","lines","split","lineWidths","maxLineWidth","lineWidth","measureText","max","lineHeight","determineFontHeight","navigator","isCocoonJS","clearRect","strokeStyle","textBaseline","linePositionX","linePositionY","fillStyle","xShadowOffset","yShadowOffset","fillText","strokeText","updateTexture","requiresUpdate","updateWebGLTexture","fontStyle","result","heightCache","body","getElementsByTagName","dummy","dummyText","createTextNode","appendChild","setAttribute","offsetHeight","spaceLeft","words","wordWidth","wordWidthWithSpace","destroyTexture","BitmapText","_pool","fontName","fontSize","parseInt","fonts","size","data","pos","prevCharCode","chars","line","charCode","charCodeAt","test","charAt","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChildren","lenChars","pop","textWidth","textHeight","Stage","backgroundColor","interactionManager","InteractionManager","setBackgroundColor","setInteractionDelegate","domElement","setTargetDomElement","update","backgroundColorSplit","hex2rgb","hex","substr","backgroundColorString","getMousePosition","mouse","global","lastTime","vendors","window","requestAnimationFrame","cancelAnimationFrame","callback","currTime","Date","getTime","timeToCall","id","setTimeout","clearTimeout","requestAnimFrame","rgb2hex","rgb","Function","thisArg","bound","args","boundArgs","concat","apply","TypeError","F","proto","AjaxRequest","activexmodes","ActiveXObject","XMLHttpRequest","e","canUseNewCanvasBlendModes","fillRect","getImageData","getNextPowerOfTwo","number","EventTarget","listeners","on","type","listener","dispatchEvent","emit","event","l","removeEventListener","off","removeAllEventListeners","PolyK","Triangulate","sign","n","tgs","avl","al","i0","i1","i2","ax","ay","bx","by","cx","cy","earFound","_convex","vi","_PointInTriangle","console","log","v0x","v0y","v1x","v1y","v2x","v2y","dot00","dot01","dot02","dot11","dot12","invDenom","u","v","initDefaultShaders","CompileVertexShader","shaderSrc","_CompileShader","VERTEX_SHADER","CompileFragmentShader","FRAGMENT_SHADER","shaderType","src","join","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","compileProgram","vertexSrc","fragmentSrc","fragmentShader","vertexShader","shaderProgram","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","PixiShader","program","textureCount","attributes","init","defaultVertexSrc","useProgram","uSampler","getUniformLocation","projectionVector","offsetVector","dimensions","aVertexPosition","getAttribLocation","aTextureCoord","colorAttribute","key","uniforms","uniformLocation","initUniforms","uniform","_init","initSampler2D","glMatrix","glValueLength","glFunc","uniformMatrix2fv","uniformMatrix3fv","uniformMatrix4fv","activeTexture","bindTexture","TEXTURE_2D","_glTextures","textureData","magFilter","minFilter","wrapS","CLAMP_TO_EDGE","wrapT","format","LUMINANCE","RGBA","repeat","REPEAT","pixelStorei","UNPACK_FLIP_Y_WEBGL","flipY","border","texImage2D","UNSIGNED_BYTE","texParameteri","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","uniform1i","syncUniforms","z","w","createWebGLTexture","deleteProgram","PixiFastShader","uMatrix","aPositionCoord","aScale","aRotation","StripShader","translationMatrix","PrimitiveShader","tintColor","attribute","WebGLGraphics","renderGraphics","graphics","projection","offset","primitiveShader","_webGL","indices","lastIndex","buffer","createBuffer","indexBuffer","webGL","clearDirty","updateGraphics","activatePrimitiveShader","blendFunc","ONE","ONE_MINUS_SRC_ALPHA","uniform2f","uniform3fv","uniform1f","bindBuffer","ARRAY_BUFFER","vertexAttribPointer","FLOAT","ELEMENT_ARRAY_BUFFER","drawElements","TRIANGLE_STRIP","UNSIGNED_SHORT","deactivatePrimitiveShader","graphicsData","Graphics","POLY","buildPoly","buildLine","RECT","buildRectangle","CIRC","ELIP","buildCircle","glPoints","bufferData","STATIC_DRAW","glIndicies","Uint16Array","webGLData","rectData","fillColor","fillAlpha","r","g","verts","vertPos","tempPoints","totalSegs","seg","vecPos","firstPoint","lastPoint","midPointX","midPointY","unshift","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","a1","b1","c1","a2","b2","c2","denom","pdist","dist","indexCount","indexStart","lineColor","lineAlpha","sqrt","abs","triangles","glContexts","WebGLRenderer","view","transparent","antialias","defaultRenderer","contextLost","handleContextLost","contextRestoredLost","handleContextRestored","options","premultipliedAlpha","stencil","e2","glContextId","blendModesWebGL","SRC_ALPHA","DST_ALPHA","DST_COLOR","WebGLShaderManager","WebGLSpriteBatch","WebGLMaskManager","WebGLFilterManager","drawCount","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","colorMask","__stage","removeEvents","updateTextures","_interactiveEventsAdded","setTarget","viewport","bindFramebuffer","FRAMEBUFFER","clearColor","clear","COLOR_BUFFER_BIT","renderDisplayObject","displayObject","frameUpdates","updateTextureFrame","texturesToDestroy","texturesToUpdate","glTexture","deleteTexture","_updateWebGLuvs","createTexture","UNPACK_PREMULTIPLY_ALPHA_WEBGL","_powerOf2","preventDefault","setContext","maskStack","maskPosition","maskData","STENCIL_TEST","stencilFunc","ALWAYS","stencilOp","KEEP","INCR","NOTEQUAL","DECR","maxAttibs","attribState","tempAttribState","setAttribs","attribs","attribId","enableVertexAttribArray","disableVertexAttribArray","currentShader","vertSize","numVerts","numIndices","vertices","lastIndexCount","drawing","currentBatchSize","currentBaseTexture","vertexBuffer","DYNAMIC_DRAW","sprite","setBlendMode","uvs","_uvs","verticies","aX","aY","x0","y0","renderTilingSprite","tilingSprite","tilingTexture","TextureUvs","tilePosition","tileScaleOffset","offsetX","offsetY","scaleX","tileScale","scaleY","bufferSubData","subarray","TRIANGLES","TEXTURE0","stride","blendModeWebGL","deleteBuffer","maxSize","renderSprite","filterStack","texturePool","initShaderBuffers","filterBlock","_filterArea","filter","FilterTexture","padidng","padding","frameBuffer","_glFilterTexture","vertexArray","uvBuffer","uvArray","inputTexture","outputTexture","filterPass","applyFilterPass","temp","sizeX","sizeY","currentFilter","shaders","colorBuffer","colorArray","createFramebuffer","framebuffer","framebufferTexture2D","COLOR_ATTACHMENT0","deleteFramebuffer","CanvasMaskManager","save","cacheAlpha","CanvasGraphics","renderGraphicsMask","clip","restore","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","Image","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","pixels","putImageData","step","cacheStepsPerColorChannel","min","canUseMultiply","CanvasRenderer","clearBeforeRender","refresh","count","renderStripFlat","strip","beginPath","moveTo","lineTo","closePath","renderStrip","u0","u1","u2","v0","v1","v2","delta","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","CanvasBuffer","strokeRect","arc","ellipseData","h","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","len","rect","currentPath","boundsPadding","destroyCachedSprite","lineStyle","filling","beginFill","endFill","drawRect","drawCircle","drawEllipse","canvasBuffer","translate","updateBounds","TilingSprite","refreshTexture","generateTilingTexture","needsUpdate","__tilePattern","createPattern","forcePowerOfTwo","targetWidth","targetHeight","isFrame","newTextureRequired","isTiling","BaseTextureCache","BaseTextureCacheIdGenerator","BaseTexture","complete","scope","onload","content","imageUrl","updateSourceImage","newSrc","image","crossOrigin","_pixiId","TextureCacheIdGenerator","FrameCache","noFrame","setFrame","onBaseTextureLoaded","onLoaded","destroyBase","tw","th","addTextureToCache","removeTextureFromCache","textureBuffer","renderWebGL","renderCanvas","originalWorldTransform","tempMatrix","exports","module","define","amd","Phaser","DEV_VERSION","GAMES","AUTO","CANVAS","WEBGL","HEADLESS","NONE","LEFT","RIGHT","UP","DOWN","SPRITE","BUTTON","IMAGE","GRAPHICS","TEXT","TILESPRITE","BITMAPTEXT","GROUP","RENDERTEXTURE","TILEMAP","TILEMAPLAYER","EMITTER","POLYGON","BITMAPDATA","CANVAS_FILTER","WEBGL_FILTER","ELLIPSE","SPRITEBATCH","RETROFONT","Utils","parseDimension","dimension","f","innerWidth","innerHeight","shuffle","floor","random","pad","str","dir","padlen","right","ceil","left","isPlainObject","obj","nodeType","hasOwnProperty","extend","name","copy","copyIsArray","deep","isArray","arg","forEach","fun","t","diameter","_diameter","_radius","circumference","setTo","copyFrom","copyTo","dest","distance","round","distanceRound","out","circumferencePoint","angle","asDegrees","offsetPoint","point","top","bottom","equals","intersects","degToRad","intersectsRectangle","halfWidth","xDist","halfHeight","yDist","xCornerDist","yCornerDist","xCornerDistSq","yCornerDistSq","maxCornerDistSq","invert","add","subtract","multiply","divide","clampX","clamp","clampY","output","rotate","getMagnitude","setMagnitude","magnitude","normalize","isZero","m","centroid","pointslength","floorAll","inflate","containsRect","intersection","tolerance","intersectsRaw","union","empty","inflatePoint","containsRaw","rx","ry","rw","rh","containsPoint","volume","Line","fromSprite","startSprite","endSprite","useCenter","center","asSegment","intersectsPoints","pointOnLine","pointOnSegment","xMin","xMax","yMin","yMax","coordinatesOnLine","stepRate","results","sx","sy","err","atan2","pow","Camera","game","world","screenView","deadzone","atLimit","_edge","FOLLOW_LOCKON","FOLLOW_PLATFORMER","FOLLOW_TOPDOWN","FOLLOW_TOPDOWN_TIGHT","follow","helper","focusOn","setPosition","focusOnXY","updateTarget","checkBounds","setBoundsToWorld","setSize","reset","State","make","camera","cache","input","load","math","sound","time","tweens","particles","physics","rnd","preload","loadUpdate","loadRender","paused","shutdown","StateManager","pendingState","states","_pendingState","_clearWorld","_clearCache","_created","_args","current","onInitCallback","onPreloadCallback","onCreateCallback","onUpdateCallback","onRenderCallback","onPreRenderCallback","onLoadUpdateCallback","onLoadRenderCallback","onPausedCallback","onResumedCallback","onShutDownCallback","boot","onPause","pause","onResume","resume","onLoadComplete","loadComplete","state","autoStart","newState","isBooted","remove","callbackContext","onDestroyCallback","clearWorld","clearCache","checkState","restart","preUpdate","removeAll","setCurrentState","totalQueuedFiles","valid","warn","link","getCurrentState","preRender","renderType","LinkedList","next","prev","first","last","total","callAll","entity","Signal","_bindings","_prevParams","self","dispatch","memorize","_shouldPropagate","active","validateListener","fnName","replace","_registerListener","isOnce","listenerContext","priority","binding","prevIndex","_indexOfListener","SignalBinding","_addBinding","execute","_priority","cur","_listener","has","addOnce","_destroy","getNumListeners","halt","bindings","paramsArr","forget","dispose","signal","_isOnce","_signal","params","handlerReturn","detach","isBound","getListener","getSignal","Filter","resolution","setResolution","pointer","toFixed","totalElapsedSeconds","Plugin","hasPreUpdate","hasUpdate","hasPostUpdate","hasRender","hasPostRender","postRender","PluginManager","plugins","_len","_i","plugin","_parent","postUpdate","disableVisibilityChange","checkOffsetInterval","exists","currentRenderOrderID","_hiddenVar","_nextOffsetCheck","_backgroundColor","config","parseConfig","Canvas","now","getOffset","stlye","fullScreenScaleMode","_this","_onChange","visibilityChange","setUserSelect","setTouchAction","checkVisibility","webkitHidden","mozHidden","msHidden","hidden","onpagehide","onpageshow","onblur","onfocus","focusLoss","focusGain","gamePaused","gameResumed","Color","hexToRGB","Group","addToStage","enableBody","physicsBodyType","Physics","ARCADE","alive","cursor","cameraOffset","enableBodyDebug","_sortProperty","_cache","RETURN_NONE","RETURN_TOTAL","RETURN_CHILD","SORT_ASCENDING","SORT_DESCENDING","events","onAddedToGroup","addAt","updateZ","getAt","createMultiple","quantity","resetCursor","previous","swap","child1","bringToTop","getIndex","sendToBack","moveUp","moveDown","xy","reverse","oldChild","newChild","onRemovedFromGroup","setProperty","operation","checkAlive","checkVisible","setAll","setAllChildren","addAll","property","amount","subAll","multiplyAll","divideAll","callAllExists","existsValue","callbackFromArray","method","methodLength","contextLength","renderOrderID","checkExists","forEachExists","iterate","forEachAlive","forEachDead","sort","order","ascendingSortHandler","descendingSortHandler","customSort","sortHandler","returnType","getFirstExists","getFirstAlive","getFirstDead","getTop","getBottom","countLiving","countDead","getRandom","startIndex","removeBetween","destroyChildren","soft","radToDeg","World","setBounds","wrap","useBounds","integerInRange","ScaleManager","minWidth","maxWidth","minHeight","maxHeight","forceLandscape","forcePortrait","incorrectOrientation","pageAlignHorizontally","pageAlignVertically","maxIterations","orientationSprite","enterLandscape","enterPortrait","enterIncorrectOrientation","leaveIncorrectOrientation","hasResized","fullScreenTarget","enterFullScreen","leaveFullScreen","orientation","outerWidth","outerHeight","scaleFactor","scaleFactorInversed","margin","aspectRatio","sourceAspectRatio","NO_SCALE","_startHeight","checkOrientation","checkResize","fullScreenChange","EXACT_FIT","SHOW_ALL","startFullScreen","isFullScreen","device","fullscreen","smoothed","fullscreenKeyboard","requestFullscreen","Element","ALLOW_KEYBOARD_INPUT","stopFullScreen","cancelFullscreen","setShowAll","forceOrientation","orientationImage","checkImageKey","checkOrientationState","isLandscape","iPad","webApp","desktop","android","chrome","scrollTo","_check","_iterations","setInterval","setScreenSize","force","documentElement","setMaximum","setExactFit","clearInterval","marginLeft","marginTop","multiplier","availableWidth","availableHeight","Game","physicsConfig","isRunning","raf","net","debug","stepping","pendingStep","stepCount","onBlur","onFocus","_paused","_codePaused","RandomDataGenerator","_onBoot","readyState","seed","Device","setUpRenderer","checkFullScreenSupport","GameObjectFactory","GameObjectCreator","Cache","Loader","Time","TweenManager","Input","SoundManager","Particles","Net","Debug","showDebugHeader","RequestAnimationFrame","webAudio","trident","addToDOM","enableStep","disableStep","setMute","unsetMute","mute","hitCanvas","hitContext","moveCallback","moveCallbackContext","pollRate","disabled","multiInputOverride","MOUSE_TOUCH_COMBINE","speed","circle","maxPointers","currentPointers","tapRate","doubleTapRate","holdRate","justPressedRate","justReleasedRate","recordPointerHistory","recordRate","recordLimit","pointer1","pointer2","pointer3","pointer4","pointer5","pointer6","pointer7","pointer8","pointer9","pointer10","activePointer","mousePointer","keyboard","touch","mspointer","gamepad","resetLocked","onDown","onUp","onTap","onHold","interactiveItems","_localPoint","_pollCounter","_oldPosition","_x","_y","MOUSE_OVERRIDES_TOUCH","TOUCH_OVERRIDES_MOUSE","Pointer","Mouse","Keyboard","Touch","MSPointer","Gamepad","setMoveCallback","addPointer","hard","resetSpeed","startPointer","totalActivePointers","updatePointer","identifier","move","stopPointer","getPointer","getPointerFromIdentifier","getLocalPosition","wt","hitTest","localPoint","worldVisible","TileSprite","Key","keycode","enabled","isDown","isUp","altKey","ctrlKey","shiftKey","timeDown","duration","timeUp","repeats","keyCode","onHoldCallback","onHoldContext","processKeyDown","processKeyUp","justPressed","justReleased","onDownCallback","onUpCallback","_keys","_capture","_onKeyDown","_onKeyUp","addCallbacks","addKey","addKeyCapture","removeKey","removeKeyCapture","createCursorKeys","up","down","clearCaptures","A","B","C","D","E","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","ZERO","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","NUMPAD_0","NUMPAD_1","NUMPAD_2","NUMPAD_3","NUMPAD_4","NUMPAD_5","NUMPAD_6","NUMPAD_7","NUMPAD_8","NUMPAD_9","NUMPAD_MULTIPLY","NUMPAD_ADD","NUMPAD_ENTER","NUMPAD_SUBTRACT","NUMPAD_DECIMAL","NUMPAD_DIVIDE","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","F13","F14","F15","COLON","EQUALS","UNDERSCORE","QUESTION_MARK","TILDE","OPEN_BRACKET","BACKWARD_SLASH","CLOSED_BRACKET","QUOTES","BACKSPACE","TAB","CLEAR","ENTER","SHIFT","CONTROL","ALT","CAPS_LOCK","ESC","SPACEBAR","PAGE_UP","PAGE_DOWN","END","HOME","INSERT","DELETE","HELP","NUM_LOCK","mouseDownCallback","mouseMoveCallback","mouseUpCallback","capture","button","locked","pointerLock","_onMouseDown","_onMouseMove","_onMouseUp","NO_BUTTON","LEFT_BUTTON","MIDDLE_BUTTON","RIGHT_BUTTON","onMouseDown","onMouseMove","onMouseUp","requestPointerLock","element","mozRequestPointerLock","webkitRequestPointerLock","_pointerLockChange","pointerLockChange","pointerLockElement","mozPointerLockElement","webkitPointerLockElement","releasePointerLock","exitPointerLock","mozExitPointerLock","webkitExitPointerLock","_onMSPointerDown","_onMSPointerMove","_onMSPointerUp","onPointerDown","onPointerMove","onPointerUp","pointerId","_holdSent","_history","_nextDrop","_stateReset","withinGame","clientX","clientY","pageX","pageY","screenX","screenY","isMouse","previousTapTime","totalTouches","msSinceLastClick","Number","MAX_VALUE","targetObject","positionDown","positionUp","_touchedHandler","shift","fromClick","pollLocked","isDragged","_highestRenderOrderID","MAX_SAFE_INTEGER","_highestRenderObject","_highestInputPriorityID","currentNode","validForInput","checkPointerOver","checkPointerDown","priorityID","_pointerOutHandler","_pointerOverHandler","leave","_releasedHandler","touchStartCallback","touchMoveCallback","touchEndCallback","touchEnterCallback","touchLeaveCallback","touchCancelCallback","_onTouchStart","_onTouchMove","_onTouchEnd","_onTouchEnter","_onTouchLeave","_onTouchCancel","onTouchStart","onTouchMove","onTouchEnd","onTouchEnter","onTouchLeave","onTouchCancel","consumeDocumentTouches","_documentTouchMove","changedTouches","_gamepads","SinglePad","_gamepadIndexMap","_rawPads","_active","_gamepadSupportAvailable","webkitGetGamepads","webkitGamepads","userAgent","getGamepads","_prevRawGamepadTypes","_prevTimestamps","onConnectCallback","onDisconnectCallback","onAxisCallback","onFloatCallback","_ongamepadconnected","_gamepaddisconnected","callbacks","onConnect","onDisconnect","onAxis","onFloat","newPad","connect","_ongamepaddisconnected","removedPad","disconnect","_pollGamepads","_connected","pollStatus","rawGamepads","gamepadsChanged","singlePad","validConnections","rawIndices","padIndices","connected","k","rawPad","setDeadZones","deadZone","buttonCode","BUTTON_0","BUTTON_1","BUTTON_2","BUTTON_3","BUTTON_4","BUTTON_5","BUTTON_6","BUTTON_7","BUTTON_8","BUTTON_9","BUTTON_10","BUTTON_11","BUTTON_12","BUTTON_13","BUTTON_14","BUTTON_15","AXIS_0","AXIS_1","AXIS_2","AXIS_3","AXIS_4","AXIS_5","AXIS_6","AXIS_7","AXIS_8","AXIS_9","XBOX360_A","XBOX360_B","XBOX360_X","XBOX360_Y","XBOX360_LEFT_BUMPER","XBOX360_RIGHT_BUMPER","XBOX360_LEFT_TRIGGER","XBOX360_RIGHT_TRIGGER","XBOX360_BACK","XBOX360_START","XBOX360_STICK_LEFT_BUTTON","XBOX360_STICK_RIGHT_BUTTON","XBOX360_DPAD_LEFT","XBOX360_DPAD_RIGHT","XBOX360_DPAD_UP","XBOX360_DPAD_DOWN","XBOX360_STICK_LEFT_X","XBOX360_STICK_LEFT_Y","XBOX360_STICK_RIGHT_X","XBOX360_STICK_RIGHT_Y","padParent","_padParent","_index","_rawPad","_prevTimestamp","_rawButtons","_buttons","_axes","_hotkeys","addButton","GamepadButton","timestamp","buttons","buttonValue","processButtonDown","processButtonUp","processButtonFloat","axes","axis","processAxisChange","triggerCallback","disconnectingIndex","axisState","axisCode","buttoncode","InputHandler","useHandCursor","_setHandCursor","allowHorizontalDrag","allowVerticalDrag","snapOffset","snapOnDrag","snapOnRelease","snapX","snapY","snapOffsetX","snapOffsetY","pixelPerfectOver","pixelPerfectClick","pixelPerfectAlpha","draggable","boundsRect","boundsSprite","consumePointerEvent","_wasEnabled","_tempPoint","_pointerData","isOver","isOut","timeOver","timeOut","downDuration","onInputOver","onInputOut","onInputDown","onInputUp","onDragStart","onDragStop","addedToGroup","removedFromGroup","highestID","highestRenderID","pointerX","pointerY","pointerDown","pointerUp","pointerTimeDown","pointerTimeUp","pointerOver","pointerOut","pointerTimeOver","pointerTimeOut","pointerDragged","checkPixel","_draggedPointerID","updateDrag","startDrag","stopDrag","fixedToCamera","_dragPoint","dragOffset","checkBoundsRect","checkBoundsSprite","justOver","delay","overDuration","justOut","enableDrag","lockCenter","pixelPerfect","alphaThreshold","dragFromCenter","disableDrag","centerOn","centerX","centerY","setDragLock","allowHorizontal","allowVertical","enableSnap","onDrag","onRelease","disableSnap","camerOffset","Events","onKilled","onRevived","onOutOfBounds","onEnterBounds","onAnimationStart","onAnimationComplete","onAnimationLoop","existing","object","group","tween","physicsGroup","audio","loop","tileSprite","overFrame","outFrame","downFrame","upFrame","Button","emitter","maxParticles","Arcade","Emitter","retroFont","characterWidth","characterHeight","charsPerRow","xSpacing","ySpacing","RetroFont","bitmapText","tilemap","tileWidth","tileHeight","Tilemap","addToCache","uuid","addRenderTexture","bitmapData","BitmapData","addBitmapData","Tween","ctx","imageData","textureFrame","Frame","loadTexture","refreshBuffer","Int32Array","setPixel32","red","green","blue","setPixel","getPixel","data32","getPixel32","getPixels","copyPixels","area","destX","destY","getImage","draw","alphaMask","animations","AnimationManager","_frame","_frameName","autoCull","health","lifespan","checkWorldBounds","outOfBoundsKill","elapsed","kill","isSpriteSheet","loadFrameData","getFrameData","frameName","crop","sourceWidth","sourceHeight","local","revive","damage","_outOfBoundsFired","play","frameRate","killOnComplete","overlap","wrapAngle","P2JS","addToWorld","removeFromWorld","phase","_reset","frameData","getFrameByName","getFrame","_scroll","physicsElapsed","autoScroll","stopScroll","safeRemove","_text","_font","_fontSize","_fontWeight","_lineSpacing","parentNode","setShadow","blur","shadowOffsetX","shadowOffsetY","shadowColor","shadowBlur","runWordWrap","lineJoin","linePosition","parseFloat","_align","_tint","_onOverFrameName","_onOutFrameName","_onDownFrameName","_onUpFrameName","_onOverFrameID","_onOutFrameID","_onDownFrameID","_onUpFrameID","onOverSound","onOutSound","onDownSound","onUpSound","onOverSoundMarker","onOutSoundMarker","onDownSoundMarker","onUpSoundMarker","freezeFrames","forceOut","inputEnabled","setFrames","onInputOverHandler","onInputOutHandler","onInputDownHandler","onInputUpHandler","clearFrames","setSounds","overSound","overMarker","downSound","downMarker","outSound","outMarker","upSound","upMarker","setOverSound","setOutSound","setDownSound","setUpSound","marker","Sound","setState","drawPolygon","poly","_temp","renderXY","characterSpacingX","characterSpacingY","characterPerRow","multiLine","autoUpperCase","customSpacingX","customSpacingY","fixedWidth","fontSet","grabData","currentX","currentY","FrameData","addFrame","updateFrameData","stamp","ALIGN_LEFT","ALIGN_RIGHT","ALIGN_CENTER","TEXT_SET1","TEXT_SET2","TEXT_SET3","TEXT_SET4","TEXT_SET5","TEXT_SET6","TEXT_SET7","TEXT_SET8","TEXT_SET9","TEXT_SET10","TEXT_SET11","setFixedWidth","lineAlignment","characterSpacing","lineSpacing","allowLowerCase","buildRetroFontText","getLongestLine","pasteLine","longestLine","removeUnsupportedCharacters","stripCR","newString","aChar","code","newText","toUpperCase","Particle","autoScale","scaleData","_s","autoAlpha","alphaData","_a","onEmit","setAlphaData","setScaleData","noCocoon","display","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollLeft","compatMode","pageYOffset","pageXOffset","getAspectRatio","msTouchAction","overflowHidden","getElementById","overflow","translateX","translateY","skewX","skewY","setSmoothingEnabled","setImageRenderingCrisp","msInterpolationMode","setImageRenderingBicubic","iOS","cocoonJS","ejecta","crosswalk","chromeOS","linux","macOS","windows","windowsPhone","file","fileSystem","localStorage","worker","css3D","typedArray","vibration","getUserMedia","quirksMode","arora","epiphany","firefox","ie","ieVersion","tridentVersion","mobileSafari","midori","opera","safari","silk","audioData","ogg","opus","mp3","wav","m4a","webm","iPhone","iPhone4","pixelRatio","littleEndian","_checkAudio","_checkBrowser","_checkCSS3D","_checkDevice","_checkFeatures","_checkOS","ua","getItem","error","WebGLRenderingContext","maxTouchPoints","msPointerEnabled","pointerEnabled","webkitGetUserMedia","mozGetUserMedia","msGetUserMedia","fs","cfs","RegExp","$1","$3","audioElement","canPlayType","toLowerCase","Int8Array","Int16Array","vibrate","webkitVibrate","mozVibrate","msVibrate","has3d","el","transforms","webkitTransform","OTransform","msTransform","MozTransform","insertBefore","getComputedStyle","getPropertyValue","canPlayAudio","isConsoleOpen","profile","profileEnd","forceSetTimeOut","_isSetTimeOut","_onLoop","_timeOutID","updateSetTimeout","updateRAF","isSetTimeOut","isRAF","PI2","fuzzyEqual","epsilon","fuzzyLessThan","fuzzyGreaterThan","fuzzyCeil","val","fuzzyFloor","average","avg","truncate","shear","snapTo","gap","snapToFloor","snapToCeil","snapToInArray","arr","low","high","POSITIVE_INFINITY","roundTo","place","base","floorTo","ceilTo","interpolateFloat","weight","angleBetween","angleBetweenPoints","point1","point2","reverseAngle","angleRad","normalizeAngle","normalizeLatitude","lat","normalizeLongitude","lng","nearestAngleBetween","radians","rd","interpolateAngles","ease","normalizeAngleToAnother","chanceRoll","chance","numberArray","maxAdd","minSub","wrapValue","diff","randomSign","isOdd","isEven","minProperty","maxProperty","radianFactor","angleLimit","linearInterpolation","linear","bezierInterpolation","bernstein","catmullRomInterpolation","catmullRom","p0","p1","factorial","p2","p3","t2","t3","difference","objects","removeRandom","idx","sinCosGenerator","sinAmplitude","cosAmplitude","frequency","frq","cosTable","sinTable","stack","s","shuffleArray","distancePow","distanceRounded","clampBottom","within","mapLinear","smoothstep","smootherstep","degreeToRadiansFactor","degrees","radianToDegreesFactor","seeds","s0","s1","s2","sow","hash","integer","frac","real","realInRange","normal","pick","ary","weightedPick","QuadTree","maxObjects","maxLevels","level","nodes","_empty","subWidth","subHeight","populate","populateHandler","insert","retrieve","returnObjects","getHostName","location","hostname","checkDomainName","domain","updateQueryString","redirect","url","href","re","separator","getQueryString","parameter","keyValues","search","substring","decodeURI","decodeURIComponent","_tweens","_add","_pauseAll","_resumeAll","getAll","pendingDelete","_manager","numTweens","isTweening","some","_object","_pause","_resume","pauseAll","resumeAll","manager","_valuesStart","_valuesEnd","_valuesStartRepeat","_duration","_repeat","_yoyo","_reversed","_delayTime","_startTime","_easingFunction","Easing","Linear","None","_interpolationFunction","_chainedTweens","_onStartCallbackFired","_onUpdateCallback","_onUpdateCallbackContext","_pausedTime","onStart","onLoop","onComplete","to","properties","yoyo","_lastChild","chain","generateData","tick","blob","reversed","times","easing","interpolation","pauseDuration","isFinite","tmp","numChainedTweens","Quadratic","In","Out","InOut","Cubic","Quartic","Quintic","Sinusoidal","Exponential","Circular","Elastic","asin","Back","Bounce","pausedTime","advancedTiming","fps","fpsMin","fpsMax","msMin","msMax","deltaCap","frames","Timer","_started","_timeLastSecond","_pauseStarted","_justResumed","_timers","autoDestroy","timer","elapsedSince","since","elapsedSecondsSince","running","expired","nextTick","_pauseTotal","_now","_marked","_diff","_newTick","MINUTE","SECOND","HALF","QUARTER","repeatCount","TimerEvent","clearEvents","clearPendingEvents","ms","currentFrame","updateIfVisible","isLoaded","_frameData","_anims","_outputFrames","useNumericIndex","getFrameIndexes","Animation","currentAnim","validateFrames","checkFrameName","isPlaying","resetFrame","getAnimation","refreshFrame","anim","_frameIndex","isPaused","_frames","loopCount","isFinished","_pauseStartTime","_frameDiff","_frameSkip","_timeLastFrame","_timeNextFrame","dispatchComplete","generateFrameNames","prefix","suffix","zeroPad","rotated","rotationDirection","trimmed","sourceSizeW","sourceSizeH","spriteSourceSizeX","spriteSourceSizeY","spriteSourceSizeW","spriteSourceSizeH","setTrim","actualWidth","actualHeight","destWidth","destHeight","getRect","_frameNames","getFrameRange","getFrames","AnimationParser","spriteSheet","frameWidth","frameHeight","frameMax","spacing","img","row","column","JSONData","json","cacheKey","newFrame","filename","sourceSize","spriteSourceSize","JSONDataHash","XMLData","xml","frameX","frameY","nodeValue","_canvases","_images","_textures","_sounds","_json","_physics","_tilemaps","_binary","_bitmapDatas","_bitmapFont","addDefaultImage","addMissingImage","onSoundUnlock","TEXTURE","SOUND","PHYSICS","BINARY","BITMAPFONT","JSON","addCanvas","addBinary","binaryData","addSpriteSheet","addTilemap","mapData","addTextureAtlas","atlasData","TEXTURE_ATLAS_JSON_ARRAY","TEXTURE_ATLAS_JSON_HASH","TEXTURE_ATLAS_XML_STARLING","addBitmapFont","xmlData","LoaderParser","bitmapFont","addPhysicsData","addText","addJSON","addImage","addSound","audioTag","decoded","isDecoding","touchLocked","reloadSound","reloadSoundComplete","updateSound","decodedSound","getCanvas","getBitmapData","getBitmapFont","getPhysicsData","fixtureKey","fixtures","fixture","getTilemapData","getFrameByIndex","getTextureFrame","getTexture","getSound","getSoundData","isSoundDecoded","isSoundReady","getText","getJSON","getBinary","getKeys","removeCanvas","removeImage","removeSound","removeText","removeJSON","removePhysics","removeTilemap","removeBinary","removeBitmapData","removeBitmapFont","_fileList","_fileIndex","_progressChunk","_xhr","isLoading","progress","progressFloat","preloadSprite","baseURL","onLoadStart","onFileStart","onFileComplete","onFileError","PHYSICS_LIME_CORONA_JSON","PHYSICS_PHASER_JSON","setPreloadSprite","direction","checkKeyExists","getAssetIndex","getAsset","addToFileList","entry","loaded","prop","replaceInFileList","overwrite","script","binary","spritesheet","urls","autoDecode","mapDataURL","CSV","TILED_JSON","parse","dataURL","jsonData","LIME_CORONA_JSON","textureURL","xmlURL","domparser","DOMParser","parseFromString","async","loadXML","atlasJSONArray","atlasURL","atlas","atlasJSONHash","atlasXML","removeFile","loadFile","fileComplete","onerror","fileError","getAudioURL","usingWebAudio","open","responseType","send","usingAudioTag","Audio","jsonLoadComplete","csvLoadComplete","dataLoadError","extension","lastIndexOf","nextFile","loadNext","xmlLoadComplete","response","that","decodeAudioData","onSoundDecode","responseText","language","defer","head","previousIndex","success","totalLoadedFiles","ajaxRequest","div","innerHTML","info","common","getAttribute","letters","textureRect","kernings","second","connectToMaster","_volume","markers","_buffer","_muted","autoplay","totalDuration","startTime","currentTime","stopTime","pausedPosition","currentMarker","pendingPlayback","override","externalNode","masterGainNode","masterGain","gainNode","createGain","createGainNode","gain","_sound","soundHasUnlocked","onDecoded","onPlay","onStop","onMute","onMarkerComplete","addMarker","durationMS","removeMarker","_tempMarker","_tempPosition","_tempVolume","_tempLoop","forceRestart","noteOff","createBufferSource","noteGrainOn","decode","muted","prevMarker","_muteVolume","_codeMuted","_unlockSource","noAudio","channels","fakeiOSTouchLock","unlock","disableAudio","disableWebAudio","destination","noteOn","stopAll","soundData","playbackState","PLAYING_STATE","FINISHED_STATE","removeByKey","columnWidth","renderShadow","currentAlpha","currentColor","soundInfo","isDecoded","cameraInfo","hideIfUp","downColor","upColor","worldX","worldY","spriteInputInfo","inputInfo","spriteBounds","filled","rectangle","spriteInfo","inCamera","spriteCoords","lineInfo","pixel","geom","forceType","quadTree","quadtree","Body","bodyInfo","renderBodyInfo","getColor32","getColor","hex16","getColorInfo","argb","getRGB","hsl","RGBtoHSV","RGBtoHexstring","hue","saturation","lightness","colorToHexstring","RGBtoWebstring","digits","lsd","msd","hexified","interpolateColor","color1","color2","steps","currentStep","src1","src2","interpolateColorWithRGB","or","og","ob","interpolateRGB","r1","g1","g2","getRandomColor","getWebRGB","getAlpha","getAlphaFloat","getRed","getGreen","getBlue","arcade","ninja","box2d","chipmunk","NINJA","BOX2D","CHIPMUNK","Ninja","P2","startSystem","system","enableAABB","gravity","checkCollision","OVERLAP_BIAS","TILE_BIAS","forceX","_overlap","_maxOverlap","_velocity1","_velocity2","_newVelocity1","_newVelocity2","_average","_mapData","_result","_total","_angle","_dx","_dy","updateMotion","_velocityDelta","computeVelocity","angularVelocity","angularAcceleration","angularDrag","maxAngular","velocity","acceleration","drag","maxVelocity","allowGravity","_drag","object1","object2","overlapCallback","processCallback","collideHandler","collide","collideCallback","overlapOnly","collideSpriteVsSprite","collideSpriteVsGroup","collideSpriteVsTilemapLayer","collideGroupVsGroup","collideGroupVsTilemapLayer","collideGroupVsSelf","sprite1","sprite2","separate","_potentials","group1","group2","tilemapLayer","getTiles","tilePadding","separateTile","body1","body2","separateX","separateY","immovable","deltaAbsX","deltaX","embedded","touching","none","overlapX","customSeparateX","bounce","mass","deltaAbsY","deltaY","overlapY","customSeparateY","moves","tile","collisionCallback","collisionCallbackContext","layer","faceLeft","faceRight","faceTop","faceBottom","tileCheckX","tileCheckY","blocked","collideRight","collideLeft","processTileSeparationX","collideDown","collideUp","processTileSeparationY","moveToObject","maxTime","distanceBetween","moveToPointer","angleToPointer","distanceToPointer","moveToXY","distanceToXY","velocityFromAngle","velocityFromRotation","accelerationFromRotation","accelerateToObject","xSpeedMax","ySpeedMax","accelerateToPointer","accelerateToXY","angleToXY","allowRotation","preRotation","newVelocity","deltaMax","facing","collideWorldBounds","any","wasTouching","_sx","_sy","asx","asy","deltaZ","onFloor","onWall","emitters","ID","minParticleSpeed","maxParticleSpeed","minParticleScale","maxParticleScale","minRotation","maxRotation","minParticleAlpha","maxParticleAlpha","particleClass","particleDrag","particleAnchor","emitX","emitY","particleBringToTop","particleSendToBack","_minParticleScale","_maxParticleScale","_quantity","_timer","_counter","_explode","emitParticle","makeParticles","keys","particle","rndKey","rndFrame","explode","setXSpeed","setYSpeed","setRotation","setAlpha","rate","tweenData","setScale","at","Tile","scanned","setCollisionCallback","setCollision","resetCollision","isInteresting","collides","faces","TilemapParser","version","widthInPixels","heightInPixels","layers","tilesets","tiles","collideIndexes","collision","images","currentLayer","debugMap","_results","_tempA","_tempB","setTileSize","createBlankLayer","addTilesetImage","tileset","tileMargin","tileSpacing","gid","getTilesetIndex","setImage","newSet","Tileset","countX","countY","columns","rows","createFromObjects","CustomClass","adjustY","createLayer","getLayerIndex","TilemapLayer","indexes","bodies","getImageIndex","getObjectIndex","setTileIndexCallback","getLayer","setTileLocationCallback","setCollisionByIndex","calculateFaces","setCollisionBetween","setCollisionByExclusion","recalculate","above","below","getTileAbove","getTileBelow","getTileLeft","getTileRight","setLayer","hasTile","removeTile","removeTileWorldXY","putTile","putTileWorldXY","getTile","getTileWorldXY","paste","tileblock","diffX","diffY","tileA","tileB","swapHandler","removeAllLayers","dump","txt","map","tileColor","debugAlpha","debugColor","debugFill","debugFillColor","debugCallbackColor","scrollFactorX","scrollFactorY","rayStepRate","_mc","cw","ch","ga","dw","dh","tl","startX","startY","prevX","prevY","updateMax","scrollX","scrollY","resizeWorld","_fixX","_unfixX","_fixY","_unfixY","getTileX","getTileY","getTileXY","getRayCastTiles","interestingFace","coords","wy","wx","lenY","_column","lenX","renderDebug","getEmptyData","parseCSV","parseTiledJSON","tilewidth","tileheight","opacity","firstgid","tileproperties","tileProperties","imageheight","imagewidth","polyline","drawCoords","setSpacing","enableCircle","enableTile","clearTilemapLayerBodies","convertTilemap","slopeMap","aabb","collideAABBVsAABB","collideAABBVsTile","collideCircleVsTile","shape","friction","gravityScale","maxSpeed","AABB","integrate","xw","yw","setZeroVelocity","oldpos","moveFrom","moveLeft","fx","moveRight","oH","oV","aabbTileProjections","TYPE_FULL","projAABB_Full","TYPE_45DEG","projAABB_45Deg","TYPE_CONCAVE","projAABB_Concave","TYPE_CONVEX","projAABB_Convex","TYPE_22DEGs","projAABB_22DegS","TYPE_22DEGb","projAABB_22DegB","TYPE_67DEGs","projAABB_67DegS","TYPE_67DEGb","projAABB_67DegB","TYPE_HALF","projAABB_Half","COL_NONE","COL_AXIS","COL_OTHER","reportCollisionVsWorld","fy","o","vx","vy","dp","nx","ny","reportCollisionVsBody","vx1","vy1","dp1","txw","tyw","resolveTile","signx","signy","lenN","lenP","penY","penX","twid","rad","pen","EMPTY","TYPE_EMPTY","setType","updateType","SLOPE_45DEGpn","SQRT2","SLOPE_45DEGnn","SLOPE_45DEGnp","SLOPE_45DEGpp","CONCAVEpn","CONCAVEnn","CONCAVEnp","CONCAVEpp","CONVEXpn","CONVEXnn","CONVEXnp","CONVEXpp","SLOPE_22DEGpnS","slen","SLOPE_22DEGnnS","SLOPE_22DEGnpS","SLOPE_22DEGppS","SLOPE_22DEGpnB","SLOPE_22DEGnnB","SLOPE_22DEGnpB","SLOPE_22DEGppB","SLOPE_67DEGpnS","SLOPE_67DEGnnS","SLOPE_67DEGnpS","SLOPE_67DEGppS","SLOPE_67DEGpnB","SLOPE_67DEGnnB","SLOPE_67DEGnpB","SLOPE_67DEGppB","HALFd","HALFu","HALFl","HALFr","FULL","circleTileProjections","projCircle_Full","projCircle_45Deg","projCircle_Concave","projCircle_Convex","projCircle_22DegS","projCircle_22DegB","projCircle_67DegS","projCircle_67DegB","projCircle_Half","resolveCircleTile","perp","trad","celldp","require",1,"GLMAT_EPSILON","GLMAT_ARRAY_TYPE","setMatrixArrayType","vec2","fromValues","sub","mul","squaredDistance","sqrDist","squaredLength","sqrLen","negate","dot","cross","lerp","transformMat2","transformMat2d","transformMat3","transformMat4","vec","fn",2,"Scalar","lineInt","l1","l2","precision","det","eq","segmentsIntersect","q1","q2","da","db","./Scalar",3,"leftOn","rightOn","tmpPoint1","tmpPoint2","collinear","thresholdAngle","ab","bc","magA","magB","acos","sqdist",4,"getIntersectionPoint","append","from","makeCCW","br","isReflex","tmpLine1","tmpLine2","canSee","targetPoly","getCutEdges","tmp1","tmp2","tmpPoly","nDiags","decomp","edges","cutEdges","polys","cutEdge","isSimple","path","quickDecomp","reflexVertices","steinerPoints","maxlevel","upperInt","lowerInt","upperDist","lowerDist","closestDist","upperIndex","lowerIndex","closestIndex","lowerPoly","upperPoly","removeCollinearPoints","num","./Line","./Point",5,6,"./Polygon",7,"description","author","keywords","main","engines","node","repository","bugs","licenses","devDependencies","grunt","grunt-contrib-jshint","grunt-contrib-nodeunit","grunt-contrib-uglify","grunt-browserify","z-schema","dependencies","poly-decomp","gl-matrix",8,"lowerBound","upperBound","setFromPoints","overlaps","../math/vec2","../utils/Utils",9,"Broadphase","boundingVolumeType","BOUNDING_CIRCLE","setWorld","getCollisionPairs","boundingRadiusCheck","bodyA","bodyB","d2","boundingRadius","aabbCheck","aabbNeedsUpdate","updateAABB","boundingVolumeCheck","canCollide","motionState","STATIC","KINEMATIC","sleepState","SLEEPING","NAIVE","SAP","../objects/Body",10,"GridBroadphase","xmin","xmax","ymin","ymax","binsizeX","binsizeY","Ncolliding","bins","Nbins","xmult","ymult","bi","lowerX","lowerY","upperX","upperY","xi1","yi1","xi2","yi2","bin","NbodiesInBin","bj","../collision/Broadphase","../shapes/Circle","../shapes/Particle","../shapes/Plane",11,"NaiveBroadphase","../shapes/Shape",12,"Narrowphase","contactEquations","frictionEquations","enableFriction","slipForce","frictionCoefficient","surfaceVelocity","reuseObjects","reusableContactEquations","reusableFrictionEquations","restitution","stiffness","relaxation","frictionStiffness","frictionRelaxation","collidingBodiesLastStep","clearObject","setConvexToCapsuleShapeMiddle","convexShape","capsuleShape","pointInConvex","worldPoint","convexOffset","convexAngle","worldVertex0","pic_worldVertex0","worldVertex1","pic_worldVertex1","r0","pic_r0","pic_r1","lastCross","crossLength","ContactEquation","FrictionEquation","Shape","yAxis","tmp3","tmp4","tmp5","tmp6","tmp7","tmp8","tmp9","tmp10","tmp11","tmp12","tmp13","tmp14","tmp15","tmp16","tmp17","tmp18","tmpArray","collidedLastStep","id1","id2","ce","fe","rfe","rce","appendArray","createContactEquation","shapeA","shapeB","firstImpact","createFrictionEquation","setSlipForce","relativeVelocity","createFrictionFromContact","contactPointA","contactPointB","normalA","contactEquation","LINE","CONVEX","convexLine","si","ai","sj","aj","justTest","RECTANGLE","lineRectangle","convexCapsule_tempRect","convexCapsule_tempVec","CAPSULE","convexCapsule","circlePos","result1","circleConvex","result2","convexConvex","lineCapsule","capsuleCapsule_tempVec1","capsuleCapsule_tempVec2","capsuleCapsule_tempRect1","capsuleCapsule","circlePosi","circlePosj","numContacts","circleCircle","lineLine","PLANE","planeLine","planeBody","planeShape","planeOffset","planeAngle","lineBody","lineShape","lineOffset","lineAngle","worldVertex01","worldVertex11","worldEdge","worldEdgeUnit","worldNormal","worldTangent","PARTICLE","particleCapsule","circleLine","CIRCLE","lineRadius","circleRadius","circleOffset","circleBody","circleShape","orthoDist","lineToCircleOrthoUnit","projectedPoint","centerDist","lineToCircle","lineEndToLineRadius","pos0","pos1","circleCapsule","convexBody","worldVertex","closestEdgeProjectedPoint","candidate","candidateDist","minCandidate","found","minCandidateDistance","candidateDistance","localVertex","particleConvex","particleOffset","particleBody","convexToparticle","minEdgeNormal","radiusA","radiusB","offsetA","offsetB","planeConvex","numReported","convexPrecision","convexPlane","particlePlane","circleParticle","capsulePlane_tmpCircle","capsulePlane_tmp1","capsulePlane_tmp2","planeCapsule","end1","end2","numContacts1","circlePlane","numContacts2","capsulePlane","planeToCircle","contact","sepAxis","worldPoint0","worldPoint1","penetrationVec","findSeparatingAxis","closestEdge1","getClosestEdge","closestEdge2","closestEdgeA","closestEdgeB","angleA","angleB","insideNumEdges","pcoa_tmp1","projectConvexOntoAxis","worldAxis","localAxis","fsa_tmp1","fsa_tmp2","fsa_tmp3","fsa_tmp4","fsa_tmp5","fsa_tmp6","offset1","angle1","offset2","angle2","maxDist","edge","span1","span2","swapped","gce_tmp1","gce_tmp2","gce_tmp3","flip","closestEdge","halfPi","maxDot","circleHeightfield_candidate","circleHeightfield_dist","circleHeightfield_v0","circleHeightfield_v1","circleHeightfield_minCandidate","circleHeightfield_worldNormal","circleHeightfield_minCandidateNormal","HEIGHTFIELD","circleHeightfield","circleAngle","hfBody","hfShape","hfPos","hfAngle","elementWidth","minCandidateNormal","idxA","idxB","minDist","../equations/ContactEquation","../equations/FrictionEquation","../shapes/Rectangle",13,"SAPBroadphase","axisListX","axisListY","_addBodyHandler","_removeBodyHandler","sortAxisListX","sortAxisListY","preliminaryList","bodiesX","bodiesY","axisIndex",14,"Constraint","equations","collideConnected","wakeUp","DISTANCE","GEAR","LOCK","PRISMATIC","REVOLUTE","setStiffness","eqs","setRelaxation",15,"DistanceConstraint","maxForce","Equation","computeGq","setMaxForce","minForce","getMaxForce","../equations/Equation","./Constraint",16,"GearConstraint","AngleLockEquation","ratio","setMaxTorque","maxTorque","setRatio","torque","getMaxTorque","../equations/AngleLockEquation",17,"LockConstraint","localOffsetB","localAngleB","rot","xAxis",18,"PrismaticConstraint","localAnchorA","localAxisA","localAnchorB","trans","ri","rj","gg","updateJacobian","disableRotationalLock","RotationalLockEquation","lowerLimitEnabled","upperLimitEnabled","lowerLimit","upperLimit","upperLimitEquation","lowerLimitEquation","motorEquation","motorEnabled","motorSpeed","computeGW","vj","wi","wj","transformedGmult","worldAxisA","worldAnchorA","worldAnchorB","orientedAnchorA","orientedAnchorB","relPosition","enableMotor","disableMotor","../equations/RotationalLockEquation",19,"RevoluteConstraint","pivotA","pivotB","worldPivotA","worldPivotB","RotationalVelocityEquation","relAngle","motorIsEnabled","setMotorSpeed","getMotorSpeed","../equations/RotationalVelocityEquation",20,"./Equation",21,"computeB","rixn","rjxn","GW","Gq","GiMf","computeGiMf",22,"DEFAULT_STIFFNESS","DEFAULT_RELAXATION","ARRAY_TYPE","timeStep","Gmult","getBodyInvMass","invMass","getBodyInvInertia","invInertia","qi","qj","computeGWlambda","vlambda","wlambda","iMfi","iMfj","fi","ti","angularForce","fj","tj","invMassi","invMassj","invIi","invIj","computeGiMGt","addToWlambda_temp","addToWlambda_Gi","addToWlambda_Gj","addToWlambda","deltalambda","Gi","Gj","computeInvC","eps",23,"getSlipForce",24,"worldVectorA","worldVectorB",25,26,"EventEmitter","_listeners","listenerArray",27,"ContactMaterial","materialA","materialB","Material","idCounter","./Material",28,29,"GetArea","sum",30,"crossVZ","zcomp","crossZV","toLocalFrame","framePosition","frameAngle","toGlobalFrame","../../build/vec2",31,"_idCounter","shapes","shapeOffsets","shapeAngles","inertia","fixedRotation","interpolatedPosition","interpolatedAngle","previousPosition","previousAngle","damping","angularDamping","DYNAMIC","allowSleep","wantsToSleep","AWAKE","sleepSpeedLimit","sleepTimeLimit","timeLastSleepy","concavePath","lastDampingScale","lastAngularDampingScale","lastDampingTimeStep","updateMassProperties","Convex","setDensity","density","totalArea","getArea","shapeAABB","computeAABB","updateBoundingRadius","addShape","removeShape","Icm","computeMomentOfInertia","Body_applyForce_r","applyForce","rotForce","toWorldFrame","fromPolygon","convexes","optimalDecomp","cm","centerOfMass","updateTriangles","updateCenterOfMass","adjustCenterOfMass","adjustCenterOfMass_tmp2","adjustCenterOfMass_tmp3","adjustCenterOfMass_tmp4","offset_times_area","setZeroForce","resetConstraintVelocity","addConstraintVelocity","applyDamping","dt","idleTime","wakeUpEvent","sleep","sleepEvent","sleepTick","dontSleep","speedSquared","speedLimitSquared","SLEEPY","getVelocityFromPosition","store","getAngularVelocityFromPosition","sleepyEvent","../collision/AABB","../events/EventEmitter","../shapes/Convex",32,"Spring","restLength","setWorldAnchorA","setWorldAnchorB","getWorldAnchorA","getWorldAnchorB","applyForce_r","applyForce_r_unit","applyForce_u","applyForce_f","applyForce_worldAnchorA","applyForce_worldAnchorB","applyForce_ri","applyForce_rj","applyForce_tmp","r_unit","rlen","ri_x_f","rj_x_f",33,"Capsule","GSSolver","Heightfield","Plane","Solver","../package.json","./collision/AABB","./collision/Broadphase","./collision/GridBroadphase","./collision/NaiveBroadphase","./collision/Narrowphase","./collision/SAPBroadphase","./constraints/Constraint","./constraints/DistanceConstraint","./constraints/GearConstraint","./constraints/LockConstraint","./constraints/PrismaticConstraint","./constraints/RevoluteConstraint","./equations/AngleLockEquation","./equations/ContactEquation","./equations/Equation","./equations/FrictionEquation","./equations/RotationalVelocityEquation","./events/EventEmitter","./material/ContactMaterial","./material/Material","./math/vec2","./objects/Body","./objects/Spring","./shapes/Capsule","./shapes/Circle","./shapes/Convex","./shapes/Heightfield","./shapes/Line","./shapes/Particle","./shapes/Plane","./shapes/Rectangle","./shapes/Shape","./solver/GSSolver","./solver/Solver","./utils/Utils","./world/World",34,"updateArea","./Shape",35,36,"polyk","polykVerts","id3","updateCenterOfMass_centroid","updateCenterOfMass_centroid_times_mass","updateCenterOfMass_a","updateCenterOfMass_b","updateCenterOfMass_c","centroid_times_mass","triangleArea","numer","../math/polyk",37,"maxValue",38,39,40,41,"./Convex",42,"collisionGroup","collisionMask","material","sensor",43,"GS","iterations","arrayStep","lambda","Bs","invCs","useZeroRHS","frictionIterations","usedIterations","setArrayZero","solve","sortEquations","iter","maxIter","maxFrictionIter","Neq","tolSquared","Nbodies","deltalambdaTot","iterateEquation","invC","lambdaj","GWlambda","lambdaj_plus_deltalambda","./Solver",44,"equationSortFunction","mockWorld","solveIsland","island","removeAllEquations","addEquations","getBodies","addEquation","removeEquation","ISLAND",45,"howmany",46,"Island","bodyIds",47,"IslandManager","_nodePool","_islandPool","islands","queue","IslandNode","getUnvisitedNode","Nnodes","visited","visit","bds","Neqs","bfs","neighbors","ni","nj","./Island","./IslandNode",48,49,"springs","disabledBodyCollisionPairs","solver","narrowphase","islandManager","frictionGravity","useWorldGravityAsFrictionGravity","useFrictionGravityOnZeroGravity","doProfiling","lastStepTime","broadphase","constraints","defaultMaterial","defaultContactMaterial","lastTimeStep","applySpringForces","applyGravity","solveConstraints","contactMaterials","bodiesToBeRemoved","fixedStepTime","islandSplit","emitImpactEvent","_constraintIdCounter","_bodyIdCounter","postStepEvent","addBodyEvent","removeBodyEvent","addSpringEvent","spring","impactEvent","postBroadphaseEvent","pairs","enableBodySleeping","enableIslandSleeping","beginContactEvent","endContactEvent","preSolveEvent","overlappingShapesLastState","overlappingShapesCurrentState","overlappingShapeLookup","v2a","contactMaterialToJSON","pkg","performance","nowOffset","timing","navigationStart","addConstraint","addContactMaterial","contactMaterial","removeContactMaterial","getContactMaterial","cmats","removeConstraint","step_mg","xiw","xjw","interpvelo","timeSinceLastCalled","maxSubSteps","internalStep","internalSteps","t0","t1","Nsprings","np","mg","gravityLen","ignoredPairs","Nconstraints","Nresults","Nshapesi","Nshapesj","runNarrowphase","integrateBody","ev","removeBody","ib_fhMinv","ib_velodt","minv","velo","glen","aiw","ajw","reducedMass","resolver","numFrictionBefore","numFrictionEquations","wakeUpA","wakeUpB","speedSquaredA","speedLimitSquaredA","speedSquaredB","speedLimitSquaredB","addSpring","removeSpring","addBody","getBodyById","disableBodyCollision","enableBodyCollision","toJSON","distanceConstraints","revoluteConstraints","prismaticConstraints","lockConstraints","gearConstraints","materials","js","jb","wb","jc","ss","jsonBody","circleShapes","planeShapes","particleShapes","lineShapes","rectangleShapes","convexShapes","capsuleShapes","jsonShape","mats","matId","fromJSON","shapeJSON","id2material","jm","matA","matB","revolute","cs","cms","hitTest_tmp1","hitTest_zero","hitTest_tmp2","pb","ps","pa","zero","NS","setGlobalEquationParameters","parameters","setGlobalStiffness","setGlobalRelaxation","../../package.json","../collision/NaiveBroadphase","../collision/Narrowphase","../collision/SAPBroadphase","../constraints/Constraint","../constraints/DistanceConstraint","../constraints/GearConstraint","../constraints/LockConstraint","../constraints/PrismaticConstraint","../constraints/RevoluteConstraint","../material/ContactMaterial","../material/Material","../objects/Spring","../shapes/Capsule","../shapes/Line","../solver/GSSolver","../solver/Solver","./IslandManager","useElapsedTime","InversePointProxy","walls","onBodyAdded","onBodyRemoved","onSpringAdded","onSpringRemoved","onConstraintAdded","onConstraintRemoved","onContactMaterialAdded","onContactMaterialRemoved","postBroadphaseCallback","onBeginContact","onEndContact","mpx","mpxi","pxm","pxmi","beginContactHandler","endContactHandler","collisionGroups","nothingCollisionGroup","CollisionGroup","boundsCollisionGroup","everythingCollisionGroup","boundsCollidesWith","_toRemove","_collisionGroupID","removeBodyNextStep","setImpactEvents","impactHandler","setPostBroadphaseCallback","postBroadphaseHandler","_bodyCallbacks","_bodyCallbackContext","_groupCallbacks","_groupCallbackContext","setCollisionGroup","setWorldMaterial","updateBoundsCollisionGroup","impactCallback","createDistanceConstraint","getBody","createGearConstraint","createRevoluteConstraint","createLockConstraint","createPrismaticConstraint","lockRotation","anchorA","anchorB","constraint","setMaterial","createMaterial","createContactMaterial","getSprings","getConstraints","filterStatic","physicsPosition","query","createCollisionGroup","bitmask","createSpring","worldA","worldB","localA","localB","createBody","addPolygon","createParticle","convertCollisionObjects","optimize","addRectangle","FixtureList","list","rawList","namedFixtures","groupedFixtures","allFixtures","setCategory","bit","setter","getFixtures","setMask","setSensor","flatten","getFixtureByKey","getGroup","groupID","_ref","isNaN","callee","PointProxy","collidesWith","removeNextStep","debugBody","_collideWorldBounds","setRectangleFromSprite","createBodyCallback","createGroupCallback","_groupCallbacksContext","getCollisionMask","updateCollisionMask","clearCollision","clearGroup","clearMask","setZeroRotation","setZeroDamping","rotateLeft","rotateRight","moveForward","moveBackward","thrust","resetDamping","resetMass","clearShapes","shapeChanged","addCircle","addPlane","addParticle","addLine","addCapsule","setCircle","setRectangle","addPhaserPolygon","createdFixtures","fixtureData","shapesOfFixture","addFixture","generatedShapes","categoryBits","maskBits","isSensor","polygons","loadPolygon","localData","loadData","BodyDebug","settings","defaultSettings","pixelsPerLengthUnit","debugPolygons","ppu","updateSpriteTransform","lw","vrot","_j","_ref1","randomPastelHex","drawConvex","drawPlane","drawLine","drawRectangle","colors","drawPath","lastx","lasty","diagMargin","diagSize","maxLength","xd","yd","mix","rgbToHex","componentToHex"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"phaser.min.js","sources":["phaser.js"],"names":["root","this","PIXI","WEBGL_RENDERER","CANVAS_RENDERER","VERSION","blendModes","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","scaleModes","DEFAULT","LINEAR","NEAREST","INTERACTION_FREQUENCY","AUTO_PREVENT_DEFAULT","RAD_TO_DEG","Math","PI","DEG_TO_RAD","Point","x","y","prototype","clone","constructor","set","Rectangle","width","height","contains","x1","y1","EmptyRectangle","Polygon","points","Array","slice","call","arguments","p","i","il","length","push","inside","j","xi","yi","xj","yj","intersect","Circle","radius","dx","dy","r2","Ellipse","normx","normy","getBounds","determineMatrixArrayType","Float32Array","Matrix2","Matrix","a","b","c","d","tx","ty","fromArray","array","toArray","transpose","identityMatrix","DisplayObject","position","scale","pivot","rotation","alpha","visible","hitArea","buttonMode","renderable","parent","stage","worldAlpha","_interactive","defaultCursor","worldTransform","color","dynamic","_sr","_cr","filterArea","_bounds","_currentBounds","_mask","_cacheAsBitmap","_cacheIsDirty","setInteractive","interactive","Object","defineProperty","get","value","dirty","item","isMask","_filters","passes","filterPasses","_filterBlock","target","_generateCachedSprite","_destroyCachedSprite","updateTransform","rotationCache","sin","cos","parentTransform","px","py","a00","a01","a10","a11","a02","a12","b00","b01","b10","b11","matrix","getLocalBounds","setStageReference","generateTexture","renderer","bounds","renderTexture","RenderTexture","render","updateCache","_renderCachedSprite","renderSession","gl","Sprite","_renderWebGL","_cachedSprite","_renderCanvas","texture","resize","tempFilters","filters","anchor","destroy","DisplayObjectContainer","children","create","addChild","child","addChildAt","index","Error","removeChild","splice","swapChildren","child2","index1","indexOf","index2","getChildAt","removeChildAt","removeStageReference","undefined","removeChildren","beginIndex","endIndex","begin","end","range","removed","matrixCache","childBounds","childMaxX","childMaxY","minX","Infinity","minY","maxX","maxY","childVisible","spriteBatch","stop","maskManager","pushMask","mask","start","flush","filterManager","pushFilter","popFilter","popMask","context","_width","_height","tint","blendMode","baseTexture","hasLoaded","onTextureUpdate","onTextureUpdateBind","bind","addEventListener","frame","setTexture","textureChange","cachedTint","updateFrame","w0","w1","h0","h1","x2","y2","x3","y3","x4","y4","currentBlendMode","globalCompositeOperation","blendModesCanvas","source","globalAlpha","transform","roundPixels","setTransform","smoothProperty","scaleMode","tintedTexture","CanvasTinter","getTintedTexture","drawImage","trim","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","Texture","SpriteBatch","textureThing","ready","initWebGL","fastSpriteBatch","WebGLFastSpriteBatch","shaderManager","activateShader","fastShader","defaultShader","isRotated","childTransform","AbstractFilter","fragmentSrc","uniforms","shaders","padding","FilterBlock","Text","text","style","canvas","document","createElement","getContext","fromCanvas","setText","setStyle","updateText","font","fill","align","stroke","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowColor","toString","outputText","lines","split","lineWidths","maxLineWidth","lineWidth","measureText","max","lineHeight","determineFontHeight","navigator","isCocoonJS","clearRect","strokeStyle","textBaseline","linePositionX","linePositionY","fillStyle","xShadowOffset","yShadowOffset","fillText","strokeText","updateTexture","requiresUpdate","updateWebGLTexture","fontStyle","result","heightCache","body","getElementsByTagName","dummy","dummyText","createTextNode","appendChild","setAttribute","offsetHeight","spaceLeft","words","wordWidth","wordWidthWithSpace","destroyTexture","BitmapText","_pool","fontName","fontSize","parseInt","fonts","size","data","pos","prevCharCode","chars","line","charCode","charCodeAt","test","charAt","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChildren","lenChars","pop","textWidth","textHeight","Stage","backgroundColor","interactionManager","InteractionManager","setBackgroundColor","setInteractionDelegate","domElement","setTargetDomElement","update","backgroundColorSplit","hex2rgb","hex","substr","backgroundColorString","getMousePosition","mouse","global","lastTime","vendors","window","requestAnimationFrame","cancelAnimationFrame","callback","currTime","Date","getTime","timeToCall","id","setTimeout","clearTimeout","requestAnimFrame","rgb2hex","rgb","Function","thisArg","bound","args","boundArgs","concat","apply","TypeError","F","proto","AjaxRequest","activexmodes","ActiveXObject","XMLHttpRequest","e","canUseNewCanvasBlendModes","fillRect","getImageData","getNextPowerOfTwo","number","EventTarget","listeners","on","type","listener","dispatchEvent","emit","event","l","removeEventListener","off","removeAllEventListeners","PolyK","Triangulate","sign","n","tgs","avl","al","i0","i1","i2","ax","ay","bx","by","cx","cy","earFound","_convex","vi","_PointInTriangle","console","log","v0x","v0y","v1x","v1y","v2x","v2y","dot00","dot01","dot02","dot11","dot12","invDenom","u","v","initDefaultShaders","CompileVertexShader","shaderSrc","_CompileShader","VERTEX_SHADER","CompileFragmentShader","FRAGMENT_SHADER","shaderType","src","join","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","compileProgram","vertexSrc","fragmentShader","vertexShader","shaderProgram","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","PixiShader","program","textureCount","attributes","init","defaultVertexSrc","useProgram","uSampler","getUniformLocation","projectionVector","offsetVector","dimensions","aVertexPosition","getAttribLocation","aTextureCoord","colorAttribute","key","uniformLocation","initUniforms","uniform","_init","initSampler2D","glMatrix","glValueLength","glFunc","uniformMatrix2fv","uniformMatrix3fv","uniformMatrix4fv","activeTexture","bindTexture","TEXTURE_2D","_glTextures","textureData","magFilter","minFilter","wrapS","CLAMP_TO_EDGE","wrapT","format","LUMINANCE","RGBA","repeat","REPEAT","pixelStorei","UNPACK_FLIP_Y_WEBGL","flipY","border","texImage2D","UNSIGNED_BYTE","texParameteri","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","uniform1i","syncUniforms","z","w","createWebGLTexture","deleteProgram","PixiFastShader","uMatrix","aPositionCoord","aScale","aRotation","StripShader","translationMatrix","PrimitiveShader","tintColor","attribute","WebGLGraphics","renderGraphics","graphics","projection","offset","primitiveShader","_webGL","indices","lastIndex","buffer","createBuffer","indexBuffer","webGL","clearDirty","updateGraphics","activatePrimitiveShader","blendFunc","ONE","ONE_MINUS_SRC_ALPHA","uniform2f","uniform3fv","uniform1f","bindBuffer","ARRAY_BUFFER","vertexAttribPointer","FLOAT","ELEMENT_ARRAY_BUFFER","drawElements","TRIANGLE_STRIP","UNSIGNED_SHORT","deactivatePrimitiveShader","graphicsData","Graphics","POLY","buildPoly","buildLine","RECT","buildRectangle","CIRC","ELIP","buildCircle","glPoints","bufferData","STATIC_DRAW","glIndicies","Uint16Array","webGLData","rectData","fillColor","fillAlpha","r","g","verts","vertPos","tempPoints","totalSegs","seg","vecPos","firstPoint","lastPoint","midPointX","midPointY","unshift","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","a1","b1","c1","a2","b2","c2","denom","pdist","dist","indexCount","indexStart","lineColor","lineAlpha","sqrt","abs","triangles","glContexts","WebGLRenderer","view","transparent","antialias","defaultRenderer","contextLost","handleContextLost","contextRestoredLost","handleContextRestored","options","premultipliedAlpha","stencil","e2","glContextId","blendModesWebGL","SRC_ALPHA","DST_ALPHA","DST_COLOR","WebGLShaderManager","WebGLSpriteBatch","WebGLMaskManager","WebGLFilterManager","drawCount","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","colorMask","__stage","removeEvents","updateTextures","_interactiveEventsAdded","setTarget","viewport","bindFramebuffer","FRAMEBUFFER","clearColor","clear","COLOR_BUFFER_BIT","renderDisplayObject","displayObject","frameUpdates","updateTextureFrame","texturesToDestroy","texturesToUpdate","glTexture","deleteTexture","_updateWebGLuvs","createTexture","UNPACK_PREMULTIPLY_ALPHA_WEBGL","_powerOf2","preventDefault","setContext","maskStack","maskPosition","maskData","STENCIL_TEST","stencilFunc","ALWAYS","stencilOp","KEEP","INCR","NOTEQUAL","DECR","maxAttibs","attribState","tempAttribState","setAttribs","attribs","attribId","enableVertexAttribArray","disableVertexAttribArray","currentShader","vertSize","numVerts","numIndices","vertices","lastIndexCount","drawing","currentBatchSize","currentBaseTexture","vertexBuffer","DYNAMIC_DRAW","sprite","setBlendMode","uvs","_uvs","verticies","aX","aY","x0","y0","renderTilingSprite","tilingSprite","tilingTexture","TextureUvs","tilePosition","tileScaleOffset","offsetX","offsetY","scaleX","tileScale","scaleY","bufferSubData","subarray","TRIANGLES","TEXTURE0","stride","blendModeWebGL","deleteBuffer","maxSize","renderSprite","filterStack","texturePool","initShaderBuffers","filterBlock","_filterArea","filter","FilterTexture","frameBuffer","_glFilterTexture","vertexArray","uvBuffer","uvArray","inputTexture","outputTexture","filterPass","applyFilterPass","temp","sizeX","sizeY","currentFilter","colorBuffer","colorArray","createFramebuffer","framebuffer","framebufferTexture2D","COLOR_ATTACHMENT0","renderBuffer","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","deleteFramebuffer","CanvasMaskManager","save","cacheAlpha","CanvasGraphics","renderGraphicsMask","clip","restore","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","Image","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","pixels","putImageData","step","cacheStepsPerColorChannel","min","canUseMultiply","CanvasRenderer","clearBeforeRender","refresh","count","renderStripFlat","strip","beginPath","moveTo","lineTo","closePath","renderStrip","u0","u1","u2","v0","v1","v2","delta","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","CanvasBuffer","strokeRect","arc","ellipseData","h","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","len","rect","currentPath","boundsPadding","destroyCachedSprite","lineStyle","filling","beginFill","endFill","drawRect","drawCircle","drawEllipse","canvasBuffer","translate","updateBounds","TilingSprite","refreshTexture","generateTilingTexture","needsUpdate","__tilePattern","createPattern","forcePowerOfTwo","targetWidth","targetHeight","isFrame","newTextureRequired","isTiling","BaseTextureCache","BaseTextureCacheIdGenerator","BaseTexture","complete","scope","onload","content","imageUrl","updateSourceImage","newSrc","image","crossOrigin","_pixiId","TextureCacheIdGenerator","FrameCache","noFrame","setFrame","onBaseTextureLoaded","onLoaded","destroyBase","tw","th","addTextureToCache","removeTextureFromCache","textureBuffer","renderWebGL","renderCanvas","originalWorldTransform","tempMatrix","exports","module","define","amd","Phaser","GAMES","AUTO","CANVAS","WEBGL","HEADLESS","NONE","LEFT","RIGHT","UP","DOWN","SPRITE","BUTTON","IMAGE","GRAPHICS","TEXT","TILESPRITE","BITMAPTEXT","GROUP","RENDERTEXTURE","TILEMAP","TILEMAPLAYER","EMITTER","POLYGON","BITMAPDATA","CANVAS_FILTER","WEBGL_FILTER","ELLIPSE","SPRITEBATCH","RETROFONT","Utils","parseDimension","dimension","f","innerWidth","innerHeight","shuffle","floor","random","pad","str","dir","padlen","right","ceil","left","isPlainObject","obj","nodeType","hasOwnProperty","extend","name","copy","copyIsArray","deep","isArray","arg","forEach","fun","t","Uint32Array","CheapArray","assert","warn","diameter","_diameter","_radius","circumference","setTo","copyFrom","copyTo","dest","distance","round","distanceRounded","out","circumferencePoint","angle","asDegrees","offsetPoint","point","top","bottom","equals","intersects","degToRad","intersectsRectangle","halfWidth","xDist","halfHeight","yDist","xCornerDist","yCornerDist","xCornerDistSq","yCornerDistSq","maxCornerDistSq","invert","add","subtract","multiply","divide","clampX","clamp","clampY","output","atan2","angleSq","rotate","getMagnitude","getMagnitudeSq","setMagnitude","magnitude","normalize","isZero","m","dot","cross","perp","rperp","normalRightHand","negative","multiplyAdd","s","interpolate","project","amt","projectUnit","centroid","pointslength","floorAll","inflate","containsRect","intersection","tolerance","intersectsRaw","union","empty","inflatePoint","containsRaw","rx","ry","rw","rh","containsPoint","volume","Line","fromSprite","startSprite","endSprite","useCenter","center","asSegment","intersectsPoints","pointOnLine","pointOnSegment","xMin","xMax","yMin","yMax","coordinatesOnLine","stepRate","results","sx","sy","err","pow","Camera","game","world","screenView","deadzone","atLimit","_edge","FOLLOW_LOCKON","FOLLOW_PLATFORMER","FOLLOW_TOPDOWN","FOLLOW_TOPDOWN_TIGHT","follow","helper","unfollow","focusOn","setPosition","focusOnXY","updateTarget","checkBounds","setBoundsToWorld","setSize","reset","State","make","camera","cache","input","load","math","sound","time","tweens","particles","physics","rnd","preload","loadUpdate","loadRender","paused","pauseUpdate","shutdown","StateManager","pendingState","states","_pendingState","_clearWorld","_clearCache","_created","_args","current","onInitCallback","onPreloadCallback","onCreateCallback","onUpdateCallback","onRenderCallback","onPreRenderCallback","onLoadUpdateCallback","onLoadRenderCallback","onPausedCallback","onResumedCallback","onPauseUpdateCallback","onShutDownCallback","boot","onPause","pause","onResume","resume","onLoadComplete","loadComplete","state","autoStart","newState","isBooted","remove","callbackContext","clearWorld","clearCache","checkState","restart","preUpdate","removeAll","setCurrentState","totalQueuedFiles","valid","link","getCurrentState","preRender","renderType","LinkedList","next","prev","first","last","total","callAll","entity","ArrayList","list","exists","getIndex","idx","Signal","_bindings","_prevParams","self","dispatch","memorize","_shouldPropagate","active","validateListener","fnName","replace","_registerListener","isOnce","listenerContext","priority","binding","prevIndex","_indexOfListener","SignalBinding","_addBinding","execute","_priority","cur","_listener","has","addOnce","_destroy","getNumListeners","halt","bindings","paramsArr","forget","dispose","signal","_isOnce","_signal","params","handlerReturn","detach","isBound","getListener","getSignal","Filter","resolution","setResolution","pointer","toFixed","totalElapsedSeconds","Plugin","hasPreUpdate","hasUpdate","hasPostUpdate","hasRender","hasPostRender","postRender","PluginManager","plugins","_len","_i","plugin","_parent","postUpdate","disableVisibilityChange","checkOffsetInterval","currentRenderOrderID","_hiddenVar","_nextOffsetCheck","_backgroundColor","config","parseConfig","Canvas","now","getOffset","stlye","fullScreenScaleMode","_this","_onChange","visibilityChange","setUserSelect","setTouchAction","checkVisibility","webkitHidden","mozHidden","msHidden","hidden","onpagehide","onpageshow","onblur","onfocus","focusLoss","focusGain","gamePaused","gameResumed","Color","hexToRGB","Group","addToStage","enableBody","physicsBodyType","Physics","ARCADE","alive","classType","cursor","cameraOffset","enableBodyDebug","_sortProperty","_cache","RETURN_NONE","RETURN_TOTAL","RETURN_CHILD","SORT_ASCENDING","SORT_DESCENDING","events","onAddedToGroup","addAt","updateZ","getAt","createMultiple","quantity","resetCursor","previous","swap","child1","bringToTop","sendToBack","moveUp","moveDown","xy","reverse","oldChild","newChild","onRemovedFromGroup","setProperty","operation","checkAlive","checkVisible","setAll","setAllChildren","addAll","property","amount","subAll","multiplyAll","divideAll","callAllExists","existsValue","callbackFromArray","method","methodLength","contextLength","renderOrderID","checkExists","forEachExists","iterate","forEachAlive","forEachDead","sort","order","ascendingSortHandler","descendingSortHandler","customSort","sortHandler","returnType","getFirstExists","getFirstAlive","getFirstDead","getTop","getBottom","countLiving","countDead","getRandom","startIndex","destroyPhase","removeBetween","destroyChildren","soft","radToDeg","World","setBounds","wrap","useBounds","integerInRange","ScaleManager","minWidth","maxWidth","minHeight","maxHeight","forceLandscape","forcePortrait","incorrectOrientation","pageAlignHorizontally","pageAlignVertically","maxIterations","orientationSprite","enterLandscape","enterPortrait","enterIncorrectOrientation","leaveIncorrectOrientation","hasResized","fullScreenTarget","enterFullScreen","leaveFullScreen","orientation","outerWidth","outerHeight","scaleFactor","scaleFactorInversed","margin","aspectRatio","sourceAspectRatio","NO_SCALE","_startHeight","checkOrientation","checkResize","fullScreenChange","EXACT_FIT","SHOW_ALL","startFullScreen","isFullScreen","device","fullscreen","smoothed","fullscreenKeyboard","requestFullscreen","Element","ALLOW_KEYBOARD_INPUT","stopFullScreen","cancelFullscreen","setShowAll","forceOrientation","orientationImage","checkImageKey","checkOrientationState","isLandscape","iPad","webApp","desktop","android","chrome","scrollTo","_check","_iterations","setInterval","setScreenSize","force","documentElement","setMaximum","setExactFit","clearInterval","marginLeft","marginTop","multiplier","availableWidth","availableHeight","Game","physicsConfig","isRunning","raf","net","debug","stepping","pendingStep","stepCount","onBlur","onFocus","_paused","_codePaused","RandomDataGenerator","_onBoot","readyState","seed","Device","setUpRenderer","checkFullScreenSupport","GameObjectFactory","GameObjectCreator","Cache","Loader","Time","TweenManager","Input","SoundManager","Particles","Net","Debug","scratch","BitmapData","showDebugHeader","RequestAnimationFrame","webAudio","trident","addToDOM","enableStep","disableStep","setMute","unsetMute","hitCanvas","hitContext","moveCallback","moveCallbackContext","pollRate","disabled","multiInputOverride","MOUSE_TOUCH_COMBINE","speed","circle","maxPointers","currentPointers","tapRate","doubleTapRate","holdRate","justPressedRate","justReleasedRate","recordPointerHistory","recordRate","recordLimit","pointer1","pointer2","pointer3","pointer4","pointer5","pointer6","pointer7","pointer8","pointer9","pointer10","activePointer","mousePointer","keyboard","touch","mspointer","gamepad","resetLocked","onDown","onUp","onTap","onHold","interactiveItems","_localPoint","_pollCounter","_oldPosition","_x","_y","MOUSE_OVERRIDES_TOUCH","TOUCH_OVERRIDES_MOUSE","Pointer","Mouse","Keyboard","Touch","MSPointer","Gamepad","setMoveCallback","addPointer","hard","resetSpeed","startPointer","totalActivePointers","updatePointer","identifier","move","stopPointer","getPointer","getPointerFromIdentifier","getLocalPosition","wt","hitTest","localPoint","worldVisible","TileSprite","Key","keycode","enabled","isDown","isUp","altKey","ctrlKey","shiftKey","timeDown","duration","timeUp","repeats","keyCode","onHoldCallback","onHoldContext","processKeyDown","processKeyUp","justPressed","justReleased","onDownCallback","onUpCallback","_keys","_capture","_onKeyDown","_onKeyUp","addCallbacks","addKey","addKeyCapture","removeKey","removeKeyCapture","createCursorKeys","up","down","clearCaptures","A","B","C","D","E","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","ZERO","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","NUMPAD_0","NUMPAD_1","NUMPAD_2","NUMPAD_3","NUMPAD_4","NUMPAD_5","NUMPAD_6","NUMPAD_7","NUMPAD_8","NUMPAD_9","NUMPAD_MULTIPLY","NUMPAD_ADD","NUMPAD_ENTER","NUMPAD_SUBTRACT","NUMPAD_DECIMAL","NUMPAD_DIVIDE","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","F13","F14","F15","COLON","EQUALS","UNDERSCORE","QUESTION_MARK","TILDE","OPEN_BRACKET","BACKWARD_SLASH","CLOSED_BRACKET","QUOTES","BACKSPACE","TAB","CLEAR","ENTER","SHIFT","CONTROL","ALT","CAPS_LOCK","ESC","SPACEBAR","PAGE_UP","PAGE_DOWN","END","HOME","INSERT","DELETE","HELP","NUM_LOCK","mouseDownCallback","mouseMoveCallback","mouseUpCallback","capture","button","locked","pointerLock","_onMouseDown","_onMouseMove","_onMouseUp","NO_BUTTON","LEFT_BUTTON","MIDDLE_BUTTON","RIGHT_BUTTON","onMouseDown","onMouseMove","onMouseUp","requestPointerLock","element","mozRequestPointerLock","webkitRequestPointerLock","_pointerLockChange","pointerLockChange","pointerLockElement","mozPointerLockElement","webkitPointerLockElement","releasePointerLock","exitPointerLock","mozExitPointerLock","webkitExitPointerLock","_onMSPointerDown","_onMSPointerMove","_onMSPointerUp","onPointerDown","onPointerMove","onPointerUp","pointerId","_holdSent","_history","_nextDrop","_stateReset","withinGame","clientX","clientY","pageX","pageY","screenX","screenY","isMouse","previousTapTime","totalTouches","msSinceLastClick","Number","MAX_VALUE","targetObject","positionDown","positionUp","_touchedHandler","shift","fromClick","pollLocked","isDragged","_highestRenderOrderID","MAX_SAFE_INTEGER","_highestRenderObject","_highestInputPriorityID","currentNode","validForInput","checkPointerOver","checkPointerDown","priorityID","_pointerOutHandler","_pointerOverHandler","leave","_releasedHandler","touchStartCallback","touchMoveCallback","touchEndCallback","touchEnterCallback","touchLeaveCallback","touchCancelCallback","_onTouchStart","_onTouchMove","_onTouchEnd","_onTouchEnter","_onTouchLeave","_onTouchCancel","onTouchStart","onTouchMove","onTouchEnd","onTouchEnter","onTouchLeave","onTouchCancel","consumeDocumentTouches","_documentTouchMove","changedTouches","_gamepads","SinglePad","_gamepadIndexMap","_rawPads","_active","_gamepadSupportAvailable","webkitGetGamepads","webkitGamepads","userAgent","getGamepads","_prevRawGamepadTypes","_prevTimestamps","onConnectCallback","onDisconnectCallback","onAxisCallback","onFloatCallback","_ongamepadconnected","_gamepaddisconnected","callbacks","onConnect","onDisconnect","onAxis","onFloat","newPad","connect","_ongamepaddisconnected","removedPad","disconnect","_pollGamepads","_connected","pollStatus","rawGamepads","gamepadsChanged","singlePad","validConnections","rawIndices","padIndices","connected","k","rawPad","setDeadZones","deadZone","buttonCode","BUTTON_0","BUTTON_1","BUTTON_2","BUTTON_3","BUTTON_4","BUTTON_5","BUTTON_6","BUTTON_7","BUTTON_8","BUTTON_9","BUTTON_10","BUTTON_11","BUTTON_12","BUTTON_13","BUTTON_14","BUTTON_15","AXIS_0","AXIS_1","AXIS_2","AXIS_3","AXIS_4","AXIS_5","AXIS_6","AXIS_7","AXIS_8","AXIS_9","XBOX360_A","XBOX360_B","XBOX360_X","XBOX360_Y","XBOX360_LEFT_BUMPER","XBOX360_RIGHT_BUMPER","XBOX360_LEFT_TRIGGER","XBOX360_RIGHT_TRIGGER","XBOX360_BACK","XBOX360_START","XBOX360_STICK_LEFT_BUTTON","XBOX360_STICK_RIGHT_BUTTON","XBOX360_DPAD_LEFT","XBOX360_DPAD_RIGHT","XBOX360_DPAD_UP","XBOX360_DPAD_DOWN","XBOX360_STICK_LEFT_X","XBOX360_STICK_LEFT_Y","XBOX360_STICK_RIGHT_X","XBOX360_STICK_RIGHT_Y","padParent","_padParent","_index","_rawPad","_prevTimestamp","_rawButtons","_buttons","_axes","_hotkeys","addButton","GamepadButton","timestamp","buttons","buttonValue","processButtonDown","processButtonUp","processButtonFloat","axes","axis","processAxisChange","triggerCallback","disconnectingIndex","axisState","axisCode","buttoncode","InputHandler","useHandCursor","_setHandCursor","allowHorizontalDrag","allowVerticalDrag","snapOffset","snapOnDrag","snapOnRelease","snapX","snapY","snapOffsetX","snapOffsetY","pixelPerfectOver","pixelPerfectClick","pixelPerfectAlpha","draggable","boundsRect","boundsSprite","consumePointerEvent","_wasEnabled","_tempPoint","_pointerData","isOver","isOut","timeOver","timeOut","downDuration","onInputOver","onInputOut","onInputDown","onInputUp","onDragStart","onDragStop","addedToGroup","removedFromGroup","highestID","highestRenderID","pointerX","pointerY","pointerDown","pointerUp","pointerTimeDown","pointerTimeUp","pointerOver","pointerOut","pointerTimeOver","pointerTimeOut","pointerDragged","checkPixel","_draggedPointerID","updateDrag","startDrag","stopDrag","fixedToCamera","_dragPoint","dragOffset","checkBoundsRect","checkBoundsSprite","justOver","delay","overDuration","justOut","enableDrag","lockCenter","pixelPerfect","alphaThreshold","dragFromCenter","disableDrag","centerOn","centerX","centerY","setDragLock","allowHorizontal","allowVertical","enableSnap","onDrag","onRelease","disableSnap","camerOffset","Events","onKilled","onRevived","onOutOfBounds","onEnterBounds","onAnimationStart","onAnimationComplete","onAnimationLoop","existing","object","group","tween","physicsGroup","audio","loop","tileSprite","overFrame","outFrame","downFrame","upFrame","Button","emitter","maxParticles","Arcade","Emitter","retroFont","characterWidth","characterHeight","charsPerRow","xSpacing","ySpacing","RetroFont","bitmapText","tilemap","tileWidth","tileHeight","Tilemap","addToCache","uuid","addRenderTexture","bitmapData","addBitmapData","Tween","ctx","imageData","ArrayBuffer","textureFrame","Frame","disableTextureUpload","cls","refreshBuffer","_tempR","_tempG","_tempB","loadTexture","processPixelRGB","pixel","createColor","unpackPixel","getPixel32","setPixel32","processPixel","replaceRGB","r1","g1","g2","region","packPixel","setHSL","HSLtoRGB","shiftHSL","limitValue","red","green","blue","immediate","LITTLE_ENDIAN","setPixel","getPixel","getPixelRGB","hsl","hsv","getPixels","copyPixels","area","destX","destY","getImage","draw","drawSprite","alphaMask","extract","destination","animations","AnimationManager","_frame","_frameName","autoCull","health","lifespan","checkWorldBounds","outOfBoundsKill","elapsed","kill","isSpriteSheet","loadFrameData","getFrameData","frameName","crop","sourceWidth","sourceHeight","local","revive","damage","_outOfBoundsFired","play","frameRate","killOnComplete","overlap","wrapAngle","P2JS","addToWorld","removeFromWorld","phase","_reset","frameData","getFrameByName","getFrame","_scroll","physicsElapsed","autoScroll","stopScroll","safeRemove","_text","_font","_fontSize","_fontWeight","_lineSpacing","parentNode","setShadow","blur","shadowOffsetX","shadowOffsetY","shadowColor","shadowBlur","runWordWrap","lineCap","lineJoin","linePosition","parseFloat","_align","_tint","_onOverFrameName","_onOutFrameName","_onDownFrameName","_onUpFrameName","_onOverFrameID","_onOutFrameID","_onDownFrameID","_onUpFrameID","onOverSound","onOutSound","onDownSound","onUpSound","onOverSoundMarker","onOutSoundMarker","onDownSoundMarker","onUpSoundMarker","freezeFrames","forceOut","inputEnabled","setFrames","onInputOverHandler","onInputOutHandler","onInputDownHandler","onInputUpHandler","clearFrames","setSounds","overSound","overMarker","downSound","downMarker","outSound","outMarker","upSound","upMarker","setOverSound","setOutSound","setDownSound","setUpSound","marker","Sound","setState","drawPolygon","poly","_temp","renderXY","characterSpacingX","characterSpacingY","characterPerRow","multiLine","autoUpperCase","customSpacingX","customSpacingY","fixedWidth","fontSet","grabData","currentX","currentY","FrameData","addFrame","updateFrameData","stamp","ALIGN_LEFT","ALIGN_RIGHT","ALIGN_CENTER","TEXT_SET1","TEXT_SET2","TEXT_SET3","TEXT_SET4","TEXT_SET5","TEXT_SET6","TEXT_SET7","TEXT_SET8","TEXT_SET9","TEXT_SET10","TEXT_SET11","setFixedWidth","lineAlignment","characterSpacing","lineSpacing","allowLowerCase","buildRetroFontText","getLongestLine","pasteLine","longestLine","removeUnsupportedCharacters","stripCR","newString","aChar","code","newText","toUpperCase","Particle","autoScale","scaleData","_s","autoAlpha","alphaData","_a","onEmit","setAlphaData","setScaleData","noCocoon","display","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollLeft","compatMode","pageYOffset","pageXOffset","getAspectRatio","msTouchAction","overflowHidden","getElementById","overflow","translateX","translateY","skewX","skewY","setSmoothingEnabled","setImageRenderingCrisp","msInterpolationMode","setImageRenderingBicubic","iOS","cocoonJS","ejecta","crosswalk","chromeOS","linux","macOS","windows","windowsPhone","file","fileSystem","localStorage","worker","css3D","typedArray","vibration","getUserMedia","quirksMode","arora","epiphany","firefox","ie","ieVersion","tridentVersion","mobileSafari","midori","opera","safari","silk","audioData","ogg","opus","mp3","wav","m4a","webm","iPhone","iPhone4","pixelRatio","littleEndian","support32bit","_checkAudio","_checkBrowser","_checkCSS3D","_checkDevice","_checkFeatures","_checkOS","ua","getItem","error","WebGLRenderingContext","maxTouchPoints","msPointerEnabled","pointerEnabled","webkitGetUserMedia","mozGetUserMedia","msGetUserMedia","fs","cfs","RegExp","$1","$3","audioElement","canPlayType","toLowerCase","Int8Array","Uint8Array","_checkIsLittleEndian","Uint8ClampedArray","Int32Array","_checkIsUint8ClampedImageData","vibrate","webkitVibrate","mozVibrate","msVibrate","elem","createImageData","has3d","el","transforms","webkitTransform","OTransform","msTransform","MozTransform","insertBefore","getComputedStyle","getPropertyValue","canPlayAudio","isConsoleOpen","profile","profileEnd","forceSetTimeOut","_isSetTimeOut","_onLoop","_timeOutID","updateSetTimeout","updateRAF","isSetTimeOut","isRAF","PI2","fuzzyEqual","epsilon","fuzzyLessThan","fuzzyGreaterThan","fuzzyCeil","val","fuzzyFloor","average","avg","truncate","shear","snapTo","gap","snapToFloor","snapToCeil","snapToInArray","arr","low","high","POSITIVE_INFINITY","roundTo","place","base","floorTo","ceilTo","interpolateFloat","weight","angleBetween","angleBetweenPoints","point1","point2","reverseAngle","angleRad","normalizeAngle","normalizeLatitude","lat","normalizeLongitude","lng","nearestAngleBetween","radians","rd","interpolateAngles","ease","normalizeAngleToAnother","chanceRoll","chance","numberArray","maxAdd","minSub","wrapValue","diff","randomSign","isOdd","isEven","minProperty","maxProperty","radianFactor","angleLimit","linearInterpolation","linear","bezierInterpolation","bernstein","catmullRomInterpolation","catmullRom","p0","p1","factorial","p2","p3","t2","t3","difference","objects","removeRandom","sinCosGenerator","sinAmplitude","cosAmplitude","frequency","frq","cosTable","sinTable","stack","shuffleArray","distancePow","clampBottom","within","mapLinear","smoothstep","smootherstep","degreeToRadiansFactor","degrees","radianToDegreesFactor","seeds","s0","s1","s2","sow","hash","integer","frac","real","realInRange","normal","pick","ary","weightedPick","QuadTree","maxObjects","maxLevels","level","nodes","_empty","subWidth","subHeight","populate","populateHandler","insert","retrieve","returnObjects","getHostName","location","hostname","checkDomainName","domain","updateQueryString","redirect","url","href","re","separator","getQueryString","parameter","keyValues","search","substring","decodeURI","decodeURIComponent","_tweens","_add","_pauseAll","_resumeAll","getAll","pendingDelete","_manager","numTweens","isTweening","some","_object","_pause","_resume","pauseAll","resumeAll","manager","_valuesStart","_valuesEnd","_valuesStartRepeat","_duration","_repeat","_yoyo","_reversed","_delayTime","_startTime","_easingFunction","Easing","Linear","None","_interpolationFunction","_chainedTweens","_onStartCallbackFired","_onUpdateCallback","_onUpdateCallbackContext","_pausedTime","onStart","onLoop","onComplete","to","properties","yoyo","_lastChild","chain","generateData","tick","blob","reversed","times","easing","interpolation","pauseDuration","isFinite","tmp","numChainedTweens","Quadratic","In","Out","InOut","Cubic","Quartic","Quintic","Sinusoidal","Exponential","Circular","Elastic","asin","Back","Bounce","pausedTime","advancedTiming","fps","fpsMin","fpsMax","msMin","msMax","deltaCap","timeCap","frames","Timer","_started","_timeLastSecond","_pauseStarted","_justResumed","_timers","autoDestroy","timer","elapsedSince","since","elapsedSecondsSince","running","expired","nextTick","_pauseTotal","_now","_marked","_diff","_newTick","MINUTE","SECOND","HALF","QUARTER","repeatCount","TimerEvent","clearEvents","clearPendingEvents","adjustEvents","baseTime","ms","currentFrame","currentAnim","updateIfVisible","isLoaded","_frameData","_anims","_outputFrames","useNumericIndex","getFrameIndexes","Animation","validateFrames","checkFrameName","isPlaying","resetFrame","getAnimation","refreshFrame","anim","_frameIndex","isPaused","_frames","loopCount","isFinished","_pauseStartTime","_frameDiff","_frameSkip","_timeLastFrame","_timeNextFrame","useLocalFrameIndex","frameIndex","dispatchComplete","generateFrameNames","prefix","suffix","zeroPad","rotated","rotationDirection","trimmed","sourceSizeW","sourceSizeH","spriteSourceSizeX","spriteSourceSizeY","spriteSourceSizeW","spriteSourceSizeH","setTrim","actualWidth","actualHeight","destWidth","destHeight","getRect","_frameNames","getFrameRange","getFrames","AnimationParser","spriteSheet","frameWidth","frameHeight","frameMax","spacing","img","row","column","JSONData","json","cacheKey","newFrame","filename","sourceSize","spriteSourceSize","JSONDataHash","XMLData","xml","frameX","frameY","nodeValue","_canvases","_images","_textures","_sounds","_json","_physics","_tilemaps","_binary","_bitmapDatas","_bitmapFont","addDefaultImage","addMissingImage","onSoundUnlock","TEXTURE","SOUND","PHYSICS","BINARY","BITMAPFONT","JSON","addCanvas","addBinary","binaryData","addSpriteSheet","addTilemap","mapData","addTextureAtlas","atlasData","TEXTURE_ATLAS_JSON_ARRAY","TEXTURE_ATLAS_JSON_HASH","TEXTURE_ATLAS_XML_STARLING","addBitmapFont","xmlData","LoaderParser","bitmapFont","addPhysicsData","addText","addJSON","addImage","addSound","audioTag","decoded","isDecoding","touchLocked","reloadSound","reloadSoundComplete","updateSound","decodedSound","getCanvas","getBitmapData","getBitmapFont","getPhysicsData","fixtureKey","fixtures","fixture","getTilemapData","getFrameByIndex","getTextureFrame","getTexture","getSound","getSoundData","isSoundDecoded","isSoundReady","getText","getJSON","getBinary","getKeys","removeCanvas","removeImage","removeSound","removeText","removeJSON","removePhysics","removeTilemap","removeBinary","removeBitmapData","removeBitmapFont","_fileList","_fileIndex","_progressChunk","_xhr","_ajax","isLoading","progress","progressFloat","preloadSprite","baseURL","onLoadStart","onFileStart","onFileComplete","onFileError","PHYSICS_LIME_CORONA_JSON","PHYSICS_PHASER_JSON","setPreloadSprite","direction","checkKeyExists","getAssetIndex","getAsset","addToFileList","entry","loaded","prop","replaceInFileList","overwrite","script","binary","spritesheet","urls","autoDecode","mapDataURL","CSV","TILED_JSON","parse","dataURL","jsonData","LIME_CORONA_JSON","textureURL","xmlURL","domparser","DOMParser","parseFromString","async","loadXML","atlasJSONArray","atlasURL","atlas","atlasJSONHash","atlasXML","removeFile","loadFile","fileComplete","onerror","fileError","getAudioURL","usingWebAudio","open","responseType","send","usingAudioTag","Audio","XDomainRequest","timeout","dataLoadError","ontimeout","onprogress","jsonLoadComplete","csvLoadComplete","extension","lastIndexOf","nextFile","loadNext","xmlLoadComplete","response","that","decodeAudioData","onSoundDecode","responseText","language","defer","head","previousIndex","success","totalLoadedFiles","info","common","getAttribute","letters","textureRect","kernings","second","connectToMaster","markers","autoplay","totalDuration","startTime","currentTime","durationMS","stopTime","pausedPosition","currentMarker","pendingPlayback","override","externalNode","masterGainNode","gainNode","masterGain","createGain","createGainNode","gain","_sound","soundHasUnlocked","onDecoded","onPlay","onStop","onMute","onMarkerComplete","_volume","_buffer","_muted","_tempMarker","_tempPosition","_tempVolume","_tempLoop","addMarker","removeMarker","forceRestart","noteOff","createBufferSource","noteGrainOn","decode","muted","prevMarker","mute","_muteVolume","_codeMuted","_unlockSource","noAudio","channels","fakeiOSTouchLock","unlock","disableAudio","disableWebAudio","noteOn","stopAll","soundData","playbackState","PLAYING_STATE","FINISHED_STATE","removeByKey","columnWidth","renderShadow","currentAlpha","currentColor","soundInfo","isDecoded","cameraInfo","hideIfUp","downColor","upColor","worldX","worldY","spriteInputInfo","inputInfo","spriteBounds","filled","rectangle","spriteInfo","inCamera","spriteCoords","lineInfo","geom","forceType","quadTree","quadtree","Body","bodyInfo","renderBodyInfo","rgba","RGBtoHSL","RGBtoHSV","fromRGBA","toRGBA","q","hueToColor","updateColor","HSVtoRGB","getColor32","getColor","RGBtoString","componentToHex","hexToColor","shorthandRegex","exec","HSVColorWheel","colors","HSLColorWheel","interpolateColor","color1","color2","steps","currentStep","src1","getRGB","src2","interpolateColorWithRGB","or","og","ob","interpolateRGB","getRandomColor","getWebRGB","getAlpha","getAlphaFloat","getRed","getGreen","getBlue","getColorInfo","argb","RGBtoHexstring","colorToHexstring","RGBtoWebstring","digits","lsd","msd","hexified","arcade","ninja","box2d","chipmunk","NINJA","BOX2D","CHIPMUNK","Ninja","P2","startSystem","system","enableAABB","gravity","checkCollision","OVERLAP_BIAS","TILE_BIAS","forceX","_overlap","_maxOverlap","_velocity1","_velocity2","_newVelocity1","_newVelocity2","_average","_mapData","_result","_total","_angle","_dx","_dy","updateMotion","_velocityDelta","computeVelocity","angularVelocity","angularAcceleration","angularDrag","maxAngular","velocity","acceleration","drag","maxVelocity","allowGravity","_drag","object1","object2","overlapCallback","processCallback","collideHandler","collide","collideCallback","overlapOnly","collideSpriteVsSprite","collideSpriteVsGroup","collideSpriteVsTilemapLayer","collideGroupVsGroup","collideGroupVsTilemapLayer","collideGroupVsSelf","sprite1","sprite2","separate","_potentials","group1","group2","tilemapLayer","getTiles","tilePadding","separateTile","body1","body2","separateX","separateY","immovable","deltaAbsX","deltaX","embedded","touching","none","overlapX","customSeparateX","bounce","mass","deltaAbsY","deltaY","overlapY","customSeparateY","moves","tile","collisionCallback","collisionCallbackContext","layer","faceLeft","faceRight","faceTop","faceBottom","tileCheckX","tileCheckY","blocked","collideRight","collideLeft","processTileSeparationX","collideDown","collideUp","processTileSeparationY","moveToObject","maxTime","distanceBetween","moveToPointer","angleToPointer","distanceToPointer","moveToXY","distanceToXY","velocityFromAngle","velocityFromRotation","accelerationFromRotation","accelerateToObject","xSpeedMax","ySpeedMax","accelerateToPointer","accelerateToXY","angleToXY","allowRotation","preRotation","newVelocity","deltaMax","facing","collideWorldBounds","any","wasTouching","_sx","_sy","asx","asy","deltaZ","onFloor","onWall","emitters","ID","minParticleSpeed","maxParticleSpeed","minParticleScale","maxParticleScale","minRotation","maxRotation","minParticleAlpha","maxParticleAlpha","particleClass","particleDrag","particleAnchor","emitX","emitY","particleBringToTop","particleSendToBack","_minParticleScale","_maxParticleScale","_quantity","_timer","_counter","_explode","emitParticle","makeParticles","keys","particle","rndKey","rndFrame","explode","setXSpeed","setYSpeed","setRotation","setAlpha","rate","tweenData","setScale","at","Tile","scanned","setCollisionCallback","setCollision","resetCollision","isInteresting","collides","faces","TilemapParser","version","widthInPixels","heightInPixels","layers","tilesets","tiles","collideIndexes","collision","images","currentLayer","debugMap","_results","_tempA","setTileSize","createBlankLayer","addTilesetImage","tileset","tileMargin","tileSpacing","gid","getTilesetIndex","setImage","newSet","Tileset","countX","countY","columns","rows","createFromObjects","CustomClass","adjustY","createLayer","getLayerIndex","TilemapLayer","indexes","bodies","getImageIndex","getObjectIndex","setTileIndexCallback","getLayer","setTileLocationCallback","setCollisionByIndex","calculateFaces","setCollisionBetween","setCollisionByExclusion","recalculate","above","below","getTileAbove","getTileBelow","getTileLeft","getTileRight","setLayer","hasTile","removeTile","removeTileWorldXY","putTile","putTileWorldXY","getTile","getTileWorldXY","paste","tileblock","diffX","diffY","tileA","tileB","swapHandler","removeAllLayers","dump","txt","map","tileColor","debugAlpha","debugColor","debugFill","debugFillColor","debugCallbackColor","scrollFactorX","scrollFactorY","rayStepRate","_mc","cw","ch","ga","dw","dh","tl","startX","startY","prevX","prevY","updateMax","scrollX","scrollY","resizeWorld","_fixX","_unfixX","_fixY","_unfixY","getTileX","getTileY","getTileXY","getRayCastTiles","interestingFace","coords","wy","wx","lenY","_column","lenX","renderDebug","getEmptyData","parseCSV","parseTiledJSON","tilewidth","tileheight","opacity","firstgid","tileproperties","tileProperties","imageheight","imagewidth","polyline","drawCoords","setSpacing","enableCircle","enableTile","clearTilemapLayerBodies","convertTilemap","slopeMap","aabb","collideAABBVsAABB","collideAABBVsTile","collideCircleVsTile","shape","friction","gravityScale","maxSpeed","AABB","integrate","xw","yw","setZeroVelocity","oldpos","moveFrom","moveLeft","fx","moveRight","oH","oV","aabbTileProjections","TYPE_FULL","projAABB_Full","TYPE_45DEG","projAABB_45Deg","TYPE_CONCAVE","projAABB_Concave","TYPE_CONVEX","projAABB_Convex","TYPE_22DEGs","projAABB_22DegS","TYPE_22DEGb","projAABB_22DegB","TYPE_67DEGs","projAABB_67DegS","TYPE_67DEGb","projAABB_67DegB","TYPE_HALF","projAABB_Half","COL_NONE","COL_AXIS","COL_OTHER","reportCollisionVsWorld","fy","o","vx","vy","dp","nx","ny","reportCollisionVsBody","vx1","vy1","dp1","txw","tyw","resolveTile","signx","signy","lenN","lenP","penY","penX","twid","rad","pen","EMPTY","TYPE_EMPTY","setType","updateType","SLOPE_45DEGpn","SQRT2","SLOPE_45DEGnn","SLOPE_45DEGnp","SLOPE_45DEGpp","CONCAVEpn","CONCAVEnn","CONCAVEnp","CONCAVEpp","CONVEXpn","CONVEXnn","CONVEXnp","CONVEXpp","SLOPE_22DEGpnS","slen","SLOPE_22DEGnnS","SLOPE_22DEGnpS","SLOPE_22DEGppS","SLOPE_22DEGpnB","SLOPE_22DEGnnB","SLOPE_22DEGnpB","SLOPE_22DEGppB","SLOPE_67DEGpnS","SLOPE_67DEGnnS","SLOPE_67DEGnpS","SLOPE_67DEGppS","SLOPE_67DEGpnB","SLOPE_67DEGnnB","SLOPE_67DEGnpB","SLOPE_67DEGppB","HALFd","HALFu","HALFl","HALFr","FULL","circleTileProjections","projCircle_Full","projCircle_45Deg","projCircle_Concave","projCircle_Convex","projCircle_22DegS","projCircle_22DegB","projCircle_67DegS","projCircle_67DegB","projCircle_Half","resolveCircleTile","trad","celldp","require",1,"GLMAT_EPSILON","GLMAT_ARRAY_TYPE","setMatrixArrayType","vec2","fromValues","sub","mul","div","squaredDistance","sqrDist","squaredLength","sqrLen","negate","lerp","transformMat2","transformMat2d","transformMat3","transformMat4","vec","fn",2,"Scalar","lineInt","l1","l2","precision","det","eq","segmentsIntersect","q1","q2","da","db","./Scalar",3,"leftOn","rightOn","tmpPoint1","tmpPoint2","collinear","thresholdAngle","ab","bc","magA","magB","acos","sqdist",4,"getIntersectionPoint","append","from","makeCCW","br","isReflex","tmpLine1","tmpLine2","canSee","targetPoly","getCutEdges","tmp1","tmp2","tmpPoly","nDiags","decomp","edges","cutEdges","polys","cutEdge","isSimple","path","quickDecomp","reflexVertices","steinerPoints","maxlevel","upperInt","lowerInt","upperDist","lowerDist","closestDist","upperIndex","lowerIndex","closestIndex","lowerPoly","upperPoly","removeCollinearPoints","num","./Line","./Point",5,6,"./Polygon",7,"description","author","keywords","main","engines","node","repository","bugs","licenses","devDependencies","grunt","grunt-contrib-jshint","grunt-contrib-nodeunit","grunt-contrib-uglify","grunt-contrib-watch","grunt-browserify","z-schema","dependencies","poly-decomp","gl-matrix",8,"lowerBound","upperBound","setFromPoints","overlaps","../math/vec2","../utils/Utils",9,"Broadphase","boundingVolumeType","BOUNDING_CIRCLE","setWorld","getCollisionPairs","boundingRadiusCheck","bodyA","bodyB","d2","boundingRadius","aabbCheck","aabbNeedsUpdate","updateAABB","boundingVolumeCheck","canCollide","motionState","STATIC","KINEMATIC","sleepState","SLEEPING","NAIVE","SAP","../objects/Body",10,"GridBroadphase","defaults","xmin","xmax","ymin","ymax","binsizeX","binsizeY","Ncolliding","bins","Nbins","xmult","ymult","bi","lowerX","lowerY","upperX","upperY","xi1","yi1","xi2","yi2","bin","NbodiesInBin","bj","../collision/Broadphase","../shapes/Circle","../shapes/Particle","../shapes/Plane",11,"NaiveBroadphase","../shapes/Shape",12,"Narrowphase","contactEquations","frictionEquations","enableFriction","slipForce","frictionCoefficient","surfaceVelocity","reuseObjects","reusableContactEquations","reusableFrictionEquations","restitution","stiffness","Equation","DEFAULT_STIFFNESS","relaxation","DEFAULT_RELAXATION","frictionStiffness","frictionRelaxation","collidingBodiesLastStep","TupleDictionary","setConvexToCapsuleShapeMiddle","convexShape","capsuleShape","pointInConvex","worldPoint","convexOffset","convexAngle","worldVertex0","pic_worldVertex0","worldVertex1","pic_worldVertex1","r0","pic_r0","pic_r1","lastCross","crossLength","ContactEquation","FrictionEquation","Convex","Shape","yAxis","tmp3","tmp4","tmp5","tmp6","tmp7","tmp8","tmp9","tmp10","tmp11","tmp12","tmp13","tmp14","tmp15","tmp16","tmp17","tmp18","tmpArray","collidedLastStep","id1","id2","ce","fe","rfe","rce","appendArray","createContactEquation","shapeA","shapeB","firstImpact","createFrictionEquation","setSlipForce","relativeVelocity","createFrictionFromContact","contactPointA","contactPointB","rotate90cw","normalA","contactEquation","LINE","CONVEX","convexLine","si","ai","sj","aj","justTest","RECTANGLE","lineRectangle","convexCapsule_tempRect","convexCapsule_tempVec","CAPSULE","convexCapsule","circlePos","result1","circleConvex","result2","convexConvex","lineCapsule","capsuleCapsule_tempVec1","capsuleCapsule_tempVec2","capsuleCapsule_tempRect1","capsuleCapsule","circlePosi","circlePosj","numContacts","circleCircle","lineLine","PLANE","planeLine","planeBody","planeShape","planeOffset","planeAngle","lineBody","lineShape","lineOffset","lineAngle","worldVertex01","worldVertex11","worldEdge","worldEdgeUnit","worldNormal","worldTangent","PARTICLE","particleCapsule","circleLine","CIRCLE","lineRadius","circleRadius","circleOffset","circleBody","circleShape","orthoDist","lineToCircleOrthoUnit","projectedPoint","centerDist","lineToCircle","lineEndToLineRadius","pos0","pos1","circleCapsule","convexBody","worldVertex","closestEdgeProjectedPoint","candidate","candidateDist","minCandidate","found","minCandidateDistance","candidateDistance","localVertex","particleConvex","particleOffset","particleBody","convexToparticle","minEdgeNormal","radiusA","radiusB","offsetA","offsetB","planeConvex","numReported","convexPrecision","convexPlane","particlePlane","circleParticle","capsulePlane_tmpCircle","capsulePlane_tmp1","capsulePlane_tmp2","planeCapsule","end1","end2","numContacts1","circlePlane","numContacts2","capsulePlane","planeToCircle","contact","sepAxis","worldPoint0","worldPoint1","penetrationVec","findSeparatingAxis","closestEdge1","getClosestEdge","closestEdge2","closestEdgeA","closestEdgeB","angleA","angleB","insideNumEdges","pcoa_tmp1","projectConvexOntoAxis","worldAxis","localAxis","fsa_tmp1","fsa_tmp2","fsa_tmp3","fsa_tmp4","fsa_tmp5","fsa_tmp6","offset1","angle1","offset2","angle2","maxDist","edge","span1","span2","swapped","gce_tmp1","gce_tmp2","gce_tmp3","flip","closestEdge","maxDot","circleHeightfield_candidate","circleHeightfield_dist","circleHeightfield_v0","circleHeightfield_v1","circleHeightfield_minCandidate","circleHeightfield_worldNormal","circleHeightfield_minCandidateNormal","HEIGHTFIELD","circleHeightfield","circleAngle","hfBody","hfShape","hfPos","hfAngle","elementWidth","minCandidateNormal","idxA","idxB","convexHeightfield_v0","convexHeightfield_v1","convexHeightfield_tilePos","convexHeightfield_tempConvexShape","convexHeightfield","convexPos","tilePos","tileConvex","../equations/ContactEquation","../equations/Equation","../equations/FrictionEquation","../shapes/Convex","../shapes/Rectangle","../utils/TupleDictionary",13,"SAPBroadphase","axisList","axisIndex","_addBodyHandler","_removeBodyHandler","sortAxisList",14,"Constraint","collideConnected","wakeUpBodies","equations","wakeUp","DISTANCE","GEAR","LOCK","PRISMATIC","REVOLUTE","setStiffness","eqs","setRelaxation",15,"DistanceConstraint","localAnchorA","localAnchorB","maxForce","ri","rj","computeGq","setMaxForce","minForce","getMaxForce","./Constraint",16,"GearConstraint","AngleLockEquation","ratio","setMaxTorque","maxTorque","setRatio","torque","getMaxTorque","../equations/AngleLockEquation",17,"LockConstraint","localOffsetB","localAngleB","rot","xAxis",18,"PrismaticConstraint","localAxisA","trans","gg","updateJacobian","disableRotationalLock","RotationalLockEquation","lowerLimitEnabled","upperLimitEnabled","lowerLimit","upperLimit","upperLimitEquation","lowerLimitEquation","motorEquation","motorEnabled","motorSpeed","computeGW","vj","wi","wj","transformedGmult","worldAxisA","worldAnchorA","worldAnchorB","orientedAnchorA","orientedAnchorB","relPosition","enableMotor","disableMotor","../equations/RotationalLockEquation",19,"RevoluteConstraint","pivotA","pivotB","worldPivotA","worldPivotB","RotationalVelocityEquation","relAngle","motorIsEnabled","setMotorSpeed","getMotorSpeed","../equations/RotationalVelocityEquation",20,"./Equation",21,"computeB","rixn","rjxn","GW","Gq","GiMf","computeGiMf",22,"ARRAY_TYPE","timeStep","Gmult","getBodyInvMass","invMass","getBodyInvInertia","invInertia","qi","qj","computeGWlambda","vlambda","wlambda","iMfi","iMfj","fi","ti","angularForce","fj","tj","invMassi","invMassj","invIi","invIj","computeGiMGt","addToWlambda_temp","addToWlambda_Gi","addToWlambda_Gj","addToWlambda","deltalambda","Gi","Gj","computeInvC","eps",23,"getSlipForce",24,"worldVectorA","worldVectorB",25,26,"EventEmitter","_listeners","listenerArray",27,"ContactMaterial","materialA","materialB","Material","idCounter","./Material",28,29,"GetArea","sum",30,"crossVZ","zcomp","crossZV","toLocalFrame","framePosition","frameAngle","toGlobalFrame","../../build/vec2",31,"_idCounter","shapes","shapeOffsets","shapeAngles","inertia","fixedRotation","interpolatedPosition","interpolatedAngle","previousPosition","previousAngle","damping","angularDamping","DYNAMIC","allowSleep","wantsToSleep","AWAKE","sleepSpeedLimit","sleepTimeLimit","timeLastSleepy","concavePath","lastDampingScale","lastAngularDampingScale","lastDampingTimeStep","_wakeUpAfterNarrowphase","updateMassProperties","setDensity","density","totalArea","getArea","shapeAABB","computeAABB","updateBoundingRadius","addShape","removeShape","Icm","computeMomentOfInertia","Body_applyForce_r","applyForce","rotForce","toWorldFrame","fromPolygon","convexes","optimalDecomp","cm","centerOfMass","updateTriangles","updateCenterOfMass","adjustCenterOfMass","adjustCenterOfMass_tmp2","adjustCenterOfMass_tmp3","adjustCenterOfMass_tmp4","offset_times_area","setZeroForce","resetConstraintVelocity","addConstraintVelocity","applyDamping","dt","idleTime","wakeUpEvent","sleep","sleepEvent","sleepTick","dontSleep","speedSquared","speedLimitSquared","SLEEPY","getVelocityFromPosition","store","getAngularVelocityFromPosition","sleepyEvent","../collision/AABB","../events/EventEmitter",32,"Spring","restLength","setWorldAnchorA","setWorldAnchorB","getWorldAnchorA","getWorldAnchorB","applyForce_r","applyForce_r_unit","applyForce_u","applyForce_f","applyForce_worldAnchorA","applyForce_worldAnchorB","applyForce_ri","applyForce_rj","applyForce_tmp","r_unit","rlen","ri_x_f","rj_x_f",33,"Capsule","GSSolver","Heightfield","Plane","Solver","../package.json","./collision/AABB","./collision/Broadphase","./collision/GridBroadphase","./collision/NaiveBroadphase","./collision/Narrowphase","./collision/SAPBroadphase","./constraints/Constraint","./constraints/DistanceConstraint","./constraints/GearConstraint","./constraints/LockConstraint","./constraints/PrismaticConstraint","./constraints/RevoluteConstraint","./equations/AngleLockEquation","./equations/ContactEquation","./equations/Equation","./equations/FrictionEquation","./equations/RotationalVelocityEquation","./events/EventEmitter","./material/ContactMaterial","./material/Material","./math/vec2","./objects/Body","./objects/Spring","./shapes/Capsule","./shapes/Circle","./shapes/Convex","./shapes/Heightfield","./shapes/Line","./shapes/Particle","./shapes/Plane","./shapes/Rectangle","./shapes/Shape","./solver/GSSolver","./solver/Solver","./utils/Utils","./world/World",34,"updateArea","./Shape",35,36,"polyk","polykVerts","id3","updateCenterOfMass_centroid","updateCenterOfMass_centroid_times_mass","updateCenterOfMass_a","updateCenterOfMass_b","updateCenterOfMass_c","centroid_times_mass","triangleArea","numer","../math/polyk",37,"maxValue","minValue",38,39,40,41,"./Convex",42,"collisionGroup","collisionMask","material","sensor",43,"GS","iterations","arrayStep","lambda","Bs","invCs","useZeroRHS","frictionIterations","usedIterations","setArrayZero","solve","sortEquations","iter","maxIter","maxFrictionIter","Neq","tolSquared","Nbodies","deltalambdaTot","iterateEquation","updateMultipliers","invDt","invC","lambdaj","GWlambda","lambdaj_plus_deltalambda","./Solver",44,"equationSortFunction","mockWorld","solveIsland","island","removeAllEquations","addEquations","getBodies","addEquation","removeEquation","ISLAND",45,"OverlapKeeper","overlappingLastState","overlappingCurrentState","recordPool","tmpDict","tmpArray1","OverlapKeeperRecord","getByKey","setOverlapping","getNewOverlaps","getDiff","getEndOverlaps","dictA","dictB","lastData","isNewOverlap","idA","idB","getNewBodyOverlaps","getBodyDiff","getEndBodyOverlaps","accumulator","./TupleDictionary","./Utils",46,"getKey","dict",47,"howmany",48,"Island","bodyIds",49,"IslandManager","_nodePool","_islandPool","islands","queue","IslandNode","getUnvisitedNode","Nnodes","visited","visit","bds","Neqs","bfs","neighbors","ni","nj","./Island","./IslandNode",50,51,"springs","disabledBodyCollisionPairs","solver","narrowphase","islandManager","frictionGravity","useWorldGravityAsFrictionGravity","useFrictionGravityOnZeroGravity","doProfiling","lastStepTime","broadphase","constraints","defaultMaterial","defaultContactMaterial","lastTimeStep","applySpringForces","applyGravity","solveConstraints","contactMaterials","bodiesToBeRemoved","fixedStepTime","islandSplit","emitImpactEvent","_constraintIdCounter","_bodyIdCounter","postStepEvent","addBodyEvent","removeBodyEvent","addSpringEvent","spring","impactEvent","postBroadphaseEvent","pairs","enableBodySleeping","enableIslandSleeping","beginContactEvent","endContactEvent","preSolveEvent","overlappingShapesLastState","overlappingShapesCurrentState","overlapKeeper","v2a","contactMaterialToJSON","pkg","performance","nowOffset","timing","navigationStart","addConstraint","addContactMaterial","contactMaterial","removeContactMaterial","getContactMaterial","cmats","removeConstraint","step_mg","xiw","xjw","interpvelo","timeSinceLastCalled","maxSubSteps","internalStep","internalSteps","h_div_dt","endOverlaps","t0","t1","Nsprings","np","mg","gravityLen","ignoredPairs","Nconstraints","Nresults","Nshapesi","Nshapesj","runNarrowphase","integrateBody","ev","removeBody","ib_fhMinv","ib_velodt","minv","velo","glen","aiw","ajw","reducedMass","resolver","numFrictionBefore","numFrictionEquations","speedSquaredB","speedLimitSquaredB","speedSquaredA","speedLimitSquaredA","addSpring","removeSpring","addBody","getBodyById","disableBodyCollision","enableBodyCollision","toJSON","distanceConstraints","revoluteConstraints","prismaticConstraints","lockConstraints","gearConstraints","materials","js","jb","wb","jc","ss","jsonBody","circleShapes","planeShapes","particleShapes","lineShapes","rectangleShapes","convexShapes","capsuleShapes","jsonShape","mats","matId","fromJSON","shapeJSON","id2material","jm","matA","matB","revolute","cs","cms","hitTest_tmp1","hitTest_zero","hitTest_tmp2","pb","ps","pa","zero","NS","setGlobalEquationParameters","parameters","setGlobalStiffness","setGlobalRelaxation","../../package.json","../collision/NaiveBroadphase","../collision/Narrowphase","../collision/SAPBroadphase","../constraints/Constraint","../constraints/DistanceConstraint","../constraints/GearConstraint","../constraints/LockConstraint","../constraints/PrismaticConstraint","../constraints/RevoluteConstraint","../material/ContactMaterial","../material/Material","../objects/Spring","../shapes/Capsule","../shapes/Line","../solver/GSSolver","../solver/Solver","../utils/OverlapKeeper","./IslandManager","useElapsedTime","InversePointProxy","walls","onBodyAdded","onBodyRemoved","onSpringAdded","onSpringRemoved","onConstraintAdded","onConstraintRemoved","onContactMaterialAdded","onContactMaterialRemoved","postBroadphaseCallback","onBeginContact","onEndContact","mpx","mpxi","pxm","pxmi","beginContactHandler","endContactHandler","collisionGroups","nothingCollisionGroup","CollisionGroup","boundsCollisionGroup","everythingCollisionGroup","boundsCollidesWith","_toRemove","_collisionGroupID","removeBodyNextStep","setImpactEvents","impactHandler","setPostBroadphaseCallback","postBroadphaseHandler","_bodyCallbacks","_bodyCallbackContext","_groupCallbacks","_groupCallbackContext","setCollisionGroup","setWorldMaterial","updateBoundsCollisionGroup","impactCallback","createDistanceConstraint","getBody","createGearConstraint","createRevoluteConstraint","createLockConstraint","createPrismaticConstraint","lockRotation","anchorA","anchorB","constraint","setMaterial","createMaterial","createContactMaterial","getSprings","getConstraints","filterStatic","physicsPosition","query","createCollisionGroup","bitmask","createSpring","worldA","worldB","localA","localB","createBody","addPolygon","createParticle","convertCollisionObjects","optimize","addRectangle","FixtureList","rawList","namedFixtures","groupedFixtures","allFixtures","setCategory","bit","setter","getFixtures","setMask","setSensor","flatten","getFixtureByKey","getGroup","groupID","_ref","isNaN","callee","PointProxy","collidesWith","removeNextStep","debugBody","_collideWorldBounds","setRectangleFromSprite","createBodyCallback","createGroupCallback","_groupCallbacksContext","getCollisionMask","updateCollisionMask","clearCollision","clearGroup","clearMask","setZeroRotation","setZeroDamping","rotateLeft","rotateRight","moveForward","moveBackward","thrust","resetDamping","resetMass","clearShapes","shapeChanged","addCircle","addPlane","addParticle","addLine","addCapsule","setCircle","setRectangle","addPhaserPolygon","createdFixtures","fixtureData","shapesOfFixture","addFixture","generatedShapes","categoryBits","maskBits","isSensor","polygons","loadPolygon","loadData","BodyDebug","settings","defaultSettings","pixelsPerLengthUnit","debugPolygons","ppu","updateSpriteTransform","lw","vrot","_j","_ref1","randomPastelHex","drawConvex","drawPlane","drawLine","drawRectangle","drawPath","lastx","lasty","diagMargin","diagSize","maxLength","xd","yd","mix","rgbToHex"],"mappings":"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"} \ No newline at end of file diff --git a/build/phaser.min.js b/build/phaser.min.js index 7eb3ff2aaa..465a7ce12f 100644 --- a/build/phaser.min.js +++ b/build/phaser.min.js @@ -1,23 +1,23 @@ /* Phaser v2.0.4 - http://phaser.io - @photonstorm - (c) 2014 Photon Storm Ltd. */ -(function(){var a=this,b=b||{};b.WEBGL_RENDERER=0,b.CANVAS_RENDERER=1,b.VERSION="v1.5.2",b.blendModes={NORMAL:0,ADD:1,MULTIPLY:2,SCREEN:3,OVERLAY:4,DARKEN:5,LIGHTEN:6,COLOR_DODGE:7,COLOR_BURN:8,HARD_LIGHT:9,SOFT_LIGHT:10,DIFFERENCE:11,EXCLUSION:12,HUE:13,SATURATION:14,COLOR:15,LUMINOSITY:16},b.scaleModes={DEFAULT:0,LINEAR:0,NEAREST:1},b.INTERACTION_FREQUENCY=30,b.AUTO_PREVENT_DEFAULT=!0,b.RAD_TO_DEG=180/Math.PI,b.DEG_TO_RAD=Math.PI/180,b.Point=function(a,b){this.x=a||0,this.y=b||0},b.Point.prototype.clone=function(){return new b.Point(this.x,this.y)},b.Point.prototype.constructor=b.Point,b.Point.prototype.set=function(a,b){this.x=a||0,this.y=b||(0!==b?this.x:0)},b.Rectangle=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},b.Rectangle.prototype.clone=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},b.Rectangle.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=this.x;if(a>=c&&a<=c+this.width){var d=this.y;if(b>=d&&b<=d+this.height)return!0}return!1},b.Rectangle.prototype.constructor=b.Rectangle,b.EmptyRectangle=new b.Rectangle(0,0,0,0),b.Polygon=function(a){if(a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var c=[],d=0,e=a.length;e>d;d+=2)c.push(new b.Point(a[d],a[d+1]));a=c}this.points=a},b.Polygon.prototype.clone=function(){for(var a=[],c=0;cb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!c)}return c},b.Polygon.prototype.constructor=b.Polygon,b.Circle=function(a,b,c){this.x=a||0,this.y=b||0,this.radius=c||0},b.Circle.prototype.clone=function(){return new b.Circle(this.x,this.y,this.radius)},b.Circle.prototype.contains=function(a,b){if(this.radius<=0)return!1;var c=this.x-a,d=this.y-b,e=this.radius*this.radius;return c*=c,d*=d,e>=c+d},b.Circle.prototype.constructor=b.Circle,b.Ellipse=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},b.Ellipse.prototype.clone=function(){return new b.Ellipse(this.x,this.y,this.width,this.height)},b.Ellipse.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=(a-this.x)/this.width,d=(b-this.y)/this.height;return c*=c,d*=d,1>=c+d},b.Ellipse.prototype.getBounds=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},b.Ellipse.prototype.constructor=b.Ellipse,b.determineMatrixArrayType=function(){return"undefined"!=typeof Float32Array?Float32Array:Array},b.Matrix2=b.determineMatrixArrayType(),b.Matrix=function(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0},b.Matrix.prototype.fromArray=function(a){this.a=a[0],this.b=a[1],this.c=a[3],this.d=a[4],this.tx=a[2],this.ty=a[5]},b.Matrix.prototype.toArray=function(a){this.array||(this.array=new Float32Array(9));var b=this.array;return a?(this.array[0]=this.a,this.array[1]=this.c,this.array[2]=0,this.array[3]=this.b,this.array[4]=this.d,this.array[5]=0,this.array[6]=this.tx,this.array[7]=this.ty,this.array[8]=1):(this.array[0]=this.a,this.array[1]=this.b,this.array[2]=this.tx,this.array[3]=this.c,this.array[4]=this.d,this.array[5]=this.ty,this.array[6]=0,this.array[7]=0,this.array[8]=1),b},b.identityMatrix=new b.Matrix,b.DisplayObject=function(){this.position=new b.Point,this.scale=new b.Point(1,1),this.pivot=new b.Point(0,0),this.rotation=0,this.alpha=1,this.visible=!0,this.hitArea=null,this.buttonMode=!1,this.renderable=!1,this.parent=null,this.stage=null,this.worldAlpha=1,this._interactive=!1,this.defaultCursor="pointer",this.worldTransform=new b.Matrix,this.color=[],this.dynamic=!0,this._sr=0,this._cr=1,this.filterArea=null,this._bounds=new b.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this._cacheAsBitmap=!1,this._cacheIsDirty=!1},b.DisplayObject.prototype.constructor=b.DisplayObject,b.DisplayObject.prototype.setInteractive=function(a){this.interactive=a},Object.defineProperty(b.DisplayObject.prototype,"interactive",{get:function(){return this._interactive},set:function(a){this._interactive=a,this.stage&&(this.stage.dirty=!0)}}),Object.defineProperty(b.DisplayObject.prototype,"worldVisible",{get:function(){var a=this;do{if(!a.visible)return!1;a=a.parent}while(a);return!0}}),Object.defineProperty(b.DisplayObject.prototype,"mask",{get:function(){return this._mask},set:function(a){this._mask&&(this._mask.isMask=!1),this._mask=a,this._mask&&(this._mask.isMask=!0)}}),Object.defineProperty(b.DisplayObject.prototype,"filters",{get:function(){return this._filters},set:function(a){if(a){for(var b=[],c=0;c=0&&b<=this.children.length))throw new Error(a+" The index "+b+" supplied is out of bounds "+this.children.length);a.parent&&a.parent.removeChild(a),a.parent=this,this.children.splice(b,0,a),this.stage&&a.setStageReference(this.stage)},b.DisplayObjectContainer.prototype.swapChildren=function(a,b){if(a!==b){var c=this.children.indexOf(a),d=this.children.indexOf(b);if(0>c||0>d)throw new Error("swapChildren: Both the supplied DisplayObjects must be a child of the caller.");this.children[c]=b,this.children[d]=a}},b.DisplayObjectContainer.prototype.getChildAt=function(a){if(a>=0&&a0&&d>=e){for(var f=this.children.splice(c,e),g=0;ga;a++)this.children[a].updateTransform()},b.DisplayObjectContainer.prototype.getBounds=function(a){if(0===this.children.length)return b.EmptyRectangle;if(a){var c=this.worldTransform;this.worldTransform=a,this.updateTransform(),this.worldTransform=c}for(var d,e,f,g=1/0,h=1/0,i=-1/0,j=-1/0,k=!1,l=0,m=this.children.length;m>l;l++){var n=this.children[l];n.visible&&(k=!0,d=this.children[l].getBounds(a),g=ge?i:e,j=j>f?j:f)}if(!k)return b.EmptyRectangle;var o=this._bounds;return o.x=g,o.y=h,o.width=i-g,o.height=j-h,o},b.DisplayObjectContainer.prototype.getLocalBounds=function(){var a=this.worldTransform;this.worldTransform=b.identityMatrix;for(var c=0,d=this.children.length;d>c;c++)this.children[c].updateTransform();var e=this.getBounds();return this.worldTransform=a,e},b.DisplayObjectContainer.prototype.setStageReference=function(a){this.stage=a,this._interactive&&(this.stage.dirty=!0);for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d.setStageReference(a)}},b.DisplayObjectContainer.prototype.removeStageReference=function(){for(var a=0,b=this.children.length;b>a;a++){var c=this.children[a];c.removeStageReference()}this._interactive&&(this.stage.dirty=!0),this.stage=null},b.DisplayObjectContainer.prototype._renderWebGL=function(a){if(this.visible&&!(this.alpha<=0)){if(this._cacheAsBitmap)return void this._renderCachedSprite(a);var b,c;if(this._mask||this._filters){for(this._mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a),a.spriteBatch.start()),this._filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);a.spriteBatch.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),a.spriteBatch.start()}else for(b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},b.DisplayObjectContainer.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){if(this._cacheAsBitmap)return void this._renderCachedSprite(a);this._mask&&a.maskManager.pushMask(this._mask,a.context);for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},b.Sprite=function(a){b.DisplayObjectContainer.call(this),this.anchor=new b.Point,this.texture=a,this._width=0,this._height=0,this.tint=16777215,this.blendMode=b.blendModes.NORMAL,a.baseTexture.hasLoaded?this.onTextureUpdate():(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},b.Sprite.prototype=Object.create(b.DisplayObjectContainer.prototype),b.Sprite.prototype.constructor=b.Sprite,Object.defineProperty(b.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(a){this.scale.x=a/this.texture.frame.width,this._width=a}}),Object.defineProperty(b.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(a){this.scale.y=a/this.texture.frame.height,this._height=a}}),b.Sprite.prototype.setTexture=function(a){this.texture.baseTexture!==a.baseTexture?(this.textureChange=!0,this.texture=a):this.texture=a,this.cachedTint=16777215,this.updateFrame=!0},b.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},b.Sprite.prototype.getBounds=function(a){var b=this.texture.frame.width,c=this.texture.frame.height,d=b*(1-this.anchor.x),e=b*-this.anchor.x,f=c*(1-this.anchor.y),g=c*-this.anchor.y,h=a||this.worldTransform,i=h.a,j=h.c,k=h.b,l=h.d,m=h.tx,n=h.ty,o=i*e+k*g+m,p=l*g+j*e+n,q=i*d+k*g+m,r=l*g+j*d+n,s=i*d+k*f+m,t=l*f+j*d+n,u=i*e+k*f+m,v=l*f+j*e+n,w=-1/0,x=-1/0,y=1/0,z=1/0;y=y>o?o:y,y=y>q?q:y,y=y>s?s:y,y=y>u?u:y,z=z>p?p:z,z=z>r?r:z,z=z>t?t:z,z=z>v?v:z,w=o>w?o:w,w=q>w?q:w,w=s>w?s:w,w=u>w?u:w,x=p>x?p:x,x=r>x?r:x,x=t>x?t:x,x=v>x?v:x;var A=this._bounds;return A.x=y,A.width=w-y,A.y=z,A.height=x-z,this._currentBounds=A,A},b.Sprite.prototype._renderWebGL=function(a){if(this.visible&&!(this.alpha<=0)){var b,c;if(this._mask||this._filters){var d=a.spriteBatch;for(this._mask&&(d.stop(),a.maskManager.pushMask(this.mask,a),d.start()),this._filters&&(d.flush(),a.filterManager.pushFilter(this._filterBlock)),d.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);d.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),d.start()}else for(a.spriteBatch.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},b.Sprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){var c=this.texture.frame,d=a.context,e=this.texture;if(this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,d.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),this._mask&&a.maskManager.pushMask(this._mask,a.context),c&&c.width&&c.height&&e.baseTexture.source){d.globalAlpha=this.worldAlpha;var f=this.worldTransform;if(a.roundPixels?d.setTransform(f.a,f.c,f.b,f.d,0|f.tx,0|f.ty):d.setTransform(f.a,f.c,f.b,f.d,f.tx,f.ty),a.smoothProperty&&a.scaleMode!==this.texture.baseTexture.scaleMode&&(a.scaleMode=this.texture.baseTexture.scaleMode,d[a.smoothProperty]=a.scaleMode===b.scaleModes.LINEAR),16777215!==this.tint){if(this.cachedTint!==this.tint){if(!e.baseTexture.hasLoaded)return;this.cachedTint=this.tint,this.tintedTexture=b.CanvasTinter.getTintedTexture(this,this.tint)}d.drawImage(this.tintedTexture,0,0,c.width,c.height,this.anchor.x*-c.width,this.anchor.y*-c.height,c.width,c.height)}else if(e.trim){var g=e.trim;d.drawImage(this.texture.baseTexture.source,c.x,c.y,c.width,c.height,g.x-this.anchor.x*g.width,g.y-this.anchor.y*g.height,c.width,c.height)}else d.drawImage(this.texture.baseTexture.source,c.x,c.y,c.width,c.height,this.anchor.x*-c.width,this.anchor.y*-c.height,c.width,c.height)}for(var h=0,i=this.children.length;i>h;h++){var j=this.children[h];j._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},b.Sprite.fromFrame=function(a){var c=b.TextureCache[a];if(!c)throw new Error('The frameId "'+a+'" does not exist in the texture cache'+this);return new b.Sprite(c)},b.Sprite.fromImage=function(a,c,d){var e=b.Texture.fromImage(a,c,d);return new b.Sprite(e)},b.SpriteBatch=function(a){b.DisplayObjectContainer.call(this),this.textureThing=a,this.ready=!1},b.SpriteBatch.prototype=Object.create(b.DisplayObjectContainer.prototype),b.SpriteBatch.constructor=b.SpriteBatch,b.SpriteBatch.prototype.initWebGL=function(a){this.fastSpriteBatch=new b.WebGLFastSpriteBatch(a),this.ready=!0},b.SpriteBatch.prototype.updateTransform=function(){b.DisplayObject.prototype.updateTransform.call(this)},b.SpriteBatch.prototype._renderWebGL=function(a){!this.visible||this.alpha<=0||!this.children.length||(this.ready||this.initWebGL(a.gl),a.spriteBatch.stop(),a.shaderManager.activateShader(a.shaderManager.fastShader),this.fastSpriteBatch.begin(this,a),this.fastSpriteBatch.render(this),a.shaderManager.activateShader(a.shaderManager.defaultShader),a.spriteBatch.start())},b.SpriteBatch.prototype._renderCanvas=function(a){var c=a.context;c.globalAlpha=this.worldAlpha,b.DisplayObject.prototype.updateTransform.call(this);for(var d=this.worldTransform,e=!0,f=0;fe?(g>0&&(b+="\n"),b+=f[g]+" ",e=this.style.wordWrapWidth-h):(e-=i,b+=f[g]+" ")}d=2?parseInt(c[c.length-2],10):b.BitmapText.fonts[this.fontName].size,this.dirty=!0,this.tint=a.tint},b.BitmapText.prototype.updateText=function(){for(var a=b.BitmapText.fonts[this.fontName],c=new b.Point,d=null,e=[],f=0,g=[],h=0,i=this.fontSize/a.size,j=0;j=j;j++){var n=0;"right"===this.style.align?n=f-g[j]:"center"===this.style.align&&(n=(f-g[j])/2),m.push(n)}var o=this.children.length,p=e.length,q=this.tint||16777215;for(j=0;p>j;j++){var r=o>j?this.children[j]:this._pool.pop();r?r.setTexture(e[j].texture):r=new b.Sprite(e[j].texture),r.position.x=(e[j].position.x+m[e[j].line])*i,r.position.y=e[j].position.y*i,r.scale.x=r.scale.y=i,r.tint=q,r.parent||this.addChild(r)}for(;this.children.length>p;){var s=this.getChildAt(this.children.length-1);this._pool.push(s),this.removeChild(s)}this.textWidth=f*i,this.textHeight=(c.y+a.lineHeight)*i},b.BitmapText.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.dirty=!1),b.DisplayObjectContainer.prototype.updateTransform.call(this)},b.BitmapText.fonts={},b.Stage=function(a){b.DisplayObjectContainer.call(this),this.worldTransform=new b.Matrix,this.interactive=!0,this.interactionManager=new b.InteractionManager(this),this.dirty=!0,this.stage=this,this.stage.hitArea=new b.Rectangle(0,0,1e5,1e5),this.setBackgroundColor(a)},b.Stage.prototype=Object.create(b.DisplayObjectContainer.prototype),b.Stage.prototype.constructor=b.Stage,b.Stage.prototype.setInteractionDelegate=function(a){this.interactionManager.setTargetDomElement(a)},b.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var a=0,b=this.children.length;b>a;a++)this.children[a].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},b.Stage.prototype.setBackgroundColor=function(a){this.backgroundColor=a||0,this.backgroundColorSplit=b.hex2rgb(this.backgroundColor);var c=this.backgroundColor.toString(16);c="000000".substr(0,6-c.length)+c,this.backgroundColorString="#"+c},b.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global};for(var c=0,d=["ms","moz","webkit","o"],e=0;e>16&255)/255,(a>>8&255)/255,(255&a)/255]},b.rgb2hex=function(a){return(255*a[0]<<16)+(255*a[1]<<8)+255*a[2]},"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),b.AjaxRequest=function(){var a=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new window.XMLHttpRequest:!1;for(var b=0;b0&&0===(a&a-1))return a;for(var b=1;a>b;)b<<=1;return b},b.EventTarget=function(){var a={};this.addEventListener=this.on=function(b,c){void 0===a[b]&&(a[b]=[]),-1===a[b].indexOf(c)&&a[b].push(c)},this.dispatchEvent=this.emit=function(b){if(a[b.type]&&a[b.type].length)for(var c=0,d=a[b.type].length;d>c;c++)a[b.type][c](b)},this.removeEventListener=this.off=function(b,c){var d=a[b].indexOf(c);-1!==d&&a[b].splice(d,1)},this.removeAllEventListeners=function(b){var c=a[b];c&&(c.length=0)}},b.PolyK={},b.PolyK.Triangulate=function(a){var c=!0,d=a.length>>1;if(3>d)return[];for(var e=[],f=[],g=0;d>g;g++)f.push(g);g=0;for(var h=d;h>3;){var i=f[(g+0)%h],j=f[(g+1)%h],k=f[(g+2)%h],l=a[2*i],m=a[2*i+1],n=a[2*j],o=a[2*j+1],p=a[2*k],q=a[2*k+1],r=!1;if(b.PolyK._convex(l,m,n,o,p,q,c)){r=!0;for(var s=0;h>s;s++){var t=f[s];if(t!==i&&t!==j&&t!==k&&b.PolyK._PointInTriangle(a[2*t],a[2*t+1],l,m,n,o,p,q)){r=!1;break}}}if(r)e.push(i,j,k),f.splice((g+1)%h,1),h--,g=0;else if(g++>3*h){if(!c)return window.console.log("PIXI Warning: shape too complex to fill"),[];for(e=[],f=[],g=0;d>g;g++)f.push(g);g=0,h=d,c=!1}}return e.push(f[0],f[1],f[2]),e},b.PolyK._PointInTriangle=function(a,b,c,d,e,f,g,h){var i=g-c,j=h-d,k=e-c,l=f-d,m=a-c,n=b-d,o=i*i+j*j,p=i*k+j*l,q=i*m+j*n,r=k*k+l*l,s=k*m+l*n,t=1/(o*r-p*p),u=(r*q-p*s)*t,v=(o*s-p*q)*t;return u>=0&&v>=0&&1>u+v},b.PolyK._convex=function(a,b,c,d,e,f,g){return(b-d)*(e-c)+(c-a)*(f-d)>=0===g},b.initDefaultShaders=function(){},b.CompileVertexShader=function(a,c){return b._CompileShader(a,c,a.VERTEX_SHADER)},b.CompileFragmentShader=function(a,c){return b._CompileShader(a,c,a.FRAGMENT_SHADER)},b._CompileShader=function(a,b,c){var d=b.join("\n"),e=a.createShader(c);return a.shaderSource(e,d),a.compileShader(e),a.getShaderParameter(e,a.COMPILE_STATUS)?e:(window.console.log(a.getShaderInfoLog(e)),null)},b.compileProgram=function(a,c,d){var e=b.CompileFragmentShader(a,d),f=b.CompileVertexShader(a,c),g=a.createProgram();return a.attachShader(g,f),a.attachShader(g,e),a.linkProgram(g),a.getProgramParameter(g,a.LINK_STATUS)||window.console.log("Could not initialise shaders"),g},b.PixiShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"],this.textureCount=0,this.attributes=[],this.init()},b.PixiShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc||b.PixiShader.defaultVertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.dimensions=a.getUniformLocation(c,"dimensions"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.colorAttribute=a.getAttribLocation(c,"aColor"),-1===this.colorAttribute&&(this.colorAttribute=2),this.attributes=[this.aVertexPosition,this.aTextureCoord,this.colorAttribute];for(var d in this.uniforms)this.uniforms[d].uniformLocation=a.getUniformLocation(c,d);this.initUniforms(),this.program=c},b.PixiShader.prototype.initUniforms=function(){this.textureCount=1;var a,b=this.gl;for(var c in this.uniforms){a=this.uniforms[c];var d=a.type;"sampler2D"===d?(a._init=!1,null!==a.value&&this.initSampler2D(a)):"mat2"===d||"mat3"===d||"mat4"===d?(a.glMatrix=!0,a.glValueLength=1,"mat2"===d?a.glFunc=b.uniformMatrix2fv:"mat3"===d?a.glFunc=b.uniformMatrix3fv:"mat4"===d&&(a.glFunc=b.uniformMatrix4fv)):(a.glFunc=b["uniform"+d],a.glValueLength="2f"===d||"2i"===d?2:"3f"===d||"3i"===d?3:"4f"===d||"4i"===d?4:1)}},b.PixiShader.prototype.initSampler2D=function(a){if(a.value&&a.value.baseTexture&&a.value.baseTexture.hasLoaded){var b=this.gl;if(b.activeTexture(b["TEXTURE"+this.textureCount]),b.bindTexture(b.TEXTURE_2D,a.value.baseTexture._glTextures[b.id]),a.textureData){var c=a.textureData,d=c.magFilter?c.magFilter:b.LINEAR,e=c.minFilter?c.minFilter:b.LINEAR,f=c.wrapS?c.wrapS:b.CLAMP_TO_EDGE,g=c.wrapT?c.wrapT:b.CLAMP_TO_EDGE,h=c.luminance?b.LUMINANCE:b.RGBA;if(c.repeat&&(f=b.REPEAT,g=b.REPEAT),b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL,!!c.flipY),c.width){var i=c.width?c.width:512,j=c.height?c.height:2,k=c.border?c.border:0;b.texImage2D(b.TEXTURE_2D,0,h,i,j,k,h,b.UNSIGNED_BYTE,null)}else b.texImage2D(b.TEXTURE_2D,0,h,b.RGBA,b.UNSIGNED_BYTE,a.value.baseTexture.source);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,d),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,e),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,f),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,g)}b.uniform1i(a.uniformLocation,this.textureCount),a._init=!0,this.textureCount++}},b.PixiShader.prototype.syncUniforms=function(){this.textureCount=1;var a,c=this.gl;for(var d in this.uniforms)a=this.uniforms[d],1===a.glValueLength?a.glMatrix===!0?a.glFunc.call(c,a.uniformLocation,a.transpose,a.value):a.glFunc.call(c,a.uniformLocation,a.value):2===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y):3===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y,a.value.z):4===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y,a.value.z,a.value.w):"sampler2D"===a.type&&(a._init?(c.activeTexture(c["TEXTURE"+this.textureCount]),c.bindTexture(c.TEXTURE_2D,a.value.baseTexture._glTextures[c.id]||b.createWebGLTexture(a.value.baseTexture,c)),c.uniform1i(a.uniformLocation,this.textureCount),this.textureCount++):this.initSampler2D(a))},b.PixiShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attributes=null},b.PixiShader.defaultVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec2 aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","varying vec2 vTextureCoord;","varying vec4 vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {"," gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vec3 color = mod(vec3(aColor.y/65536.0, aColor.y/256.0, aColor.y), 256.0) / 256.0;"," vColor = vec4(color * aColor.x, aColor.x);","}"],b.PixiFastShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform mat3 uMatrix;","varying vec2 vTextureCoord;","varying float vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {"," vec2 v;"," vec2 sv = aVertexPosition * aScale;"," v.x = (sv.x) * cos(aRotation) - (sv.y) * sin(aRotation);"," v.y = (sv.x) * sin(aRotation) + (sv.y) * cos(aRotation);"," v = ( uMatrix * vec3(v + aPositionCoord , 1.0) ).xy ;"," gl_Position = vec4( ( v / projectionVector) + center , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"],this.textureCount=0,this.init() -},b.PixiFastShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.dimensions=a.getUniformLocation(c,"dimensions"),this.uMatrix=a.getUniformLocation(c,"uMatrix"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aPositionCoord=a.getAttribLocation(c,"aPositionCoord"),this.aScale=a.getAttribLocation(c,"aScale"),this.aRotation=a.getAttribLocation(c,"aRotation"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.colorAttribute=a.getAttribLocation(c,"aColor"),-1===this.colorAttribute&&(this.colorAttribute=2),this.attributes=[this.aVertexPosition,this.aPositionCoord,this.aScale,this.aRotation,this.aTextureCoord,this.colorAttribute],this.program=c},b.PixiFastShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attributes=null},b.StripShader=function(){this.program=null,this.fragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform float alpha;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));"," gl_FragColor = gl_FragColor * alpha;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","varying vec2 vTextureCoord;","uniform vec2 offsetVector;","varying float vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition, 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / projectionVector.y + 1.0 , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"]},b.StripShader.prototype.init=function(){var a=b.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.colorAttribute=a.getAttribLocation(c,"aColor"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.translationMatrix=a.getUniformLocation(c,"translationMatrix"),this.alpha=a.getUniformLocation(c,"alpha"),this.program=c},b.PrimitiveShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision mediump float;","varying vec4 vColor;","void main(void) {"," gl_FragColor = vColor;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform float alpha;","uniform vec3 tint;","varying vec4 vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"],this.init()},b.PrimitiveShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.tintColor=a.getUniformLocation(c,"tint"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.colorAttribute=a.getAttribLocation(c,"aColor"),this.attributes=[this.aVertexPosition,this.colorAttribute],this.translationMatrix=a.getUniformLocation(c,"translationMatrix"),this.alpha=a.getUniformLocation(c,"alpha"),this.program=c},b.PrimitiveShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attribute=null},b.WebGLGraphics=function(){},b.WebGLGraphics.renderGraphics=function(a,c){var d=c.gl,e=c.projection,f=c.offset,g=c.shaderManager.primitiveShader;a._webGL[d.id]||(a._webGL[d.id]={points:[],indices:[],lastIndex:0,buffer:d.createBuffer(),indexBuffer:d.createBuffer()});var h=a._webGL[d.id];a.dirty&&(a.dirty=!1,a.clearDirty&&(a.clearDirty=!1,h.lastIndex=0,h.points=[],h.indices=[]),b.WebGLGraphics.updateGraphics(a,d)),c.shaderManager.activatePrimitiveShader(),d.blendFunc(d.ONE,d.ONE_MINUS_SRC_ALPHA),d.uniformMatrix3fv(g.translationMatrix,!1,a.worldTransform.toArray(!0)),d.uniform2f(g.projectionVector,e.x,-e.y),d.uniform2f(g.offsetVector,-f.x,-f.y),d.uniform3fv(g.tintColor,b.hex2rgb(a.tint)),d.uniform1f(g.alpha,a.worldAlpha),d.bindBuffer(d.ARRAY_BUFFER,h.buffer),d.vertexAttribPointer(g.aVertexPosition,2,d.FLOAT,!1,24,0),d.vertexAttribPointer(g.colorAttribute,4,d.FLOAT,!1,24,8),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,h.indexBuffer),d.drawElements(d.TRIANGLE_STRIP,h.indices.length,d.UNSIGNED_SHORT,0),c.shaderManager.deactivatePrimitiveShader()},b.WebGLGraphics.updateGraphics=function(a,c){for(var d=a._webGL[c.id],e=d.lastIndex;e3&&b.WebGLGraphics.buildPoly(f,d),f.lineWidth>0&&b.WebGLGraphics.buildLine(f,d)):f.type===b.Graphics.RECT?b.WebGLGraphics.buildRectangle(f,d):(f.type===b.Graphics.CIRC||f.type===b.Graphics.ELIP)&&b.WebGLGraphics.buildCircle(f,d)}d.lastIndex=a.graphicsData.length,d.glPoints=new Float32Array(d.points),c.bindBuffer(c.ARRAY_BUFFER,d.buffer),c.bufferData(c.ARRAY_BUFFER,d.glPoints,c.STATIC_DRAW),d.glIndicies=new Uint16Array(d.indices),c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,d.indexBuffer),c.bufferData(c.ELEMENT_ARRAY_BUFFER,d.glIndicies,c.STATIC_DRAW)},b.WebGLGraphics.buildRectangle=function(a,c){var d=a.points,e=d[0],f=d[1],g=d[2],h=d[3];if(a.fill){var i=b.hex2rgb(a.fillColor),j=a.fillAlpha,k=i[0]*j,l=i[1]*j,m=i[2]*j,n=c.points,o=c.indices,p=n.length/6;n.push(e,f),n.push(k,l,m,j),n.push(e+g,f),n.push(k,l,m,j),n.push(e,f+h),n.push(k,l,m,j),n.push(e+g,f+h),n.push(k,l,m,j),o.push(p,p,p+1,p+2,p+3,p+3)}if(a.lineWidth){var q=a.points;a.points=[e,f,e+g,f,e+g,f+h,e,f+h,e,f],b.WebGLGraphics.buildLine(a,c),a.points=q}},b.WebGLGraphics.buildCircle=function(a,c){var d=a.points,e=d[0],f=d[1],g=d[2],h=d[3],i=40,j=2*Math.PI/i,k=0;if(a.fill){var l=b.hex2rgb(a.fillColor),m=a.fillAlpha,n=l[0]*m,o=l[1]*m,p=l[2]*m,q=c.points,r=c.indices,s=q.length/6;for(r.push(s),k=0;i+1>k;k++)q.push(e,f,n,o,p,m),q.push(e+Math.sin(j*k)*g,f+Math.cos(j*k)*h,n,o,p,m),r.push(s++,s++);r.push(s-1)}if(a.lineWidth){var t=a.points;for(a.points=[],k=0;i+1>k;k++)a.points.push(e+Math.sin(j*k)*g,f+Math.cos(j*k)*h);b.WebGLGraphics.buildLine(a,c),a.points=t}},b.WebGLGraphics.buildLine=function(a,c){var d=0,e=a.points;if(0!==e.length){if(a.lineWidth%2)for(d=0;dd;d++)l=e[2*(d-1)],m=e[2*(d-1)+1],n=e[2*d],o=e[2*d+1],p=e[2*(d+1)],q=e[2*(d+1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,t=-(o-q),u=n-p,F=Math.sqrt(t*t+u*u),t/=F,u/=F,t*=L,u*=L,x=-s+m-(-s+o),y=-r+n-(-r+l),z=(-r+l)*(-s+o)-(-r+n)*(-s+m),A=-u+q-(-u+o),B=-t+n-(-t+p),C=(-t+p)*(-u+o)-(-t+n)*(-u+q),D=x*B-A*y,Math.abs(D)<.1?(D+=10.1,G.push(n-r,o-s,O,P,Q,N),G.push(n+r,o+s,O,P,Q,N)):(j=(y*C-B*z)/D,k=(A*z-x*C)/D,E=(j-n)*(j-n)+(k-o)+(k-o),E>19600?(v=r-t,w=s-u,F=Math.sqrt(v*v+w*w),v/=F,w/=F,v*=L,w*=L,G.push(n-v,o-w),G.push(O,P,Q,N),G.push(n+v,o+w),G.push(O,P,Q,N),G.push(n-v,o-w),G.push(O,P,Q,N),J++):(G.push(j,k),G.push(O,P,Q,N),G.push(n-(j-n),o-(k-o)),G.push(O,P,Q,N)));for(l=e[2*(I-2)],m=e[2*(I-2)+1],n=e[2*(I-1)],o=e[2*(I-1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,G.push(n-r,o-s),G.push(O,P,Q,N),G.push(n+r,o+s),G.push(O,P,Q,N),H.push(K),d=0;J>d;d++)H.push(K++);H.push(K-1)}},b.WebGLGraphics.buildPoly=function(a,c){var d=a.points;if(!(d.length<6)){var e=c.points,f=c.indices,g=d.length/2,h=b.hex2rgb(a.fillColor),i=a.fillAlpha,j=h[0]*i,k=h[1]*i,l=h[2]*i,m=b.PolyK.Triangulate(d),n=e.length/6,o=0;for(o=0;oo;o++)e.push(d[2*o],d[2*o+1],j,k,l,i)}},b.glContexts=[],b.WebGLRenderer=function(a,c,d,e,f){b.defaultRenderer||(b.defaultRenderer=this),this.type=b.WEBGL_RENDERER,this.transparent=!!e,this.width=a||800,this.height=c||600,this.view=d||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height,this.contextLost=this.handleContextLost.bind(this),this.contextRestoredLost=this.handleContextRestored.bind(this),this.view.addEventListener("webglcontextlost",this.contextLost,!1),this.view.addEventListener("webglcontextrestored",this.contextRestoredLost,!1),this.options={alpha:this.transparent,antialias:!!f,premultipliedAlpha:!!e,stencil:!0};try{this.gl=this.view.getContext("experimental-webgl",this.options)}catch(g){try{this.gl=this.view.getContext("webgl",this.options)}catch(h){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}var i=this.gl;this.glContextId=i.id=b.WebGLRenderer.glContextId++,b.glContexts[this.glContextId]=i,b.blendModesWebGL||(b.blendModesWebGL=[],b.blendModesWebGL[b.blendModes.NORMAL]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.ADD]=[i.SRC_ALPHA,i.DST_ALPHA],b.blendModesWebGL[b.blendModes.MULTIPLY]=[i.DST_COLOR,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SCREEN]=[i.SRC_ALPHA,i.ONE],b.blendModesWebGL[b.blendModes.OVERLAY]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.DARKEN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.LIGHTEN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR_DODGE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR_BURN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.HARD_LIGHT]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SOFT_LIGHT]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.DIFFERENCE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.EXCLUSION]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.HUE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SATURATION]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.LUMINOSITY]=[i.ONE,i.ONE_MINUS_SRC_ALPHA]),this.projection=new b.Point,this.projection.x=this.width/2,this.projection.y=-this.height/2,this.offset=new b.Point(0,0),this.resize(this.width,this.height),this.contextLost=!1,this.shaderManager=new b.WebGLShaderManager(i),this.spriteBatch=new b.WebGLSpriteBatch(i),this.maskManager=new b.WebGLMaskManager(i),this.filterManager=new b.WebGLFilterManager(i,this.transparent),this.renderSession={},this.renderSession.gl=this.gl,this.renderSession.drawCount=0,this.renderSession.shaderManager=this.shaderManager,this.renderSession.maskManager=this.maskManager,this.renderSession.filterManager=this.filterManager,this.renderSession.spriteBatch=this.spriteBatch,this.renderSession.renderer=this,i.useProgram(this.shaderManager.defaultShader.program),i.disable(i.DEPTH_TEST),i.disable(i.CULL_FACE),i.enable(i.BLEND),i.colorMask(!0,!0,!0,this.transparent)},b.WebGLRenderer.prototype.constructor=b.WebGLRenderer,b.WebGLRenderer.prototype.render=function(a){if(!this.contextLost){this.__stage!==a&&(a.interactive&&a.interactionManager.removeEvents(),this.__stage=a),b.WebGLRenderer.updateTextures(),a.updateTransform(),a._interactive&&(a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this)));var c=this.gl;c.viewport(0,0,this.width,this.height),c.bindFramebuffer(c.FRAMEBUFFER,null),this.transparent?c.clearColor(0,0,0,0):c.clearColor(a.backgroundColorSplit[0],a.backgroundColorSplit[1],a.backgroundColorSplit[2],1),c.clear(c.COLOR_BUFFER_BIT),this.renderDisplayObject(a,this.projection),a.interactive?a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this)):a._interactiveEventsAdded&&(a._interactiveEventsAdded=!1,a.interactionManager.setTarget(this))}},b.WebGLRenderer.prototype.renderDisplayObject=function(a,b,c){this.renderSession.drawCount=0,this.renderSession.currentBlendMode=9999,this.renderSession.projection=b,this.renderSession.offset=this.offset,this.spriteBatch.begin(this.renderSession),this.filterManager.begin(this.renderSession,c),a._renderWebGL(this.renderSession),this.spriteBatch.end()},b.WebGLRenderer.updateTextures=function(){var a=0;for(a=0;a=0;c--){var d=a._glTextures[c],e=b.glContexts[c];e&&d&&e.deleteTexture(d)}a._glTextures.length=0},b.WebGLRenderer.updateTextureFrame=function(a){a.updateFrame=!1,a._updateWebGLuvs()},b.WebGLRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b,this.gl.viewport(0,0,this.width,this.height),this.projection.x=this.width/2,this.projection.y=-this.height/2},b.createWebGLTexture=function(a,c){return a.hasLoaded&&(a._glTextures[c.id]=c.createTexture(),c.bindTexture(c.TEXTURE_2D,a._glTextures[c.id]),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,a.source),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),a._powerOf2?(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.REPEAT),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.REPEAT)):(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE)),c.bindTexture(c.TEXTURE_2D,null)),a._glTextures[c.id]},b.updateWebGLTexture=function(a,c){a._glTextures[c.id]&&(c.bindTexture(c.TEXTURE_2D,a._glTextures[c.id]),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,a.source),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),a._powerOf2?(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.REPEAT),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.REPEAT)):(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE)),c.bindTexture(c.TEXTURE_2D,null))},b.WebGLRenderer.prototype.handleContextLost=function(a){a.preventDefault(),this.contextLost=!0},b.WebGLRenderer.prototype.handleContextRestored=function(){try{this.gl=this.view.getContext("experimental-webgl",this.options)}catch(a){try{this.gl=this.view.getContext("webgl",this.options)}catch(c){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}var d=this.gl;d.id=b.WebGLRenderer.glContextId++,this.shaderManager.setContext(d),this.spriteBatch.setContext(d),this.maskManager.setContext(d),this.filterManager.setContext(d),this.renderSession.gl=this.gl,d.disable(d.DEPTH_TEST),d.disable(d.CULL_FACE),d.enable(d.BLEND),d.colorMask(!0,!0,!0,this.transparent),this.gl.viewport(0,0,this.width,this.height);for(var e in b.TextureCache){var f=b.TextureCache[e].baseTexture;f._glTextures=[]}this.contextLost=!1},b.WebGLRenderer.prototype.destroy=function(){this.view.removeEventListener("webglcontextlost",this.contextLost),this.view.removeEventListener("webglcontextrestored",this.contextRestoredLost),b.glContexts[this.glContextId]=null,this.projection=null,this.offset=null,this.shaderManager.destroy(),this.spriteBatch.destroy(),this.maskManager.destroy(),this.filterManager.destroy(),this.shaderManager=null,this.spriteBatch=null,this.maskManager=null,this.filterManager=null,this.gl=null,this.renderSession=null},b.WebGLRenderer.glContextId=0,b.WebGLMaskManager=function(a){this.maskStack=[],this.maskPosition=0,this.setContext(a)},b.WebGLMaskManager.prototype.setContext=function(a){this.gl=a},b.WebGLMaskManager.prototype.pushMask=function(a,c){var d=this.gl;0===this.maskStack.length&&(d.enable(d.STENCIL_TEST),d.stencilFunc(d.ALWAYS,1,1)),this.maskStack.push(a),d.colorMask(!1,!1,!1,!0),d.stencilOp(d.KEEP,d.KEEP,d.INCR),b.WebGLGraphics.renderGraphics(a,c),d.colorMask(!0,!0,!0,!0),d.stencilFunc(d.NOTEQUAL,0,this.maskStack.length),d.stencilOp(d.KEEP,d.KEEP,d.KEEP)},b.WebGLMaskManager.prototype.popMask=function(a){var c=this.gl,d=this.maskStack.pop();d&&(c.colorMask(!1,!1,!1,!1),c.stencilOp(c.KEEP,c.KEEP,c.DECR),b.WebGLGraphics.renderGraphics(d,a),c.colorMask(!0,!0,!0,!0),c.stencilFunc(c.NOTEQUAL,0,this.maskStack.length),c.stencilOp(c.KEEP,c.KEEP,c.KEEP)),0===this.maskStack.length&&c.disable(c.STENCIL_TEST)},b.WebGLMaskManager.prototype.destroy=function(){this.maskStack=null,this.gl=null},b.WebGLShaderManager=function(a){this.maxAttibs=10,this.attribState=[],this.tempAttribState=[];for(var b=0;bd;d+=6,e+=4)this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3;this.drawing=!1,this.currentBatchSize=0,this.currentBaseTexture=null,this.setContext(a)},b.WebGLSpriteBatch.prototype.setContext=function(a){this.gl=a,this.vertexBuffer=a.createBuffer(),this.indexBuffer=a.createBuffer(),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,this.vertices,a.DYNAMIC_DRAW),this.currentBlendMode=99999},b.WebGLSpriteBatch.prototype.begin=function(a){this.renderSession=a,this.shader=this.renderSession.shaderManager.defaultShader,this.start()},b.WebGLSpriteBatch.prototype.end=function(){this.flush()},b.WebGLSpriteBatch.prototype.render=function(a){var b=a.texture;(b.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=b.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode);var c=a._uvs||a.texture._uvs;if(c){var d,e,f,g,h=a.worldAlpha,i=a.tint,j=this.vertices,k=a.anchor.x,l=a.anchor.y;if(a.texture.trim){var m=a.texture.trim;e=m.x-k*m.width,d=e+b.frame.width,g=m.y-l*m.height,f=g+b.frame.height}else d=b.frame.width*(1-k),e=b.frame.width*-k,f=b.frame.height*(1-l),g=b.frame.height*-l;var n=4*this.currentBatchSize*this.vertSize,o=a.worldTransform,p=o.a,q=o.c,r=o.b,s=o.d,t=o.tx,u=o.ty;j[n++]=p*e+r*g+t,j[n++]=s*g+q*e+u,j[n++]=c.x0,j[n++]=c.y0,j[n++]=h,j[n++]=i,j[n++]=p*d+r*g+t,j[n++]=s*g+q*d+u,j[n++]=c.x1,j[n++]=c.y1,j[n++]=h,j[n++]=i,j[n++]=p*d+r*f+t,j[n++]=s*f+q*d+u,j[n++]=c.x2,j[n++]=c.y2,j[n++]=h,j[n++]=i,j[n++]=p*e+r*f+t,j[n++]=s*f+q*e+u,j[n++]=c.x3,j[n++]=c.y3,j[n++]=h,j[n++]=i,this.currentBatchSize++}},b.WebGLSpriteBatch.prototype.renderTilingSprite=function(a){var c=a.tilingTexture;(c.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=c.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode),a._uvs||(a._uvs=new b.TextureUvs);var d=a._uvs;a.tilePosition.x%=c.baseTexture.width*a.tileScaleOffset.x,a.tilePosition.y%=c.baseTexture.height*a.tileScaleOffset.y;var e=a.tilePosition.x/(c.baseTexture.width*a.tileScaleOffset.x),f=a.tilePosition.y/(c.baseTexture.height*a.tileScaleOffset.y),g=a.width/c.baseTexture.width/(a.tileScale.x*a.tileScaleOffset.x),h=a.height/c.baseTexture.height/(a.tileScale.y*a.tileScaleOffset.y);d.x0=0-e,d.y0=0-f,d.x1=1*g-e,d.y1=0-f,d.x2=1*g-e,d.y2=1*h-f,d.x3=0-e,d.y3=1*h-f;var i=a.worldAlpha,j=a.tint,k=this.vertices,l=a.width,m=a.height,n=a.anchor.x,o=a.anchor.y,p=l*(1-n),q=l*-n,r=m*(1-o),s=m*-o,t=4*this.currentBatchSize*this.vertSize,u=a.worldTransform,v=u.a,w=u.c,x=u.b,y=u.d,z=u.tx,A=u.ty;k[t++]=v*q+x*s+z,k[t++]=y*s+w*q+A,k[t++]=d.x0,k[t++]=d.y0,k[t++]=i,k[t++]=j,k[t++]=v*p+x*s+z,k[t++]=y*s+w*p+A,k[t++]=d.x1,k[t++]=d.y1,k[t++]=i,k[t++]=j,k[t++]=v*p+x*r+z,k[t++]=y*r+w*p+A,k[t++]=d.x2,k[t++]=d.y2,k[t++]=i,k[t++]=j,k[t++]=v*q+x*r+z,k[t++]=y*r+w*q+A,k[t++]=d.x3,k[t++]=d.y3,k[t++]=i,k[t++]=j,this.currentBatchSize++},b.WebGLSpriteBatch.prototype.flush=function(){if(0!==this.currentBatchSize){var a=this.gl;if(a.bindTexture(a.TEXTURE_2D,this.currentBaseTexture._glTextures[a.id]||b.createWebGLTexture(this.currentBaseTexture,a)),this.currentBatchSize>.5*this.size)a.bufferSubData(a.ARRAY_BUFFER,0,this.vertices);else{var c=this.vertices.subarray(0,4*this.currentBatchSize*this.vertSize);a.bufferSubData(a.ARRAY_BUFFER,0,c)}a.drawElements(a.TRIANGLES,6*this.currentBatchSize,a.UNSIGNED_SHORT,0),this.currentBatchSize=0,this.renderSession.drawCount++}},b.WebGLSpriteBatch.prototype.stop=function(){this.flush()},b.WebGLSpriteBatch.prototype.start=function(){var a=this.gl;a.activeTexture(a.TEXTURE0),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var c=this.renderSession.projection;a.uniform2f(this.shader.projectionVector,c.x,c.y);var d=4*this.vertSize;a.vertexAttribPointer(this.shader.aVertexPosition,2,a.FLOAT,!1,d,0),a.vertexAttribPointer(this.shader.aTextureCoord,2,a.FLOAT,!1,d,8),a.vertexAttribPointer(this.shader.colorAttribute,2,a.FLOAT,!1,d,16),this.currentBlendMode!==b.blendModes.NORMAL&&this.setBlendMode(b.blendModes.NORMAL)},b.WebGLSpriteBatch.prototype.setBlendMode=function(a){this.flush(),this.currentBlendMode=a;var c=b.blendModesWebGL[this.currentBlendMode];this.gl.blendFunc(c[0],c[1])},b.WebGLSpriteBatch.prototype.destroy=function(){this.vertices=null,this.indices=null,this.gl.deleteBuffer(this.vertexBuffer),this.gl.deleteBuffer(this.indexBuffer),this.currentBaseTexture=null,this.gl=null},b.WebGLFastSpriteBatch=function(a){this.vertSize=10,this.maxSize=6e3,this.size=this.maxSize;var b=4*this.size*this.vertSize,c=6*this.maxSize;this.vertices=new Float32Array(b),this.indices=new Uint16Array(c),this.vertexBuffer=null,this.indexBuffer=null,this.lastIndexCount=0;for(var d=0,e=0;c>d;d+=6,e+=4)this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3;this.drawing=!1,this.currentBatchSize=0,this.currentBaseTexture=null,this.currentBlendMode=0,this.renderSession=null,this.shader=null,this.matrix=null,this.setContext(a)},b.WebGLFastSpriteBatch.prototype.setContext=function(a){this.gl=a,this.vertexBuffer=a.createBuffer(),this.indexBuffer=a.createBuffer(),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,this.vertices,a.DYNAMIC_DRAW),this.currentBlendMode=99999},b.WebGLFastSpriteBatch.prototype.begin=function(a,b){this.renderSession=b,this.shader=this.renderSession.shaderManager.fastShader,this.matrix=a.worldTransform.toArray(!0),this.start()},b.WebGLFastSpriteBatch.prototype.end=function(){this.flush()},b.WebGLFastSpriteBatch.prototype.render=function(a){var b=a.children,c=b[0];if(c.texture._uvs){this.currentBaseTexture=c.texture.baseTexture,c.blendMode!==this.currentBlendMode&&this.setBlendMode(c.blendMode);for(var d=0,e=b.length;e>d;d++)this.renderSprite(b[d]);this.flush()}},b.WebGLFastSpriteBatch.prototype.renderSprite=function(a){if(a.visible&&(a.texture.baseTexture===this.currentBaseTexture||(this.flush(),this.currentBaseTexture=a.texture.baseTexture,a.texture._uvs))){var b,c,d,e,f,g,h,i,j=this.vertices;if(b=a.texture._uvs,c=a.texture.frame.width,d=a.texture.frame.height,a.texture.trim){var k=a.texture.trim;f=k.x-a.anchor.x*k.width,e=f+a.texture.frame.width,h=k.y-a.anchor.y*k.height,g=h+a.texture.frame.height}else e=a.texture.frame.width*(1-a.anchor.x),f=a.texture.frame.width*-a.anchor.x,g=a.texture.frame.height*(1-a.anchor.y),h=a.texture.frame.height*-a.anchor.y;i=4*this.currentBatchSize*this.vertSize,j[i++]=f,j[i++]=h,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x0,j[i++]=b.y1,j[i++]=a.alpha,j[i++]=e,j[i++]=h,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x1,j[i++]=b.y1,j[i++]=a.alpha,j[i++]=e,j[i++]=g,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x2,j[i++]=b.y2,j[i++]=a.alpha,j[i++]=f,j[i++]=g,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x3,j[i++]=b.y3,j[i++]=a.alpha,this.currentBatchSize++,this.currentBatchSize>=this.size&&this.flush()}},b.WebGLFastSpriteBatch.prototype.flush=function(){if(0!==this.currentBatchSize){var a=this.gl;if(this.currentBaseTexture._glTextures[a.id]||b.createWebGLTexture(this.currentBaseTexture,a),a.bindTexture(a.TEXTURE_2D,this.currentBaseTexture._glTextures[a.id]),this.currentBatchSize>.5*this.size)a.bufferSubData(a.ARRAY_BUFFER,0,this.vertices);else{var c=this.vertices.subarray(0,4*this.currentBatchSize*this.vertSize);a.bufferSubData(a.ARRAY_BUFFER,0,c)}a.drawElements(a.TRIANGLES,6*this.currentBatchSize,a.UNSIGNED_SHORT,0),this.currentBatchSize=0,this.renderSession.drawCount++}},b.WebGLFastSpriteBatch.prototype.stop=function(){this.flush()},b.WebGLFastSpriteBatch.prototype.start=function(){var a=this.gl;a.activeTexture(a.TEXTURE0),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var c=this.renderSession.projection;a.uniform2f(this.shader.projectionVector,c.x,c.y),a.uniformMatrix3fv(this.shader.uMatrix,!1,this.matrix);var d=4*this.vertSize;a.vertexAttribPointer(this.shader.aVertexPosition,2,a.FLOAT,!1,d,0),a.vertexAttribPointer(this.shader.aPositionCoord,2,a.FLOAT,!1,d,8),a.vertexAttribPointer(this.shader.aScale,2,a.FLOAT,!1,d,16),a.vertexAttribPointer(this.shader.aRotation,1,a.FLOAT,!1,d,24),a.vertexAttribPointer(this.shader.aTextureCoord,2,a.FLOAT,!1,d,28),a.vertexAttribPointer(this.shader.colorAttribute,1,a.FLOAT,!1,d,36),this.currentBlendMode!==b.blendModes.NORMAL&&this.setBlendMode(b.blendModes.NORMAL)},b.WebGLFastSpriteBatch.prototype.setBlendMode=function(a){this.flush(),this.currentBlendMode=a;var c=b.blendModesWebGL[this.currentBlendMode];this.gl.blendFunc(c[0],c[1])},b.WebGLFilterManager=function(a,b){this.transparent=b,this.filterStack=[],this.offsetX=0,this.offsetY=0,this.setContext(a)},b.WebGLFilterManager.prototype.setContext=function(a){this.gl=a,this.texturePool=[],this.initShaderBuffers()},b.WebGLFilterManager.prototype.begin=function(a,b){this.renderSession=a,this.defaultShader=a.shaderManager.defaultShader;var c=this.renderSession.projection;this.width=2*c.x,this.height=2*-c.y,this.buffer=b},b.WebGLFilterManager.prototype.pushFilter=function(a){var c=this.gl,d=this.renderSession.projection,e=this.renderSession.offset;a._filterArea=a.target.filterArea||a.target.getBounds(),this.filterStack.push(a);var f=a.filterPasses[0];this.offsetX+=a._filterArea.x,this.offsetY+=a._filterArea.y;var g=this.texturePool.pop();g?g.resize(this.width,this.height):g=new b.FilterTexture(this.gl,this.width,this.height),c.bindTexture(c.TEXTURE_2D,g.texture);var h=a._filterArea,i=f.padding;h.x-=i,h.y-=i,h.width+=2*i,h.height+=2*i,h.x<0&&(h.x=0),h.width>this.width&&(h.width=this.width),h.y<0&&(h.y=0),h.height>this.height&&(h.height=this.height),c.bindFramebuffer(c.FRAMEBUFFER,g.frameBuffer),c.viewport(0,0,h.width,h.height),d.x=h.width/2,d.y=-h.height/2,e.x=-h.x,e.y=-h.y,c.uniform2f(this.defaultShader.projectionVector,h.width/2,-h.height/2),c.uniform2f(this.defaultShader.offsetVector,-h.x,-h.y),c.colorMask(!0,!0,!0,!0),c.clearColor(0,0,0,0),c.clear(c.COLOR_BUFFER_BIT),a._glFilterTexture=g},b.WebGLFilterManager.prototype.popFilter=function(){var a=this.gl,c=this.filterStack.pop(),d=c._filterArea,e=c._glFilterTexture,f=this.renderSession.projection,g=this.renderSession.offset;if(c.filterPasses.length>1){a.viewport(0,0,d.width,d.height),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),this.vertexArray[0]=0,this.vertexArray[1]=d.height,this.vertexArray[2]=d.width,this.vertexArray[3]=d.height,this.vertexArray[4]=0,this.vertexArray[5]=0,this.vertexArray[6]=d.width,this.vertexArray[7]=0,a.bufferSubData(a.ARRAY_BUFFER,0,this.vertexArray),a.bindBuffer(a.ARRAY_BUFFER,this.uvBuffer),this.uvArray[2]=d.width/this.width,this.uvArray[5]=d.height/this.height,this.uvArray[6]=d.width/this.width,this.uvArray[7]=d.height/this.height,a.bufferSubData(a.ARRAY_BUFFER,0,this.uvArray);var h=e,i=this.texturePool.pop();i||(i=new b.FilterTexture(this.gl,this.width,this.height)),i.resize(this.width,this.height),a.bindFramebuffer(a.FRAMEBUFFER,i.frameBuffer),a.clear(a.COLOR_BUFFER_BIT),a.disable(a.BLEND);for(var j=0;j0&&(b.Texture.frameUpdates.length=0)},b.CanvasRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b},b.CanvasRenderer.prototype.renderDisplayObject=function(a,b){this.renderSession.context=b||this.context,a._renderCanvas(this.renderSession)},b.CanvasRenderer.prototype.renderStripFlat=function(a){var b=this.context,c=a.verticies,d=c.length/2;this.count++,b.beginPath();for(var e=1;d-2>e;e++){var f=2*e,g=c[f],h=c[f+2],i=c[f+4],j=c[f+1],k=c[f+3],l=c[f+5];b.moveTo(g,j),b.lineTo(h,k),b.lineTo(i,l)}b.fillStyle="#FF0000",b.fill(),b.closePath()},b.CanvasRenderer.prototype.renderStrip=function(a){var b=this.context,c=a.verticies,d=a.uvs,e=c.length/2;this.count++;for(var f=1;e-2>f;f++){var g=2*f,h=c[g],i=c[g+2],j=c[g+4],k=c[g+1],l=c[g+3],m=c[g+5],n=d[g]*a.texture.width,o=d[g+2]*a.texture.width,p=d[g+4]*a.texture.width,q=d[g+1]*a.texture.height,r=d[g+3]*a.texture.height,s=d[g+5]*a.texture.height;b.save(),b.beginPath(),b.moveTo(h,k),b.lineTo(i,l),b.lineTo(j,m),b.closePath(),b.clip();var t=n*r+q*p+o*s-r*p-q*o-n*s,u=h*r+q*j+i*s-r*j-q*i-h*s,v=n*i+h*p+o*j-i*p-h*o-n*j,w=n*r*j+q*i*p+h*o*s-h*r*p-q*o*j-n*i*s,x=k*r+q*m+l*s-r*m-q*l-k*s,y=n*l+k*p+o*m-l*p-k*o-n*m,z=n*r*m+q*l*p+k*o*s-k*r*p-q*o*m-n*l*s;b.transform(u/t,x/t,v/t,y/t,w/t,z/t),b.drawImage(a.texture.baseTexture.source,0,0),b.restore()}},b.CanvasBuffer=function(a,b){this.width=a,this.height=b,this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=a,this.canvas.height=b},b.CanvasBuffer.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},b.CanvasBuffer.prototype.resize=function(a,b){this.width=this.canvas.width=a,this.height=this.canvas.height=b},b.CanvasGraphics=function(){},b.CanvasGraphics.renderGraphics=function(a,c){for(var d=a.worldAlpha,e="",f=0;f1&&(d=1,window.console.log("Pixi.js warning: masks in canvas can only mask using the first path in the graphics object"));for(var e=0;1>e;e++){var f=a.graphicsData[e],g=f.points;if(f.type===b.Graphics.POLY){c.beginPath(),c.moveTo(g[0],g[1]);for(var h=1;hd;d++)this.children[d]._renderWebGL(a);a.spriteBatch.stop()}this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),a.drawCount++,a.spriteBatch.start()}},b.Graphics.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha&&this.isMask!==!0){var c=a.context,d=this.worldTransform;this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,c.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),c.setTransform(d.a,d.c,d.b,d.d,d.tx,d.ty),b.CanvasGraphics.renderGraphics(this,c);for(var e=0,f=this.children.length;f>e;e++)this.children[e]._renderCanvas(a)}},b.Graphics.prototype.getBounds=function(a){this.bounds||this.updateBounds();var b=this.bounds.x,c=this.bounds.width+this.bounds.x,d=this.bounds.y,e=this.bounds.height+this.bounds.y,f=a||this.worldTransform,g=f.a,h=f.c,i=f.b,j=f.d,k=f.tx,l=f.ty,m=g*c+i*e+k,n=j*e+h*c+l,o=g*b+i*e+k,p=j*e+h*b+l,q=g*b+i*d+k,r=j*d+h*b+l,s=g*c+i*d+k,t=j*d+h*c+l,u=-1/0,v=-1/0,w=1/0,x=1/0;w=w>m?m:w,w=w>o?o:w,w=w>q?q:w,w=w>s?s:w,x=x>n?n:x,x=x>p?p:x,x=x>r?r:x,x=x>t?t:x,u=m>u?m:u,u=o>u?o:u,u=q>u?q:u,u=s>u?s:u,v=n>v?n:v,v=p>v?p:v,v=r>v?r:v,v=t>v?t:v;var y=this._bounds;return y.x=w,y.width=u-w,y.y=x,y.height=v-x,y},b.Graphics.prototype.updateBounds=function(){for(var a,c,d,e,f,g=1/0,h=-1/0,i=1/0,j=-1/0,k=0;kc?c:g,h=c+e>h?c+e:h,i=i>d?c:i,j=d+f>j?d+f:j;else if(m===b.Graphics.CIRC||m===b.Graphics.ELIP)c=a[0],d=a[1],e=a[2]+n/2,f=a[3]+n/2,g=g>c-e?c-e:g,h=c+e>h?c+e:h,i=i>d-f?d-f:i,j=d+f>j?d+f:j;else for(var o=0;oc-n?c-n:g,h=c+n>h?c+n:h,i=i>d-n?d-n:i,j=d+n>j?d+n:j}var p=this.boundsPadding;this.bounds=new b.Rectangle(g-p,i-p,h-g+2*p,j-i+2*p)},b.Graphics.prototype._generateCachedSprite=function(){var a=this.getLocalBounds();if(this._cachedSprite)this._cachedSprite.buffer.resize(a.width,a.height);else{var c=new b.CanvasBuffer(a.width,a.height),d=b.Texture.fromCanvas(c.canvas);this._cachedSprite=new b.Sprite(d),this._cachedSprite.buffer=c,this._cachedSprite.worldTransform=this.worldTransform}this._cachedSprite.anchor.x=-(a.x/a.width),this._cachedSprite.anchor.y=-(a.y/a.height),this._cachedSprite.buffer.context.translate(-a.x,-a.y),b.CanvasGraphics.renderGraphics(this,this._cachedSprite.buffer.context),this._cachedSprite.alpha=this.alpha},b.Graphics.prototype.destroyCachedSprite=function(){this._cachedSprite.texture.destroy(!0),this._cachedSprite=null},b.Graphics.POLY=0,b.Graphics.RECT=1,b.Graphics.CIRC=2,b.Graphics.ELIP=3,b.TilingSprite=function(a,c,d){b.Sprite.call(this,a),this.width=c||100,this.height=d||100,this.tileScale=new b.Point(1,1),this.tileScaleOffset=new b.Point(1,1),this.tilePosition=new b.Point(0,0),this.renderable=!0,this.tint=16777215,this.blendMode=b.blendModes.NORMAL},b.TilingSprite.prototype=Object.create(b.Sprite.prototype),b.TilingSprite.prototype.constructor=b.TilingSprite,Object.defineProperty(b.TilingSprite.prototype,"width",{get:function(){return this._width},set:function(a){this._width=a}}),Object.defineProperty(b.TilingSprite.prototype,"height",{get:function(){return this._height},set:function(a){this._height=a}}),b.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},b.TilingSprite.prototype.setTexture=function(a){this.texture!==a&&(this.texture=a,this.refreshTexture=!0,this.cachedTint=16777215)},b.TilingSprite.prototype._renderWebGL=function(a){if(this.visible!==!1&&0!==this.alpha){var c,d;for(this.mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a),a.spriteBatch.start()),this.filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),!this.tilingTexture||this.refreshTexture?(this.generateTilingTexture(!0),this.tilingTexture&&this.tilingTexture.needsUpdate&&(b.updateWebGLTexture(this.tilingTexture.baseTexture,a.gl),this.tilingTexture.needsUpdate=!1)):a.spriteBatch.renderTilingSprite(this),c=0,d=this.children.length;d>c;c++)this.children[c]._renderWebGL(a);a.spriteBatch.stop(),this.filters&&a.filterManager.popFilter(),this.mask&&a.maskManager.popMask(a),a.spriteBatch.start()}},b.TilingSprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){var c=a.context;this._mask&&a.maskManager.pushMask(this._mask,c),c.globalAlpha=this.worldAlpha;var d=this.worldTransform;if(c.setTransform(d.a,d.c,d.b,d.d,d.tx,d.ty),!this.__tilePattern||this.refreshTexture){if(this.generateTilingTexture(!1),!this.tilingTexture)return;this.__tilePattern=c.createPattern(this.tilingTexture.baseTexture.source,"repeat")}this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,c.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),c.beginPath();var e=this.tilePosition,f=this.tileScale;e.x%=this.tilingTexture.baseTexture.width,e.y%=this.tilingTexture.baseTexture.height,c.scale(f.x,f.y),c.translate(e.x,e.y),c.fillStyle=this.__tilePattern,c.fillRect(-e.x+this.anchor.x*-this._width,-e.y+this.anchor.y*-this._height,this._width/f.x,this._height/f.y),c.scale(1/f.x,1/f.y),c.translate(-e.x,-e.y),c.closePath(),this._mask&&a.maskManager.popMask(a.context)}},b.TilingSprite.prototype.getBounds=function(){var a=this._width,b=this._height,c=a*(1-this.anchor.x),d=a*-this.anchor.x,e=b*(1-this.anchor.y),f=b*-this.anchor.y,g=this.worldTransform,h=g.a,i=g.c,j=g.b,k=g.d,l=g.tx,m=g.ty,n=h*d+j*f+l,o=k*f+i*d+m,p=h*c+j*f+l,q=k*f+i*c+m,r=h*c+j*e+l,s=k*e+i*c+m,t=h*d+j*e+l,u=k*e+i*d+m,v=-1/0,w=-1/0,x=1/0,y=1/0;x=x>n?n:x,x=x>p?p:x,x=x>r?r:x,x=x>t?t:x,y=y>o?o:y,y=y>q?q:y,y=y>s?s:y,y=y>u?u:y,v=n>v?n:v,v=p>v?p:v,v=r>v?r:v,v=t>v?t:v,w=o>w?o:w,w=q>w?q:w,w=s>w?s:w,w=u>w?u:w;var z=this._bounds;return z.x=x,z.width=v-x,z.y=y,z.height=w-y,this._currentBounds=z,z},b.TilingSprite.prototype.generateTilingTexture=function(a){var c=this.texture;if(c.baseTexture.hasLoaded){var d,e,f=c.baseTexture,g=c.frame,h=g.width!==f.width||g.height!==f.height,i=!1;if(a?(d=b.getNextPowerOfTwo(g.width),e=b.getNextPowerOfTwo(g.height),g.width!==d&&g.height!==e&&(i=!0)):h&&(d=g.width,e=g.height,i=!0),i){var j;this.tilingTexture&&this.tilingTexture.isTiling?(j=this.tilingTexture.canvasBuffer,j.resize(d,e),this.tilingTexture.baseTexture.width=d,this.tilingTexture.baseTexture.height=e,this.tilingTexture.needsUpdate=!0):(j=new b.CanvasBuffer(d,e),this.tilingTexture=b.Texture.fromCanvas(j.canvas),this.tilingTexture.canvasBuffer=j,this.tilingTexture.isTiling=!0),j.context.drawImage(c.baseTexture.source,g.x,g.y,g.width,g.height,0,0,d,e),this.tileScaleOffset.x=g.width/d,this.tileScaleOffset.y=g.height/e}else this.tilingTexture&&this.tilingTexture.isTiling&&this.tilingTexture.destroy(!0),this.tileScaleOffset.x=1,this.tileScaleOffset.y=1,this.tilingTexture=c;this.refreshTexture=!1,this.tilingTexture.baseTexture._powerOf2=!0}},b.BaseTextureCache={},b.texturesToUpdate=[],b.texturesToDestroy=[],b.BaseTextureCacheIdGenerator=0,b.BaseTexture=function(a,c){if(b.EventTarget.call(this),this.width=100,this.height=100,this.scaleMode=c||b.scaleModes.DEFAULT,this.hasLoaded=!1,this.source=a,this.id=b.BaseTextureCacheIdGenerator++,this._glTextures=[],a){if(this.source.complete||this.source.getContext)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,b.texturesToUpdate.push(this);else{var d=this;this.source.onload=function(){d.hasLoaded=!0,d.width=d.source.width,d.height=d.source.height,b.texturesToUpdate.push(d),d.dispatchEvent({type:"loaded",content:d})}}this.imageUrl=null,this._powerOf2=!1}},b.BaseTexture.prototype.constructor=b.BaseTexture,b.BaseTexture.prototype.destroy=function(){this.imageUrl&&(delete b.BaseTextureCache[this.imageUrl],this.imageUrl=null,this.source.src=null),this.source=null,b.texturesToDestroy.push(this)},b.BaseTexture.prototype.updateSourceImage=function(a){this.hasLoaded=!1,this.source.src=null,this.source.src=a},b.BaseTexture.fromImage=function(a,c,d){var e=b.BaseTextureCache[a];if(void 0===c&&(c=!0),!e){var f=new Image;c&&(f.crossOrigin=""),f.src=a,e=new b.BaseTexture(f,d),e.imageUrl=a,b.BaseTextureCache[a]=e}return e},b.BaseTexture.fromCanvas=function(a,c){a._pixiId||(a._pixiId="canvas_"+b.TextureCacheIdGenerator++);var d=b.BaseTextureCache[a._pixiId];return d||(d=new b.BaseTexture(a,c),b.BaseTextureCache[a._pixiId]=d),d},b.TextureCache={},b.FrameCache={},b.TextureCacheIdGenerator=0,b.Texture=function(a,c){if(b.EventTarget.call(this),c||(this.noFrame=!0,c=new b.Rectangle(0,0,1,1)),a instanceof b.Texture&&(a=a.baseTexture),this.baseTexture=a,this.frame=c,this.trim=null,this.scope=this,this._uvs=null,a.hasLoaded)this.noFrame&&(c=new b.Rectangle(0,0,a.width,a.height)),this.setFrame(c);else{var d=this;a.addEventListener("loaded",function(){d.onBaseTextureLoaded()})}},b.Texture.prototype.constructor=b.Texture,b.Texture.prototype.onBaseTextureLoaded=function(){var a=this.baseTexture;a.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new b.Rectangle(0,0,a.width,a.height)),this.setFrame(this.frame),this.scope.dispatchEvent({type:"update",content:this})},b.Texture.prototype.destroy=function(a){a&&this.baseTexture.destroy()},b.Texture.prototype.setFrame=function(a){if(this.frame=a,this.width=a.width,this.height=a.height,a.x+a.width>this.baseTexture.width||a.y+a.height>this.baseTexture.height)throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,b.Texture.frameUpdates.push(this)},b.Texture.prototype._updateWebGLuvs=function(){this._uvs||(this._uvs=new b.TextureUvs);var a=this.frame,c=this.baseTexture.width,d=this.baseTexture.height;this._uvs.x0=a.x/c,this._uvs.y0=a.y/d,this._uvs.x1=(a.x+a.width)/c,this._uvs.y1=a.y/d,this._uvs.x2=(a.x+a.width)/c,this._uvs.y2=(a.y+a.height)/d,this._uvs.x3=a.x/c,this._uvs.y3=(a.y+a.height)/d},b.Texture.fromImage=function(a,c,d){var e=b.TextureCache[a];return e||(e=new b.Texture(b.BaseTexture.fromImage(a,c,d)),b.TextureCache[a]=e),e},b.Texture.fromFrame=function(a){var c=b.TextureCache[a];if(!c)throw new Error('The frameId "'+a+'" does not exist in the texture cache ');return c},b.Texture.fromCanvas=function(a,c){var d=b.BaseTexture.fromCanvas(a,c);return new b.Texture(d)},b.Texture.addTextureToCache=function(a,c){b.TextureCache[c]=a},b.Texture.removeTextureFromCache=function(a){var c=b.TextureCache[a];return delete b.TextureCache[a],delete b.BaseTextureCache[a],c},b.Texture.frameUpdates=[],b.TextureUvs=function(){this.x0=0,this.y0=0,this.x1=0,this.y1=0,this.x2=0,this.y2=0,this.x3=0,this.y4=0},b.RenderTexture=function(a,c,d){if(b.EventTarget.call(this),this.width=a||100,this.height=c||100,this.frame=new b.Rectangle(0,0,this.width,this.height),this.baseTexture=new b.BaseTexture,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.baseTexture._glTextures=[],this.baseTexture.hasLoaded=!0,this.renderer=d||b.defaultRenderer,this.renderer.type===b.WEBGL_RENDERER){var e=this.renderer.gl;this.textureBuffer=new b.FilterTexture(e,this.width,this.height),this.baseTexture._glTextures[e.id]=this.textureBuffer.texture,this.render=this.renderWebGL,this.projection=new b.Point(this.width/2,-this.height/2)}else this.render=this.renderCanvas,this.textureBuffer=new b.CanvasBuffer(this.width,this.height),this.baseTexture.source=this.textureBuffer.canvas;b.Texture.frameUpdates.push(this)},b.RenderTexture.prototype=Object.create(b.Texture.prototype),b.RenderTexture.prototype.constructor=b.RenderTexture,b.RenderTexture.prototype.resize=function(a,c){if(this.width=a,this.height=c,this.frame.width=this.width,this.frame.height=this.height,this.renderer.type===b.WEBGL_RENDERER){this.projection.x=this.width/2,this.projection.y=-this.height/2;var d=this.renderer.gl;d.bindTexture(d.TEXTURE_2D,this.baseTexture._glTextures[d.id]),d.texImage2D(d.TEXTURE_2D,0,d.RGBA,this.width,this.height,0,d.RGBA,d.UNSIGNED_BYTE,null)}else this.textureBuffer.resize(this.width,this.height);b.Texture.frameUpdates.push(this)},b.RenderTexture.prototype.renderWebGL=function(a,c,d){var e=this.renderer.gl;e.colorMask(!0,!0,!0,!0),e.viewport(0,0,this.width,this.height),e.bindFramebuffer(e.FRAMEBUFFER,this.textureBuffer.frameBuffer),d&&this.textureBuffer.clear();var f=a.children,g=a.worldTransform;a.worldTransform=b.RenderTexture.tempMatrix,a.worldTransform.d=-1,a.worldTransform.ty=-2*this.projection.y,c&&(a.worldTransform.tx=c.x,a.worldTransform.ty-=c.y);for(var h=0,i=f.length;i>h;h++)f[h].updateTransform();b.WebGLRenderer.updateTextures(),this.renderer.renderDisplayObject(a,this.projection,this.textureBuffer.frameBuffer),a.worldTransform=g},b.RenderTexture.prototype.renderCanvas=function(a,c,d){var e=a.children,f=a.worldTransform;a.worldTransform=b.RenderTexture.tempMatrix,c&&(a.worldTransform.tx=c.x,a.worldTransform.ty=c.y);for(var g=0,h=e.length;h>g;g++)e[g].updateTransform();d&&this.textureBuffer.clear();var i=this.textureBuffer.context;this.renderer.renderDisplayObject(a,i),i.setTransform(1,0,0,1,0,0),a.worldTransform=f},b.RenderTexture.tempMatrix=new b.Matrix,"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=b),exports.PIXI=b):"undefined"!=typeof define&&define.amd?define("PIXI",function(){return a.PIXI=b}()):a.PIXI=b}).call(this),function(){var a=this,b=b||{VERSION:"<%= version %>",DEV_VERSION:"2.0.4",GAMES:[],AUTO:0,CANVAS:1,WEBGL:2,HEADLESS:3,NONE:0,LEFT:1,RIGHT:2,UP:3,DOWN:4,SPRITE:0,BUTTON:1,IMAGE:2,GRAPHICS:3,TEXT:4,TILESPRITE:5,BITMAPTEXT:6,GROUP:7,RENDERTEXTURE:8,TILEMAP:9,TILEMAPLAYER:10,EMITTER:11,POLYGON:12,BITMAPDATA:13,CANVAS_FILTER:14,WEBGL_FILTER:15,ELLIPSE:16,SPRITEBATCH:17,RETROFONT:18,blendModes:{NORMAL:0,ADD:1,MULTIPLY:2,SCREEN:3,OVERLAY:4,DARKEN:5,LIGHTEN:6,COLOR_DODGE:7,COLOR_BURN:8,HARD_LIGHT:9,SOFT_LIGHT:10,DIFFERENCE:11,EXCLUSION:12,HUE:13,SATURATION:14,COLOR:15,LUMINOSITY:16},scaleModes:{DEFAULT:0,LINEAR:0,NEAREST:1}};PIXI.InteractionManager=function(){},b.Utils={parseDimension:function(a,b){var c=0,d=0;return"string"==typeof a?"%"===a.substr(-1)?(c=parseInt(a,10)/100,d=0===b?window.innerWidth*c:window.innerHeight*c):d=parseInt(a,10):d=a,d},shuffle:function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},pad:function(a,b,c,d){if("undefined"==typeof b)var b=0;if("undefined"==typeof c)var c=" ";if("undefined"==typeof d)var d=3; -var e=0;if(b+1>=a.length)switch(d){case 1:a=new Array(b+1-a.length).join(c)+a;break;case 3:var f=Math.ceil((e=b-a.length)/2),g=e-f;a=new Array(g+1).join(c)+a+new Array(f+1).join(c);break;default:a+=new Array(b+1-a.length).join(c)}return a},isPlainObject:function(a){if("object"!=typeof a||a.nodeType||a===a.window)return!1;try{if(a.constructor&&!{}.hasOwnProperty.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},extend:function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for("boolean"==typeof h&&(k=h,h=arguments[1]||{},i=2),j===i&&(h=this,--i);j>i;i++)if(null!=(a=arguments[i]))for(c in a)d=h[c],e=a[c],h!==e&&(k&&e&&(b.Utils.isPlainObject(e)||(f=Array.isArray(e)))?(f?(f=!1,g=d&&Array.isArray(d)?d:[]):g=d&&b.Utils.isPlainObject(d)?d:{},h[c]=b.Utils.extend(k,g,e)):void 0!==e&&(h[c]=e));return h}},"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),Array.isArray||(Array.isArray=function(a){return"[object Array]"==Object.prototype.toString.call(a)}),Array.prototype.forEach||(Array.prototype.forEach=function(a){"use strict";if(void 0===this||null===this)throw new TypeError;var b=Object(this),c=b.length>>>0;if("function"!=typeof a)throw new TypeError;for(var d=arguments.length>=2?arguments[1]:void 0,e=0;c>e;e++)e in b&&a.call(d,b[e],e,b)}),b.Circle=function(a,b,c){a=a||0,b=b||0,c=c||0,this.x=a,this.y=b,this._diameter=c,this._radius=c>0?.5*c:0},b.Circle.prototype={circumference:function(){return 2*Math.PI*this._radius},setTo:function(a,b,c){return this.x=a,this.y=b,this._diameter=c,this._radius=.5*c,this},copyFrom:function(a){return this.setTo(a.x,a.y,a.diameter)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.diameter=this._diameter,a},distance:function(a,c){return"undefined"==typeof c&&(c=!1),c?b.Math.distanceRound(this.x,this.y,a.x,a.y):b.Math.distance(this.x,this.y,a.x,a.y)},clone:function(a){return"undefined"==typeof a?a=new b.Circle(this.x,this.y,this.diameter):a.setTo(this.x,this.y,this.diameter),a},contains:function(a,c){return b.Circle.contains(this,a,c)},circumferencePoint:function(a,c,d){return b.Circle.circumferencePoint(this,a,c,d)},offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},toString:function(){return"[{Phaser.Circle (x="+this.x+" y="+this.y+" diameter="+this.diameter+" radius="+this.radius+")}]"}},b.Circle.prototype.constructor=b.Circle,Object.defineProperty(b.Circle.prototype,"diameter",{get:function(){return this._diameter},set:function(a){a>0&&(this._diameter=a,this._radius=.5*a)}}),Object.defineProperty(b.Circle.prototype,"radius",{get:function(){return this._radius},set:function(a){a>0&&(this._radius=a,this._diameter=2*a)}}),Object.defineProperty(b.Circle.prototype,"left",{get:function(){return this.x-this._radius},set:function(a){a>this.x?(this._radius=0,this._diameter=0):this.radius=this.x-a}}),Object.defineProperty(b.Circle.prototype,"right",{get:function(){return this.x+this._radius},set:function(a){athis.y?(this._radius=0,this._diameter=0):this.radius=this.y-a}}),Object.defineProperty(b.Circle.prototype,"bottom",{get:function(){return this.y+this._radius},set:function(a){a0?Math.PI*this._radius*this._radius:0}}),Object.defineProperty(b.Circle.prototype,"empty",{get:function(){return 0===this._diameter},set:function(a){a===!0&&this.setTo(0,0,0)}}),b.Circle.contains=function(a,b,c){if(a.radius>0&&b>=a.left&&b<=a.right&&c>=a.top&&c<=a.bottom){var d=(a.x-b)*(a.x-b),e=(a.y-c)*(a.y-c);return d+e<=a.radius*a.radius}return!1},b.Circle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.diameter==b.diameter},b.Circle.intersects=function(a,c){return b.Math.distance(a.x,a.y,c.x,c.y)<=a.radius+c.radius},b.Circle.circumferencePoint=function(a,c,d,e){return"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=new b.Point),d===!0&&(c=b.Math.degToRad(c)),e.x=a.x+a.radius*Math.cos(c),e.y=a.y+a.radius*Math.sin(c),e},b.Circle.intersectsRectangle=function(a,b){var c=Math.abs(a.x-b.x-b.halfWidth),d=b.halfWidth+a.radius;if(c>d)return!1;var e=Math.abs(a.y-b.y-b.halfHeight),f=b.halfHeight+a.radius;if(e>f)return!1;if(c<=b.halfWidth||e<=b.halfHeight)return!0;var g=c-b.halfWidth,h=e-b.halfHeight,i=g*g,j=h*h,k=a.radius*a.radius;return k>=i+j},PIXI.Circle=b.Circle,b.Point=function(a,b){a=a||0,b=b||0,this.x=a,this.y=b},b.Point.prototype={copyFrom:function(a){return this.setTo(a.x,a.y)},invert:function(){return this.setTo(this.y,this.x)},setTo:function(a,b){return this.x=a||0,this.y=b||(0!==b?this.x:0),this},set:function(a,b){return this.x=a||0,this.y=b||(0!==b?this.x:0),this},add:function(a,b){return this.x+=a,this.y+=b,this},subtract:function(a,b){return this.x-=a,this.y-=b,this},multiply:function(a,b){return this.x*=a,this.y*=b,this},divide:function(a,b){return this.x/=a,this.y/=b,this},clampX:function(a,c){return this.x=b.Math.clamp(this.x,a,c),this},clampY:function(a,c){return this.y=b.Math.clamp(this.y,a,c),this},clamp:function(a,c){return this.x=b.Math.clamp(this.x,a,c),this.y=b.Math.clamp(this.y,a,c),this},clone:function(a){return"undefined"==typeof a?a=new b.Point(this.x,this.y):a.setTo(this.x,this.y),a},copyTo:function(a){return a.x=this.x,a.y=this.y,a},distance:function(a,c){return b.Point.distance(this,a,c)},equals:function(a){return a.x==this.x&&a.y==this.y},rotate:function(a,c,d,e,f){return b.Point.rotate(this,a,c,d,e,f)},getMagnitude:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},setMagnitude:function(a){return this.normalize().multiply(a,a)},normalize:function(){if(!this.isZero()){var a=this.getMagnitude();this.x/=a,this.y/=a}return this},isZero:function(){return 0===this.x&&0===this.y},toString:function(){return"[{Point (x="+this.x+" y="+this.y+")}]"}},b.Point.prototype.constructor=b.Point,b.Point.add=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x+c.x,d.y=a.y+c.y,d},b.Point.subtract=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x-c.x,d.y=a.y-c.y,d},b.Point.multiply=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x*c.x,d.y=a.y*c.y,d},b.Point.divide=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x/c.x,d.y=a.y/c.y,d},b.Point.equals=function(a,b){return a.x==b.x&&a.y==b.y},b.Point.distance=function(a,c,d){return"undefined"==typeof d&&(d=!1),d?b.Math.distanceRound(a.x,a.y,c.x,c.y):b.Math.distance(a.x,a.y,c.x,c.y)},b.Point.rotate=function(a,c,d,e,f,g){return f=f||!1,g=g||null,f&&(e=b.Math.degToRad(e)),null===g&&(g=Math.sqrt((c-a.x)*(c-a.x)+(d-a.y)*(d-a.y))),a.setTo(c+g*Math.cos(e),d+g*Math.sin(e))},b.Point.centroid=function(a,c){if("undefined"==typeof c&&(c=new b.Point),"[object Array]"!==Object.prototype.toString.call(a))throw new Error("Phaser.Point. Parameter 'points' must be an array");var d=a.length;if(1>d)throw new Error("Phaser.Point. Parameter 'points' array must not be empty");if(1===d)return c.copyFrom(a[0]),c;for(var e=0;d>e;e++)b.Point.add(c,a[e],c);return c.divide(d,d),c},PIXI.Point=b.Point,b.Rectangle=function(a,b,c,d){a=a||0,b=b||0,c=c||0,d=d||0,this.x=a,this.y=b,this.width=c,this.height=d},b.Rectangle.prototype={offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},setTo:function(a,b,c,d){return this.x=a,this.y=b,this.width=c,this.height=d,this},floor:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y)},floorAll:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.width=Math.floor(this.width),this.height=Math.floor(this.height)},copyFrom:function(a){return this.setTo(a.x,a.y,a.width,a.height)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.width=this.width,a.height=this.height,a},inflate:function(a,c){return b.Rectangle.inflate(this,a,c)},size:function(a){return b.Rectangle.size(this,a)},clone:function(a){return b.Rectangle.clone(this,a)},contains:function(a,c){return b.Rectangle.contains(this,a,c)},containsRect:function(a){return b.Rectangle.containsRect(this,a)},equals:function(a){return b.Rectangle.equals(this,a)},intersection:function(a,c){return b.Rectangle.intersection(this,a,c)},intersects:function(a,c){return b.Rectangle.intersects(this,a,c)},intersectsRaw:function(a,c,d,e,f){return b.Rectangle.intersectsRaw(this,a,c,d,e,f)},union:function(a,c){return b.Rectangle.union(this,a,c)},toString:function(){return"[{Rectangle (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+" empty="+this.empty+")}]"}},Object.defineProperty(b.Rectangle.prototype,"halfWidth",{get:function(){return Math.round(this.width/2)}}),Object.defineProperty(b.Rectangle.prototype,"halfHeight",{get:function(){return Math.round(this.height/2)}}),Object.defineProperty(b.Rectangle.prototype,"bottom",{get:function(){return this.y+this.height},set:function(a){this.height=a<=this.y?0:this.y-a}}),Object.defineProperty(b.Rectangle.prototype,"bottomRight",{get:function(){return new b.Point(this.right,this.bottom)},set:function(a){this.right=a.x,this.bottom=a.y}}),Object.defineProperty(b.Rectangle.prototype,"left",{get:function(){return this.x},set:function(a){this.width=a>=this.right?0:this.right-a,this.x=a}}),Object.defineProperty(b.Rectangle.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=a<=this.x?0:this.x+a}}),Object.defineProperty(b.Rectangle.prototype,"volume",{get:function(){return this.width*this.height}}),Object.defineProperty(b.Rectangle.prototype,"perimeter",{get:function(){return 2*this.width+2*this.height}}),Object.defineProperty(b.Rectangle.prototype,"centerX",{get:function(){return this.x+this.halfWidth},set:function(a){this.x=a-this.halfWidth}}),Object.defineProperty(b.Rectangle.prototype,"centerY",{get:function(){return this.y+this.halfHeight},set:function(a){this.y=a-this.halfHeight}}),Object.defineProperty(b.Rectangle.prototype,"top",{get:function(){return this.y},set:function(a){a>=this.bottom?(this.height=0,this.y=a):this.height=this.bottom-a}}),Object.defineProperty(b.Rectangle.prototype,"topLeft",{get:function(){return new b.Point(this.x,this.y)},set:function(a){this.x=a.x,this.y=a.y}}),Object.defineProperty(b.Rectangle.prototype,"empty",{get:function(){return!this.width||!this.height},set:function(a){a===!0&&this.setTo(0,0,0,0)}}),b.Rectangle.prototype.constructor=b.Rectangle,b.Rectangle.inflate=function(a,b,c){return a.x-=b,a.width+=2*b,a.y-=c,a.height+=2*c,a},b.Rectangle.inflatePoint=function(a,c){return b.Rectangle.inflate(a,c.x,c.y)},b.Rectangle.size=function(a,c){return"undefined"==typeof c?c=new b.Point(a.width,a.height):c.setTo(a.width,a.height),c},b.Rectangle.clone=function(a,c){return"undefined"==typeof c?c=new b.Rectangle(a.x,a.y,a.width,a.height):c.setTo(a.x,a.y,a.width,a.height),c},b.Rectangle.contains=function(a,b,c){return a.width<=0||a.height<=0?!1:b>=a.x&&b<=a.right&&c>=a.y&&c<=a.bottom},b.Rectangle.containsRaw=function(a,b,c,d,e,f){return e>=a&&a+c>=e&&f>=b&&b+d>=f},b.Rectangle.containsPoint=function(a,c){return b.Rectangle.contains(a,c.x,c.y)},b.Rectangle.containsRect=function(a,b){return a.volume>b.volume?!1:a.x>=b.x&&a.y>=b.y&&a.right<=b.right&&a.bottom<=b.bottom},b.Rectangle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.width==b.width&&a.height==b.height},b.Rectangle.intersection=function(a,c,d){return"undefined"==typeof d&&(d=new b.Rectangle),b.Rectangle.intersects(a,c)&&(d.x=Math.max(a.x,c.x),d.y=Math.max(a.y,c.y),d.width=Math.min(a.right,c.right)-d.x,d.height=Math.min(a.bottom,c.bottom)-d.y),d},b.Rectangle.intersects=function(a,b){return a.width<=0||a.height<=0||b.width<=0||b.height<=0?!1:!(a.rightb.right||a.y>b.bottom)},b.Rectangle.intersectsRaw=function(a,b,c,d,e,f){return"undefined"==typeof f&&(f=0),!(b>a.right+f||ca.bottom+f||e=c&&d>=a&&b>=e&&f>=b},coordinatesOnLine:function(a,b){"undefined"==typeof a&&(a=1),"undefined"==typeof b&&(b=[]);var c=Math.round(this.start.x),d=Math.round(this.start.y),e=Math.round(this.end.x),f=Math.round(this.end.y),g=Math.abs(e-c),h=Math.abs(f-d),i=e>c?1:-1,j=f>d?1:-1,k=g-h;b.push([c,d]);for(var l=1;c!=e||d!=f;){var m=k<<1;m>-h&&(k-=h,c+=i),g>m&&(k+=g,d+=j),l%a===0&&b.push([c,d]),l++}return b}},Object.defineProperty(b.Line.prototype,"length",{get:function(){return Math.sqrt((this.end.x-this.start.x)*(this.end.x-this.start.x)+(this.end.y-this.start.y)*(this.end.y-this.start.y))}}),Object.defineProperty(b.Line.prototype,"angle",{get:function(){return Math.atan2(this.end.y-this.start.y,this.end.x-this.start.x)}}),Object.defineProperty(b.Line.prototype,"slope",{get:function(){return(this.end.y-this.start.y)/(this.end.x-this.start.x)}}),Object.defineProperty(b.Line.prototype,"perpSlope",{get:function(){return-((this.end.x-this.start.x)/(this.end.y-this.start.y))}}),Object.defineProperty(b.Line.prototype,"x",{get:function(){return Math.min(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"y",{get:function(){return Math.min(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"left",{get:function(){return Math.min(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"right",{get:function(){return Math.max(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"top",{get:function(){return Math.min(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"bottom",{get:function(){return Math.max(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"width",{get:function(){return Math.abs(this.start.x-this.end.x)}}),Object.defineProperty(b.Line.prototype,"height",{get:function(){return Math.abs(this.start.y-this.end.y)}}),b.Line.intersectsPoints=function(a,c,d,e,f,g){"undefined"==typeof f&&(f=!0),"undefined"==typeof g&&(g=new b.Point);var h=c.y-a.y,i=e.y-d.y,j=a.x-c.x,k=d.x-e.x,l=c.x*a.y-a.x*c.y,m=e.x*d.y-d.x*e.y,n=h*k-i*j;if(0===n)return null;if(g.x=(j*m-k*l)/n,g.y=(i*l-h*m)/n,f){if(Math.pow(g.x-c.x+(g.y-c.y),2)>Math.pow(a.x-c.x+(a.y-c.y),2))return null;if(Math.pow(g.x-a.x+(g.y-a.y),2)>Math.pow(a.x-c.x+(a.y-c.y),2))return null;if(Math.pow(g.x-e.x+(g.y-e.y),2)>Math.pow(d.x-e.x+(d.y-e.y),2))return null;if(Math.pow(g.x-d.x+(g.y-d.y),2)>Math.pow(d.x-e.x+(d.y-e.y),2))return null}return g},b.Line.intersects=function(a,c,d,e){return b.Line.intersectsPoints(a.start,a.end,c.start,c.end,d,e)},b.Ellipse=function(a,c,d,e){this.type=b.ELLIPSE,a=a||0,c=c||0,d=d||0,e=e||0,this.x=a,this.y=c,this.width=d,this.height=e},b.Ellipse.prototype={setTo:function(a,b,c,d){return this.x=a,this.y=b,this.width=c,this.height=d,this},copyFrom:function(a){return this.setTo(a.x,a.y,a.width,a.height)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.width=this.width,a.height=this.height,a},clone:function(a){return"undefined"==typeof a?a=new b.Ellipse(this.x,this.y,this.width,this.height):a.setTo(this.x,this.y,this.width,this.height),a},contains:function(a,c){return b.Ellipse.contains(this,a,c)},toString:function(){return"[{Phaser.Ellipse (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+")}]"}},b.Ellipse.prototype.constructor=b.Ellipse,Object.defineProperty(b.Ellipse.prototype,"left",{get:function(){return this.x},set:function(a){this.x=a}}),Object.defineProperty(b.Ellipse.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=ad+e},b.Ellipse.prototype.getBounds=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Ellipse=b.Ellipse,b.Polygon=function(a){if(this.type=b.POLYGON,a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var c=[],d=0,e=a.length;e>d;d+=2)c.push(new b.Point(a[d],a[d+1]));a=c}this.points=a},b.Polygon.prototype={clone:function(){for(var a=[],c=0;cb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!0)}return c}},b.Polygon.prototype.constructor=b.Polygon,PIXI.Polygon=b.Polygon,b.Camera=function(a,c,d,e,f,g){this.game=a,this.world=a.world,this.id=0,this.view=new b.Rectangle(d,e,f,g),this.screenView=new b.Rectangle(d,e,f,g),this.bounds=new b.Rectangle(d,e,f,g),this.deadzone=null,this.visible=!0,this.atLimit={x:!1,y:!1},this.target=null,this._edge=0,this.displayObject=null,this.scale=null},b.Camera.FOLLOW_LOCKON=0,b.Camera.FOLLOW_PLATFORMER=1,b.Camera.FOLLOW_TOPDOWN=2,b.Camera.FOLLOW_TOPDOWN_TIGHT=3,b.Camera.prototype={follow:function(a,c){"undefined"==typeof c&&(c=b.Camera.FOLLOW_LOCKON),this.target=a;var d;switch(c){case b.Camera.FOLLOW_PLATFORMER:var e=this.width/8,f=this.height/3;this.deadzone=new b.Rectangle((this.width-e)/2,(this.height-f)/2-.25*f,e,f);break;case b.Camera.FOLLOW_TOPDOWN:d=Math.max(this.width,this.height)/4,this.deadzone=new b.Rectangle((this.width-d)/2,(this.height-d)/2,d,d);break;case b.Camera.FOLLOW_TOPDOWN_TIGHT:d=Math.max(this.width,this.height)/8,this.deadzone=new b.Rectangle((this.width-d)/2,(this.height-d)/2,d,d);break;case b.Camera.FOLLOW_LOCKON:this.deadzone=null;break;default:this.deadzone=null}},focusOn:function(a){this.setPosition(Math.round(a.x-this.view.halfWidth),Math.round(a.y-this.view.halfHeight))},focusOnXY:function(a,b){this.setPosition(Math.round(a-this.view.halfWidth),Math.round(b-this.view.halfHeight))},update:function(){this.target&&this.updateTarget(),this.bounds&&this.checkBounds(),this.displayObject.position.x=-this.view.x,this.displayObject.position.y=-this.view.y},updateTarget:function(){this.deadzone?(this._edge=this.target.x-this.deadzone.x,this.view.x>this._edge&&(this.view.x=this._edge),this._edge=this.target.x+this.target.width-this.deadzone.x-this.deadzone.width,this.view.xthis._edge&&(this.view.y=this._edge),this._edge=this.target.y+this.target.height-this.deadzone.y-this.deadzone.height,this.view.y=this.bounds.right&&(this.atLimit.x=!0,this.view.x=this.bounds.right-this.width),this.view.y<=this.bounds.top&&(this.atLimit.y=!0,this.view.y=this.bounds.top),this.view.bottom>=this.bounds.bottom&&(this.atLimit.y=!0,this.view.y=this.bounds.bottom-this.height),this.view.floor()},setPosition:function(a,b){this.view.x=a,this.view.y=b,this.bounds&&this.checkBounds()},setSize:function(a,b){this.view.width=a,this.view.height=b},reset:function(){this.target=null,this.view.x=0,this.view.y=0}},b.Camera.prototype.constructor=b.Camera,Object.defineProperty(b.Camera.prototype,"x",{get:function(){return this.view.x},set:function(a){this.view.x=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(b.Camera.prototype,"y",{get:function(){return this.view.y},set:function(a){this.view.y=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(b.Camera.prototype,"width",{get:function(){return this.view.width},set:function(a){this.view.width=a}}),Object.defineProperty(b.Camera.prototype,"height",{get:function(){return this.view.height},set:function(a){this.view.height=a}}),b.State=function(){this.game=null,this.add=null,this.make=null,this.camera=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.sound=null,this.scale=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.particles=null,this.physics=null,this.rnd=null},b.State.prototype={preload:function(){},loadUpdate:function(){},loadRender:function(){},create:function(){},update:function(){},render:function(){},paused:function(){},shutdown:function(){}},b.State.prototype.constructor=b.State,b.StateManager=function(a,b){this.game=a,this.states={},this._pendingState=null,"undefined"!=typeof b&&null!==b&&(this._pendingState=b),this._clearWorld=!1,this._clearCache=!1,this._created=!1,this._args=[],this.current="",this.onInitCallback=null,this.onPreloadCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPreRenderCallback=null,this.onLoadUpdateCallback=null,this.onLoadRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onShutDownCallback=null},b.StateManager.prototype={boot:function(){this.game.onPause.add(this.pause,this),this.game.onResume.add(this.resume,this),this.game.load.onLoadComplete.add(this.loadComplete,this),null!==this._pendingState&&("string"==typeof this._pendingState?this.start(this._pendingState,!1,!1):this.add("default",this._pendingState,!0))},add:function(a,c,d){"undefined"==typeof d&&(d=!1);var e;return c instanceof b.State?e=c:"object"==typeof c?(e=c,e.game=this.game):"function"==typeof c&&(e=new c(this.game)),this.states[a]=e,d&&(this.game.isBooted?this.start(a):this._pendingState=a),e},remove:function(a){this.current===a&&(this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onDestroyCallback=null),delete this.states[a]},start:function(a,b,c){"undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=!1),this.checkState(a)&&(this._pendingState=a,this._clearWorld=b,this._clearCache=c,arguments.length>3&&(this._args=Array.prototype.splice.call(arguments,3)))},restart:function(a,b){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!1),this._pendingState=this.current,this._clearWorld=a,this._clearCache=b,arguments.length>2&&(this._args=Array.prototype.splice.call(arguments,2))},dummy:function(){},preUpdate:function(){this._pendingState&&this.game.isBooted&&(this.current&&(this.onShutDownCallback.call(this.callbackContext,this.game),this.game.tweens.removeAll(),this.game.camera.reset(),this.game.input.reset(!0),this.game.physics.clear(),this.game.time.removeAll(),this._clearWorld&&(this.game.world.shutdown(),this._clearCache===!0&&this.game.cache.destroy())),this.setCurrentState(this._pendingState),this.onPreloadCallback?(this.game.load.reset(),this.onPreloadCallback.call(this.callbackContext,this.game),0===this.game.load.totalQueuedFiles()?this.loadComplete():this.game.load.start()):this.loadComplete(),this.current===this._pendingState&&(this._pendingState=null))},checkState:function(a){if(this.states[a]){var b=!1;return this.states[a].preload&&(b=!0),this.states[a].create&&(b=!0),this.states[a].update&&(b=!0),this.states[a].render&&(b=!0),b===!1?(console.warn("Invalid Phaser State object given. Must contain at least a one of the required functions: preload, create, update or render"),!1):!0}return console.warn("Phaser.StateManager - No state found with the key: "+a),!1},link:function(a){this.states[a].game=this.game,this.states[a].add=this.game.add,this.states[a].make=this.game.make,this.states[a].camera=this.game.camera,this.states[a].cache=this.game.cache,this.states[a].input=this.game.input,this.states[a].load=this.game.load,this.states[a].math=this.game.math,this.states[a].sound=this.game.sound,this.states[a].scale=this.game.scale,this.states[a].state=this,this.states[a].stage=this.game.stage,this.states[a].time=this.game.time,this.states[a].tweens=this.game.tweens,this.states[a].world=this.game.world,this.states[a].particles=this.game.particles,this.states[a].rnd=this.game.rnd,this.states[a].physics=this.game.physics},setCurrentState:function(a){this.callbackContext=this.states[a],this.link(a),this.onInitCallback=this.states[a].init||this.dummy,this.onPreloadCallback=this.states[a].preload||null,this.onLoadRenderCallback=this.states[a].loadRender||null,this.onLoadUpdateCallback=this.states[a].loadUpdate||null,this.onCreateCallback=this.states[a].create||null,this.onUpdateCallback=this.states[a].update||null,this.onPreRenderCallback=this.states[a].preRender||null,this.onRenderCallback=this.states[a].render||null,this.onPausedCallback=this.states[a].paused||null,this.onResumedCallback=this.states[a].resumed||null,this.onShutDownCallback=this.states[a].shutdown||this.dummy,this.current=a,this._created=!1,this.onInitCallback.apply(this.callbackContext,this._args),this._args=[]},getCurrentState:function(){return this.states[this.current]},loadComplete:function(){this._created===!1&&this.onCreateCallback?(this._created=!0,this.onCreateCallback.call(this.callbackContext,this.game)):this._created=!0},pause:function(){this._created&&this.onPausedCallback&&this.onPausedCallback.call(this.callbackContext,this.game)},resume:function(){this._created&&this.onResumedCallback&&this.onResumedCallback.call(this.callbackContext,this.game)},update:function(){this._created&&this.onUpdateCallback?this.onUpdateCallback.call(this.callbackContext,this.game):this.onLoadUpdateCallback&&this.onLoadUpdateCallback.call(this.callbackContext,this.game)},preRender:function(){this.onPreRenderCallback&&this.onPreRenderCallback.call(this.callbackContext,this.game)},render:function(){this._created&&this.onRenderCallback?(this.game.renderType===b.CANVAS&&(this.game.context.save(),this.game.context.setTransform(1,0,0,1,0,0)),this.onRenderCallback.call(this.callbackContext,this.game),this.game.renderType===b.CANVAS&&this.game.context.restore()):this.onLoadRenderCallback&&this.onLoadRenderCallback.call(this.callbackContext,this.game)},destroy:function(){this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onDestroyCallback=null,this.game=null,this.states={},this._pendingState=null}},b.StateManager.prototype.constructor=b.StateManager,b.LinkedList=function(){this.next=null,this.prev=null,this.first=null,this.last=null,this.total=0},b.LinkedList.prototype={add:function(a){return 0===this.total&&null==this.first&&null==this.last?(this.first=a,this.last=a,this.next=a,a.prev=this,this.total++,a):(this.last.next=a,a.prev=this.last,this.last=a,this.total++,a)},remove:function(a){a==this.first?this.first=this.first.next:a==this.last&&(this.last=this.last.prev),a.prev&&(a.prev.next=a.next),a.next&&(a.next.prev=a.prev),a.next=a.prev=null,null==this.first&&(this.last=null),this.total--},callAll:function(a){if(this.first&&this.last){var b=this.first;do b&&b[a]&&b[a].call(b),b=b.next;while(b!=this.last.next)}}},b.LinkedList.prototype.constructor=b.LinkedList,b.Signal=function(){this._bindings=[],this._prevParams=null;var a=this;this.dispatch=function(){b.Signal.prototype.dispatch.apply(a,arguments)}},b.Signal.prototype={memorize:!1,_shouldPropagate:!0,active:!0,validateListener:function(a,b){if("function"!=typeof a)throw new Error("listener is a required param of {fn}() and should be a Function.".replace("{fn}",b))},_registerListener:function(a,c,d,e){var f,g=this._indexOfListener(a,d);if(-1!==g){if(f=this._bindings[g],f.isOnce()!==c)throw new Error("You cannot add"+(c?"":"Once")+"() then add"+(c?"Once":"")+"() the same listener without removing the relationship first.")}else f=new b.SignalBinding(this,a,c,d,e),this._addBinding(f);return this.memorize&&this._prevParams&&f.execute(this._prevParams),f},_addBinding:function(a){var b=this._bindings.length;do--b;while(this._bindings[b]&&a._priority<=this._bindings[b]._priority);this._bindings.splice(b+1,0,a)},_indexOfListener:function(a,b){for(var c,d=this._bindings.length;d--;)if(c=this._bindings[d],c._listener===a&&c.context===b)return d;return-1},has:function(a,b){return-1!==this._indexOfListener(a,b)},add:function(a,b,c){return this.validateListener(a,"add"),this._registerListener(a,!1,b,c)},addOnce:function(a,b,c){return this.validateListener(a,"addOnce"),this._registerListener(a,!0,b,c)},remove:function(a,b){this.validateListener(a,"remove");var c=this._indexOfListener(a,b);return-1!==c&&(this._bindings[c]._destroy(),this._bindings.splice(c,1)),a},removeAll:function(){for(var a=this._bindings.length;a--;)this._bindings[a]._destroy();this._bindings.length=0},getNumListeners:function(){return this._bindings.length},halt:function(){this._shouldPropagate=!1},dispatch:function(){if(this.active){var a,b=Array.prototype.slice.call(arguments),c=this._bindings.length;if(this.memorize&&(this._prevParams=b),c){a=this._bindings.slice(),this._shouldPropagate=!0;do c--;while(a[c]&&this._shouldPropagate&&a[c].execute(b)!==!1)}}},forget:function(){this._prevParams=null},dispose:function(){this.removeAll(),delete this._bindings,delete this._prevParams},toString:function(){return"[Phaser.Signal active:"+this.active+" numListeners:"+this.getNumListeners()+"]"}},b.Signal.prototype.constructor=b.Signal,b.SignalBinding=function(a,b,c,d,e){this._listener=b,this._isOnce=c,this.context=d,this._signal=a,this._priority=e||0},b.SignalBinding.prototype={active:!0,params:null,execute:function(a){var b,c;return this.active&&this._listener&&(c=this.params?this.params.concat(a):a,b=this._listener.apply(this.context,c),this._isOnce&&this.detach()),b},detach:function(){return this.isBound()?this._signal.remove(this._listener,this.context):null},isBound:function(){return!!this._signal&&!!this._listener},isOnce:function(){return this._isOnce},getListener:function(){return this._listener},getSignal:function(){return this._signal},_destroy:function(){delete this._signal,delete this._listener,delete this.context},toString:function(){return"[Phaser.SignalBinding isOnce:"+this._isOnce+", isBound:"+this.isBound()+", active:"+this.active+"]" -}},b.SignalBinding.prototype.constructor=b.SignalBinding,b.Filter=function(a,c,d){this.game=a,this.type=b.WEBGL_FILTER,this.passes=[this],this.shaders=[],this.dirty=!0,this.padding=0,this.uniforms={time:{type:"1f",value:0},resolution:{type:"2f",value:{x:256,y:256}},mouse:{type:"2f",value:{x:0,y:0}}},this.fragmentSrc=d||[]},b.Filter.prototype={init:function(){},setResolution:function(a,b){this.uniforms.resolution.value.x=a,this.uniforms.resolution.value.y=b},update:function(a){"undefined"!=typeof a&&(a.x>0&&(this.uniforms.mouse.x=a.x.toFixed(2)),a.y>0&&(this.uniforms.mouse.y=a.y.toFixed(2))),this.uniforms.time.value=this.game.time.totalElapsedSeconds()},destroy:function(){this.game=null}},b.Filter.prototype.constructor=b.Filter,Object.defineProperty(b.Filter.prototype,"width",{get:function(){return this.uniforms.resolution.value.x},set:function(a){this.uniforms.resolution.value.x=a}}),Object.defineProperty(b.Filter.prototype,"height",{get:function(){return this.uniforms.resolution.value.y},set:function(a){this.uniforms.resolution.value.y=a}}),b.Plugin=function(a,b){"undefined"==typeof b&&(b=null),this.game=a,this.parent=b,this.active=!1,this.visible=!1,this.hasPreUpdate=!1,this.hasUpdate=!1,this.hasPostUpdate=!1,this.hasRender=!1,this.hasPostRender=!1},b.Plugin.prototype={preUpdate:function(){},update:function(){},render:function(){},postRender:function(){},destroy:function(){this.game=null,this.parent=null,this.active=!1,this.visible=!1}},b.Plugin.prototype.constructor=b.Plugin,b.PluginManager=function(a){this.game=a,this.plugins=[],this._len=0,this._i=0},b.PluginManager.prototype={add:function(a){var b=!1;return"function"==typeof a?a=new a(this.game,this._parent):(a.game=this.game,a.parent=this),"function"==typeof a.preUpdate&&(a.hasPreUpdate=!0,b=!0),"function"==typeof a.update&&(a.hasUpdate=!0,b=!0),"function"==typeof a.postUpdate&&(a.hasPostUpdate=!0,b=!0),"function"==typeof a.render&&(a.hasRender=!0,b=!0),"function"==typeof a.postRender&&(a.hasPostRender=!0,b=!0),b?((a.hasPreUpdate||a.hasUpdate||a.hasPostUpdate)&&(a.active=!0),(a.hasRender||a.hasPostRender)&&(a.visible=!0),this._len=this.plugins.push(a),"function"==typeof a.init&&a.init(),a):null},remove:function(a){for(this._i=this._len;this._i--;)if(this.plugins[this._i]===a)return a.destroy(),this.plugins.splice(this._i,1),void this._len--},removeAll:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].destroy();this.plugins.length=0,this._len=0},preUpdate:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasPreUpdate&&this.plugins[this._i].preUpdate()},update:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasUpdate&&this.plugins[this._i].update()},postUpdate:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasPostUpdate&&this.plugins[this._i].postUpdate()},render:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].visible&&this.plugins[this._i].hasRender&&this.plugins[this._i].render()},postRender:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].visible&&this.plugins[this._i].hasPostRender&&this.plugins[this._i].postRender()},destroy:function(){this.removeAll(),this.game=null}},b.PluginManager.prototype.constructor=b.PluginManager,b.Stage=function(a,c,d){this.game=a,this.offset=new b.Point,PIXI.Stage.call(this,0,!1),this.name="_stage_root",this.interactive=!1,this.disableVisibilityChange=!1,this.checkOffsetInterval=2500,this.exists=!0,this.currentRenderOrderID=0,this._hiddenVar="hidden",this._nextOffsetCheck=0,this._backgroundColor=0,a.config?this.parseConfig(a.config):(this.game.canvas=b.Canvas.create(c,d),this.game.canvas.style["-webkit-full-screen"]="width: 100%; height: 100%")},b.Stage.prototype=Object.create(PIXI.Stage.prototype),b.Stage.prototype.constructor=b.Stage,b.Stage.prototype.preUpdate=function(){this.currentRenderOrderID=0;for(var a=this.children.length,b=0;a>b;b++)this.children[b].preUpdate()},b.Stage.prototype.update=function(){for(var a=this.children.length;a--;)this.children[a].update()},b.Stage.prototype.postUpdate=function(){if(this.game.world.camera.target){this.game.world.camera.target.postUpdate(),this.game.world.camera.update();for(var a=this.children.length;a--;)this.children[a]!==this.game.world.camera.target&&this.children[a].postUpdate()}else{this.game.world.camera.update();for(var a=this.children.length;a--;)this.children[a].postUpdate()}this.checkOffsetInterval!==!1&&this.game.time.now>this._nextOffsetCheck&&(b.Canvas.getOffset(this.game.canvas,this.offset),this._nextOffsetCheck=this.game.time.now+this.checkOffsetInterval)},b.Stage.prototype.parseConfig=function(a){this.game.canvas=a.canvasID?b.Canvas.create(this.game.width,this.game.height,a.canvasID):b.Canvas.create(this.game.width,this.game.height),a.canvasStyle?this.game.canvas.stlye=a.canvasStyle:this.game.canvas.style["-webkit-full-screen"]="width: 100%; height: 100%",a.checkOffsetInterval&&(this.checkOffsetInterval=a.checkOffsetInterval),a.disableVisibilityChange&&(this.disableVisibilityChange=a.disableVisibilityChange),a.fullScreenScaleMode&&(this.fullScreenScaleMode=a.fullScreenScaleMode),a.scaleMode&&(this.scaleMode=a.scaleMode),a.backgroundColor&&(this.backgroundColor=a.backgroundColor)},b.Stage.prototype.boot=function(){b.Canvas.getOffset(this.game.canvas,this.offset),this.bounds=new b.Rectangle(this.offset.x,this.offset.y,this.game.width,this.game.height);var a=this;this._onChange=function(b){return a.visibilityChange(b)},b.Canvas.setUserSelect(this.game.canvas,"none"),b.Canvas.setTouchAction(this.game.canvas,"none"),this.checkVisibility()},b.Stage.prototype.checkVisibility=function(){this._hiddenVar=void 0!==document.webkitHidden?"webkitvisibilitychange":void 0!==document.mozHidden?"mozvisibilitychange":void 0!==document.msHidden?"msvisibilitychange":void 0!==document.hidden?"visibilitychange":null,this._hiddenVar&&document.addEventListener(this._hiddenVar,this._onChange,!1),window.onpagehide=this._onChange,window.onpageshow=this._onChange,window.onblur=this._onChange,window.onfocus=this._onChange},b.Stage.prototype.visibilityChange=function(a){return this.disableVisibilityChange?void 0:"pagehide"===a.type||"blur"===a.type||"pageshow"===a.type||"focus"===a.type?void("pagehide"===a.type||"blur"===a.type?this.game.focusLoss(a):("pageshow"===a.type||"focus"===a.type)&&this.game.focusGain(a)):void(document.hidden||document.mozHidden||document.msHidden||document.webkitHidden?this.game.gamePaused(a):this.game.gameResumed(a))},b.Stage.prototype.setBackgroundColor=function(a){this._backgroundColor=a||0,this.backgroundColorSplit=PIXI.hex2rgb(this.backgroundColor);var b=this._backgroundColor.toString(16);b="000000".substr(0,6-b.length)+b,this.backgroundColorString="#"+b},Object.defineProperty(b.Stage.prototype,"backgroundColor",{get:function(){return this._backgroundColor},set:function(a){this._backgroundColor=a,this.game.transparent===!1&&("string"==typeof a&&(a=b.Color.hexToRGB(a)),this.setBackgroundColor(a))}}),Object.defineProperty(b.Stage.prototype,"smoothed",{get:function(){return!PIXI.scaleModes.LINEAR},set:function(a){PIXI.scaleModes.LINEAR=a?0:1}}),b.Group=function(a,c,d,e,f,g){"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=!1),"undefined"==typeof g&&(g=b.Physics.ARCADE),this.game=a,"undefined"==typeof c&&(c=a.world),this.name=d||"group",PIXI.DisplayObjectContainer.call(this),e?this.game.stage.addChild(this):c&&c.addChild(this),this.z=0,this.type=b.GROUP,this.alive=!0,this.exists=!0,this.scale=new b.Point(1,1),this.cursor=null,this.cameraOffset=new b.Point,this.enableBody=f,this.enableBodyDebug=!1,this.physicsBodyType=g,this._sortProperty="z",this._cache=[0,0,0,0,1,0,1,0,0,0]},b.Group.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),b.Group.prototype.constructor=b.Group,b.Group.RETURN_NONE=0,b.Group.RETURN_TOTAL=1,b.Group.RETURN_CHILD=2,b.Group.SORT_ASCENDING=-1,b.Group.SORT_DESCENDING=1,b.Group.prototype.add=function(a){return a.parent!==this&&(this.enableBody&&this.game.physics.enable(a,this.physicsBodyType),this.addChild(a),a.z=this.children.length,a.events&&a.events.onAddedToGroup.dispatch(a,this),null===this.cursor&&(this.cursor=a)),a},b.Group.prototype.addAt=function(a,b){return a.parent!==this&&(this.enableBody&&this.game.physics.enable(a,this.physicsBodyType),this.addChildAt(a,b),this.updateZ(),a.events&&a.events.onAddedToGroup.dispatch(a,this),null===this.cursor&&(this.cursor=a)),a},b.Group.prototype.getAt=function(a){return 0>a||a>=this.children.length?-1:this.getChildAt(a)},b.Group.prototype.create=function(a,c,d,e,f){"undefined"==typeof f&&(f=!0);var g=new b.Sprite(this.game,a,c,d,e);return this.enableBody&&this.game.physics.enable(g,this.physicsBodyType),g.exists=f,g.visible=f,g.alive=f,this.addChild(g),g.z=this.children.length,g.events&&g.events.onAddedToGroup.dispatch(g,this),null===this.cursor&&(this.cursor=g),g},b.Group.prototype.createMultiple=function(a,b,c,d){"undefined"==typeof d&&(d=!1);for(var e=0;a>e;e++)this.create(0,0,b,c,d)},b.Group.prototype.updateZ=function(){for(var a=this.children.length;a--;)this.children[a].z=a},b.Group.prototype.resetCursor=function(a){return"undefined"==typeof a&&(a=0),a>this.children.length-1&&(a=0),this.cursor?(this._cache[8]=a,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.next=function(){return this.cursor?(this._cache[8]>=this.children.length-1?this._cache[8]=0:this._cache[8]++,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.previous=function(){return this.cursor?(0===this._cache[8]?this._cache[8]=this.children.length-1:this._cache[8]--,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.swap=function(a,b){var c=this.swapChildren(a,b);return c&&this.updateZ(),c},b.Group.prototype.bringToTop=function(a){return a.parent===this&&this.getIndex(a)0&&(this.remove(a),this.addAt(a,0)),a},b.Group.prototype.moveUp=function(a){if(a.parent===this&&this.getIndex(a)0){var b=this.getIndex(a),c=this.getAt(b-1);c&&this.swap(a,c)}return a},b.Group.prototype.xy=function(a,b,c){return 0>a||a>this.children.length?-1:(this.getChildAt(a).x=b,void(this.getChildAt(a).y=c))},b.Group.prototype.reverse=function(){this.children.reverse(),this.updateZ()},b.Group.prototype.getIndex=function(a){return this.children.indexOf(a)},b.Group.prototype.replace=function(a,c){var d=this.getIndex(a);if(-1!==d){void 0!==c.parent&&(c.events.onRemovedFromGroup.dispatch(c,this),c.parent.removeChild(c),c.parent instanceof b.Group&&c.parent.updateZ());var e=a;return this.remove(e),this.addAt(c,d),e}},b.Group.prototype.setProperty=function(a,b,c,d){d=d||0;var e=b.length;1===e&&a.hasOwnProperty(b[0])?0===d?a[b[0]]=c:1==d?a[b[0]]+=c:2==d?a[b[0]]-=c:3==d?a[b[0]]*=c:4==d&&(a[b[0]]/=c):2===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])?0===d?a[b[0]][b[1]]=c:1==d?a[b[0]][b[1]]+=c:2==d?a[b[0]][b[1]]-=c:3==d?a[b[0]][b[1]]*=c:4==d&&(a[b[0]][b[1]]/=c):3===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])&&a[b[0]][b[1]].hasOwnProperty(b[2])?0===d?a[b[0]][b[1]][b[2]]=c:1==d?a[b[0]][b[1]][b[2]]+=c:2==d?a[b[0]][b[1]][b[2]]-=c:3==d?a[b[0]][b[1]][b[2]]*=c:4==d&&(a[b[0]][b[1]][b[2]]/=c):4===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])&&a[b[0]][b[1]].hasOwnProperty(b[2])&&a[b[0]][b[1]][b[2]].hasOwnProperty(b[3])&&(0===d?a[b[0]][b[1]][b[2]][b[3]]=c:1==d?a[b[0]][b[1]][b[2]][b[3]]+=c:2==d?a[b[0]][b[1]][b[2]][b[3]]-=c:3==d?a[b[0]][b[1]][b[2]][b[3]]*=c:4==d&&(a[b[0]][b[1]][b[2]][b[3]]/=c))},b.Group.prototype.set=function(a,b,c,d,e,f){b=b.split("."),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1),(d===!1||d&&a.alive)&&(e===!1||e&&a.visible)&&this.setProperty(a,b,c,f)},b.Group.prototype.setAll=function(a,b,c,d,e){a=a.split("."),"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1),e=e||0;for(var f=0,g=this.children.length;g>f;f++)(!c||c&&this.children[f].alive)&&(!d||d&&this.children[f].visible)&&this.setProperty(this.children[f],a,b,e)},b.Group.prototype.setAllChildren=function(a,c,d,e,f){"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1),f=f||0;for(var g=0,h=this.children.length;h>g;g++)(!d||d&&this.children[g].alive)&&(!e||e&&this.children[g].visible)&&(this.children[g]instanceof b.Group?this.children[g].setAllChildren(a,c,d,e,f):this.setProperty(this.children[g],a.split("."),c,f))},b.Group.prototype.addAll=function(a,b,c,d){this.setAll(a,b,c,d,1)},b.Group.prototype.subAll=function(a,b,c,d){this.setAll(a,b,c,d,2)},b.Group.prototype.multiplyAll=function(a,b,c,d){this.setAll(a,b,c,d,3)},b.Group.prototype.divideAll=function(a,b,c,d){this.setAll(a,b,c,d,4)},b.Group.prototype.callAllExists=function(a,b){for(var c=Array.prototype.splice.call(arguments,2),d=0,e=this.children.length;e>d;d++)this.children[d].exists===b&&this.children[d][a]&&this.children[d][a].apply(this.children[d],c)},b.Group.prototype.callbackFromArray=function(a,b,c){if(1==c){if(a[b[0]])return a[b[0]]}else if(2==c){if(a[b[0]][b[1]])return a[b[0]][b[1]]}else if(3==c){if(a[b[0]][b[1]][b[2]])return a[b[0]][b[1]][b[2]]}else if(4==c){if(a[b[0]][b[1]][b[2]][b[3]])return a[b[0]][b[1]][b[2]][b[3]]}else if(a[b])return a[b];return!1},b.Group.prototype.callAll=function(a,b){if("undefined"!=typeof a){a=a.split(".");var c=a.length;if("undefined"==typeof b||null===b||""===b)b=null;else if("string"==typeof b){b=b.split(".");var d=b.length}for(var e=Array.prototype.splice.call(arguments,2),f=null,g=null,h=0,i=this.children.length;i>h;h++)f=this.callbackFromArray(this.children[h],a,c),b&&f?(g=this.callbackFromArray(this.children[h],b,d),f&&f.apply(g,e)):f&&f.apply(this.children[h],e)}},b.Group.prototype.preUpdate=function(){if(!this.exists||!this.parent.exists)return this.renderOrderID=-1,!1;for(var a=this.children.length;a--;)this.children[a].preUpdate();return!0},b.Group.prototype.update=function(){for(var a=this.children.length;a--;)this.children[a].update()},b.Group.prototype.postUpdate=function(){1===this._cache[7]&&(this.x=this.game.camera.view.x+this.cameraOffset.x,this.y=this.game.camera.view.y+this.cameraOffset.y);for(var a=this.children.length;a--;)this.children[a].postUpdate()},b.Group.prototype.forEach=function(a,b,c){"undefined"==typeof c&&(c=!1);var d=Array.prototype.splice.call(arguments,3);d.unshift(null);for(var e=0,f=this.children.length;f>e;e++)(!c||c&&this.children[e].exists)&&(d[0]=this.children[e],a.apply(b,d))},b.Group.prototype.forEachExists=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("exists",!0,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.forEachAlive=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("alive",!0,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.forEachDead=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("alive",!1,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.sort=function(a,c){this.children.length<2||("undefined"==typeof a&&(a="z"),"undefined"==typeof c&&(c=b.Group.SORT_ASCENDING),this._sortProperty=a,this.children.sort(c===b.Group.SORT_ASCENDING?this.ascendingSortHandler.bind(this):this.descendingSortHandler.bind(this)),this.updateZ())},b.Group.prototype.customSort=function(a,b){this.children.length<2||(this.children.sort(a.bind(b)),this.updateZ())},b.Group.prototype.ascendingSortHandler=function(a,b){return a[this._sortProperty]b[this._sortProperty]?1:a.zb[this._sortProperty]?-1:0},b.Group.prototype.iterate=function(a,c,d,e,f,g){if(d===b.Group.RETURN_TOTAL&&0===this.children.length)return 0;"undefined"==typeof e&&(e=!1);for(var h=0,i=0,j=this.children.length;j>i;i++)if(this.children[i][a]===c&&(h++,e&&(g[0]=this.children[i],e.apply(f,g)),d===b.Group.RETURN_CHILD))return this.children[i];return d===b.Group.RETURN_TOTAL?h:d===b.Group.RETURN_CHILD?null:void 0},b.Group.prototype.getFirstExists=function(a){return"boolean"!=typeof a&&(a=!0),this.iterate("exists",a,b.Group.RETURN_CHILD)},b.Group.prototype.getFirstAlive=function(){return this.iterate("alive",!0,b.Group.RETURN_CHILD)},b.Group.prototype.getFirstDead=function(){return this.iterate("alive",!1,b.Group.RETURN_CHILD)},b.Group.prototype.getTop=function(){return this.children.length>0?this.children[this.children.length-1]:void 0},b.Group.prototype.getBottom=function(){return this.children.length>0?this.children[0]:void 0},b.Group.prototype.countLiving=function(){return this.iterate("alive",!0,b.Group.RETURN_TOTAL)},b.Group.prototype.countDead=function(){return this.iterate("alive",!1,b.Group.RETURN_TOTAL)},b.Group.prototype.getRandom=function(a,b){return 0===this.children.length?null:(a=a||0,b=b||this.children.length,this.game.math.getRandom(this.children,a,b))},b.Group.prototype.remove=function(a,b){if("undefined"==typeof b&&(b=!1),0===this.children.length||-1===this.children.indexOf(a))return!1;a.events&&a.events.onRemovedFromGroup.dispatch(a,this);var c=this.removeChild(a);return this.updateZ(),this.cursor===a&&this.next(),b&&c&&c.destroy(!0),!0},b.Group.prototype.removeAll=function(a){if("undefined"==typeof a&&(a=!1),0!==this.children.length){do{this.children[0].events&&this.children[0].events.onRemovedFromGroup.dispatch(this.children[0],this);var b=this.removeChild(this.children[0]);a&&b&&b.destroy(!0)}while(this.children.length>0);this.cursor=null}},b.Group.prototype.removeBetween=function(a,b,c){if("undefined"==typeof b&&(b=this.children.length),"undefined"==typeof c&&(c=!1),0!==this.children.length){if(a>b||0>a||b>this.children.length)return!1;for(var d=b;d>=a;){this.children[d].events&&this.children[d].events.onRemovedFromGroup.dispatch(this.children[d],this);var e=this.removeChild(this.children[d]);c&&e&&e.destroy(!0),this.cursor===this.children[d]&&(this.cursor=null),d--}this.updateZ()}},b.Group.prototype.destroy=function(a,b){null!==this.game&&("undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!1),this.removeAll(a),this.cursor=null,b||(this.parent&&this.parent.removeChild(this),this.game=null,this.exists=!1))},Object.defineProperty(b.Group.prototype,"total",{get:function(){return this.iterate("exists",!0,b.Group.RETURN_TOTAL)}}),Object.defineProperty(b.Group.prototype,"length",{get:function(){return this.children.length}}),Object.defineProperty(b.Group.prototype,"angle",{get:function(){return b.Math.radToDeg(this.rotation)},set:function(a){this.rotation=b.Math.degToRad(a)}}),Object.defineProperty(b.Group.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),b.World=function(a){b.Group.call(this,a,null,"__world",!1),this.bounds=new b.Rectangle(0,0,a.width,a.height),this.camera=null},b.World.prototype=Object.create(b.Group.prototype),b.World.prototype.constructor=b.World,b.World.prototype.boot=function(){this.camera=new b.Camera(this.game,0,0,0,this.game.width,this.game.height),this.camera.displayObject=this,this.camera.scale=this.scale,this.game.camera=this.camera,this.game.stage.addChild(this)},b.World.prototype.setBounds=function(a,b,c,d){cthis.bounds.right&&(a.x=this.bounds.left),a._currentBounds.bottomthis.bounds.bottom&&(a.y=this.bounds.top)):(a.x+bthis.bounds.right&&(a.x=this.bounds.left-b),a.y+bthis.bounds.bottom&&(a.y=this.bounds.top-b))},Object.defineProperty(b.World.prototype,"width",{get:function(){return this.bounds.width},set:function(a){this.bounds.width=a}}),Object.defineProperty(b.World.prototype,"height",{get:function(){return this.bounds.height},set:function(a){this.bounds.height=a}}),Object.defineProperty(b.World.prototype,"centerX",{get:function(){return this.bounds.halfWidth}}),Object.defineProperty(b.World.prototype,"centerY",{get:function(){return this.bounds.halfHeight}}),Object.defineProperty(b.World.prototype,"randomX",{get:function(){return this.bounds.x<0?this.game.rnd.integerInRange(this.bounds.x,this.bounds.width-Math.abs(this.bounds.x)):this.game.rnd.integerInRange(this.bounds.x,this.bounds.width)}}),Object.defineProperty(b.World.prototype,"randomY",{get:function(){return this.bounds.y<0?this.game.rnd.integerInRange(this.bounds.y,this.bounds.height-Math.abs(this.bounds.y)):this.game.rnd.integerInRange(this.bounds.y,this.bounds.height)}}),b.ScaleManager=function(a,c,d){this.game=a,this.width=c,this.height=d,this.minWidth=null,this.maxWidth=null,this.minHeight=null,this.maxHeight=null,this.forceLandscape=!1,this.forcePortrait=!1,this.incorrectOrientation=!1,this.pageAlignHorizontally=!1,this.pageAlignVertically=!1,this.maxIterations=5,this.orientationSprite=null,this.enterLandscape=new b.Signal,this.enterPortrait=new b.Signal,this.enterIncorrectOrientation=new b.Signal,this.leaveIncorrectOrientation=new b.Signal,this.hasResized=new b.Signal,this.fullScreenTarget=this.game.canvas,this.enterFullScreen=new b.Signal,this.leaveFullScreen=new b.Signal,this.orientation=0,window.orientation?this.orientation=window.orientation:window.outerWidth>window.outerHeight&&(this.orientation=90),this.scaleFactor=new b.Point(1,1),this.scaleFactorInversed=new b.Point(1,1),this.margin=new b.Point(0,0),this.aspectRatio=0,this.sourceAspectRatio=c/d,this.event=null,this.scaleMode=b.ScaleManager.NO_SCALE,this.fullScreenScaleMode=b.ScaleManager.NO_SCALE,this._startHeight=0,this._width=0,this._height=0;var e=this;window.addEventListener("orientationchange",function(a){return e.checkOrientation(a)},!1),window.addEventListener("resize",function(a){return e.checkResize(a)},!1),document.addEventListener("webkitfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("mozfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("fullscreenchange",function(a){return e.fullScreenChange(a)},!1)},b.ScaleManager.EXACT_FIT=0,b.ScaleManager.NO_SCALE=1,b.ScaleManager.SHOW_ALL=2,b.ScaleManager.prototype={startFullScreen:function(a){!this.isFullScreen&&this.game.device.fullscreen&&("undefined"!=typeof a&&this.game.renderType===b.CANVAS&&(this.game.stage.smoothed=a),this._width=this.width,this._height=this.height,this.game.device.fullscreenKeyboard?this.fullScreenTarget[this.game.device.requestFullscreen](Element.ALLOW_KEYBOARD_INPUT):this.fullScreenTarget[this.game.device.requestFullscreen]())},stopFullScreen:function(){this.fullScreenTarget[this.game.device.cancelFullscreen]()},fullScreenChange:function(a){this.event=a,this.isFullScreen?(this.fullScreenScaleMode===b.ScaleManager.EXACT_FIT?(this.fullScreenTarget.style.width="100%",this.fullScreenTarget.style.height="100%",this.width=window.outerWidth,this.height=window.outerHeight,this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height,this.checkResize()):this.fullScreenScaleMode===b.ScaleManager.SHOW_ALL&&(this.setShowAll(),this.refresh()),this.enterFullScreen.dispatch(this.width,this.height)):(this.fullScreenTarget.style.width=this.game.width+"px",this.fullScreenTarget.style.height=this.game.height+"px",this.width=this._width,this.height=this._height,this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height,this.leaveFullScreen.dispatch(this.width,this.height))},forceOrientation:function(a,c,d){"undefined"==typeof c&&(c=!1),this.forceLandscape=a,this.forcePortrait=c,"undefined"!=typeof d&&((null==d||this.game.cache.checkImageKey(d)===!1)&&(d="__default"),this.orientationSprite=new b.Image(this.game,this.game.width/2,this.game.height/2,PIXI.TextureCache[d]),this.orientationSprite.anchor.set(.5),this.checkOrientationState(),this.incorrectOrientation?(this.orientationSprite.visible=!0,this.game.world.visible=!1):(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.game.stage.addChild(this.orientationSprite))},checkOrientationState:function(){this.incorrectOrientation?(this.forceLandscape&&window.innerWidth>window.innerHeight||this.forcePortrait&&window.innerHeight>window.innerWidth)&&(this.incorrectOrientation=!1,this.leaveIncorrectOrientation.dispatch(),this.orientationSprite&&(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.scaleMode!==b.ScaleManager.NO_SCALE&&this.refresh()):(this.forceLandscape&&window.innerWidthwindow.outerHeight?90:0,this.isLandscape?this.enterLandscape.dispatch(this.orientation,!0,!1):this.enterPortrait.dispatch(this.orientation,!1,!0),this.scaleMode!==b.ScaleManager.NO_SCALE&&this.refresh(),this.checkOrientationState()},refresh:function(){if(this.game.device.iPad===!1&&this.game.device.webApp===!1&&this.game.device.desktop===!1&&(this.game.device.android&&this.game.device.chrome===!1?window.scrollTo(0,1):window.scrollTo(0,0)),null==this._check&&this.maxIterations>0){this._iterations=this.maxIterations;var a=this;this._check=window.setInterval(function(){return a.setScreenSize()},10),this.setScreenSize()}},setScreenSize:function(a){"undefined"==typeof a&&(a=!1),this.game.device.iPad===!1&&this.game.device.webApp===!1&&this.game.device.desktop===!1&&(this.game.device.android&&this.game.device.chrome===!1?window.scrollTo(0,1):window.scrollTo(0,0)),this._iterations--,(a||window.innerHeight>this._startHeight||this._iterations<0)&&(document.documentElement.style.minHeight=window.innerHeight+"px",this.incorrectOrientation===!0?this.setMaximum():this.isFullScreen?this.fullScreenScaleMode==b.ScaleManager.EXACT_FIT?this.setExactFit():this.fullScreenScaleMode==b.ScaleManager.SHOW_ALL&&this.setShowAll():this.scaleMode==b.ScaleManager.EXACT_FIT?this.setExactFit():this.scaleMode==b.ScaleManager.SHOW_ALL&&this.setShowAll(),this.setSize(),clearInterval(this._check),this._check=null)},setSize:function(){this.incorrectOrientation===!1&&(this.maxWidth&&this.width>this.maxWidth&&(this.width=this.maxWidth),this.maxHeight&&this.height>this.maxHeight&&(this.height=this.maxHeight),this.minWidth&&this.widththis.maxWidth?this.maxWidth:a,this.height=this.maxHeight&&b>this.maxHeight?this.maxHeight:b}},b.ScaleManager.prototype.constructor=b.ScaleManager,Object.defineProperty(b.ScaleManager.prototype,"isFullScreen",{get:function(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement}}),Object.defineProperty(b.ScaleManager.prototype,"isPortrait",{get:function(){return 0===this.orientation||180==this.orientation}}),Object.defineProperty(b.ScaleManager.prototype,"isLandscape",{get:function(){return 90===this.orientation||-90===this.orientation}}),b.Game=function(a,c,d,e,f,g,h,i){this.id=b.GAMES.push(this)-1,this.config=null,this.physicsConfig=i,this.parent="",this.width=800,this.height=600,this.transparent=!1,this.antialias=!0,this.renderer=null,this.renderType=b.AUTO,this.state=null,this.isBooted=!1,this.isRunning=!1,this.raf=null,this.add=null,this.make=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.net=null,this.scale=null,this.sound=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.physics=null,this.rnd=null,this.device=null,this.camera=null,this.canvas=null,this.context=null,this.debug=null,this.particles=null,this.stepping=!1,this.pendingStep=!1,this.stepCount=0,this.onPause=null,this.onResume=null,this.onBlur=null,this.onFocus=null,this._paused=!1,this._codePaused=!1,1===arguments.length&&"object"==typeof arguments[0]?this.parseConfig(arguments[0]):("undefined"!=typeof a&&(this.width=a),"undefined"!=typeof c&&(this.height=c),"undefined"!=typeof d&&(this.renderer=d,this.renderType=d),"undefined"!=typeof e&&(this.parent=e),"undefined"!=typeof g&&(this.transparent=g),"undefined"!=typeof h&&(this.antialias=h),this.rnd=new b.RandomDataGenerator([(Date.now()*Math.random()).toString()]),this.state=new b.StateManager(this,f));var j=this;return this._onBoot=function(){return j.boot()},"complete"===document.readyState||"interactive"===document.readyState?window.setTimeout(this._onBoot,0):(document.addEventListener("DOMContentLoaded",this._onBoot,!1),window.addEventListener("load",this._onBoot,!1)),this},b.Game.prototype={parseConfig:function(a){this.config=a,a.width&&(this.width=b.Utils.parseDimension(a.width,0)),a.height&&(this.height=b.Utils.parseDimension(a.height,1)),a.renderer&&(this.renderer=a.renderer,this.renderType=a.renderer),a.parent&&(this.parent=a.parent),a.transparent&&(this.transparent=a.transparent),a.antialias&&(this.antialias=a.antialias),a.physicsConfig&&(this.physicsConfig=a.physicsConfig);var c=[(Date.now()*Math.random()).toString()];a.seed&&(c=a.seed),this.rnd=new b.RandomDataGenerator(c); -var d=null;a.state&&(d=a.state),this.state=new b.StateManager(this,d)},boot:function(){this.isBooted||(document.body?(document.removeEventListener("DOMContentLoaded",this._onBoot),window.removeEventListener("load",this._onBoot),this.onPause=new b.Signal,this.onResume=new b.Signal,this.onBlur=new b.Signal,this.onFocus=new b.Signal,this.isBooted=!0,this.device=new b.Device(this),this.math=b.Math,this.stage=new b.Stage(this,this.width,this.height),this.scale=new b.ScaleManager(this,this.width,this.height),this.setUpRenderer(),this.device.checkFullScreenSupport(),this.world=new b.World(this),this.add=new b.GameObjectFactory(this),this.make=new b.GameObjectCreator(this),this.cache=new b.Cache(this),this.load=new b.Loader(this),this.time=new b.Time(this),this.tweens=new b.TweenManager(this),this.input=new b.Input(this),this.sound=new b.SoundManager(this),this.physics=new b.Physics(this,this.physicsConfig),this.particles=new b.Particles(this),this.plugins=new b.PluginManager(this),this.net=new b.Net(this),this.debug=new b.Utils.Debug(this),this.time.boot(),this.stage.boot(),this.world.boot(),this.input.boot(),this.sound.boot(),this.state.boot(),this.debug.boot(),this.showDebugHeader(),this.isRunning=!0,this.raf=this.config&&this.config.forceSetTimeOut?new b.RequestAnimationFrame(this,this.config.forceSetTimeOut):new b.RequestAnimationFrame(this,!1),this.raf.start()):window.setTimeout(this._onBoot,20))},showDebugHeader:function(){var a=b.DEV_VERSION,c="Canvas",d="HTML Audio",e=1;if(this.renderType===b.WEBGL?(c="WebGL",e++):this.renderType==b.HEADLESS&&(c="Headless"),this.device.webAudio&&(d="WebAudio",e++),this.device.chrome){for(var f=["%c %c %c Phaser v"+a+" - "+c+" - "+d+" %c %c http://phaser.io %c %c ♥%c♥%c♥ ","background: #0cf300","background: #00bc17","color: #ffffff; background: #00711f;","background: #00bc17","background: #0cf300","background: #00bc17"],g=0;3>g;g++)f.push(e>g?"color: #ff2424; background: #fff":"color: #959595; background: #fff");console.log.apply(console,f)}else console.log("Phaser v"+a+" - Renderer: "+c+" - Audio: "+d+" - http://phaser.io")},setUpRenderer:function(){if(this.device.trident&&(this.renderType=b.CANVAS),this.renderType===b.HEADLESS||this.renderType===b.CANVAS||this.renderType===b.AUTO&&this.device.webGL===!1){if(!this.device.canvas)throw new Error("Phaser.Game - cannot create Canvas or WebGL context, aborting.");this.renderType===b.AUTO&&(this.renderType=b.CANVAS),this.renderer=new PIXI.CanvasRenderer(this.width,this.height,this.canvas,this.transparent),this.context=this.renderer.context}else this.renderType=b.WEBGL,this.renderer=new PIXI.WebGLRenderer(this.width,this.height,this.canvas,this.transparent,this.antialias),this.context=null;this.renderType!==b.HEADLESS&&(this.stage.smoothed=this.antialias,b.Canvas.addToDOM(this.canvas,this.parent,!0),b.Canvas.setTouchAction(this.canvas))},update:function(a){this.time.update(a),this._paused||this.pendingStep?this.debug.preUpdate():(this.stepping&&(this.pendingStep=!0),this.debug.preUpdate(),this.physics.preUpdate(),this.state.preUpdate(),this.plugins.preUpdate(),this.stage.preUpdate(),this.state.update(),this.stage.update(),this.tweens.update(),this.sound.update(),this.input.update(),this.physics.update(),this.particles.update(),this.plugins.update(),this.stage.postUpdate(),this.plugins.postUpdate()),this.renderType!=b.HEADLESS&&(this.renderer.render(this.stage),this.plugins.render(),this.state.render(),this.plugins.postRender())},enableStep:function(){this.stepping=!0,this.pendingStep=!1,this.stepCount=0},disableStep:function(){this.stepping=!1,this.pendingStep=!1},step:function(){this.pendingStep=!1,this.stepCount++},destroy:function(){this.raf.stop(),this.input.destroy(),this.state.destroy(),this.physics.destroy(),this.state=null,this.cache=null,this.input=null,this.load=null,this.sound=null,this.stage=null,this.time=null,this.world=null,this.isBooted=!1},gamePaused:function(a){this._paused||(this._paused=!0,this.time.gamePaused(),this.sound.setMute(),this.onPause.dispatch(a))},gameResumed:function(a){this._paused&&!this._codePaused&&(this._paused=!1,this.time.gameResumed(),this.input.reset(),this.sound.unsetMute(),this.onResume.dispatch(a))},focusLoss:function(a){this.onBlur.dispatch(a),this.gamePaused(a)},focusGain:function(a){this.onFocus.dispatch(a),this.gameResumed(a)}},b.Game.prototype.constructor=b.Game,Object.defineProperty(b.Game.prototype,"paused",{get:function(){return this._paused},set:function(a){a===!0?this._paused===!1&&(this._paused=!0,this._codePaused=!0,this.sound.mute=!0,this.time.gamePaused(),this.onPause.dispatch(this)):this._paused&&(this._paused=!1,this._codePaused=!1,this.input.reset(),this.sound.mute=!1,this.time.gameResumed(),this.onResume.dispatch(this))}}),b.Input=function(a){this.game=a,this.hitCanvas=null,this.hitContext=null,this.moveCallback=null,this.moveCallbackContext=this,this.pollRate=0,this.disabled=!1,this.multiInputOverride=b.Input.MOUSE_TOUCH_COMBINE,this.position=null,this.speed=null,this.circle=null,this.scale=null,this.maxPointers=10,this.currentPointers=0,this.tapRate=200,this.doubleTapRate=300,this.holdRate=2e3,this.justPressedRate=200,this.justReleasedRate=200,this.recordPointerHistory=!1,this.recordRate=100,this.recordLimit=100,this.pointer1=null,this.pointer2=null,this.pointer3=null,this.pointer4=null,this.pointer5=null,this.pointer6=null,this.pointer7=null,this.pointer8=null,this.pointer9=null,this.pointer10=null,this.activePointer=null,this.mousePointer=null,this.mouse=null,this.keyboard=null,this.touch=null,this.mspointer=null,this.gamepad=null,this.resetLocked=!1,this.onDown=null,this.onUp=null,this.onTap=null,this.onHold=null,this.interactiveItems=new b.LinkedList,this._localPoint=new b.Point,this._pollCounter=0,this._oldPosition=null,this._x=0,this._y=0},b.Input.MOUSE_OVERRIDES_TOUCH=0,b.Input.TOUCH_OVERRIDES_MOUSE=1,b.Input.MOUSE_TOUCH_COMBINE=2,b.Input.prototype={boot:function(){this.mousePointer=new b.Pointer(this.game,0),this.pointer1=new b.Pointer(this.game,1),this.pointer2=new b.Pointer(this.game,2),this.mouse=new b.Mouse(this.game),this.keyboard=new b.Keyboard(this.game),this.touch=new b.Touch(this.game),this.mspointer=new b.MSPointer(this.game),this.gamepad=new b.Gamepad(this.game),this.onDown=new b.Signal,this.onUp=new b.Signal,this.onTap=new b.Signal,this.onHold=new b.Signal,this.scale=new b.Point(1,1),this.speed=new b.Point,this.position=new b.Point,this._oldPosition=new b.Point,this.circle=new b.Circle(0,0,44),this.activePointer=this.mousePointer,this.currentPointers=0,this.hitCanvas=document.createElement("canvas"),this.hitCanvas.width=1,this.hitCanvas.height=1,this.hitContext=this.hitCanvas.getContext("2d"),this.mouse.start(),this.keyboard.start(),this.touch.start(),this.mspointer.start(),this.mousePointer.active=!0},destroy:function(){this.mouse.stop(),this.keyboard.stop(),this.touch.stop(),this.mspointer.stop(),this.gamepad.stop(),this.moveCallback=null},setMoveCallback:function(a,b){this.moveCallback=a,this.moveCallbackContext=b},addPointer:function(){for(var a=0,c=10;c>0;c--)null===this["pointer"+c]&&(a=c);return 0===a?(console.warn("You can only have 10 Pointer objects"),null):(this["pointer"+a]=new b.Pointer(this.game,a),this["pointer"+a])},update:function(){return this.keyboard.update(),this.pollRate>0&&this._pollCounter=c;c++)this["pointer"+c]&&this["pointer"+c].reset();this.currentPointers=0,"none"!==this.game.canvas.style.cursor&&(this.game.canvas.style.cursor="inherit"),a&&(this.onDown.dispose(),this.onUp.dispose(),this.onTap.dispose(),this.onHold.dispose(),this.onDown=new b.Signal,this.onUp=new b.Signal,this.onTap=new b.Signal,this.onHold=new b.Signal,this.interactiveItems.callAll("reset")),this._pollCounter=0}},resetSpeed:function(a,b){this._oldPosition.setTo(a,b),this.speed.setTo(0,0)},startPointer:function(a){if(this.maxPointers<10&&this.totalActivePointers==this.maxPointers)return null;if(this.pointer1.active===!1)return this.pointer1.start(a);if(this.pointer2.active===!1)return this.pointer2.start(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active===!1)return this["pointer"+b].start(a);return null},updatePointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.move(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.move(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].move(a);return null},stopPointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.stop(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.stop(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].stop(a);return null},getPointer:function(a){if(a=a||!1,this.pointer1.active==a)return this.pointer1;if(this.pointer2.active==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active==a)return this["pointer"+b];return null},getPointerFromIdentifier:function(a){if(this.pointer1.identifier==a)return this.pointer1;if(this.pointer2.identifier==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].identifier==a)return this["pointer"+b];return null},getLocalPosition:function(a,c,d){"undefined"==typeof d&&(d=new b.Point);var e=a.worldTransform,f=1/(e.a*e.d+e.b*-e.c);return d.setTo(e.d*f*c.x+-e.b*f*c.y+(e.ty*e.b-e.tx*e.d)*f,e.a*f*c.y+-e.c*f*c.x+(-e.ty*e.a+e.tx*e.c)*f)},hitTest:function(a,c,d){if(!a.worldVisible)return!1;if(this.getLocalPosition(a,c,this._localPoint),d.copyFrom(this._localPoint),a.hitArea&&a.hitArea.contains)return a.hitArea.contains(this._localPoint.x,this._localPoint.y)?!0:!1;if(a instanceof b.TileSprite){var e=a.width,f=a.height,g=-e*a.anchor.x;if(this._localPoint.x>g&&this._localPoint.xh&&this._localPoint.yg&&this._localPoint.xh&&this._localPoint.yi;i++)if(this.hitTest(a.children[i],c,d))return!0;return!1}},b.Input.prototype.constructor=b.Input,Object.defineProperty(b.Input.prototype,"x",{get:function(){return this._x},set:function(a){this._x=Math.floor(a)}}),Object.defineProperty(b.Input.prototype,"y",{get:function(){return this._y},set:function(a){this._y=Math.floor(a)}}),Object.defineProperty(b.Input.prototype,"pollLocked",{get:function(){return this.pollRate>0&&this._pollCounter=a;a++)this["pointer"+a]&&this["pointer"+a].active&&this.currentPointers++;return this.currentPointers}}),Object.defineProperty(b.Input.prototype,"worldX",{get:function(){return this.game.camera.view.x+this.x}}),Object.defineProperty(b.Input.prototype,"worldY",{get:function(){return this.game.camera.view.y+this.y}}),b.Key=function(a,c){this.game=a,this.enabled=!0,this.event=null,this.isDown=!1,this.isUp=!0,this.altKey=!1,this.ctrlKey=!1,this.shiftKey=!1,this.timeDown=0,this.duration=0,this.timeUp=-2500,this.repeats=0,this.keyCode=c,this.onDown=new b.Signal,this.onHoldCallback=null,this.onHoldContext=null,this.onUp=new b.Signal},b.Key.prototype={update:function(){this.enabled&&this.isDown&&(this.duration=this.game.time.now-this.timeDown,this.repeats++,this.onHoldCallback&&this.onHoldCallback.call(this.onHoldContext,this))},processKeyDown:function(a){this.enabled&&(this.event=a,this.isDown||(this.altKey=a.altKey,this.ctrlKey=a.ctrlKey,this.shiftKey=a.shiftKey,this.isDown=!0,this.isUp=!1,this.timeDown=this.game.time.now,this.duration=0,this.repeats=0,this.onDown.dispatch(this)))},processKeyUp:function(a){this.enabled&&(this.event=a,this.isUp||(this.isDown=!1,this.isUp=!0,this.timeUp=this.game.time.now,this.duration=this.game.time.now-this.timeDown,this.onUp.dispatch(this)))},reset:function(a){"undefined"==typeof a&&(a=!0),this.isDown=!1,this.isUp=!0,this.timeUp=this.game.time.now,this.duration=this.game.time.now-this.timeDown,this.enabled=!0,a&&(this.onDown.removeAll(),this.onUp.removeAll(),this.onHoldCallback=null,this.onHoldContext=null)},justPressed:function(a){return"undefined"==typeof a&&(a=2500),this.isDown&&this.duration=this.game.input.holdRate&&((this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&this.game.input.onHold.dispatch(this),this._holdSent=!0),this.game.input.recordPointerHistory&&this.game.time.now>=this._nextDrop&&(this._nextDrop=this.game.time.now+this.game.input.recordRate,this._history.push({x:this.position.x,y:this.position.y}),this._history.length>this.game.input.recordLimit&&this._history.shift()))},move:function(a,c){if(!this.game.input.pollLocked){if("undefined"==typeof c&&(c=!1),"undefined"!=typeof a.button&&(this.button=a.button),this.clientX=a.clientX,this.clientY=a.clientY,this.pageX=a.pageX,this.pageY=a.pageY,this.screenX=a.screenX,this.screenY=a.screenY,this.x=(this.pageX-this.game.stage.offset.x)*this.game.input.scale.x,this.y=(this.pageY-this.game.stage.offset.y)*this.game.input.scale.y,this.position.setTo(this.x,this.y),this.circle.x=this.x,this.circle.y=this.y,(this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.activePointer=this,this.game.input.x=this.x,this.game.input.y=this.y,this.game.input.position.setTo(this.game.input.x,this.game.input.y),this.game.input.circle.x=this.game.input.x,this.game.input.circle.y=this.game.input.y),this.game.paused)return this;if(this.game.input.moveCallback&&this.game.input.moveCallback.call(this.game.input.moveCallbackContext,this,this.x,this.y),null!==this.targetObject&&this.targetObject.isDragged===!0)return this.targetObject.update(this)===!1&&(this.targetObject=null),this;if(this._highestRenderOrderID=Number.MAX_SAFE_INTEGER,this._highestRenderObject=null,this._highestInputPriorityID=-1,this.game.input.interactiveItems.total>0){var d=this.game.input.interactiveItems.next;do d.validForInput(this._highestInputPriorityID,this._highestRenderOrderID)&&(!c&&d.checkPointerOver(this)||c&&d.checkPointerDown(this))&&(this._highestRenderOrderID=d.sprite._cache[3],this._highestInputPriorityID=d.priorityID,this._highestRenderObject=d),d=d.next;while(null!=d)}return null===this._highestRenderObject?this.targetObject&&(this.targetObject._pointerOutHandler(this),this.targetObject=null):null===this.targetObject?(this.targetObject=this._highestRenderObject,this._highestRenderObject._pointerOverHandler(this)):this.targetObject===this._highestRenderObject?this._highestRenderObject.update(this)===!1&&(this.targetObject=null):(this.targetObject._pointerOutHandler(this),this.targetObject=this._highestRenderObject,this.targetObject._pointerOverHandler(this)),this}},leave:function(a){this.withinGame=!1,this.move(a,!1)},stop:function(a){if(this._stateReset)return void a.preventDefault();if(this.timeUp=this.game.time.now,(this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.onUp.dispatch(this,a),this.duration>=0&&this.duration<=this.game.input.tapRate&&(this.timeUp-this.previousTapTime0&&(this.active=!1),this.withinGame=!1,this.isDown=!1,this.isUp=!0,this.positionUp.setTo(this.x,this.y),this.isMouse===!1&&this.game.input.currentPointers--,this.game.input.interactiveItems.total>0){var c=this.game.input.interactiveItems.next;do c&&c._releasedHandler(this),c=c.next;while(null!=c)}return this.targetObject&&this.targetObject._releasedHandler(this),this.targetObject=null,this},justPressed:function(a){return a=a||this.game.input.justPressedRate,this.isDown===!0&&this.timeDown+a>this.game.time.now},justReleased:function(a){return a=a||this.game.input.justReleasedRate,this.isUp===!0&&this.timeUp+a>this.game.time.now},reset:function(){this.isMouse===!1&&(this.active=!1),this.identifier=null,this.isDown=!1,this.isUp=!0,this.totalTouches=0,this._holdSent=!1,this._history.length=0,this._stateReset=!0,this.targetObject&&this.targetObject._releasedHandler(this),this.targetObject=null}},b.Pointer.prototype.constructor=b.Pointer,Object.defineProperty(b.Pointer.prototype,"duration",{get:function(){return this.isUp?-1:this.game.time.now-this.timeDown}}),Object.defineProperty(b.Pointer.prototype,"worldX",{get:function(){return this.game.world.camera.x+this.x}}),Object.defineProperty(b.Pointer.prototype,"worldY",{get:function(){return this.game.world.camera.y+this.y}}),b.Touch=function(a){this.game=a,this.disabled=!1,this.callbackContext=this.game,this.touchStartCallback=null,this.touchMoveCallback=null,this.touchEndCallback=null,this.touchEnterCallback=null,this.touchLeaveCallback=null,this.touchCancelCallback=null,this.preventDefault=!0,this.event=null,this._onTouchStart=null,this._onTouchMove=null,this._onTouchEnd=null,this._onTouchEnter=null,this._onTouchLeave=null,this._onTouchCancel=null,this._onTouchMove=null},b.Touch.prototype={start:function(){if(null===this._onTouchStart){var a=this;this.game.device.touch&&(this._onTouchStart=function(b){return a.onTouchStart(b)},this._onTouchMove=function(b){return a.onTouchMove(b)},this._onTouchEnd=function(b){return a.onTouchEnd(b)},this._onTouchEnter=function(b){return a.onTouchEnter(b)},this._onTouchLeave=function(b){return a.onTouchLeave(b)},this._onTouchCancel=function(b){return a.onTouchCancel(b)},this.game.canvas.addEventListener("touchstart",this._onTouchStart,!1),this.game.canvas.addEventListener("touchmove",this._onTouchMove,!1),this.game.canvas.addEventListener("touchend",this._onTouchEnd,!1),this.game.canvas.addEventListener("touchenter",this._onTouchEnter,!1),this.game.canvas.addEventListener("touchleave",this._onTouchLeave,!1),this.game.canvas.addEventListener("touchcancel",this._onTouchCancel,!1))}},consumeDocumentTouches:function(){this._documentTouchMove=function(a){a.preventDefault()},document.addEventListener("touchmove",this._documentTouchMove,!1)},onTouchStart:function(a){if(this.event=a,this.touchStartCallback&&this.touchStartCallback.call(this.callbackContext,a),!this.game.input.disabled&&!this.disabled){this.preventDefault&&a.preventDefault();for(var b=0;b0&&e>this.deadZone||0>e&&e<-this.deadZone?{axis:d,value:e}:{axis:d,value:0})}this._prevTimestamp=this._rawPad.timestamp}},connect:function(a){var b=!this._connected;this._index=a.index,this._connected=!0,this._rawPad=a,this._rawButtons=a.buttons,this._axes=a.axes,b&&this._padParent.onConnectCallback&&this._padParent.onConnectCallback.call(this._padParent.callbackContext,this._index),b&&this.onConnectCallback&&this.onConnectCallback.call(this.callbackContext)},disconnect:function(){var a=this._connected;this._connected=!1,this._rawPad=void 0,this._rawButtons=[],this._buttons=[];var b=this._index;this._index=null,a&&this._padParent.onDisconnectCallback&&this._padParent.onDisconnectCallback.call(this._padParent.callbackContext,b),a&&this.onDisconnectCallback&&this.onDisconnectCallback.call(this.callbackContext)},processAxisChange:function(a){this.game.input.disabled||this.game.input.gamepad.disabled||this._axes[a.axis]!==a.value&&(this._axes[a.axis]=a.value,this._padParent.onAxisCallback&&this._padParent.onAxisCallback.call(this._padParent.callbackContext,a,this._index),this.onAxisCallback&&this.onAxisCallback.call(this.callbackContext,a))},processButtonDown:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onDownCallback&&this._padParent.onDownCallback.call(this._padParent.callbackContext,a,b,this._index),this.onDownCallback&&this.onDownCallback.call(this.callbackContext,a,b),this._buttons[a]&&this._buttons[a].isDown?this._buttons[a].duration=this.game.time.now-this._buttons[a].timeDown:this._buttons[a]?(this._buttons[a].isDown=!0,this._buttons[a].timeDown=this.game.time.now,this._buttons[a].duration=0,this._buttons[a].value=b):this._buttons[a]={isDown:!0,timeDown:this.game.time.now,timeUp:0,duration:0,value:b},this._hotkeys[a]&&this._hotkeys[a].processButtonDown(b))},processButtonUp:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onUpCallback&&this._padParent.onUpCallback.call(this._padParent.callbackContext,a,b,this._index),this.onUpCallback&&this.onUpCallback.call(this.callbackContext,a,b),this._hotkeys[a]&&this._hotkeys[a].processButtonUp(b),this._buttons[a]?(this._buttons[a].isDown=!1,this._buttons[a].timeUp=this.game.time.now,this._buttons[a].value=b):this._buttons[a]={isDown:!1,timeDown:this.game.time.now,timeUp:this.game.time.now,duration:0,value:b})},processButtonFloat:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onFloatCallback&&this._padParent.onFloatCallback.call(this._padParent.callbackContext,a,b,this._index),this.onFloatCallback&&this.onFloatCallback.call(this.callbackContext,a,b),this._buttons[a]?this._buttons[a].value=b:this._buttons[a]={value:b},this._hotkeys[a]&&this._hotkeys[a].processButtonFloat(b))},axis:function(a){return this._axes[a]?this._axes[a]:!1},isDown:function(a){return this._buttons[a]?this._buttons[a].isDown:!1},justReleased:function(a,b){return"undefined"==typeof b&&(b=250),this._buttons[a]&&this._buttons[a].isDown===!1&&this.game.time.now-this._buttons[a].timeUpd;d++)this._pointerData[d]={id:d,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1};this.snapOffset=new b.Point,this.enabled=!0,this._wasEnabled=!0,this.sprite.events&&null===this.sprite.events.onInputOver&&(this.sprite.events.onInputOver=new b.Signal,this.sprite.events.onInputOut=new b.Signal,this.sprite.events.onInputDown=new b.Signal,this.sprite.events.onInputUp=new b.Signal,this.sprite.events.onDragStart=new b.Signal,this.sprite.events.onDragStop=new b.Signal)}return this.sprite.events.onAddedToGroup.add(this.addedToGroup,this),this.sprite.events.onRemovedFromGroup.add(this.removedFromGroup,this),this.sprite},addedToGroup:function(){this._wasEnabled&&!this.enabled&&this.start()},removedFromGroup:function(){this.enabled?(this._wasEnabled=!0,this.stop()):this._wasEnabled=!1},reset:function(){this.enabled=!1;for(var a=0;10>a;a++)this._pointerData[a]={id:a,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1}},stop:function(){this.enabled!==!1&&(this.enabled=!1,this.game.input.interactiveItems.remove(this))},destroy:function(){this.enabled&&(this._setHandCursor&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1),this.enabled=!1,this.game.input.interactiveItems.remove(this),this._pointerData.length=0,this.boundsRect=null,this.boundsSprite=null,this.sprite=null)},validForInput:function(a,b){return 0===this.sprite.scale.x||0===this.sprite.scale.y?!1:this.pixelPerfectClick||this.pixelPerfectOver?!0:this.priorityID>a||this.priorityID===a&&this.sprite._cache[3]b;b++)if(this._pointerData[b].isOver)return!0}return!1},pointerOut:function(a){if(this.enabled){if("undefined"!=typeof a)return this._pointerData[a].isOut;for(var b=0;10>b;b++)if(this._pointerData[b].isOut)return!0}return!1},pointerTimeOver:function(a){return a=a||0,this._pointerData[a].timeOver},pointerTimeOut:function(a){return a=a||0,this._pointerData[a].timeOut},pointerDragged:function(a){return a=a||0,this._pointerData[a].isDragged},checkPointerDown:function(a){return this.enabled&&this.sprite&&this.sprite.parent&&this.sprite.visible&&this.sprite.parent.visible&&this.game.input.hitTest(this.sprite,a,this._tempPoint)?this.pixelPerfectClick?this.checkPixel(this._tempPoint.x,this._tempPoint.y):!0:!1},checkPointerOver:function(a){return this.enabled&&this.sprite&&this.sprite.parent&&this.sprite.visible&&this.sprite.parent.visible&&this.game.input.hitTest(this.sprite,a,this._tempPoint)?this.pixelPerfectOver?this.checkPixel(this._tempPoint.x,this._tempPoint.y):!0:!1},checkPixel:function(a,b,c){if(this.sprite.texture.baseTexture.source){if(this.game.input.hitContext.clearRect(0,0,1,1),null===a&&null===b){this.game.input.getLocalPosition(this.sprite,c,this._tempPoint);var a=this._tempPoint.x,b=this._tempPoint.y}0!==this.sprite.anchor.x&&(a-=-this.sprite.texture.frame.width*this.sprite.anchor.x),0!==this.sprite.anchor.y&&(b-=-this.sprite.texture.frame.height*this.sprite.anchor.y),a+=this.sprite.texture.frame.x,b+=this.sprite.texture.frame.y,this.game.input.hitContext.drawImage(this.sprite.texture.baseTexture.source,a,b,1,1,0,0,1,1);var d=this.game.input.hitContext.getImageData(0,0,1,1);if(d.data[3]>=this.pixelPerfectAlpha)return!0}return!1},update:function(a){return null!==this.sprite&&void 0!==this.sprite.parent?this.enabled&&this.sprite.visible&&this.sprite.parent.visible?this.draggable&&this._draggedPointerID==a.id?this.updateDrag(a):this._pointerData[a.id].isOver===!0?this.checkPointerOver(a)?(this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,!0):(this._pointerOutHandler(a),!1):void 0:(this._pointerOutHandler(a),!1):void 0},_pointerOverHandler:function(a){null!==this.sprite&&this._pointerData[a.id].isOver===!1&&(this._pointerData[a.id].isOver=!0,this._pointerData[a.id].isOut=!1,this._pointerData[a.id].timeOver=this.game.time.now,this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.canvas.style.cursor="pointer",this._setHandCursor=!1),this.sprite.events.onInputOver.dispatch(this.sprite,a))},_pointerOutHandler:function(a){null!==this.sprite&&(this._pointerData[a.id].isOver=!1,this._pointerData[a.id].isOut=!0,this._pointerData[a.id].timeOut=this.game.time.now,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1),this.sprite&&this.sprite.events&&this.sprite.events.onInputOut.dispatch(this.sprite,a))},_touchedHandler:function(a){if(null!==this.sprite){if(this._pointerData[a.id].isDown===!1&&this._pointerData[a.id].isOver===!0){if(this.pixelPerfectClick&&!this.checkPixel(null,null,a))return;this._pointerData[a.id].isDown=!0,this._pointerData[a.id].isUp=!1,this._pointerData[a.id].timeDown=this.game.time.now,this.sprite.events.onInputDown.dispatch(this.sprite,a),this.draggable&&this.isDragged===!1&&this.startDrag(a),this.bringToTop&&this.sprite.bringToTop()}return this.consumePointerEvent}},_releasedHandler:function(a){null!==this.sprite&&this._pointerData[a.id].isDown&&a.isUp&&(this._pointerData[a.id].isDown=!1,this._pointerData[a.id].isUp=!0,this._pointerData[a.id].timeUp=this.game.time.now,this._pointerData[a.id].downDuration=this._pointerData[a.id].timeUp-this._pointerData[a.id].timeDown,this.checkPointerOver(a)?this.sprite.events.onInputUp.dispatch(this.sprite,a,!0):(this.sprite.events.onInputUp.dispatch(this.sprite,a,!1),this.useHandCursor&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1)),this.draggable&&this.isDragged&&this._draggedPointerID==a.id&&this.stopDrag(a))},updateDrag:function(a){return a.isUp?(this.stopDrag(a),!1):(this.sprite.fixedToCamera?(this.allowHorizontalDrag&&(this.sprite.cameraOffset.x=a.x+this._dragPoint.x+this.dragOffset.x),this.allowVerticalDrag&&(this.sprite.cameraOffset.y=a.y+this._dragPoint.y+this.dragOffset.y),this.boundsRect&&this.checkBoundsRect(),this.boundsSprite&&this.checkBoundsSprite(),this.snapOnDrag&&(this.sprite.cameraOffset.x=Math.round((this.sprite.cameraOffset.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.cameraOffset.y=Math.round((this.sprite.cameraOffset.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)):(this.allowHorizontalDrag&&(this.sprite.x=a.x+this._dragPoint.x+this.dragOffset.x),this.allowVerticalDrag&&(this.sprite.y=a.y+this._dragPoint.y+this.dragOffset.y),this.boundsRect&&this.checkBoundsRect(),this.boundsSprite&&this.checkBoundsSprite(),this.snapOnDrag&&(this.sprite.x=Math.round((this.sprite.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.y=Math.round((this.sprite.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)),!0)},justOver:function(a,b){return a=a||0,b=b||500,this._pointerData[a].isOver&&this.overDuration(a)a;a++)this._pointerData[a].isDragged=!1;this.draggable=!1,this.isDragged=!1,this._draggedPointerID=-1},startDrag:function(a){if(this.isDragged=!0,this._draggedPointerID=a.id,this._pointerData[a.id].isDragged=!0,this.sprite.fixedToCamera)this.dragFromCenter?(this.sprite.centerOn(a.x,a.y),this._dragPoint.setTo(this.sprite.cameraOffset.x-a.x,this.sprite.cameraOffset.y-a.y)):this._dragPoint.setTo(this.sprite.cameraOffset.x-a.x,this.sprite.cameraOffset.y-a.y);else if(this.dragFromCenter){var b=this.sprite.getBounds();this.sprite.x=a.x+(this.sprite.x-b.centerX),this.sprite.y=a.y+(this.sprite.y-b.centerY),this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y)}else this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y);this.updateDrag(a),this.bringToTop&&this.sprite.bringToTop(),this.sprite.events.onDragStart.dispatch(this.sprite,a)},stopDrag:function(a){this.isDragged=!1,this._draggedPointerID=-1,this._pointerData[a.id].isDragged=!1,this.snapOnRelease&&(this.sprite.fixedToCamera?(this.sprite.cameraOffset.x=Math.round((this.sprite.cameraOffset.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.cameraOffset.y=Math.round((this.sprite.cameraOffset.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY):(this.sprite.x=Math.round((this.sprite.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.y=Math.round((this.sprite.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)),this.sprite.events.onDragStop.dispatch(this.sprite,a),this.checkPointerOver(a)===!1&&this._pointerOutHandler(a)},setDragLock:function(a,b){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!0),this.allowHorizontalDrag=a,this.allowVerticalDrag=b},enableSnap:function(a,b,c,d,e,f){"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=0),this.snapX=a,this.snapY=b,this.snapOffsetX=e,this.snapOffsetY=f,this.snapOnDrag=c,this.snapOnRelease=d},disableSnap:function(){this.snapOnDrag=!1,this.snapOnRelease=!1},checkBoundsRect:function(){this.sprite.fixedToCamera?(this.sprite.cameraOffset.xthis.boundsRect.right&&(this.sprite.cameraOffset.x=this.boundsRect.right-this.sprite.width),this.sprite.cameraOffset.ythis.boundsRect.bottom&&(this.sprite.cameraOffset.y=this.boundsRect.bottom-this.sprite.height)):(this.sprite.xthis.boundsRect.right&&(this.sprite.x=this.boundsRect.right-this.sprite.width),this.sprite.ythis.boundsRect.bottom&&(this.sprite.y=this.boundsRect.bottom-this.sprite.height))},checkBoundsSprite:function(){this.sprite.fixedToCamera&&this.boundsSprite.fixedToCamera?(this.sprite.cameraOffset.xthis.boundsSprite.camerOffset.x+this.boundsSprite.width&&(this.sprite.cameraOffset.x=this.boundsSprite.camerOffset.x+this.boundsSprite.width-this.sprite.width),this.sprite.cameraOffset.ythis.boundsSprite.camerOffset.y+this.boundsSprite.height&&(this.sprite.cameraOffset.y=this.boundsSprite.camerOffset.y+this.boundsSprite.height-this.sprite.height)):(this.sprite.xthis.boundsSprite.x+this.boundsSprite.width&&(this.sprite.x=this.boundsSprite.x+this.boundsSprite.width-this.sprite.width),this.sprite.ythis.boundsSprite.y+this.boundsSprite.height&&(this.sprite.y=this.boundsSprite.y+this.boundsSprite.height-this.sprite.height))}},b.InputHandler.prototype.constructor=b.InputHandler,b.Events=function(a){this.parent=a,this.onAddedToGroup=new b.Signal,this.onRemovedFromGroup=new b.Signal,this.onKilled=new b.Signal,this.onRevived=new b.Signal,this.onOutOfBounds=new b.Signal,this.onEnterBounds=new b.Signal,this.onInputOver=null,this.onInputOut=null,this.onInputDown=null,this.onInputUp=null,this.onDragStart=null,this.onDragStop=null,this.onAnimationStart=null,this.onAnimationComplete=null,this.onAnimationLoop=null},b.Events.prototype={destroy:function(){this.parent=null,this.onAddedToGroup.dispose(),this.onRemovedFromGroup.dispose(),this.onKilled.dispose(),this.onRevived.dispose(),this.onOutOfBounds.dispose(),this.onInputOver&&(this.onInputOver.dispose(),this.onInputOut.dispose(),this.onInputDown.dispose(),this.onInputUp.dispose(),this.onDragStart.dispose(),this.onDragStop.dispose()),this.onAnimationStart&&(this.onAnimationStart.dispose(),this.onAnimationComplete.dispose(),this.onAnimationLoop.dispose())}},b.Events.prototype.constructor=b.Events,b.GameObjectFactory=function(a){this.game=a,this.world=this.game.world},b.GameObjectFactory.prototype={existing:function(a){return this.world.add(a)},image:function(a,c,d,e,f){return"undefined"==typeof f&&(f=this.world),f.add(new b.Image(this.game,a,c,d,e))},sprite:function(a,b,c,d,e){return"undefined"==typeof e&&(e=this.world),e.create(a,b,c,d)},tween:function(a){return this.game.tweens.create(a)},group:function(a,c,d,e,f){return new b.Group(this.game,a,c,d,e,f)},physicsGroup:function(a,c,d,e){return new b.Group(this.game,c,d,e,!0,a)},spriteBatch:function(a,c,d){return"undefined"==typeof c&&(c="group"),"undefined"==typeof d&&(d=!1),new b.SpriteBatch(this.game,a,c,d)},audio:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},sound:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},tileSprite:function(a,c,d,e,f,g,h){return"undefined"==typeof h&&(h=this.world),h.add(new b.TileSprite(this.game,a,c,d,e,f,g))},text:function(a,c,d,e,f){return"undefined"==typeof f&&(f=this.world),f.add(new b.Text(this.game,a,c,d,e))},button:function(a,c,d,e,f,g,h,i,j,k){return"undefined"==typeof k&&(k=this.world),k.add(new b.Button(this.game,a,c,d,e,f,g,h,i,j))},graphics:function(a,c,d){return"undefined"==typeof d&&(d=this.world),d.add(new b.Graphics(this.game,a,c))},emitter:function(a,c,d){return this.game.particles.add(new b.Particles.Arcade.Emitter(this.game,a,c,d))},retroFont:function(a,c,d,e,f,g,h,i,j){return new b.RetroFont(this.game,a,c,d,e,f,g,h,i,j)},bitmapText:function(a,c,d,e,f,g){return"undefined"==typeof g&&(g=this.world),g.add(new b.BitmapText(this.game,a,c,d,e,f))},tilemap:function(a,c,d,e,f){return new b.Tilemap(this.game,a,c,d,e,f)},renderTexture:function(a,c,d,e){("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid()),"undefined"==typeof e&&(e=!1);var f=new b.RenderTexture(this.game,a,c,d);return e&&this.game.cache.addRenderTexture(d,f),f},bitmapData:function(a,c,d,e){"undefined"==typeof e&&(e=!1),("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid());var f=new b.BitmapData(this.game,d,a,c);return e&&this.game.cache.addBitmapData(d,f),f},filter:function(a){var c=Array.prototype.splice.call(arguments,1),a=new b.Filter[a](this.game);return a.init.apply(a,c),a}},b.GameObjectFactory.prototype.constructor=b.GameObjectFactory,b.GameObjectCreator=function(a){this.game=a,this.world=this.game.world},b.GameObjectCreator.prototype={image:function(a,c,d,e){return new b.Image(this.game,a,c,d,e)},sprite:function(a,c,d,e){return new b.Sprite(this.game,a,c,d,e)},tween:function(a){return new b.Tween(a,this.game)},group:function(a,c,d,e,f){return new b.Group(this.game,null,c,d,e,f)},spriteBatch:function(a,c,d){return"undefined"==typeof c&&(c="group"),"undefined"==typeof d&&(d=!1),new b.SpriteBatch(this.game,a,c,d)},audio:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},sound:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},tileSprite:function(a,c,d,e,f,g){return new b.TileSprite(this.game,a,c,d,e,f,g)},text:function(a,c,d,e){return new b.Text(this.game,a,c,d,e)},button:function(a,c,d,e,f,g,h,i,j){return new b.Button(this.game,a,c,d,e,f,g,h,i,j)},graphics:function(a,c){return new b.Graphics(this.game,a,c)},emitter:function(a,c,d){return new b.Particles.Arcade.Emitter(this.game,a,c,d)},retroFont:function(a,c,d,e,f,g,h,i,j){return new b.RetroFont(this.game,a,c,d,e,f,g,h,i,j)},bitmapText:function(a,c,d,e,f){return new b.BitmapText(this.game,a,c,d,e,f)},tilemap:function(a,c,d,e,f){return new b.Tilemap(this.game,a,c,d,e,f)},renderTexture:function(a,c,d,e){("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid()),"undefined"==typeof e&&(e=!1);var f=new b.RenderTexture(this.game,a,c,d);return e&&this.game.cache.addRenderTexture(d,f),f},bitmapData:function(a,c,d,e){"undefined"==typeof e&&(e=!1),("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid());var f=new b.BitmapData(this.game,d,a,c);return e&&this.game.cache.addBitmapData(d,f),f},filter:function(a){var c=Array.prototype.splice.call(arguments,1),a=new b.Filter[a](this.game);return a.init.apply(a,c),a}},b.GameObjectCreator.prototype.constructor=b.GameObjectCreator,b.BitmapData=function(a,c,d,e){"undefined"==typeof d&&(d=100),"undefined"==typeof e&&(e=100),this.game=a,this.key=c,this.width=d,this.height=e,this.canvas=b.Canvas.create(d,e,"",!0),this.context=this.canvas.getContext("2d"),this.ctx=this.context,this.imageData=this.context.getImageData(0,0,d,e),this.pixels=this.imageData.data.buffer?this.imageData.data.buffer:this.imageData.data,this.baseTexture=new PIXI.BaseTexture(this.canvas),this.texture=new PIXI.Texture(this.baseTexture),this.textureFrame=new b.Frame(0,0,0,d,e,"bitmapData",a.rnd.uuid()),this.type=b.BITMAPDATA,this.dirty=!1 -},b.BitmapData.prototype={add:function(a){if(Array.isArray(a))for(var b=0;b=0&&a<=this.width&&b>=0&&b<=this.height&&(this.pixels[b*this.width+a]=f<<24|e<<16|d<<8|c,this.context.putImageData(this.imageData,0,0),this.dirty=!0)},setPixel:function(a,b,c,d,e){this.setPixel32(a,b,c,d,e,255)},getPixel:function(a,b){return a>=0&&a<=this.width&&b>=0&&b<=this.height?this.data32[b*this.width+a]:void 0},getPixel32:function(a,b){return a>=0&&a<=this.width&&b>=0&&b<=this.height?this.data32[b*this.width+a]:void 0},getPixels:function(a){return this.context.getImageData(a.x,a.y,a.width,a.height)},copyPixels:function(a,b,c,d){"string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,b.x,b.y,b.width,b.height,c,d,b.width,b.height)},draw:function(a,b,c){"string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,0,0,a.width,a.height,b,c,a.width,a.height)},alphaMask:function(a,b){var c=this.context.globalCompositeOperation;"string"==typeof b&&(b=this.game.cache.getImage(b)),b&&this.context.drawImage(b,0,0),this.context.globalCompositeOperation="source-atop","string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,0,0),this.context.globalCompositeOperation=c},render:function(){this.game.renderType===b.WEBGL&&this.dirty&&(PIXI.updateWebGLTexture(this.baseTexture,this.game.renderer.gl),this.dirty=!1)}},b.BitmapData.prototype.constructor=b.BitmapData,b.Sprite=function(a,c,d,e,f){c=c||0,d=d||0,e=e||null,f=f||null,this.game=a,this.name="",this.type=b.SPRITE,this.z=0,this.events=new b.Events(this),this.animations=new b.AnimationManager(this),this.key=e,this._frame=0,this._frameName="",PIXI.Sprite.call(this,PIXI.TextureCache.__default),this.loadTexture(e,f),this.position.set(c,d),this.world=new b.Point(c,d),this.autoCull=!1,this.input=null,this.body=null,this.health=1,this.lifespan=0,this.checkWorldBounds=!1,this.outOfBoundsKill=!1,this.debug=!1,this.cameraOffset=new b.Point,this._cache=[0,0,0,0,1,0,1,0],this._bounds=new b.Rectangle},b.Sprite.prototype=Object.create(PIXI.Sprite.prototype),b.Sprite.prototype.constructor=b.Sprite,b.Sprite.prototype.preUpdate=function(){if(1===this._cache[4]&&this.exists)return this.world.setTo(this.parent.position.x+this.position.x,this.parent.position.y+this.position.y),this.worldTransform.tx=this.world.x,this.worldTransform.ty=this.world.y,this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,this.body&&this.body.preUpdate(),this._cache[4]=0,!1;if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this._cache[3]=-1,!1;if(this.lifespan>0&&(this.lifespan-=this.game.time.elapsed,this.lifespan<=0))return this.kill(),!1;if((this.autoCull||this.checkWorldBounds)&&this._bounds.copyFrom(this.getBounds()),this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this._bounds)),this.checkWorldBounds)if(1===this._cache[5]&&this.game.world.bounds.intersects(this._bounds))this._cache[5]=0,this.events.onEnterBounds.dispatch(this);else if(0===this._cache[5]&&!this.game.world.bounds.intersects(this._bounds)&&(this._cache[5]=1,this.events.onOutOfBounds.dispatch(this),this.outOfBoundsKill))return this.kill(),!1;this.world.setTo(this.game.camera.x+this.worldTransform.tx,this.game.camera.y+this.worldTransform.ty),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++),this.animations.update(),this.body&&this.body.preUpdate();for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Sprite.prototype.update=function(){},b.Sprite.prototype.postUpdate=function(){this.key instanceof b.BitmapData&&this.key.render(),this.exists&&this.body&&this.body.postUpdate(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,c=this.children.length;c>a;a++)this.children[a].postUpdate()},b.Sprite.prototype.loadTexture=function(a,c){return c=c||0,a instanceof b.RenderTexture?(this.key=a.key,void this.setTexture(a)):a instanceof b.BitmapData?(this.key=a,void this.setTexture(a.texture)):a instanceof PIXI.Texture?(this.key=a,void this.setTexture(a)):null===a||"undefined"==typeof a?(this.key="__default",void this.setTexture(PIXI.TextureCache[this.key])):"string"!=typeof a||this.game.cache.checkImageKey(a)?this.game.cache.isSpriteSheet(a)?(this.key=a,this.animations.loadFrameData(this.game.cache.getFrameData(a)),"string"==typeof c?this.frameName=c:this.frame=c,void 0):(this.key=a,void this.setTexture(PIXI.TextureCache[a])):(this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]))},b.Sprite.prototype.crop=function(a){if("undefined"==typeof a||null===a)this.texture.hasOwnProperty("sourceWidth")&&this.texture.setFrame(new b.Rectangle(0,0,this.texture.sourceWidth,this.texture.sourceHeight));else if(this.texture instanceof PIXI.Texture){var c={};b.Utils.extend(!0,c,this.texture),c.sourceWidth=c.width,c.sourceHeight=c.height,c.frame=a,c.width=a.width,c.height=a.height,this.texture=c,this.texture.updateFrame=!0,PIXI.Texture.frameUpdates.push(this.texture)}else this.texture.setFrame(a)},b.Sprite.prototype.revive=function(a){return"undefined"==typeof a&&(a=1),this.alive=!0,this.exists=!0,this.visible=!0,this.health=a,this.events&&this.events.onRevived.dispatch(this),this},b.Sprite.prototype.kill=function(){return this.alive=!1,this.exists=!1,this.visible=!1,this.events&&this.events.onKilled.dispatch(this),this},b.Sprite.prototype.destroy=function(a){if(null!==this.game){"undefined"==typeof a&&(a=!0),this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.input&&this.input.destroy(),this.animations&&this.animations.destroy(),this.body&&this.body.destroy(),this.events&&this.events.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.alive=!1,this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null}},b.Sprite.prototype.damage=function(a){return this.alive&&(this.health-=a,this.health<=0&&this.kill()),this},b.Sprite.prototype.reset=function(a,b,c){return"undefined"==typeof c&&(c=1),this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.health=c,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this},b.Sprite.prototype.bringToTop=function(){return this.parent&&this.parent.bringToTop(this),this},b.Sprite.prototype.play=function(a,b,c,d){return this.animations?this.animations.play(a,b,c,d):void 0},b.Sprite.prototype.overlap=function(a){return b.Rectangle.intersects(this.getBounds(),a.getBounds())},Object.defineProperty(b.Sprite.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.Sprite.prototype,"deltaX",{get:function(){return this.world.x-this._cache[0]}}),Object.defineProperty(b.Sprite.prototype,"deltaY",{get:function(){return this.world.y-this._cache[1]}}),Object.defineProperty(b.Sprite.prototype,"deltaZ",{get:function(){return this.rotation-this._cache[2]}}),Object.defineProperty(b.Sprite.prototype,"inWorld",{get:function(){return this.game.world.bounds.intersects(this.getBounds())}}),Object.defineProperty(b.Sprite.prototype,"inCamera",{get:function(){return this.game.world.camera.screenView.intersects(this.getBounds())}}),Object.defineProperty(b.Sprite.prototype,"frame",{get:function(){return this.animations.frame},set:function(a){this.animations.frame=a}}),Object.defineProperty(b.Sprite.prototype,"frameName",{get:function(){return this.animations.frameName},set:function(a){this.animations.frameName=a}}),Object.defineProperty(b.Sprite.prototype,"renderOrderID",{get:function(){return this._cache[3]}}),Object.defineProperty(b.Sprite.prototype,"inputEnabled",{get:function(){return this.input&&this.input.enabled},set:function(a){a?null===this.input?(this.input=new b.InputHandler(this),this.input.start()):this.input&&!this.input.enabled&&this.input.start():this.input&&this.input.enabled&&this.input.stop()}}),Object.defineProperty(b.Sprite.prototype,"exists",{get:function(){return!!this._cache[6]},set:function(a){a?(this._cache[6]=1,this.body&&this.body.type===b.Physics.P2JS&&this.body.addToWorld(),this.visible=!0):(this._cache[6]=0,this.body&&this.body.type===b.Physics.P2JS&&this.body.removeFromWorld(),this.visible=!1)}}),Object.defineProperty(b.Sprite.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),Object.defineProperty(b.Sprite.prototype,"smoothed",{get:function(){return!this.texture.baseTexture.scaleMode},set:function(a){a?this.texture&&(this.texture.baseTexture.scaleMode=0):this.texture&&(this.texture.baseTexture.scaleMode=1)}}),Object.defineProperty(b.Sprite.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.Sprite.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),b.Image=function(a,c,d,e,f){c=c||0,d=d||0,e=e||null,f=f||null,this.game=a,this.exists=!0,this.name="",this.type=b.IMAGE,this.z=0,this.events=new b.Events(this),this.key=e,this._frame=0,this._frameName="",PIXI.Sprite.call(this,PIXI.TextureCache.__default),this.loadTexture(e,f),this.position.set(c,d),this.world=new b.Point(c,d),this.autoCull=!1,this.input=null,this.cameraOffset=new b.Point,this._cache=[0,0,0,0,1,0,1,0]},b.Image.prototype=Object.create(PIXI.Sprite.prototype),b.Image.prototype.constructor=b.Image,b.Image.prototype.preUpdate=function(){if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this._cache[3]=-1,!1;this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this.getBounds())),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++);for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Image.prototype.update=function(){},b.Image.prototype.postUpdate=function(){this.key instanceof b.BitmapData&&this.key.render(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,c=this.children.length;c>a;a++)this.children[a].postUpdate()},b.Image.prototype.loadTexture=function(a,c){if(c=c||0,a instanceof b.RenderTexture)return this.key=a.key,void this.setTexture(a);if(a instanceof b.BitmapData)return this.key=a,void this.setTexture(a.texture);if(a instanceof PIXI.Texture)return this.key=a,void this.setTexture(a);if(null===a||"undefined"==typeof a)return this.key="__default",void this.setTexture(PIXI.TextureCache[this.key]);if("string"==typeof a&&!this.game.cache.checkImageKey(a))return this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]);if(this.game.cache.isSpriteSheet(a)){this.key=a;var d=this.game.cache.getFrameData(a);return"string"==typeof c?(this._frame=0,this._frameName=c,void this.setTexture(PIXI.TextureCache[d.getFrameByName(c).uuid])):(this._frame=c,this._frameName="",void this.setTexture(PIXI.TextureCache[d.getFrame(c).uuid]))}return this.key=a,void this.setTexture(PIXI.TextureCache[a])},b.Image.prototype.crop=function(a){if("undefined"==typeof a||null===a)this.texture.hasOwnProperty("sourceWidth")&&this.texture.setFrame(new b.Rectangle(0,0,this.texture.sourceWidth,this.texture.sourceHeight));else if(this.texture instanceof PIXI.Texture){var c={};b.Utils.extend(!0,c,this.texture),c.sourceWidth=c.width,c.sourceHeight=c.height,c.frame=a,c.width=a.width,c.height=a.height,this.texture=c,this.texture.updateFrame=!0,PIXI.Texture.frameUpdates.push(this.texture)}else this.texture.setFrame(a)},b.Image.prototype.revive=function(){return this.alive=!0,this.exists=!0,this.visible=!0,this.events&&this.events.onRevived.dispatch(this),this},b.Image.prototype.kill=function(){return this.alive=!1,this.exists=!1,this.visible=!1,this.events&&this.events.onKilled.dispatch(this),this},b.Image.prototype.destroy=function(a){if(null!==this.game){"undefined"==typeof a&&(a=!0),this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.events&&this.events.destroy(),this.input&&this.input.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.alive=!1,this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null}},b.Image.prototype.reset=function(a,b){return this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this},b.Image.prototype.bringToTop=function(){return this.parent&&this.parent.bringToTop(this),this},Object.defineProperty(b.Image.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.Image.prototype,"deltaX",{get:function(){return this.world.x-this._cache[0]}}),Object.defineProperty(b.Image.prototype,"deltaY",{get:function(){return this.world.y-this._cache[1]}}),Object.defineProperty(b.Image.prototype,"deltaZ",{get:function(){return this.rotation-this._cache[2]}}),Object.defineProperty(b.Image.prototype,"inWorld",{get:function(){return this.game.world.bounds.intersects(this.getBounds())}}),Object.defineProperty(b.Image.prototype,"inCamera",{get:function(){return this.game.world.camera.screenView.intersects(this.getBounds())}}),Object.defineProperty(b.Image.prototype,"frame",{get:function(){return this._frame},set:function(a){if(a!==this.frame&&this.game.cache.isSpriteSheet(this.key)){var b=this.game.cache.getFrameData(this.key);b&&aa;a++)this.children[a].preUpdate();return!0},b.TileSprite.prototype.update=function(){},b.TileSprite.prototype.postUpdate=function(){this.exists&&this.body&&this.body.postUpdate(),1===this._cache[7]&&(this.position.x=this.game.camera.view.x+this.cameraOffset.x,this.position.y=this.game.camera.view.y+this.cameraOffset.y);for(var a=0,b=this.children.length;b>a;a++)this.children[a].postUpdate()},b.TileSprite.prototype.autoScroll=function(a,b){this._scroll.set(a,b)},b.TileSprite.prototype.stopScroll=function(){this._scroll.set(0,0)},b.TileSprite.prototype.loadTexture=function(a,c){return c=c||0,a instanceof b.RenderTexture?(this.key=a.key,void this.setTexture(a)):a instanceof b.BitmapData?(this.key=a,void this.setTexture(a.texture)):a instanceof PIXI.Texture?(this.key=a,void this.setTexture(a)):null===a||"undefined"==typeof a?(this.key="__default",void this.setTexture(PIXI.TextureCache[this.key])):"string"!=typeof a||this.game.cache.checkImageKey(a)?this.game.cache.isSpriteSheet(a)?(this.key=a,this.animations.loadFrameData(this.game.cache.getFrameData(a)),"string"==typeof c?this.frameName=c:this.frame=c,void 0):(this.key=a,void this.setTexture(PIXI.TextureCache[a])):(this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]))},b.TileSprite.prototype.destroy=function(a){if(null!==this.game){"undefined"==typeof a&&(a=!0),this.filters&&(this.filters=null),this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.animations.destroy(),this.events.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null}},b.TileSprite.prototype.play=function(a,b,c,d){return this.animations.play(a,b,c,d)},b.TileSprite.prototype.reset=function(a,b){return this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.tilePosition.x=0,this.tilePosition.y=0,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this},Object.defineProperty(b.TileSprite.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.TileSprite.prototype,"frame",{get:function(){return this.animations.frame},set:function(a){a!==this.animations.frame&&(this.animations.frame=a)}}),Object.defineProperty(b.TileSprite.prototype,"frameName",{get:function(){return this.animations.frameName},set:function(a){a!==this.animations.frameName&&(this.animations.frameName=a)}}),Object.defineProperty(b.TileSprite.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),Object.defineProperty(b.TileSprite.prototype,"exists",{get:function(){return!!this._cache[6]},set:function(a){a?(this._cache[6]=1,this.body&&this.body.type===b.Physics.P2JS&&this.body.addToWorld(),this.visible=!0):(this._cache[6]=0,this.body&&this.body.type===b.Physics.P2JS&&(this.body.safeRemove=!0),this.visible=!1)}}),Object.defineProperty(b.TileSprite.prototype,"inputEnabled",{get:function(){return this.input&&this.input.enabled},set:function(a){a?null===this.input?(this.input=new b.InputHandler(this),this.input.start()):this.input&&!this.input.enabled&&this.input.start():this.input&&this.input.enabled&&this.input.stop()}}),Object.defineProperty(b.TileSprite.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.TileSprite.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),b.Text=function(a,c,d,e,f){c=c||0,d=d||0,e=e||" ",f=f||{},e=0===e.length?" ":e.toString(),this.game=a,this.exists=!0,this.name="",this.type=b.TEXT,this.z=0,this.world=new b.Point(c,d),this._text=e,this._font="",this._fontSize=32,this._fontWeight="normal",this._lineSpacing=0,this.events=new b.Events(this),this.input=null,this.cameraOffset=new b.Point,this.setStyle(f),PIXI.Text.call(this,e,this.style),this.position.set(c,d),this._cache=[0,0,0,0,1,0,1,0]},b.Text.prototype=Object.create(PIXI.Text.prototype),b.Text.prototype.constructor=b.Text,b.Text.prototype.preUpdate=function(){if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this.renderOrderID=-1,!1;this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this.getBounds())),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++);for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Text.prototype.update=function(){},b.Text.prototype.postUpdate=function(){1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,b=this.children.length;b>a;a++)this.children[a].postUpdate()},b.Text.prototype.destroy=function(a){if(null!==this.game){"undefined"==typeof a&&(a=!0),this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.texture.destroy(),this.canvas.parentNode?this.canvas.parentNode.removeChild(this.canvas):(this.canvas=null,this.context=null);var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null}},b.Text.prototype.setShadow=function(a,b,c,d){this.style.shadowOffsetX=a||0,this.style.shadowOffsetY=b||0,this.style.shadowColor=c||"rgba(0,0,0,0)",this.style.shadowBlur=d||0,this.dirty=!0},b.Text.prototype.setStyle=function(a){a=a||{},a.font=a.font||"bold 20pt Arial",a.fill=a.fill||"black",a.align=a.align||"left",a.stroke=a.stroke||"black",a.strokeThickness=a.strokeThickness||0,a.wordWrap=a.wordWrap||!1,a.wordWrapWidth=a.wordWrapWidth||100,a.shadowOffsetX=a.shadowOffsetX||0,a.shadowOffsetY=a.shadowOffsetY||0,a.shadowColor=a.shadowColor||"rgba(0,0,0,0)",a.shadowBlur=a.shadowBlur||0,this.style=a,this.dirty=!0},b.Text.prototype.updateText=function(){this.context.font=this.style.font;var a=this.text;this.style.wordWrap&&(a=this.runWordWrap(this.text));for(var b=a.split(/(?:\r\n|\r|\n)/),c=[],d=0,e=0;ee?(g>0&&(b+="\n"),b+=f[g]+" ",e=this.style.wordWrapWidth-h):(e-=i,b+=f[g]+" ")}d?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",b.RetroFont.TEXT_SET2=" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET3="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ",b.RetroFont.TEXT_SET4="ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789",b.RetroFont.TEXT_SET5="ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/() '!?-*:0123456789",b.RetroFont.TEXT_SET6="ABCDEFGHIJKLMNOPQRSTUVWXYZ!?:;0123456789\"(),-.' ",b.RetroFont.TEXT_SET7="AGMSY+:4BHNTZ!;5CIOU.?06DJPV,(17EKQW\")28FLRX-'39",b.RetroFont.TEXT_SET8="0123456789 .ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET9="ABCDEFGHIJKLMNOPQRSTUVWXYZ()-0123456789.:,'\"?!",b.RetroFont.TEXT_SET10="ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET11="ABCDEFGHIJKLMNOPQRSTUVWXYZ.,\"-+!?()':;0123456789",b.RetroFont.prototype.setFixedWidth=function(a,b){"undefined"==typeof b&&(b="left"),this.fixedWidth=a,this.align=b},b.RetroFont.prototype.setText=function(a,b,c,d,e,f){this.multiLine=b||!1,this.customSpacingX=c||0,this.customSpacingY=d||0,this.align=e||"left",this.autoUpperCase=f?!1:!0,a.length>0&&(this.text=a)},b.RetroFont.prototype.resize=function(a,b){if(this.width=a,this.height=b,this.frame.width=this.width,this.frame.height=this.height,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.renderer.type===PIXI.WEBGL_RENDERER){this.projection.x=this.width/2,this.projection.y=-this.height/2;var c=this.renderer.gl;c.bindTexture(c.TEXTURE_2D,this.baseTexture._glTextures[c.id]),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,this.width,this.height,0,c.RGBA,c.UNSIGNED_BYTE,null)}else this.textureBuffer.resize(this.width,this.height);PIXI.Texture.frameUpdates.push(this)},b.RetroFont.prototype.buildRetroFontText=function(){var a=0,c=0;if(this.multiLine){var d=this._text.split("\n");this.fixedWidth>0?this.resize(this.fixedWidth,d.length*(this.characterHeight+this.customSpacingY)-this.customSpacingY):this.resize(this.getLongestLine()*(this.characterWidth+this.customSpacingX),d.length*(this.characterHeight+this.customSpacingY)-this.customSpacingY),this.textureBuffer.clear();for(var e=0;ea&&(a=0),this.pasteLine(d[e],a,c,this.customSpacingX),c+=this.characterHeight+this.customSpacingY}}else{switch(this.fixedWidth>0?this.resize(this.fixedWidth,this.characterHeight):this.resize(this._text.length*(this.characterWidth+this.customSpacingX),this.characterHeight),this.textureBuffer.clear(),this.align){case b.RetroFont.ALIGN_LEFT:a=0;break;case b.RetroFont.ALIGN_RIGHT:a=this.width-this._text.length*(this.characterWidth+this.customSpacingX);break;case b.RetroFont.ALIGN_CENTER:a=this.width/2-this._text.length*(this.characterWidth+this.customSpacingX)/2,a+=this.customSpacingX/2}this.pasteLine(this._text,a,0,this.customSpacingX)}},b.RetroFont.prototype.pasteLine=function(a,c,d,e){for(var f=new b.Point,g=0;g=0&&(this.stamp.frame=this.grabData[a.charCodeAt(g)],f.set(c,d),this.render(this.stamp,f,!1),c+=this.characterWidth+e,c>this.width))break},b.RetroFont.prototype.getLongestLine=function(){var a=0;if(this._text.length>0)for(var b=this._text.split("\n"),c=0;ca&&(a=b[c].length);return a},b.RetroFont.prototype.removeUnsupportedCharacters=function(a){for(var b="",c=0;c=0||!a&&"\n"===d)&&(b=b.concat(d))}return b},Object.defineProperty(b.RetroFont.prototype,"text",{get:function(){return this._text},set:function(a){var b;b=this.autoUpperCase?a.toUpperCase():a,b!==this._text&&(this._text=b,this.removeUnsupportedCharacters(this.multiLine),this.buildRetroFontText())}}),b.Particle=function(a,c,d,e,f){b.Sprite.call(this,a,c,d,e,f),this.autoScale=!1,this.scaleData=null,this._s=0,this.autoAlpha=!1,this.alphaData=null,this._a=0},b.Particle.prototype=Object.create(b.Sprite.prototype),b.Particle.prototype.constructor=b.Particle,b.Particle.prototype.update=function(){this.autoScale&&(this._s--,this._s?this.scale.set(this.scaleData[this._s].x,this.scaleData[this._s].y):this.autoScale=!1),this.autoAlpha&&(this._a--,this._a?this.alpha=this.alphaData[this._a].v:this.autoAlpha=!1)},b.Particle.prototype.onEmit=function(){},b.Particle.prototype.setAlphaData=function(a){this.alphaData=a,this._a=a.length-1,this.alpha=this.alphaData[this._a].v,this.autoAlpha=!0},b.Particle.prototype.setScaleData=function(a){this.scaleData=a,this._s=a.length-1,this.scale.set(this.scaleData[this._s].x,this.scaleData[this._s].y),this.autoScale=!0},b.Particle.prototype.reset=function(a,b,c){return"undefined"==typeof c&&(c=1),this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.health=c,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this.alpha=1,this.scale.set(1),this.autoScale=!1,this.autoAlpha=!1,this},b.Canvas={create:function(a,b,c,d){if("undefined"==typeof d&&(d=!1),a=a||256,b=b||256,d)var e=document.createElement("canvas");else var e=document.createElement(navigator.isCocoonJS?"screencanvas":"canvas");return"string"==typeof c&&""!==c&&(e.id=c),e.width=a,e.height=b,e.style.display="block",e},getOffset:function(a,c){c=c||new b.Point;var d=a.getBoundingClientRect(),e=a.clientTop||document.body.clientTop||0,f=a.clientLeft||document.body.clientLeft||0,g=0,h=0;return"CSS1Compat"===document.compatMode?(g=window.pageYOffset||document.documentElement.scrollTop||a.scrollTop||0,h=window.pageXOffset||document.documentElement.scrollLeft||a.scrollLeft||0):(g=window.pageYOffset||document.body.scrollTop||a.scrollTop||0,h=window.pageXOffset||document.body.scrollLeft||a.scrollLeft||0),c.x=d.left+h-f,c.y=d.top+g-e,c},getAspectRatio:function(a){return a.width/a.height},setBackgroundColor:function(a,b){return b=b||"rgb(0,0,0)",a.style.backgroundColor=b,a},setTouchAction:function(a,b){return b=b||"none",a.style.msTouchAction=b,a.style["ms-touch-action"]=b,a.style["touch-action"]=b,a},setUserSelect:function(a,b){return b=b||"none",a.style["-webkit-touch-callout"]=b,a.style["-webkit-user-select"]=b,a.style["-khtml-user-select"]=b,a.style["-moz-user-select"]=b,a.style["-ms-user-select"]=b,a.style["user-select"]=b,a.style["-webkit-tap-highlight-color"]="rgba(0, 0, 0, 0)",a},addToDOM:function(a,b,c){var d;return"undefined"==typeof c&&(c=!0),b&&("string"==typeof b?d=document.getElementById(b):"object"==typeof b&&1===b.nodeType&&(d=b)),d||(d=document.body),c&&d.style&&(d.style.overflow="hidden"),d.appendChild(a),a},setTransform:function(a,b,c,d,e,f,g){return a.setTransform(d,f,g,e,b,c),a},setSmoothingEnabled:function(a,b){return a.imageSmoothingEnabled=b,a.mozImageSmoothingEnabled=b,a.oImageSmoothingEnabled=b,a.webkitImageSmoothingEnabled=b,a.msImageSmoothingEnabled=b,a},setImageRenderingCrisp:function(a){return a.style["image-rendering"]="optimizeSpeed",a.style["image-rendering"]="crisp-edges",a.style["image-rendering"]="-moz-crisp-edges",a.style["image-rendering"]="-webkit-optimize-contrast",a.style["image-rendering"]="optimize-contrast",a.style.msInterpolationMode="nearest-neighbor",a},setImageRenderingBicubic:function(a){return a.style["image-rendering"]="auto",a.style.msInterpolationMode="bicubic",a}},b.Device=function(a){this.game=a,this.desktop=!1,this.iOS=!1,this.cocoonJS=!1,this.ejecta=!1,this.crosswalk=!1,this.android=!1,this.chromeOS=!1,this.linux=!1,this.macOS=!1,this.windows=!1,this.windowsPhone=!1,this.canvas=!1,this.file=!1,this.fileSystem=!1,this.localStorage=!1,this.webGL=!1,this.worker=!1,this.touch=!1,this.mspointer=!1,this.css3D=!1,this.pointerLock=!1,this.typedArray=!1,this.vibration=!1,this.getUserMedia=!1,this.quirksMode=!1,this.arora=!1,this.chrome=!1,this.epiphany=!1,this.firefox=!1,this.ie=!1,this.ieVersion=0,this.trident=!1,this.tridentVersion=0,this.mobileSafari=!1,this.midori=!1,this.opera=!1,this.safari=!1,this.webApp=!1,this.silk=!1,this.audioData=!1,this.webAudio=!1,this.ogg=!1,this.opus=!1,this.mp3=!1,this.wav=!1,this.m4a=!1,this.webm=!1,this.iPhone=!1,this.iPhone4=!1,this.iPad=!1,this.pixelRatio=0,this.littleEndian=!1,this.fullscreen=!1,this.requestFullscreen="",this.cancelFullscreen="",this.fullscreenKeyboard=!1,this._checkAudio(),this._checkBrowser(),this._checkCSS3D(),this._checkDevice(),this._checkFeatures(),this._checkOS()},b.Device.prototype={_checkOS:function(){var a=navigator.userAgent;/Android/.test(a)?this.android=!0:/CrOS/.test(a)?this.chromeOS=!0:/iP[ao]d|iPhone/i.test(a)?this.iOS=!0:/Linux/.test(a)?this.linux=!0:/Mac OS/.test(a)?this.macOS=!0:/Windows/.test(a)&&(this.windows=!0,/Windows Phone/i.test(a)&&(this.windowsPhone=!0)),(this.windows||this.macOS||this.linux&&this.silk===!1)&&(this.desktop=!0),(this.windowsPhone||/Windows NT/i.test(a)&&/Touch/i.test(a))&&(this.desktop=!1)},_checkFeatures:function(){this.canvas=!!window.CanvasRenderingContext2D||this.cocoonJS;try{this.localStorage=!!localStorage.getItem}catch(a){this.localStorage=!1}this.file=!!(window.File&&window.FileReader&&window.FileList&&window.Blob),this.fileSystem=!!window.requestFileSystem,this.webGL=function(){try{var a=document.createElement("canvas");return!!window.WebGLRenderingContext&&(a.getContext("webgl")||a.getContext("experimental-webgl"))}catch(b){return!1}}(),this.webGL=null===this.webGL||this.webGL===!1?!1:!0,this.worker=!!window.Worker,("ontouchstart"in document.documentElement||window.navigator.maxTouchPoints&&window.navigator.maxTouchPoints>1)&&(this.touch=!0),(window.navigator.msPointerEnabled||window.navigator.pointerEnabled)&&(this.mspointer=!0),this.pointerLock="pointerLockElement"in document||"mozPointerLockElement"in document||"webkitPointerLockElement"in document,this.quirksMode="CSS1Compat"===document.compatMode?!1:!0,this.getUserMedia=!!(navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia)},checkFullScreenSupport:function(){for(var a=["requestFullscreen","requestFullScreen","webkitRequestFullscreen","webkitRequestFullScreen","msRequestFullscreen","msRequestFullScreen","mozRequestFullScreen","mozRequestFullscreen"],b=0;b0,this.typedArray=!0):(this.littleEndian=!1,this.typedArray=!1),navigator.vibrate=navigator.vibrate||navigator.webkitVibrate||navigator.mozVibrate||navigator.msVibrate,navigator.vibrate&&(this.vibration=!0)},_checkCSS3D:function(){var a,b=document.createElement("p"),c={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.insertBefore(b,null);for(var d in c)void 0!==b.style[d]&&(b.style[d]="translate3d(1px,1px,1px)",a=window.getComputedStyle(b).getPropertyValue(c[d]));document.body.removeChild(b),this.css3D=void 0!==a&&a.length>0&&"none"!==a},canPlayAudio:function(a){return"mp3"==a&&this.mp3?!0:"ogg"==a&&(this.ogg||this.opus)?!0:"m4a"==a&&this.m4a?!0:"wav"==a&&this.wav?!0:"webm"==a&&this.webm?!0:!1},isConsoleOpen:function(){return window.console&&window.console.firebug?!0:window.console&&(console.profile(),console.profileEnd(),console.clear&&console.clear(),console.profiles)?console.profiles.length>0:!1}},b.Device.prototype.constructor=b.Device,b.RequestAnimationFrame=function(a,b){"undefined"==typeof b&&(b=!1),this.game=a,this.isRunning=!1,this.forceSetTimeOut=b;for(var c=["ms","moz","webkit","o"],d=0;da},fuzzyGreaterThan:function(a,b,c){return"undefined"==typeof c&&(c=1e-4),a>b-c},fuzzyCeil:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.ceil(a-b)},fuzzyFloor:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.floor(a+b)},average:function(){for(var a=[],b=0;b0?Math.floor(a):Math.ceil(a)},shear:function(a){return a%1},snapTo:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.round(a/b),c+a)},snapToFloor:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.floor(a/b),c+a)},snapToCeil:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.ceil(a/b),c+a)},snapToInArray:function(a,b,c){if("undefined"==typeof c&&(c=!0),c&&b.sort(),a=f-a?f:e},roundTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.round(a*d)/d},floorTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.floor(a*d)/d},ceilTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.ceil(a*d)/d},interpolateFloat:function(a,b,c){return(b-a)*c+a},angleBetween:function(a,b,c,d){return Math.atan2(d-b,c-a)},angleBetweenPoints:function(a,b){return Math.atan2(b.y-a.y,b.x-a.x)},reverseAngle:function(a){return this.normalizeAngle(a+Math.PI,!0)},normalizeAngle:function(a){return a%=2*Math.PI,a>=0?a:a+2*Math.PI},normalizeLatitude:function(a){return Math.max(-90,Math.min(90,a))},normalizeLongitude:function(a){return a%360==180?180:(a%=360,-180>a?a+360:a>180?a-360:a)},nearestAngleBetween:function(a,b,c){"undefined"==typeof c&&(c=!0);var d=c?Math.PI:180;return a=this.normalizeAngle(a,c),b=this.normalizeAngle(b,c),-d/2>a&&b>d/2&&(a+=2*d),-d/2>b&&a>d/2&&(b+=2*d),b-a},interpolateAngles:function(a,b,c,d,e){return"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=null),a=this.normalizeAngle(a,d),b=this.normalizeAngleToAnother(b,a,d),"function"==typeof e?e(c,a,b-a,1):this.interpolateFloat(a,b,c)},chanceRoll:function(a){return"undefined"==typeof a&&(a=50),0>=a?!1:a>=100?!0:100*Math.random()>=a?!1:!0},numberArray:function(a,b){for(var c=[],d=a;b>=d;d++)c.push(d);return c},maxAdd:function(a,b,c){return a+=b,a>c&&(a=c),a},minSub:function(a,b,c){return a-=b,c>a&&(a=c),a},wrap:function(a,b,c){var d=c-b;if(0>=d)return 0;var e=(a-b)%d;return 0>e&&(e+=d),e+b},wrapValue:function(a,b,c){var d;return a=Math.abs(a),b=Math.abs(b),c=Math.abs(c),d=(a+b)%c},randomSign:function(){return Math.random()>.5?1:-1},isOdd:function(a){return 1&a},isEven:function(a){return 1&a?!1:!0},min:function(){if(1===arguments.length&&"object"==typeof arguments[0])var a=arguments[0];else var a=arguments;for(var b=1,c=0,d=a.length;d>b;b++)a[b]b;b++)a[b]>a[c]&&(c=b);return a[c]},minProperty:function(a){if(2===arguments.length&&"object"==typeof arguments[1])var b=arguments[1];else var b=arguments.slice(1);for(var c=1,d=0,e=b.length;e>c;c++)b[c][a]c;c++)b[c][a]>b[d][a]&&(d=c);return b[d][a]},wrapAngle:function(a,b){var c=b?Math.PI/180:1;return this.wrap(a,-180*c,180*c)},angleLimit:function(a,b,c){var d=a;return a>c?d=c:b>a&&(d=b),d},linearInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return 0>b?this.linear(a[0],a[1],d):b>1?this.linear(a[c],a[c-1],c-d):this.linear(a[e],a[e+1>c?c:e+1],d-e)},bezierInterpolation:function(a,b){for(var c=0,d=a.length-1,e=0;d>=e;e++)c+=Math.pow(1-b,d-e)*Math.pow(b,e)*a[e]*this.bernstein(d,e);return c},catmullRomInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return a[0]===a[c]?(0>b&&(e=Math.floor(d=c*(1+b))),this.catmullRom(a[(e-1+c)%c],a[e],a[(e+1)%c],a[(e+2)%c],d-e)):0>b?a[0]-(this.catmullRom(a[0],a[0],a[1],a[1],-d)-a[0]):b>1?a[c]-(this.catmullRom(a[c],a[c],a[c-1],a[c-1],d-c)-a[c]):this.catmullRom(a[e?e-1:0],a[e],a[e+1>c?c:e+1],a[e+2>c?c:e+2],d-e)},linear:function(a,b,c){return(b-a)*c+a},bernstein:function(a,b){return this.factorial(a)/this.factorial(b)/this.factorial(a-b)},catmullRom:function(a,b,c,d,e){var f=.5*(c-a),g=.5*(d-b),h=e*e,i=e*h;return(2*b-2*c+f+g)*i+(-3*b+3*c-2*f-g)*h+f*e+b},difference:function(a,b){return Math.abs(a-b)},getRandom:function(a,b,c){if("undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),null!=a){var d=c;if((0===d||d>a.length-b)&&(d=a.length-b),d>0)return a[b+Math.floor(Math.random()*d)]}return null},removeRandom:function(a,b,c){if("undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),null!=a){var d=c;if((0===d||d>a.length-b)&&(d=a.length-b),d>0){var e=b+Math.floor(Math.random()*d),f=a.splice(e,1);return f[0]}}return null},floor:function(a){var b=0|a;return a>0?b:b!=a?b-1:b},ceil:function(a){var b=0|a;return a>0&&b!=a?b+1:b},sinCosGenerator:function(a,b,c,d){"undefined"==typeof b&&(b=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1);for(var e=b,f=c,g=d*Math.PI/a,h=[],i=[],j=0;a>j;j++)f-=e*g,e+=f*g,h[j]=f,i[j]=e;return{sin:i,cos:h,length:a}},shift:function(a){var b=a.shift();return a.push(b),b},shuffleArray:function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},distance:function(a,b,c,d){var e=a-c,f=b-d;return Math.sqrt(e*e+f*f)},distancePow:function(a,b,c,d,e){return"undefined"==typeof e&&(e=2),Math.sqrt(Math.pow(c-a,e)+Math.pow(d-b,e))},distanceRounded:function(a,c,d,e){return Math.round(b.Math.distance(a,c,d,e))},clamp:function(a,b,c){return b>a?b:a>c?c:a},clampBottom:function(a,b){return b>a?b:a},within:function(a,b,c){return Math.abs(a-b)<=c},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){return b>=a?0:a>=c?1:(a=(a-b)/(c-b),a*a*(3-2*a))},smootherstep:function(a,b,c){return b>=a?0:a>=c?1:(a=(a-b)/(c-b),a*a*a*(a*(6*a-15)+10))},sign:function(a){return 0>a?-1:a>0?1:0},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}()},b.RandomDataGenerator=function(a){"undefined"==typeof a&&(a=[]),this.c=1,this.s0=0,this.s1=0,this.s2=0,this.sow(a)},b.RandomDataGenerator.prototype={rnd:function(){var a=2091639*this.s0+2.3283064365386963e-10*this.c;return this.c=0|a,this.s0=this.s1,this.s1=this.s2,this.s2=a-this.c,this.s2},sow:function(a){"undefined"==typeof a&&(a=[]),this.s0=this.hash(" "),this.s1=this.hash(this.s0),this.s2=this.hash(this.s1),this.c=1;for(var b,c=0;b=a[c++];)this.s0-=this.hash(b),this.s0+=~~(this.s0<0),this.s1-=this.hash(b),this.s1+=~~(this.s1<0),this.s2-=this.hash(b),this.s2+=~~(this.s2<0) -},hash:function(a){var b,c,d;for(d=4022871197,a=a.toString(),c=0;c>>0,b-=d,b*=d,d=b>>>0,b-=d,d+=4294967296*b;return 2.3283064365386963e-10*(d>>>0)},integer:function(){return 4294967296*this.rnd.apply(this)},frac:function(){return this.rnd.apply(this)+1.1102230246251565e-16*(2097152*this.rnd.apply(this)|0)},real:function(){return this.integer()+this.frac()},integerInRange:function(a,b){return Math.round(this.realInRange(a,b))},realInRange:function(a,b){return this.frac()*(b-a)+a},normal:function(){return 1-2*this.frac()},uuid:function(){var a="",b="";for(b=a="";a++<36;b+=~a%5|3*a&4?(15^a?8^this.frac()*(20^a?16:4):4).toString(16):"-");return b},pick:function(a){return a[this.integerInRange(0,a.length-1)]},weightedPick:function(a){return a[~~(Math.pow(this.frac(),2)*(a.length-1))]},timestamp:function(a,b){return this.realInRange(a||9466848e5,b||1577862e6)},angle:function(){return this.integerInRange(-180,180)}},b.RandomDataGenerator.prototype.constructor=b.RandomDataGenerator,b.QuadTree=function(a,b,c,d,e,f,g){this.maxObjects=10,this.maxLevels=4,this.level=0,this.bounds={},this.objects=[],this.nodes=[],this._empty=[],this.reset(a,b,c,d,e,f,g)},b.QuadTree.prototype={reset:function(a,b,c,d,e,f,g){this.maxObjects=e||10,this.maxLevels=f||4,this.level=g||0,this.bounds={x:Math.round(a),y:Math.round(b),width:c,height:d,subWidth:Math.floor(c/2),subHeight:Math.floor(d/2),right:Math.round(a)+Math.floor(c/2),bottom:Math.round(b)+Math.floor(d/2)},this.objects.length=0,this.nodes.length=0},populate:function(a){a.forEach(this.populateHandler,this,!0)},populateHandler:function(a){a.body&&a.exists&&this.insert(a.body)},split:function(){this.level++,this.nodes[0]=new b.QuadTree(this.bounds.right,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[1]=new b.QuadTree(this.bounds.x,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[2]=new b.QuadTree(this.bounds.x,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[3]=new b.QuadTree(this.bounds.right,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level)},insert:function(a){var b,c=0;if(null!=this.nodes[0]&&(b=this.getIndex(a),-1!==b))return void this.nodes[b].insert(a);if(this.objects.push(a),this.objects.length>this.maxObjects&&this.levelthis.bounds.bottom&&(b=2):a.x>this.bounds.right&&(a.ythis.bounds.bottom&&(b=3)),b},retrieve:function(a){if(!a.body)return this._empty;var b=this.objects,c=this.getIndex(a.body);return this.nodes[0]&&(-1!==c?b=b.concat(this.nodes[c].retrieve(a)):(b=b.concat(this.nodes[0].retrieve(a)),b=b.concat(this.nodes[1].retrieve(a)),b=b.concat(this.nodes[2].retrieve(a)),b=b.concat(this.nodes[3].retrieve(a)))),b},clear:function(){this.objects.length=0;for(var a=this.nodes.length;a--;)this.nodes[a].clear(),this.nodes.splice(a,1);this.nodes.length=0}},b.QuadTree.prototype.constructor=b.QuadTree,b.Net=function(a){this.game=a},b.Net.prototype={getHostName:function(){return window.location&&window.location.hostname?window.location.hostname:null},checkDomainName:function(a){return-1!==window.location.hostname.indexOf(a)},updateQueryString:function(a,b,c,d){"undefined"==typeof c&&(c=!1),("undefined"==typeof d||""===d)&&(d=window.location.href);var e="",f=new RegExp("([?|&])"+a+"=.*?(&|#|$)(.*)","gi");if(f.test(d))e="undefined"!=typeof b&&null!==b?d.replace(f,"$1"+a+"="+b+"$2$3"):d.replace(f,"$1$3").replace(/(&|\?)$/,"");else if("undefined"!=typeof b&&null!==b){var g=-1!==d.indexOf("?")?"&":"?",h=d.split("#");d=h[0]+g+a+"="+b,h[1]&&(d+="#"+h[1]),e=d}else e=d;return c?void(window.location.href=e):e},getQueryString:function(a){"undefined"==typeof a&&(a="");var b={},c=location.search.substring(1).split("&");for(var d in c){var e=c[d].split("=");if(e.length>1){if(a&&a==this.decodeURI(e[0]))return this.decodeURI(e[1]);b[this.decodeURI(e[0])]=this.decodeURI(e[1])}}return b},decodeURI:function(a){return decodeURIComponent(a.replace(/\+/g," "))}},b.Net.prototype.constructor=b.Net,b.TweenManager=function(a){this.game=a,this._tweens=[],this._add=[],this.game.onPause.add(this._pauseAll,this),this.game.onResume.add(this._resumeAll,this)},b.TweenManager.prototype={getAll:function(){return this._tweens},removeAll:function(){for(var a=0;aa;)this._tweens[a].update(this.game.time.now)?a++:(this._tweens.splice(a,1),b--);return this._add.length>0&&(this._tweens=this._tweens.concat(this._add),this._add.length=0),!0},isTweening:function(a){return this._tweens.some(function(b){return b._object===a})},_pauseAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a]._pause()},_resumeAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a]._resume()},pauseAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].pause()},resumeAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].resume(!0)}},b.TweenManager.prototype.constructor=b.TweenManager,b.Tween=function(a,c,d){this._object=a,this.game=c,this._manager=d,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._repeat=0,this._yoyo=!1,this._reversed=!1,this._delayTime=0,this._startTime=null,this._easingFunction=b.Easing.Linear.None,this._interpolationFunction=b.Math.linearInterpolation,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onUpdateCallback=null,this._onUpdateCallbackContext=null,this._paused=!1,this._pausedTime=0,this._codePaused=!1,this.pendingDelete=!1,this.onStart=new b.Signal,this.onLoop=new b.Signal,this.onComplete=new b.Signal,this.isRunning=!1},b.Tween.prototype={to:function(a,b,c,d,e,f,g){b=b||1e3,c=c||null,d=d||!1,e=e||0,f=f||0,g=g||!1;var h;return this._parent?(h=this._manager.create(this._object),this._lastChild.chain(h),this._lastChild=h):(h=this,this._parent=this,this._lastChild=this),h._repeat=f,h._duration=b,h._valuesEnd=a,null!==c&&(h._easingFunction=c),e>0&&(h._delayTime=e),h._yoyo=g,d?this.start():this},start:function(){if(null!==this.game&&null!==this._object){this._manager.add(this),this.isRunning=!0,this._onStartCallbackFired=!1,this._startTime=this.game.time.now+this._delayTime;for(var a in this._valuesEnd){if(Array.isArray(this._valuesEnd[a])){if(0===this._valuesEnd[a].length)continue;this._valuesEnd[a]=[this._object[a]].concat(this._valuesEnd[a])}this._valuesStart[a]=this._object[a],Array.isArray(this._valuesStart[a])||(this._valuesStart[a]*=1),this._valuesStartRepeat[a]=this._valuesStart[a]||0}return this}},generateData:function(a,b){if(null===this.game||null===this._object)return null;this._startTime=0;for(var c in this._valuesEnd){if(Array.isArray(this._valuesEnd[c])){if(0===this._valuesEnd[c].length)continue;this._valuesEnd[c]=[this._object[c]].concat(this._valuesEnd[c])}this._valuesStart[c]=this._object[c],Array.isArray(this._valuesStart[c])||(this._valuesStart[c]*=1),this._valuesStartRepeat[c]=this._valuesStart[c]||0}for(var d=0,e=Math.floor(a*(this._duration/1e3)),f=this._duration/e,g=[];e--;){var c,h=(d-this._startTime)/this._duration;h=h>1?1:h;var i=this._easingFunction(h),j={};for(c in this._valuesEnd){var k=this._valuesStart[c]||0,l=this._valuesEnd[c];l instanceof Array?j[c]=this._interpolationFunction(l,i):("string"==typeof l&&(l=k+parseFloat(l,10)),"number"==typeof l&&(j[c]=k+(l-k)*i))}g.push(j),d+=f}if(this._yoyo){var m=g.slice();m.reverse(),g=g.concat(m)}return"undefined"!=typeof b?b=b.concat(g):g},stop:function(){return this.isRunning=!1,this._onUpdateCallback=null,this._manager.remove(this),this},delay:function(a){return this._delayTime=a,this},repeat:function(a){return this._repeat=a,this},yoyo:function(a){return this._yoyo=a,this},easing:function(a){return this._easingFunction=a,this},interpolation:function(a){return this._interpolationFunction=a,this},chain:function(){return this._chainedTweens=arguments,this},loop:function(){return this._lastChild.chain(this),this},onUpdateCallback:function(a,b){return this._onUpdateCallback=a,this._onUpdateCallbackContext=b,this},pause:function(){this._codePaused=!0,this._paused=!0,this._pausedTime=this.game.time.now},_pause:function(){this._codePaused||(this._paused=!0,this._pausedTime=this.game.time.now)},resume:function(){this._paused&&(this._paused=!1,this._codePaused=!1,this._startTime+=this.game.time.now-this._pausedTime)},_resume:function(){this._codePaused||(this._startTime+=this.game.time.pauseDuration,this._paused=!1)},update:function(a){if(this.pendingDelete)return!1;if(this._paused||a1?1:c;var d=this._easingFunction(c);for(b in this._valuesEnd){var e=this._valuesStart[b]||0,f=this._valuesEnd[b];f instanceof Array?this._object[b]=this._interpolationFunction(f,d):("string"==typeof f&&(f=e+parseFloat(f,10)),"number"==typeof f&&(this._object[b]=e+(f-e)*d))}if(null!==this._onUpdateCallback&&this._onUpdateCallback.call(this._onUpdateCallbackContext,this,d),1==c){if(this._repeat>0){isFinite(this._repeat)&&this._repeat--;for(b in this._valuesStartRepeat){if("string"==typeof this._valuesEnd[b]&&(this._valuesStartRepeat[b]=this._valuesStartRepeat[b]+parseFloat(this._valuesEnd[b],10)),this._yoyo){var g=this._valuesStartRepeat[b];this._valuesStartRepeat[b]=this._valuesEnd[b],this._valuesEnd[b]=g,this._reversed=!this._reversed}this._valuesStart[b]=this._valuesStartRepeat[b]}return this._startTime=a+this._delayTime,this.onLoop.dispatch(this._object),!0}this.isRunning=!1,this.onComplete.dispatch(this._object);for(var h=0,i=this._chainedTweens.length;i>h;h++)this._chainedTweens[h].start(a);return!1}return!0}},b.Tween.prototype.constructor=b.Tween,b.Easing={Linear:{None:function(a){return a}},Quadratic:{In:function(a){return a*a},Out:function(a){return a*(2-a)},InOut:function(a){return(a*=2)<1?.5*a*a:-.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a:.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return(a*=2)<1?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a*a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:(a*=2)<1?.5*Math.pow(1024,a-1):.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1-Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return(a*=2)<1?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),-(c*Math.pow(2,10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d)))},Out:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),c*Math.pow(2,-10*a)*Math.sin(2*(a-b)*Math.PI/d)+1)},InOut:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),(a*=2)<1?-.5*c*Math.pow(2,10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d):c*Math.pow(2,-10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d)*.5+1)}},Back:{In:function(a){var b=1.70158;return a*a*((b+1)*a-b)},Out:function(a){var b=1.70158;return--a*a*((b+1)*a+b)+1},InOut:function(a){var b=2.5949095;return(a*=2)<1?.5*a*a*((b+1)*a-b):.5*((a-=2)*a*((b+1)*a+b)+2)}},Bounce:{In:function(a){return 1-b.Easing.Bounce.Out(1-a)},Out:function(a){return 1/2.75>a?7.5625*a*a:2/2.75>a?7.5625*(a-=1.5/2.75)*a+.75:2.5/2.75>a?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},InOut:function(a){return.5>a?.5*b.Easing.Bounce.In(2*a):.5*b.Easing.Bounce.Out(2*a-1)+.5}}},b.Time=function(a){this.game=a,this.time=0,this.now=0,this.elapsed=0,this.pausedTime=0,this.advancedTiming=!1,this.fps=0,this.fpsMin=1e3,this.fpsMax=0,this.msMin=1e3,this.msMax=0,this.physicsElapsed=0,this.deltaCap=0,this.frames=0,this.pauseDuration=0,this.timeToCall=0,this.lastTime=0,this.events=new b.Timer(this.game,!1),this._started=0,this._timeLastSecond=0,this._pauseStarted=0,this._justResumed=!1,this._timers=[],this._len=0,this._i=0},b.Time.prototype={boot:function(){this._started=Date.now(),this.events.start()},create:function(a){"undefined"==typeof a&&(a=!0);var c=new b.Timer(this.game,a);return this._timers.push(c),c},removeAll:function(){for(var a=0;a0&&this.physicsElapsed>this.deltaCap&&(this.physicsElapsed=this.deltaCap),this.advancedTiming&&(this.msMin=this.game.math.min(this.msMin,this.elapsed),this.msMax=this.game.math.max(this.msMax,this.elapsed),this.frames++,this.now>this._timeLastSecond+1e3&&(this.fps=Math.round(1e3*this.frames/(this.now-this._timeLastSecond)),this.fpsMin=this.game.math.min(this.fpsMin,this.fps),this.fpsMax=this.game.math.max(this.fpsMax,this.fps),this._timeLastSecond=this.now,this.frames=0)),this.time=this.now,this.lastTime=a+this.timeToCall,!this.game.paused)for(this.events.update(this.now),this._i=0,this._len=this._timers.length;this._i0&&(this.events.sort(this.sortHandler),this.nextTick=this.events[0].tick)},sortHandler:function(a,b){return a.tickb.tick?1:0},clearPendingEvents:function(){for(this._i=this.events.length;this._i--;)this.events[this._i].pendingDelete&&this.events.splice(this._i,1);this._len=this.events.length,this._i=0},update:function(a){if(this.paused)return!0;if(this._now=a,this._marked=0,this.clearPendingEvents(),this.running&&this._now>=this.nextTick&&this._len>0){for(;this._i=this.events[this._i].tick;)this._newTick=this._now+this.events[this._i].delay-(this._now-this.events[this._i].tick),this._newTick<0&&(this._newTick=this._now+this.events[this._i].delay),this.events[this._i].loop===!0?(this.events[this._i].tick=this._newTick,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)):this.events[this._i].repeatCount>0?(this.events[this._i].repeatCount--,this.events[this._i].tick=this._newTick,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)):(this._marked++,this.events[this._i].pendingDelete=!0,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)),this._i++;this.events.length>this._marked?this.order():(this.expired=!0,this.onComplete.dispatch(this))}return this.expired&&this.autoDestroy?!1:!0},pause:function(){this.running&&!this.expired&&(this._pauseStarted=this.game.time.now,this.paused=!0,this._codePaused=!0)},_pause:function(){this.running&&!this.expired&&(this._pauseStarted=this.game.time.now,this.paused=!0)},resume:function(){if(this.running&&!this.expired){var a=this.game.time.now-this._pauseStarted;this._pauseTotal+=a;for(var b=0;bthis._now?this.nextTick-this._now:0}}),Object.defineProperty(b.Timer.prototype,"length",{get:function(){return this.events.length}}),Object.defineProperty(b.Timer.prototype,"ms",{get:function(){return this._now-this._started-this._pauseTotal}}),Object.defineProperty(b.Timer.prototype,"seconds",{get:function(){return.001*this.ms}}),b.Timer.prototype.constructor=b.Timer,b.TimerEvent=function(a,b,c,d,e,f,g,h){this.timer=a,this.delay=b,this.tick=c,this.repeatCount=d-1,this.loop=e,this.callback=f,this.callbackContext=g,this.args=h,this.pendingDelete=!1},b.TimerEvent.prototype.constructor=b.TimerEvent,b.AnimationManager=function(a){this.sprite=a,this.game=a.game,this.currentFrame=null,this.updateIfVisible=!0,this.isLoaded=!1,this._frameData=null,this._anims={},this._outputFrames=[]},b.AnimationManager.prototype={loadFrameData:function(a){this._frameData=a,this.frame=0,this.isLoaded=!0},add:function(a,c,d,e,f){return null==this._frameData?void console.warn("No FrameData available for Phaser.Animation "+a):(c=c||[],d=d||60,"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=c&&"number"==typeof c[0]?!0:!1),null==this.sprite.events.onAnimationStart&&(this.sprite.events.onAnimationStart=new b.Signal,this.sprite.events.onAnimationComplete=new b.Signal,this.sprite.events.onAnimationLoop=new b.Signal),this._outputFrames.length=0,this._frameData.getFrameIndexes(c,f,this._outputFrames),this._anims[a]=new b.Animation(this.game,this.sprite,a,this._frameData,this._outputFrames,d,e),this.currentAnim=this._anims[a],this.currentFrame=this.currentAnim.currentFrame,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1),this._anims[a])},validateFrames:function(a,b){"undefined"==typeof b&&(b=!0);for(var c=0;cthis._frameData.total)return!1}else if(this._frameData.checkFrameName(a[c])===!1)return!1;return!0},play:function(a,b,c,d){if(this._anims[a]){if(this.currentAnim!==this._anims[a])return this.currentAnim&&this.currentAnim.isPlaying&&this.currentAnim.stop(),this.currentAnim=this._anims[a],this.currentAnim.paused=!1,this.currentAnim.play(b,c,d);if(this.currentAnim.isPlaying===!1)return this.currentAnim.paused=!1,this.currentAnim.play(b,c,d)}},stop:function(a,b){"undefined"==typeof b&&(b=!1),"string"==typeof a?this._anims[a]&&(this.currentAnim=this._anims[a],this.currentAnim.stop(b)):this.currentAnim&&this.currentAnim.stop(b)},update:function(){return this.updateIfVisible&&!this.sprite.visible?!1:this.currentAnim&&this.currentAnim.update()===!0?(this.currentFrame=this.currentAnim.currentFrame,!0):!1},getAnimation:function(a){return"string"==typeof a&&this._anims[a]?this._anims[a]:null},refreshFrame:function(){this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1)},destroy:function(){var a=null;for(var a in this._anims)this._anims.hasOwnProperty(a)&&this._anims[a].destroy();this._anims={},this._frameData=null,this._frameIndex=0,this.currentAnim=null,this.currentFrame=null}},b.AnimationManager.prototype.constructor=b.AnimationManager,Object.defineProperty(b.AnimationManager.prototype,"frameData",{get:function(){return this._frameData}}),Object.defineProperty(b.AnimationManager.prototype,"frameTotal",{get:function(){return this._frameData?this._frameData.total:-1}}),Object.defineProperty(b.AnimationManager.prototype,"paused",{get:function(){return this.currentAnim.isPaused},set:function(a){this.currentAnim.paused=a}}),Object.defineProperty(b.AnimationManager.prototype,"frame",{get:function(){return this.currentFrame?this._frameIndex:void 0},set:function(a){"number"==typeof a&&this._frameData&&null!==this._frameData.getFrame(a)&&(this.currentFrame=this._frameData.getFrame(a),this.currentFrame&&(this._frameIndex=a,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1)))}}),Object.defineProperty(b.AnimationManager.prototype,"frameName",{get:function(){return this.currentFrame?this.currentFrame.name:void 0},set:function(a){"string"==typeof a&&this._frameData&&null!==this._frameData.getFrameByName(a)?(this.currentFrame=this._frameData.getFrameByName(a),this.currentFrame&&(this._frameIndex=this.currentFrame.index,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1))):console.warn("Cannot set frameName: "+a)}}),b.Animation=function(a,c,d,e,f,g,h){this.game=a,this._parent=c,this._frameData=e,this.name=d,this._frames=[],this._frames=this._frames.concat(f),this.delay=1e3/g,this.loop=h,this.loopCount=0,this.killOnComplete=!1,this.isFinished=!1,this.isPlaying=!1,this.isPaused=!1,this._pauseStartTime=0,this._frameIndex=0,this._frameDiff=0,this._frameSkip=1,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.onStart=new b.Signal,this.onComplete=new b.Signal,this.onLoop=new b.Signal,this.game.onPause.add(this.onPause,this),this.game.onResume.add(this.onResume,this)},b.Animation.prototype={play:function(a,b,c){return"number"==typeof a&&(this.delay=1e3/a),"boolean"==typeof b&&(this.loop=b),"undefined"!=typeof c&&(this.killOnComplete=c),this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this.loopCount=0,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]),this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1),this._parent.events.onAnimationStart.dispatch(this._parent,this),this.onStart.dispatch(this._parent,this),this},restart:function(){this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this.loopCount=0,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]),this.onStart.dispatch(this._parent,this)},stop:function(a,b){"undefined"==typeof a&&(a=!1),"undefined"==typeof b&&(b=!1),this.isPlaying=!1,this.isFinished=!0,this.paused=!1,a&&(this.currentFrame=this._frameData.getFrame(this._frames[0])),b&&(this._parent.events.onAnimationComplete.dispatch(this._parent,this),this.onComplete.dispatch(this._parent,this))},onPause:function(){this.isPlaying&&(this._frameDiff=this._timeNextFrame-this.game.time.now)},onResume:function(){this.isPlaying&&(this._timeNextFrame=this.game.time.now+this._frameDiff)},update:function(){return this.isPaused?!1:this.isPlaying===!0&&this.game.time.now>=this._timeNextFrame?(this._frameSkip=1,this._frameDiff=this.game.time.now-this._timeNextFrame,this._timeLastFrame=this.game.time.now,this._frameDiff>this.delay&&(this._frameSkip=Math.floor(this._frameDiff/this.delay),this._frameDiff-=this._frameSkip*this.delay),this._timeNextFrame=this.game.time.now+(this.delay-this._frameDiff),this._frameIndex+=this._frameSkip,this._frameIndex>=this._frames.length?this.loop?(this._frameIndex%=this._frames.length,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&(this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1)),this.loopCount++,this._parent.events.onAnimationLoop.dispatch(this._parent,this),this.onLoop.dispatch(this._parent,this)):this.complete():(this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&(this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1))),!0):!1},destroy:function(){this.game.onPause.remove(this.onPause,this),this.game.onResume.remove(this.onResume,this),this.game=null,this._parent=null,this._frames=null,this._frameData=null,this.currentFrame=null,this.isPlaying=!1,this.onStart.dispose(),this.onLoop.dispose(),this.onComplete.dispose()},complete:function(){this.isPlaying=!1,this.isFinished=!0,this.paused=!1,this._parent.events.onAnimationComplete.dispatch(this._parent,this),this.onComplete.dispatch(this._parent,this),this.killOnComplete&&this._parent.kill()}},b.Animation.prototype.constructor=b.Animation,Object.defineProperty(b.Animation.prototype,"paused",{get:function(){return this.isPaused},set:function(a){this.isPaused=a,a?this._pauseStartTime=this.game.time.now:this.isPlaying&&(this._timeNextFrame=this.game.time.now+this.delay)}}),Object.defineProperty(b.Animation.prototype,"frameTotal",{get:function(){return this._frames.length}}),Object.defineProperty(b.Animation.prototype,"frame",{get:function(){return null!==this.currentFrame?this.currentFrame.index:this._frameIndex},set:function(a){this.currentFrame=this._frameData.getFrame(this._frames[a]),null!==this.currentFrame&&(this._frameIndex=a,this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]))}}),Object.defineProperty(b.Animation.prototype,"speed",{get:function(){return Math.round(1e3/this.delay)},set:function(a){a>=1&&(this.delay=1e3/a)}}),b.Animation.generateFrameNames=function(a,c,d,e,f){"undefined"==typeof e&&(e="");var g=[],h="";if(d>c)for(var i=c;d>=i;i++)h="number"==typeof f?b.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);else for(var i=c;i>=d;i--)h="number"==typeof f?b.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);return g},b.Frame=function(a,c,d,e,f,g,h){this.index=a,this.x=c,this.y=d,this.width=e,this.height=f,this.name=g,this.uuid=h,this.centerX=Math.floor(e/2),this.centerY=Math.floor(f/2),this.distance=b.Math.distance(0,0,e,f),this.rotated=!1,this.rotationDirection="cw",this.trimmed=!1,this.sourceSizeW=e,this.sourceSizeH=f,this.spriteSourceSizeX=0,this.spriteSourceSizeY=0,this.spriteSourceSizeW=0,this.spriteSourceSizeH=0},b.Frame.prototype={setTrim:function(a,b,c,d,e,f,g){this.trimmed=a,a&&(this.width=b,this.height=c,this.sourceSizeW=b,this.sourceSizeH=c,this.centerX=Math.floor(b/2),this.centerY=Math.floor(c/2),this.spriteSourceSizeX=d,this.spriteSourceSizeY=e,this.spriteSourceSizeW=f,this.spriteSourceSizeH=g)},getRect:function(a){return"undefined"==typeof a?a=new b.Rectangle(this.x,this.y,this.width,this.height):a.setTo(this.x,this.y,this.width,this.height),a}},b.Frame.prototype.constructor=b.Frame,b.FrameData=function(){this._frames=[],this._frameNames=[]},b.FrameData.prototype={addFrame:function(a){return a.index=this._frames.length,this._frames.push(a),""!==a.name&&(this._frameNames[a.name]=a.index),a},getFrame:function(a){return a>this._frames.length&&(a=0),this._frames[a]},getFrameByName:function(a){return"number"==typeof this._frameNames[a]?this._frames[this._frameNames[a]]:null},checkFrameName:function(a){return null==this._frameNames[a]?!1:!0},getFrameRange:function(a,b,c){"undefined"==typeof c&&(c=[]);for(var d=a;b>=d;d++)c.push(this._frames[d]);return c},getFrames:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0;dd;d++)c.push(b?this.getFrame(a[d]):this.getFrameByName(a[d]));return c},getFrameIndexes:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0,e=this._frames.length;e>d;d++)c.push(this._frames[d].index);else for(var d=0,e=a.length;e>d;d++)b?c.push(a[d]):this.getFrameByName(a[d])&&c.push(this.getFrameByName(a[d]).index);return c}},b.FrameData.prototype.constructor=b.FrameData,Object.defineProperty(b.FrameData.prototype,"total",{get:function(){return this._frames.length}}),b.AnimationParser={spriteSheet:function(a,c,d,e,f,g,h){var i=a.cache.getImage(c);if(null==i)return null;var j=i.width,k=i.height;0>=d&&(d=Math.floor(-j/Math.min(-1,d))),0>=e&&(e=Math.floor(-k/Math.min(-1,e)));var l=Math.floor((j-g)/(d+h)),m=Math.floor((k-g)/(e+h)),n=l*m;if(-1!==f&&(n=f),0===j||0===k||d>j||e>k||0===n)return console.warn("Phaser.AnimationParser.spriteSheet: width/height zero or width/height < given frameWidth/frameHeight"),null;for(var o=new b.FrameData,p=g,q=g,r=0;n>r;r++){var s=a.rnd.uuid();o.addFrame(new b.Frame(r,p,q,d,e,"",s)),PIXI.TextureCache[s]=new PIXI.Texture(PIXI.BaseTextureCache[c],{x:p,y:q,width:d,height:e}),p+=d+h,p+d>j&&(p=g,q+=e+h)}return o},JSONData:function(a,c,d){if(!c.frames)return console.warn("Phaser.AnimationParser.JSONData: Invalid Texture Atlas JSON given, missing 'frames' array"),void console.log(c);for(var e,f=new b.FrameData,g=c.frames,h=0;h tag");for(var e,f,g,h,i,j,k,l,m,n,o,p,q=new b.FrameData,r=c.getElementsByTagName("SubTexture"),s=0;s0)for(var c=0;c0)for(var c=0;c0)for(var c=0;c0?(this._fileIndex=0,this._progressChunk=100/this._fileList.length,this.loadFile()):(this.progress=100,this.progressFloat=100,this.hasLoaded=!0,this.onLoadComplete.dispatch()))},loadFile:function(){if(!this._fileList[this._fileIndex])return void console.warn("Phaser.Loader loadFile invalid index "+this._fileIndex);var a=this._fileList[this._fileIndex],c=this;switch(this.onFileStart.dispatch(this.progress,a.key),a.type){case"image":case"spritesheet":case"textureatlas":case"bitmapfont":a.data=new Image,a.data.name=a.key,a.data.onload=function(){return c.fileComplete(c._fileIndex)},a.data.onerror=function(){return c.fileError(c._fileIndex)},this.crossOrigin&&(a.data.crossOrigin=this.crossOrigin),a.data.src=this.baseURL+a.url;break;case"audio":a.url=this.getAudioURL(a.url),null!==a.url?this.game.sound.usingWebAudio?(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="arraybuffer",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send()):this.game.sound.usingAudioTag&&(this.game.sound.touchLocked?(a.data=new Audio,a.data.name=a.key,a.data.preload="auto",a.data.src=this.baseURL+a.url,this.fileComplete(this._fileIndex)):(a.data=new Audio,a.data.name=a.key,a.data.onerror=function(){return c.fileError(c._fileIndex)},a.data.preload="auto",a.data.src=this.baseURL+a.url,a.data.addEventListener("canplaythrough",b.GAMES[this.game.id].load.fileComplete(this._fileIndex),!1),a.data.load())):this.fileError(this._fileIndex);break;case"json":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return c.jsonLoadComplete(c._fileIndex)},this._xhr.send();break;case"tilemap":if(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",a.format===b.Tilemap.TILED_JSON)this._xhr.onload=function(){return c.jsonLoadComplete(c._fileIndex)};else{if(a.format!==b.Tilemap.CSV)throw new Error("Phaser.Loader. Invalid Tilemap format: "+a.format);this._xhr.onload=function(){return c.csvLoadComplete(c._fileIndex)}}this._xhr.onerror=function(){return c.dataLoadError(c._fileIndex)},this._xhr.send();break;case"text":case"script":case"physics":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send();break;case"binary":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="arraybuffer",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send()}},getAudioURL:function(a){var b;"string"==typeof a&&(a=[a]);for(var c=0;c100&&(this.progress=100),null!==this.preloadSprite&&(0===this.preloadSprite.direction?(this.preloadSprite.rect.width=Math.floor(this.preloadSprite.width/100*this.progress),this.preloadSprite.sprite.crop(this.preloadSprite.rect)):(this.preloadSprite.rect.height=Math.floor(this.preloadSprite.height/100*this.progress),this.preloadSprite.sprite.crop(this.preloadSprite.rect))),this.onFileComplete.dispatch(this.progress,this._fileList[a].key,b,this.totalLoadedFiles(),this._fileList.length),this.totalQueuedFiles()>0?(this._fileIndex++,this.loadFile()):(this.hasLoaded=!0,this.isLoading=!1,this.removeAll(),this.onLoadComplete.dispatch())},totalLoadedFiles:function(){for(var a=0,b=0;b=this.durationMS&&(this.usingWebAudio?this.loop?(this.onLoop.dispatch(this),""===this.currentMarker?(this.currentTime=0,this.startTime=this.game.time.now):(this.onMarkerComplete.dispatch(this.currentMarker,this),this.play(this.currentMarker,0,this.volume,!0,!0))):this.stop():this.loop?(this.onLoop.dispatch(this),this.play(this.currentMarker,0,this.volume,!0,!0)):this.stop()))},play:function(a,b,c,d,e){if("undefined"==typeof a&&(a=""),"undefined"==typeof e&&(e=!0),this.isPlaying!==!0||e!==!1||this.override!==!1){if(this.isPlaying&&this.override&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.currentMarker=a,""!==a){if(!this.markers[a])return void console.warn("Phaser.Sound.play: audio marker "+a+" doesn't exist");this.position=this.markers[a].start,this.volume=this.markers[a].volume,this.loop=this.markers[a].loop,this.duration=this.markers[a].duration,this.durationMS=this.markers[a].durationMS,"undefined"!=typeof c&&(this.volume=c),"undefined"!=typeof d&&(this.loop=d),this._tempMarker=a,this._tempPosition=this.position,this._tempVolume=this.volume,this._tempLoop=this.loop}else b=b||0,"undefined"==typeof c&&(c=this._volume),"undefined"==typeof d&&(d=this.loop),this.position=b,this.volume=c,this.loop=d,this.duration=0,this.durationMS=0,this._tempMarker=a,this._tempPosition=b,this._tempVolume=c,this._tempLoop=d;this.usingWebAudio?this.game.cache.isSoundDecoded(this.key)?(null==this._buffer&&(this._buffer=this.game.cache.getSoundData(this.key)),this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this._sound.connect(this.externalNode?this.externalNode.input:this.gainNode),this.totalDuration=this._sound.buffer.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this.loop&&""===a&&(this._sound.loop=!0),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,this.position,this.duration):this._sound.start(0,this.position,this.duration),this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):(this.pendingPlayback=!0,this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).isDecoding===!1&&this.game.sound.decode(this.key,this)):this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).locked?(this.game.cache.reloadSound(this.key),this.pendingPlayback=!0):this._sound&&(this.game.device.cocoonJS||4===this._sound.readyState)?(this._sound.play(),this.totalDuration=this._sound.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this._sound.currentTime=this.position,this._sound.muted=this._muted,this._sound.volume=this._muted?0:this._volume,this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):this.pendingPlayback=!0}},restart:function(a,b,c,d){a=a||"",b=b||0,c=c||1,"undefined"==typeof d&&(d=!1),this.play(a,b,c,d,!0)},pause:function(){this.isPlaying&&this._sound&&(this.stop(),this.isPlaying=!1,this.paused=!0,this.pausedPosition=this.currentTime,this.pausedTime=this.game.time.now,this.onPause.dispatch(this))},resume:function(){if(this.paused&&this._sound){if(this.usingWebAudio){var a=this.position+this.pausedPosition/1e3;this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this._sound.connect(this.externalNode?this.externalNode.input:this.gainNode),this.loop&&(this._sound.loop=!0),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,a,this.duration):this._sound.start(0,a,this.duration)}else this._sound.play();this.isPlaying=!0,this.paused=!1,this.startTime+=this.game.time.now-this.pausedTime,this.onResume.dispatch(this)}},stop:function(){this.isPlaying&&this._sound&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.isPlaying=!1; -var a=this.currentMarker;""!==this.currentMarker&&this.onMarkerComplete.dispatch(this.currentMarker,this),this.currentMarker="",this.onStop.dispatch(this,a)},destroy:function(a){"undefined"==typeof a&&(a=!0),this.stop(),a&&this.game.sound.remove(this),this.markers={},this.context=null,this._buffer=null,this.externalNode=null,this.onDecoded.dispose(),this.onPlay.dispose(),this.onPause.dispose(),this.onResume.dispose(),this.onLoop.dispose(),this.onStop.dispose(),this.onMute.dispose(),this.onMarkerComplete.dispose()}},b.Sound.prototype.constructor=b.Sound,Object.defineProperty(b.Sound.prototype,"isDecoding",{get:function(){return this.game.cache.getSound(this.key).isDecoding}}),Object.defineProperty(b.Sound.prototype,"isDecoded",{get:function(){return this.game.cache.isSoundDecoded(this.key)}}),Object.defineProperty(b.Sound.prototype,"mute",{get:function(){return this._muted},set:function(a){a=a||null,a?(this._muted=!0,this.usingWebAudio?(this._muteVolume=this.gainNode.gain.value,this.gainNode.gain.value=0):this.usingAudioTag&&this._sound&&(this._muteVolume=this._sound.volume,this._sound.volume=0)):(this._muted=!1,this.usingWebAudio?this.gainNode.gain.value=this._muteVolume:this.usingAudioTag&&this._sound&&(this._sound.volume=this._muteVolume)),this.onMute.dispatch(this)}}),Object.defineProperty(b.Sound.prototype,"volume",{get:function(){return this._volume},set:function(a){this.usingWebAudio?(this._volume=a,this.gainNode.gain.value=a):this.usingAudioTag&&this._sound&&a>=0&&1>=a&&(this._volume=a,this._sound.volume=a)}}),b.SoundManager=function(a){this.game=a,this.onSoundDecode=new b.Signal,this._codeMuted=!1,this._muted=!1,this._unlockSource=null,this._volume=1,this._sounds=[],this.context=null,this.usingWebAudio=!0,this.usingAudioTag=!1,this.noAudio=!1,this.connectToMaster=!0,this.touchLocked=!1,this.channels=32},b.SoundManager.prototype={boot:function(){if(this.game.device.iOS&&this.game.device.webAudio===!1&&(this.channels=1),this.game.device.iOS||window.PhaserGlobal&&window.PhaserGlobal.fakeiOSTouchLock?(this.game.input.touch.callbackContext=this,this.game.input.touch.touchStartCallback=this.unlock,this.game.input.mouse.callbackContext=this,this.game.input.mouse.mouseDownCallback=this.unlock,this.touchLocked=!0):this.touchLocked=!1,window.PhaserGlobal){if(window.PhaserGlobal.disableAudio===!0)return this.usingWebAudio=!1,void(this.noAudio=!0);if(window.PhaserGlobal.disableWebAudio===!0)return this.usingWebAudio=!1,this.usingAudioTag=!0,void(this.noAudio=!1)}if(window.AudioContext)try{this.context=new window.AudioContext}catch(a){this.context=null,this.usingWebAudio=!1,this.noAudio=!0}else if(window.webkitAudioContext)try{this.context=new window.webkitAudioContext}catch(a){this.context=null,this.usingWebAudio=!1,this.noAudio=!0}window.Audio&&null===this.context&&(this.usingWebAudio=!1,this.usingAudioTag=!0,this.noAudio=!1),null!==this.context&&(this.masterGain="undefined"==typeof this.context.createGain?this.context.createGainNode():this.context.createGain(),this.masterGain.gain.value=1,this.masterGain.connect(this.context.destination))},unlock:function(){if(this.touchLocked!==!1)if(this.game.device.webAudio===!1||window.PhaserGlobal&&window.PhaserGlobal.disableWebAudio===!0)this.touchLocked=!1,this._unlockSource=null,this.game.input.touch.callbackContext=null,this.game.input.touch.touchStartCallback=null,this.game.input.mouse.callbackContext=null,this.game.input.mouse.mouseDownCallback=null;else{var a=this.context.createBuffer(1,1,22050);this._unlockSource=this.context.createBufferSource(),this._unlockSource.buffer=a,this._unlockSource.connect(this.context.destination),this._unlockSource.noteOn(0)}},stopAll:function(){for(var a=0;a255)return b.Color.getColor(255,255,255);if(a>c)return b.Color.getColor(255,255,255);var e=a+Math.round(Math.random()*(c-a)),f=a+Math.round(Math.random()*(c-a)),g=a+Math.round(Math.random()*(c-a));return b.Color.getColor32(d,e,f,g)},getRGB:function(a){return{alpha:a>>>24,red:a>>16&255,green:a>>8&255,blue:255&a}},getWebRGB:function(a){var b=(a>>>24)/255,c=a>>16&255,d=a>>8&255,e=255&a;return"rgba("+c.toString()+","+d.toString()+","+e.toString()+","+b.toString()+")"},getAlpha:function(a){return a>>>24},getAlphaFloat:function(a){return(a>>>24)/255},getRed:function(a){return a>>16&255},getGreen:function(a){return a>>8&255},getBlue:function(a){return 255&a}},b.Physics=function(a,b){b=b||{},this.game=a,this.config=b,this.arcade=null,this.p2=null,this.ninja=null,this.box2d=null,this.chipmunk=null,this.parseConfig()},b.Physics.ARCADE=0,b.Physics.P2JS=1,b.Physics.NINJA=2,b.Physics.BOX2D=3,b.Physics.CHIPMUNK=5,b.Physics.prototype={parseConfig:function(){this.config.hasOwnProperty("arcade")&&this.config.arcade!==!0||!b.Physics.hasOwnProperty("Arcade")||(this.arcade=new b.Physics.Arcade(this.game),this.game.time.deltaCap=.2),this.config.hasOwnProperty("ninja")&&this.config.ninja===!0&&b.Physics.hasOwnProperty("Ninja")&&(this.ninja=new b.Physics.Ninja(this.game)),this.config.hasOwnProperty("p2")&&this.config.p2===!0&&b.Physics.hasOwnProperty("P2")&&(this.p2=new b.Physics.P2(this.game,this.config))},startSystem:function(a){if(a===b.Physics.ARCADE?this.arcade=new b.Physics.Arcade(this.game):a===b.Physics.P2JS&&(this.p2=new b.Physics.P2(this.game,this.config)),a===b.Physics.NINJA)this.ninja=new b.Physics.Ninja(this.game);else{if(a===b.Physics.BOX2D&&null===this.box2d)throw new Error("The Box2D physics system has not been implemented yet.");if(a===b.Physics.CHIPMUNK&&null===this.chipmunk)throw new Error("The Chipmunk physics system has not been implemented yet.")}},enable:function(a,c,d){"undefined"==typeof c&&(c=b.Physics.ARCADE),"undefined"==typeof d&&(d=!1),c===b.Physics.ARCADE?this.arcade.enable(a):c===b.Physics.P2JS&&this.p2?this.p2.enable(a,d):c===b.Physics.NINJA&&this.ninja&&this.ninja.enableAABB(a)},preUpdate:function(){this.p2&&this.p2.preUpdate()},update:function(){this.p2&&this.p2.update()},setBoundsToWorld:function(){this.arcade&&this.arcade.setBoundsToWorld(),this.ninja&&this.ninja.setBoundsToWorld(),this.p2&&this.p2.setBoundsToWorld()},clear:function(){this.p2&&this.p2.clear()},destroy:function(){this.p2&&this.p2.destroy(),this.arcade=null,this.ninja=null,this.p2=null}},b.Physics.prototype.constructor=b.Physics,b.Physics.Arcade=function(a){this.game=a,this.gravity=new b.Point,this.bounds=new b.Rectangle(0,0,a.world.width,a.world.height),this.checkCollision={up:!0,down:!0,left:!0,right:!0},this.maxObjects=10,this.maxLevels=4,this.OVERLAP_BIAS=4,this.TILE_BIAS=16,this.forceX=!1,this.quadTree=new b.QuadTree(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels),this._overlap=0,this._maxOverlap=0,this._velocity1=0,this._velocity2=0,this._newVelocity1=0,this._newVelocity2=0,this._average=0,this._mapData=[],this._result=!1,this._total=0,this._angle=0,this._dx=0,this._dy=0},b.Physics.Arcade.prototype.constructor=b.Physics.Arcade,b.Physics.Arcade.prototype={setBounds:function(a,b,c,d){this.bounds.setTo(a,b,c,d)},setBoundsToWorld:function(){this.bounds.setTo(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height)},enable:function(a,c){"undefined"==typeof c&&(c=!0);var d=1;if(Array.isArray(a))for(d=a.length;d--;)a[d]instanceof b.Group?this.enable(a[d].children,c):(this.enableBody(a[d]),c&&a[d].hasOwnProperty("children")&&a[d].children.length>0&&this.enable(a[d],!0));else a instanceof b.Group?this.enable(a.children,c):(this.enableBody(a),c&&a.hasOwnProperty("children")&&a.children.length>0&&this.enable(a.children,!0))},enableBody:function(a){a.hasOwnProperty("body")&&null===a.body&&(a.body=new b.Physics.Arcade.Body(a))},updateMotion:function(a){this._velocityDelta=this.computeVelocity(0,a,a.angularVelocity,a.angularAcceleration,a.angularDrag,a.maxAngular)-a.angularVelocity,a.angularVelocity+=this._velocityDelta,a.rotation+=a.angularVelocity*this.game.time.physicsElapsed,a.velocity.x=this.computeVelocity(1,a,a.velocity.x,a.acceleration.x,a.drag.x,a.maxVelocity.x),a.velocity.y=this.computeVelocity(2,a,a.velocity.y,a.acceleration.y,a.drag.y,a.maxVelocity.y)},computeVelocity:function(a,b,c,d,e,f){return f=f||1e4,1==a&&b.allowGravity?c+=(this.gravity.x+b.gravity.x)*this.game.time.physicsElapsed:2==a&&b.allowGravity&&(c+=(this.gravity.y+b.gravity.y)*this.game.time.physicsElapsed),d?c+=d*this.game.time.physicsElapsed:e&&(this._drag=e*this.game.time.physicsElapsed,c-this._drag>0?c-=this._drag:c+this._drag<0?c+=this._drag:c=0),c>f?c=f:-f>c&&(c=-f),c},overlap:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!0);else this.collideHandler(a,b,c,d,e,!0);return this._total>0},collide:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!1);else this.collideHandler(a,b,c,d,e,!1);return this._total>0},collideHandler:function(a,c,d,e,f,g){return"undefined"!=typeof c||a.type!==b.GROUP&&a.type!==b.EMITTER?void(a&&c&&a.exists&&c.exists&&(a.type==b.SPRITE||a.type==b.TILESPRITE?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsSprite(a,c,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideSpriteVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideSpriteVsTilemapLayer(a,c,d,e,f):a.type==b.GROUP?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsGroup(c,a,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideGroupVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,c,d,e,f):a.type==b.TILEMAPLAYER?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsTilemapLayer(c,a,d,e,f):(c.type==b.GROUP||c.type==b.EMITTER)&&this.collideGroupVsTilemapLayer(c,a,d,e,f):a.type==b.EMITTER&&(c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsGroup(c,a,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideGroupVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,c,d,e,f)))):void this.collideGroupVsSelf(a,d,e,f,g)},collideSpriteVsSprite:function(a,b,c,d,e,f){return a.body&&b.body?(this.separate(a.body,b.body,d,e,f)&&(c&&c.call(e,a,b),this._total++),!0):!1},collideSpriteVsGroup:function(a,b,c,d,e,f){if(0!==b.length&&a.body){this.quadTree.clear(),this.quadTree.reset(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels),this.quadTree.populate(b),this._potentials=this.quadTree.retrieve(a);for(var g=0,h=this._potentials.length;h>g;g++)this.separate(a.body,this._potentials[g],d,e,f)&&(c&&c.call(e,a,this._potentials[g].sprite),this._total++)}},collideGroupVsSelf:function(a,b,c,d,e){if(0!==a.length)for(var f=a.children.length,g=0;f>g;g++)for(var h=g+1;f>=h;h++)a.children[g]&&a.children[h]&&a.children[g].exists&&a.children[h].exists&&this.collideSpriteVsSprite(a.children[g],a.children[h],b,c,d,e)},collideGroupVsGroup:function(a,b,c,d,e,f){if(0!==a.length&&0!==b.length)for(var g=0,h=a.children.length;h>g;g++)a.children[g].exists&&this.collideSpriteVsGroup(a.children[g],b,c,d,e,f)},collideSpriteVsTilemapLayer:function(a,b,c,d,e){if(a.body&&(this._mapData=b.getTiles(a.body.position.x-a.body.tilePadding.x,a.body.position.y-a.body.tilePadding.y,a.body.width+a.body.tilePadding.x,a.body.height+a.body.tilePadding.y,!1,!1),0!==this._mapData.length))for(var f=0;ff;f++)a.children[f].exists&&this.collideSpriteVsTilemapLayer(a.children[f],b,c,d,e)},separate:function(a,b,c,d,e){return this.intersects(a,b)?c&&c.call(d,a.sprite,b.sprite)===!1?!1:e?!0:(this._result=this.forceX||Math.abs(this.gravity.y+a.gravity.y)=b.right?!1:a.position.y>=b.bottom?!1:!0},separateX:function(a,b,c){return a.immovable&&b.immovable?!1:(this._overlap=0,this.intersects(a,b)&&(this._maxOverlap=a.deltaAbsX()+b.deltaAbsX()+this.OVERLAP_BIAS,0===a.deltaX()&&0===b.deltaX()?(a.embedded=!0,b.embedded=!0):a.deltaX()>b.deltaX()?(this._overlap=a.right-b.x,this._overlap>this._maxOverlap||a.checkCollision.right===!1||b.checkCollision.left===!1?this._overlap=0:(a.touching.none=!1,a.touching.right=!0,b.touching.none=!1,b.touching.left=!0)):a.deltaX()this._maxOverlap||a.checkCollision.left===!1||b.checkCollision.right===!1?this._overlap=0:(a.touching.none=!1,a.touching.left=!0,b.touching.none=!1,b.touching.right=!0)),0!==this._overlap)?(a.overlapX=this._overlap,b.overlapX=this._overlap,c||a.customSeparateX||b.customSeparateX?!0:(this._velocity1=a.velocity.x,this._velocity2=b.velocity.x,a.immovable||b.immovable?a.immovable?b.immovable||(b.x+=this._overlap,b.velocity.x=this._velocity1-this._velocity2*b.bounce.x):(a.x=a.x-this._overlap,a.velocity.x=this._velocity2-this._velocity1*a.bounce.x):(this._overlap*=.5,a.x=a.x-this._overlap,b.x+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.x=this._average+this._newVelocity1*a.bounce.x,b.velocity.x=this._average+this._newVelocity2*b.bounce.x),!0)):!1)},separateY:function(a,b,c){return a.immovable&&b.immovable?!1:(this._overlap=0,this.intersects(a,b)&&(this._maxOverlap=a.deltaAbsY()+b.deltaAbsY()+this.OVERLAP_BIAS,0===a.deltaY()&&0===b.deltaY()?(a.embedded=!0,b.embedded=!0):a.deltaY()>b.deltaY()?(this._overlap=a.bottom-b.y,this._overlap>this._maxOverlap||a.checkCollision.down===!1||b.checkCollision.up===!1?this._overlap=0:(a.touching.none=!1,a.touching.down=!0,b.touching.none=!1,b.touching.up=!0)):a.deltaY()this._maxOverlap||a.checkCollision.up===!1||b.checkCollision.down===!1?this._overlap=0:(a.touching.none=!1,a.touching.up=!0,b.touching.none=!1,b.touching.down=!0)),0!==this._overlap)?(a.overlapY=this._overlap,b.overlapY=this._overlap,c||a.customSeparateY||b.customSeparateY?!0:(this._velocity1=a.velocity.y,this._velocity2=b.velocity.y,a.immovable||b.immovable?a.immovable?b.immovable||(b.y+=this._overlap,b.velocity.y=this._velocity1-this._velocity2*b.bounce.y,a.moves&&(b.x+=a.x-a.prev.x)):(a.y=a.y-this._overlap,a.velocity.y=this._velocity2-this._velocity1*a.bounce.y,b.moves&&(a.x+=b.x-b.prev.x)):(this._overlap*=.5,a.y=a.y-this._overlap,b.y+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.y=this._average+this._newVelocity1*a.bounce.y,b.velocity.y=this._average+this._newVelocity2*b.bounce.y),!0)):!1)},separateTile:function(a,b,c){if(!c.intersects(b.position.x,b.position.y,b.right,b.bottom))return!1;if(c.collisionCallback&&!c.collisionCallback.call(c.collisionCallbackContext,b.sprite,c))return!1;if(c.layer.callbacks[c.index]&&!c.layer.callbacks[c.index].callback.call(c.layer.callbacks[c.index].callbackContext,b.sprite,c))return!1;if(!(c.faceLeft||c.faceRight||c.faceTop||c.faceBottom))return!1;var d=0,e=0,f=0,g=1;if(b.deltaAbsX()>b.deltaAbsY()?f=-1:b.deltaAbsX()f){if((c.faceLeft||c.faceRight)&&(d=this.tileCheckX(b,c),0!==d&&!c.intersects(b.position.x,b.position.y,b.right,b.bottom)))return!0;(c.faceTop||c.faceBottom)&&(e=this.tileCheckY(b,c))}else{if((c.faceTop||c.faceBottom)&&(e=this.tileCheckY(b,c),0!==e&&!c.intersects(b.position.x,b.position.y,b.right,b.bottom)))return!0;(c.faceLeft||c.faceRight)&&(d=this.tileCheckX(b,c))}return 0!==d||0!==e},tileCheckX:function(a,b){var c=0;return a.deltaX()<0&&!a.blocked.left&&b.collideRight&&a.checkCollision.left?b.faceRight&&a.x0&&!a.blocked.right&&b.collideLeft&&a.checkCollision.right&&b.faceLeft&&a.right>b.left&&(c=a.right-b.left,c>this.TILE_BIAS&&(c=0)),0!==c&&this.processTileSeparationX(a,c),c},tileCheckY:function(a,b){var c=0;return a.deltaY()<0&&!a.blocked.up&&b.collideDown&&a.checkCollision.up?b.faceBottom&&a.y0&&!a.blocked.down&&b.collideUp&&a.checkCollision.down&&b.faceTop&&a.bottom>b.top&&(c=a.bottom-b.top,c>this.TILE_BIAS&&(c=0)),0!==c&&this.processTileSeparationY(a,c),c},processTileSeparationX:function(a,b){0>b?a.blocked.left=!0:b>0&&(a.blocked.right=!0),a.position.x-=b,a.velocity.x=0===a.bounce.x?0:-a.velocity.x*a.bounce.x},processTileSeparationY:function(a,b){0>b?a.blocked.up=!0:b>0&&(a.blocked.down=!0),a.position.y-=b,a.velocity.y=0===a.bounce.y?0:-a.velocity.y*a.bounce.y},moveToObject:function(a,b,c,d){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=0),this._angle=Math.atan2(b.y-a.y,b.x-a.x),d>0&&(c=this.distanceBetween(a,b)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*c,a.body.velocity.y=Math.sin(this._angle)*c,this._angle},moveToPointer:function(a,b,c,d){return"undefined"==typeof b&&(b=60),c=c||this.game.input.activePointer,"undefined"==typeof d&&(d=0),this._angle=this.angleToPointer(a,c),d>0&&(b=this.distanceToPointer(a,c)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*b,a.body.velocity.y=Math.sin(this._angle)*b,this._angle},moveToXY:function(a,b,c,d,e){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=0),this._angle=Math.atan2(c-a.y,b-a.x),e>0&&(d=this.distanceToXY(a,b,c)/(e/1e3)),a.body.velocity.x=Math.cos(this._angle)*d,a.body.velocity.y=Math.sin(this._angle)*d,this._angle},velocityFromAngle:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(this.game.math.degToRad(a))*c,Math.sin(this.game.math.degToRad(a))*c)},velocityFromRotation:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(a)*c,Math.sin(a)*c)},accelerationFromRotation:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(a)*c,Math.sin(a)*c)},accelerateToObject:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleBetween(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle -},accelerateToPointer:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof b&&(b=this.game.input.activePointer),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleToPointer(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle},accelerateToXY:function(a,b,c,d,e,f){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=1e3),"undefined"==typeof f&&(f=1e3),this._angle=this.angleToXY(a,b,c),a.body.acceleration.setTo(Math.cos(this._angle)*d,Math.sin(this._angle)*d),a.body.maxVelocity.setTo(e,f),this._angle},distanceBetween:function(a,b){return this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToXY:function(a,b,c){return this._dx=a.x-b,this._dy=a.y-c,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},angleBetween:function(a,b){return this._dx=b.x-a.x,this._dy=b.y-a.y,Math.atan2(this._dy,this._dx)},angleToXY:function(a,b,c){return this._dx=b-a.x,this._dy=c-a.y,Math.atan2(this._dy,this._dx)},angleToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=b.worldX-a.x,this._dy=b.worldY-a.y,Math.atan2(this._dy,this._dx)}},b.Physics.Arcade.Body=function(a){this.sprite=a,this.game=a.game,this.type=b.Physics.ARCADE,this.offset=new b.Point,this.position=new b.Point(a.x,a.y),this.prev=new b.Point(this.position.x,this.position.y),this.allowRotation=!0,this.rotation=a.rotation,this.preRotation=a.rotation,this.sourceWidth=a.texture.frame.width,this.sourceHeight=a.texture.frame.height,this.width=a.width,this.height=a.height,this.halfWidth=Math.abs(a.width/2),this.halfHeight=Math.abs(a.height/2),this.center=new b.Point(a.x+this.halfWidth,a.y+this.halfHeight),this.velocity=new b.Point,this.newVelocity=new b.Point(0,0),this.deltaMax=new b.Point(0,0),this.acceleration=new b.Point,this.drag=new b.Point,this.allowGravity=!0,this.gravity=new b.Point(0,0),this.bounce=new b.Point,this.maxVelocity=new b.Point(1e4,1e4),this.angularVelocity=0,this.angularAcceleration=0,this.angularDrag=0,this.maxAngular=1e3,this.mass=1,this.angle=0,this.speed=0,this.facing=b.NONE,this.immovable=!1,this.moves=!0,this.customSeparateX=!1,this.customSeparateY=!1,this.overlapX=0,this.overlapY=0,this.embedded=!1,this.collideWorldBounds=!1,this.checkCollision={none:!1,any:!0,up:!0,down:!0,left:!0,right:!0},this.touching={none:!0,up:!1,down:!1,left:!1,right:!1},this.wasTouching={none:!0,up:!1,down:!1,left:!1,right:!1},this.blocked={up:!1,down:!1,left:!1,right:!1},this.tilePadding=new b.Point,this.phase=0,this._reset=!0,this._sx=a.scale.x,this._sy=a.scale.y,this._dx=0,this._dy=0},b.Physics.Arcade.Body.prototype={updateBounds:function(){var a=Math.abs(this.sprite.scale.x),b=Math.abs(this.sprite.scale.y);(a!==this._sx||b!==this._sy)&&(this.width=this.sourceWidth*a,this.height=this.sourceHeight*b,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this._sx=a,this._sy=b,this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight),this._reset=!0)},preUpdate:function(){this.phase=1,this.wasTouching.none=this.touching.none,this.wasTouching.up=this.touching.up,this.wasTouching.down=this.touching.down,this.wasTouching.left=this.touching.left,this.wasTouching.right=this.touching.right,this.touching.none=!0,this.touching.up=!1,this.touching.down=!1,this.touching.left=!1,this.touching.right=!1,this.blocked.up=!1,this.blocked.down=!1,this.blocked.left=!1,this.blocked.right=!1,this.embedded=!1,this.updateBounds(),this.position.x=this.sprite.world.x-this.sprite.anchor.x*this.width+this.offset.x,this.position.y=this.sprite.world.y-this.sprite.anchor.y*this.height+this.offset.y,this.rotation=this.sprite.angle,this.preRotation=this.rotation,(this._reset||1===this.sprite._cache[4])&&(this.prev.x=this.position.x,this.prev.y=this.position.y),this.moves&&(this.game.physics.arcade.updateMotion(this),this.newVelocity.set(this.velocity.x*this.game.time.physicsElapsed,this.velocity.y*this.game.time.physicsElapsed),this.position.x+=this.newVelocity.x,this.position.y+=this.newVelocity.y,(this.position.x!==this.prev.x||this.position.y!==this.prev.y)&&(this.speed=Math.sqrt(this.velocity.x*this.velocity.x+this.velocity.y*this.velocity.y),this.angle=Math.atan2(this.velocity.y,this.velocity.x)),this.collideWorldBounds&&this.checkWorldBounds()),this._dx=this.deltaX(),this._dy=this.deltaY(),this._reset=!1},postUpdate:function(){2!==this.phase&&(this.phase=2,this.deltaX()<0?this.facing=b.LEFT:this.deltaX()>0&&(this.facing=b.RIGHT),this.deltaY()<0?this.facing=b.UP:this.deltaY()>0&&(this.facing=b.DOWN),this.moves&&(this._dx=this.deltaX(),this._dy=this.deltaY(),0!==this.deltaMax.x&&0!==this._dx&&(this._dx<0&&this._dx<-this.deltaMax.x?this._dx=-this.deltaMax.x:this._dx>0&&this._dx>this.deltaMax.x&&(this._dx=this.deltaMax.x)),0!==this.deltaMax.y&&0!==this._dy&&(this._dy<0&&this._dy<-this.deltaMax.y?this._dy=-this.deltaMax.y:this._dy>0&&this._dy>this.deltaMax.y&&(this._dy=this.deltaMax.y)),this.sprite.x+=this._dx,this.sprite.y+=this._dy),this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight),this.allowRotation&&(this.sprite.angle+=this.deltaZ()),this.prev.x=this.position.x,this.prev.y=this.position.y)},destroy:function(){this.sprite=null},checkWorldBounds:function(){this.position.xthis.game.physics.arcade.bounds.right&&this.game.physics.arcade.checkCollision.right&&(this.position.x=this.game.physics.arcade.bounds.right-this.width,this.velocity.x*=-this.bounce.x,this.blocked.right=!0),this.position.ythis.game.physics.arcade.bounds.bottom&&this.game.physics.arcade.checkCollision.down&&(this.position.y=this.game.physics.arcade.bounds.bottom-this.height,this.velocity.y*=-this.bounce.y,this.blocked.down=!0)},setSize:function(a,b,c,d){c=c||this.offset.x,d=d||this.offset.y,this.sourceWidth=a,this.sourceHeight=b,this.width=this.sourceWidth*this._sx,this.height=this.sourceHeight*this._sy,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this.offset.setTo(c,d),this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight)},reset:function(a,b){this.velocity.set(0),this.acceleration.set(0),this.angularVelocity=0,this.angularAcceleration=0,this.position.x=a-this.sprite.anchor.x*this.width+this.offset.x,this.position.y=b-this.sprite.anchor.y*this.height+this.offset.y,this.prev.x=this.position.x,this.prev.y=this.position.y,this.rotation=this.sprite.angle,this.preRotation=this.rotation,this._sx=this.sprite.scale.x,this._sy=this.sprite.scale.y,this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight)},hitTest:function(a,c){return b.Rectangle.contains(this,a,c)},onFloor:function(){return this.blocked.down},onWall:function(){return this.blocked.left||this.blocked.right},deltaAbsX:function(){return this.deltaX()>0?this.deltaX():-this.deltaX()},deltaAbsY:function(){return this.deltaY()>0?this.deltaY():-this.deltaY()},deltaX:function(){return this.position.x-this.prev.x},deltaY:function(){return this.position.y-this.prev.y},deltaZ:function(){return this.rotation-this.preRotation}},Object.defineProperty(b.Physics.Arcade.Body.prototype,"bottom",{get:function(){return this.position.y+this.height}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"right",{get:function(){return this.position.x+this.width}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a}}),b.Physics.Arcade.Body.render=function(a,b,c,d){"undefined"==typeof c&&(c=!0),d=d||"rgba(0,255,0,0.4)",c?(a.fillStyle=d,a.fillRect(b.position.x-b.game.camera.x,b.position.y-b.game.camera.y,b.width,b.height)):(a.strokeStyle=d,a.strokeRect(b.position.x-b.game.camera.x,b.position.y-b.game.camera.y,b.width,b.height))},b.Physics.Arcade.Body.renderBodyInfo=function(a,b){a.line("x: "+b.x.toFixed(2),"y: "+b.y.toFixed(2),"width: "+b.width,"height: "+b.height),a.line("velocity x: "+b.velocity.x.toFixed(2),"y: "+b.velocity.y.toFixed(2),"deltaX: "+b._dx.toFixed(2),"deltaY: "+b._dy.toFixed(2)),a.line("acceleration x: "+b.acceleration.x.toFixed(2),"y: "+b.acceleration.y.toFixed(2),"speed: "+b.speed.toFixed(2),"angle: "+b.angle.toFixed(2)),a.line("gravity x: "+b.gravity.x,"y: "+b.gravity.y,"bounce x: "+b.bounce.x.toFixed(2),"y: "+b.bounce.y.toFixed(2)),a.line("touching left: "+b.touching.left,"right: "+b.touching.right,"up: "+b.touching.up,"down: "+b.touching.down),a.line("blocked left: "+b.blocked.left,"right: "+b.blocked.right,"up: "+b.blocked.up,"down: "+b.blocked.down)},b.Physics.Arcade.Body.prototype.constructor=b.Physics.Arcade.Body,b.Particles=function(a){this.game=a,this.emitters={},this.ID=0},b.Particles.prototype={add:function(a){return this.emitters[a.name]=a,a},remove:function(a){delete this.emitters[a.name]},update:function(){for(var a in this.emitters)this.emitters[a].exists&&this.emitters[a].update()}},b.Particles.prototype.constructor=b.Particles,b.Particles.Arcade={},b.Particles.Arcade.Emitter=function(a,c,d,e){this.maxParticles=e||50,b.Group.call(this,a),this.name="emitter"+this.game.particles.ID++,this.type=b.EMITTER,this.width=1,this.height=1,this.minParticleSpeed=new b.Point(-100,-100),this.maxParticleSpeed=new b.Point(100,100),this.minParticleScale=1,this.maxParticleScale=1,this.scaleData=null,this.minRotation=-360,this.maxRotation=360,this.minParticleAlpha=1,this.maxParticleAlpha=1,this.alphaData=null,this.gravity=100,this.particleClass=b.Particle,this.particleDrag=new b.Point,this.angularDrag=0,this.frequency=100,this.lifespan=2e3,this.bounce=new b.Point,this.on=!1,this.particleAnchor=new b.Point(.5,.5),this.blendMode=b.blendModes.NORMAL,this.emitX=c,this.emitY=d,this.autoScale=!1,this.autoAlpha=!1,this.particleBringToTop=!1,this.particleSendToBack=!1,this._minParticleScale=new b.Point(1,1),this._maxParticleScale=new b.Point(1,1),this._quantity=0,this._timer=0,this._counter=0,this._explode=!0,this._frames=null},b.Particles.Arcade.Emitter.prototype=Object.create(b.Group.prototype),b.Particles.Arcade.Emitter.prototype.constructor=b.Particles.Arcade.Emitter,b.Particles.Arcade.Emitter.prototype.update=function(){if(this.on)if(this._explode){this._counter=0;do this.emitParticle(),this._counter++;while(this._counter=this._timer&&(this.emitParticle(),this._counter++,this._quantity>0&&this._counter>=this._quantity&&(this.on=!1),this._timer=this.game.time.now+this.frequency);for(var a=this.children.length;a--;)this.children[a].exists&&this.children[a].update()},b.Particles.Arcade.Emitter.prototype.makeParticles=function(a,b,c,d,e){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=this.maxParticles),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1);var f,g=0,h=a,i=b;for(this._frames=b;c>g;)"object"==typeof a&&(h=this.game.rnd.pick(a)),"object"==typeof b&&(i=this.game.rnd.pick(b)),f=new this.particleClass(this.game,0,0,h,i),this.game.physics.arcade.enable(f,!1),d?(f.body.checkCollision.any=!0,f.body.checkCollision.none=!1):f.body.checkCollision.none=!0,f.body.collideWorldBounds=e,f.exists=!1,f.visible=!1,f.anchor.copyFrom(this.particleAnchor),this.add(f),g++;return this},b.Particles.Arcade.Emitter.prototype.kill=function(){this.on=!1,this.alive=!1,this.exists=!1},b.Particles.Arcade.Emitter.prototype.revive=function(){this.alive=!0,this.exists=!0},b.Particles.Arcade.Emitter.prototype.start=function(a,b,c,d){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=0),("undefined"==typeof c||null===c)&&(c=250),"undefined"==typeof d&&(d=0),this.revive(),this.visible=!0,this.on=!0,this._explode=a,this.lifespan=b,this.frequency=c,a?this._quantity=d:this._quantity+=d,this._counter=0,this._timer=this.game.time.now+c},b.Particles.Arcade.Emitter.prototype.emitParticle=function(){var a=this.getFirstExists(!1);null!==a&&(this.width>1||this.height>1?a.reset(this.game.rnd.integerInRange(this.left,this.right),this.game.rnd.integerInRange(this.top,this.bottom)):a.reset(this.emitX,this.emitY),a.angle=0,a.lifespan=this.lifespan,this.particleBringToTop?this.bringToTop(a):this.particleSendToBack&&this.sendToBack(a),this.autoScale?a.setScaleData(this.scaleData):this.minParticleScale!==this.maxParticleScale?a.scale.set(this.game.rnd.realInRange(this.minParticleScale,this.maxParticleScale)):(this._minParticleScale.x!==this._maxParticleScale.x||this._minParticleScale.y!==this._maxParticleScale.y)&&a.scale.set(this.game.rnd.realInRange(this._minParticleScale.x,this._maxParticleScale.x),this.game.rnd.realInRange(this._minParticleScale.y,this._maxParticleScale.y)),a.frame=Array.isArray("object"===this._frames)?this.game.rnd.pick(this._frames):this._frames,this.autoAlpha?a.setAlphaData(this.alphaData):a.alpha=this.game.rnd.realInRange(this.minParticleAlpha,this.maxParticleAlpha),a.blendMode=this.blendMode,a.body.updateBounds(),a.body.bounce.setTo(this.bounce.x,this.bounce.y),a.body.velocity.x=this.game.rnd.integerInRange(this.minParticleSpeed.x,this.maxParticleSpeed.x),a.body.velocity.y=this.game.rnd.integerInRange(this.minParticleSpeed.y,this.maxParticleSpeed.y),a.body.angularVelocity=this.game.rnd.integerInRange(this.minRotation,this.maxRotation),a.body.gravity.y=this.gravity,a.body.drag.x=this.particleDrag.x,a.body.drag.y=this.particleDrag.y,a.body.angularDrag=this.angularDrag,a.onEmit())},b.Particles.Arcade.Emitter.prototype.setSize=function(a,b){this.width=a,this.height=b},b.Particles.Arcade.Emitter.prototype.setXSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.x=a,this.maxParticleSpeed.x=b},b.Particles.Arcade.Emitter.prototype.setYSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.y=a,this.maxParticleSpeed.y=b},b.Particles.Arcade.Emitter.prototype.setRotation=function(a,b){a=a||0,b=b||0,this.minRotation=a,this.maxRotation=b},b.Particles.Arcade.Emitter.prototype.setAlpha=function(a,c,d,e,f){if("undefined"==typeof a&&(a=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=0),"undefined"==typeof e&&(e=b.Easing.Linear.None),"undefined"==typeof f&&(f=!1),this.minParticleAlpha=a,this.maxParticleAlpha=c,this.autoAlpha=!1,d>0&&a!==c){var g={v:a},h=this.game.make.tween(g).to({v:c},d,e);h.yoyo(f),this.alphaData=h.generateData(60),this.alphaData.reverse(),this.autoAlpha=!0}},b.Particles.Arcade.Emitter.prototype.setScale=function(a,c,d,e,f,g,h){if("undefined"==typeof a&&(a=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1),"undefined"==typeof e&&(e=1),"undefined"==typeof f&&(f=0),"undefined"==typeof g&&(g=b.Easing.Linear.None),"undefined"==typeof h&&(h=!1),this.minParticleScale=1,this.maxParticleScale=1,this._minParticleScale.set(a,d),this._maxParticleScale.set(c,e),this.autoScale=!1,f>0&&a!==c||d!==e){var i={x:a,y:d},j=this.game.make.tween(i).to({x:c,y:e},f,g);j.yoyo(h),this.scaleData=j.generateData(60),this.scaleData.reverse(),this.autoScale=!0}},b.Particles.Arcade.Emitter.prototype.at=function(a){a.center?(this.emitX=a.center.x,this.emitY=a.center.y):(this.emitX=a.world.x+a.anchor.x*a.width,this.emitY=a.world.y+a.anchor.y*a.height)},Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"x",{get:function(){return this.emitX},set:function(a){this.emitX=a}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"y",{get:function(){return this.emitY},set:function(a){this.emitY=a}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"left",{get:function(){return Math.floor(this.x-this.width/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"right",{get:function(){return Math.floor(this.x+this.width/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"top",{get:function(){return Math.floor(this.y-this.height/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"bottom",{get:function(){return Math.floor(this.y+this.height/2)}}),b.Tile=function(a,b,c,d,e,f){this.layer=a,this.index=b,this.x=c,this.y=d,this.worldX=c*e,this.worldY=d*f,this.width=e,this.height=f,this.centerX=Math.abs(e/2),this.centerY=Math.abs(f/2),this.alpha=1,this.properties={},this.scanned=!1,this.faceTop=!1,this.faceBottom=!1,this.faceLeft=!1,this.faceRight=!1,this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.collisionCallback=null,this.collisionCallbackContext=this},b.Tile.prototype={containsPoint:function(a,b){return!(athis.right||b>this.bottom)},intersects:function(a,b,c,d){return c<=this.worldX?!1:d<=this.worldY?!1:a>=this.worldX+this.width?!1:b>=this.worldY+this.height?!1:!0},setCollisionCallback:function(a,b){this.collisionCallback=a,this.collisionCallbackContext=b},destroy:function(){this.collisionCallback=null,this.collisionCallbackContext=null,this.properties=null},setCollision:function(a,b,c,d){this.collideLeft=a,this.collideRight=b,this.collideUp=c,this.collideDown=d},resetCollision:function(){this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.faceTop=!1,this.faceBottom=!1,this.faceLeft=!1,this.faceRight=!1},isInteresting:function(a,b){return a&&b?this.collideLeft||this.collideRight||this.collideUp||this.collideDown||this.faceTop||this.faceBottom||this.faceLeft||this.faceRight||this.collisionCallback:a?this.collideLeft||this.collideRight||this.collideUp||this.collideDown:b?this.faceTop||this.faceBottom||this.faceLeft||this.faceRight:!1},copy:function(a){this.index=a.index,this.alpha=a.alpha,this.properties=a.properties,this.collideUp=a.collideUp,this.collideDown=a.collideDown,this.collideLeft=a.collideLeft,this.collideRight=a.collideRight,this.collisionCallback=a.collisionCallback,this.collisionCallbackContext=a.collisionCallbackContext}},b.Tile.prototype.constructor=b.Tile,Object.defineProperty(b.Tile.prototype,"collides",{get:function(){return this.collideLeft||this.collideRight||this.collideUp||this.collideDown}}),Object.defineProperty(b.Tile.prototype,"canCollide",{get:function(){return this.collideLeft||this.collideRight||this.collideUp||this.collideDown||this.collisionCallback}}),Object.defineProperty(b.Tile.prototype,"left",{get:function(){return this.worldX}}),Object.defineProperty(b.Tile.prototype,"right",{get:function(){return this.worldX+this.width}}),Object.defineProperty(b.Tile.prototype,"top",{get:function(){return this.worldY}}),Object.defineProperty(b.Tile.prototype,"bottom",{get:function(){return this.worldY+this.height}}),b.Tilemap=function(a,c,d,e,f,g){this.game=a,this.key=c;var h=b.TilemapParser.parse(this.game,c,d,e,f,g);null!==h&&(this.width=h.width,this.height=h.height,this.tileWidth=h.tileWidth,this.tileHeight=h.tileHeight,this.orientation=h.orientation,this.version=h.version,this.properties=h.properties,this.widthInPixels=h.widthInPixels,this.heightInPixels=h.heightInPixels,this.layers=h.layers,this.tilesets=h.tilesets,this.tiles=h.tiles,this.objects=h.objects,this.collideIndexes=[],this.collision=h.collision,this.images=h.images,this.currentLayer=0,this.debugMap=[],this._results=[],this._tempA=0,this._tempB=0)},b.Tilemap.CSV=0,b.Tilemap.TILED_JSON=1,b.Tilemap.prototype={create:function(a,b,c,d,e,f){return"undefined"==typeof f&&(f=this.game.world),this.width=b,this.height=c,this.setTileSize(d,e),this.layers.length=0,this.createBlankLayer(a,b,c,d,e,f)},setTileSize:function(a,b){this.tileWidth=a,this.tileHeight=b,this.widthInPixels=this.width*a,this.heightInPixels=this.height*b},addTilesetImage:function(a,c,d,e,f,g,h){if("undefined"==typeof d&&(d=this.tileWidth),"undefined"==typeof e&&(e=this.tileHeight),"undefined"==typeof f&&(f=0),"undefined"==typeof g&&(g=0),"undefined"==typeof h&&(h=0),0===d&&(d=32),0===e&&(e=32),"undefined"==typeof c){if("string"!=typeof a)return null;c=a}if("string"==typeof a&&(a=this.getTilesetIndex(a)),this.tilesets[a])return this.tilesets[a].setImage(this.game.cache.getImage(c)),this.tilesets[a];var i=new b.Tileset(c,h,d,e,f,g,{});i.setImage(this.game.cache.getImage(c)),this.tilesets.push(i);for(var j=this.tilesets.length-1,k=f,l=f,m=0,n=0,o=0,p=h;pl;l++)if(this.objects[a][l].gid===c){k=new i(this.game,this.objects[a][l].x,this.objects[a][l].y,d,e),k.name=this.objects[a][l].name,k.visible=this.objects[a][l].visible,k.autoCull=g,k.exists=f,j&&(k.y-=k.height),h.add(k);for(var n in this.objects[a][l].properties)h.set(k,n,this.objects[a][l].properties[n],!1,!1,0)}},createLayer:function(a,c,d,e){"undefined"==typeof c&&(c=this.game.width),"undefined"==typeof d&&(d=this.game.height),"undefined"==typeof e&&(e=this.game.world);var f=a;return"string"==typeof a&&(f=this.getLayerIndex(a)),null===f||f>this.layers.length?void console.warn("Tilemap.createLayer: Invalid layer ID given: "+f):e.add(new b.TilemapLayer(this.game,this,f,c,d))},createBlankLayer:function(a,c,d,e,f,g){if("undefined"==typeof g&&(g=this.game.world),null!==this.getLayerIndex(a))return void console.warn("Tilemap.createBlankLayer: Layer with matching name already exists");for(var h,i=[],j=0;d>j;j++){h=[];for(var k=0;c>k;k++)h.push(null);i.push(h)}var l={name:a,x:0,y:0,width:c,height:d,widthInPixels:c*e,heightInPixels:d*f,alpha:1,visible:!0,properties:{},indexes:[],callbacks:[],bodies:[],data:i};this.layers.push(l),this.currentLayer=this.layers.length-1;var m=l.widthInPixels,n=l.heightInPixels;m>this.game.width&&(m=this.game.width),n>this.game.height&&(n=this.game.height);var i=new b.TilemapLayer(this.game,this,this.layers.length-1,m,n);return i.name=a,g.add(i)},getIndex:function(a,b){for(var c=0;ce;e++)this.layers[d].callbacks[a[e]]={callback:b,callbackContext:c}},setTileLocationCallback:function(a,b,c,d,e,f,g){if(g=this.getLayer(g),this.copy(a,b,c,d,g),!(this._results.length<2))for(var h=1;hd;d++)this.setCollisionByIndex(a[d],b,c,!1);this.calculateFaces(c)},setCollisionBetween:function(a,b,c,d){if("undefined"==typeof c&&(c=!0),d=this.getLayer(d),!(a>b)){for(var e=a;b>=e;e++)this.setCollisionByIndex(e,c,d,!1);this.calculateFaces(d)}},setCollisionByExclusion:function(a,b,c){"undefined"==typeof b&&(b=!0),c=this.getLayer(c);for(var d=0,e=this.tiles.length;e>d;d++)-1===a.indexOf(d)&&this.setCollisionByIndex(d,b,c,!1);this.calculateFaces(c)},setCollisionByIndex:function(a,b,c,d){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=this.currentLayer),"undefined"==typeof d&&(d=!0),b)this.collideIndexes.push(a);else{var e=this.collideIndexes.indexOf(a);e>-1&&this.collideIndexes.splice(e,1)}for(var f=0;ff;f++)for(var h=0,i=this.layers[a].width;i>h;h++){var j=this.layers[a].data[f][h];j&&(b=this.getTileAbove(a,h,f),c=this.getTileBelow(a,h,f),d=this.getTileLeft(a,h,f),e=this.getTileRight(a,h,f),j.collides&&(j.faceTop=!0,j.faceBottom=!0,j.faceLeft=!0,j.faceRight=!0),b&&b.collides&&(j.faceTop=!1),c&&c.collides&&(j.faceBottom=!1),d&&d.collides&&(j.faceLeft=!1),e&&e.collides&&(j.faceRight=!1))}},getTileAbove:function(a,b,c){return c>0?this.layers[a].data[c-1][b]:null},getTileBelow:function(a,b,c){return c0?this.layers[a].data[c][b-1]:null},getTileRight:function(a,b,c){return b=0&&a=0&&b=0&&c=0&&d-1?this.layers[e].data[d][c].setCollision(!0,!0,!0,!0):this.layers[e].data[d][c].resetCollision(),this.layers[e].dirty=!0,this.calculateFaces(e),this.layers[e].data[d][c]}return null},putTileWorldXY:function(a,b,c,d,e,f){return f=this.getLayer(f),b=this.game.math.snapToFloor(b,d)/d,c=this.game.math.snapToFloor(c,e)/e,this.putTile(a,b,c,f)},getTile:function(a,b,c){return c=this.getLayer(c),a>=0&&a=0&&ba&&(a=0),0>b&&(b=0),c>this.layers[e].width&&(c=this.layers[e].width),d>this.layers[e].height&&(d=this.layers[e].height),this._results.length=0,this._results.push({x:a,y:b,width:c,height:d,layer:e});for(var f=b;b+d>f;f++)for(var g=a;a+c>g;g++)this._results.push(this.layers[e].data[f][g]);return this._results},paste:function(a,b,c,d){if("undefined"==typeof a&&(a=0),"undefined"==typeof b&&(b=0),d=this.getLayer(d),c&&!(c.length<2)){for(var e=c[1].x-a,f=c[1].y-b,g=1;g1?this.debugMap[this.layers[this.currentLayer].data[c][d]]?"background: "+this.debugMap[this.layers[this.currentLayer].data[c][d]]:"background: #ffffff":"background: rgb(0, 0, 0)");a+="\n"}b[0]=a,console.log.apply(console,b)},destroy:function(){this.removeAllLayers(),this.data=[],this.game=null}},b.Tilemap.prototype.constructor=b.Tilemap,b.TilemapLayer=function(a,c,d,e,f){this.game=a,this.map=c,this.index=d,this.layer=c.layers[d],this.canvas=b.Canvas.create(e,f,"",!0),this.context=this.canvas.getContext("2d"),this.baseTexture=new PIXI.BaseTexture(this.canvas),this.texture=new PIXI.Texture(this.baseTexture),this.textureFrame=new b.Frame(0,0,0,e,f,"tilemapLayer",a.rnd.uuid()),b.Image.call(this,this.game,0,0,this.texture,this.textureFrame),this.name="",this.type=b.TILEMAPLAYER,this.fixedToCamera=!0,this.cameraOffset=new b.Point(0,0),this.tileColor="rgb(255, 255, 255)",this.debug=!1,this.debugAlpha=.5,this.debugColor="rgba(0, 255, 0, 1)",this.debugFill=!1,this.debugFillColor="rgba(0, 255, 0, 0.2)",this.debugCallbackColor="rgba(255, 0, 0, 1)",this.scrollFactorX=1,this.scrollFactorY=1,this.dirty=!0,this.rayStepRate=4,this._mc={cw:c.tileWidth,ch:c.tileHeight,ga:1,dx:0,dy:0,dw:0,dh:0,tx:0,ty:0,tw:0,th:0,tl:0,maxX:0,maxY:0,startX:0,startY:0,x:0,y:0,prevX:0,prevY:0},this._results=[],this.updateMax()},b.TilemapLayer.prototype=Object.create(b.Image.prototype),b.TilemapLayer.prototype.constructor=b.TilemapLayer,b.TilemapLayer.prototype.postUpdate=function(){b.Image.prototype.postUpdate.call(this),this.scrollX=this.game.camera.x*this.scrollFactorX,this.scrollY=this.game.camera.y*this.scrollFactorY,this.render(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y)},b.TilemapLayer.prototype.resizeWorld=function(){this.game.world.setBounds(0,0,this.layer.widthInPixels,this.layer.heightInPixels)},b.TilemapLayer.prototype._fixX=function(a){return 0>a&&(a=0),1===this.scrollFactorX?a:this._mc.x+(a-this._mc.x/this.scrollFactorX)},b.TilemapLayer.prototype._unfixX=function(a){return 1===this.scrollFactorX?a:this._mc.x/this.scrollFactorX+(a-this._mc.x) -},b.TilemapLayer.prototype._fixY=function(a){return 0>a&&(a=0),1===this.scrollFactorY?a:this._mc.y+(a-this._mc.y/this.scrollFactorY)},b.TilemapLayer.prototype._unfixY=function(a){return 1===this.scrollFactorY?a:this._mc.y/this.scrollFactorY+(a-this._mc.y)},b.TilemapLayer.prototype.getTileX=function(a){return this.game.math.snapToFloor(this._fixX(a),this.map.tileWidth)/this.map.tileWidth},b.TilemapLayer.prototype.getTileY=function(a){return this.game.math.snapToFloor(this._fixY(a),this.map.tileHeight)/this.map.tileHeight},b.TilemapLayer.prototype.getTileXY=function(a,b,c){return c.x=this.getTileX(a),c.y=this.getTileY(b),c},b.TilemapLayer.prototype.getRayCastTiles=function(a,b,c,d){("undefined"==typeof b||null===b)&&(b=this.rayStepRate),"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1);var e=this.getTiles(a.x,a.y,a.width,a.height,c,d);if(0===e.length)return[];for(var f=a.coordinatesOnLine(b),g=f.length,h=[],i=0;ij;j++)if(e[i].containsPoint(f[j][0],f[j][1])){h.push(e[i]);break}return h},b.TilemapLayer.prototype.getTiles=function(a,b,c,d,e,f){"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=!1),a=this._fixX(a),b=this._fixY(b),c>this.layer.widthInPixels&&(c=this.layer.widthInPixels),d>this.layer.heightInPixels&&(d=this.layer.heightInPixels),this._mc.tx=this.game.math.snapToFloor(a,this._mc.cw)/this._mc.cw,this._mc.ty=this.game.math.snapToFloor(b,this._mc.ch)/this._mc.ch,this._mc.tw=(this.game.math.snapToCeil(c,this._mc.cw)+this._mc.cw)/this._mc.cw,this._mc.th=(this.game.math.snapToCeil(d,this._mc.ch)+this._mc.ch)/this._mc.ch,this._results.length=0;for(var g=this._mc.ty;gthis.layer.width&&(this._mc.maxX=this.layer.width),this._mc.maxY>this.layer.height&&(this._mc.maxY=this.layer.height)),this.dirty=!0},b.TilemapLayer.prototype.render=function(){if(this.layer.dirty&&(this.dirty=!0),this.dirty&&this.visible){this._mc.prevX=this._mc.dx,this._mc.prevY=this._mc.dy,this._mc.dx=-(this._mc.x-this._mc.startX*this.map.tileWidth),this._mc.dy=-(this._mc.y-this._mc.startY*this.map.tileHeight),this._mc.tx=this._mc.dx,this._mc.ty=this._mc.dy,this.context.clearRect(0,0,this.canvas.width,this.canvas.height),this.context.fillStyle=this.tileColor;var a,c;this.debug&&(this.context.globalAlpha=this.debugAlpha);for(var d=this._mc.startY,e=this._mc.startY+this._mc.maxY;e>d;d++){this._column=this.layer.data[d];for(var f=this._mc.startX,g=this._mc.startX+this._mc.maxX;g>f;f++)this._column[f]&&(a=this._column[f],c=this.map.tilesets[this.map.tiles[a.index][2]],this.debug===!1&&a.alpha!==this.context.globalAlpha&&(this.context.globalAlpha=a.alpha),c.draw(this.context,Math.floor(this._mc.tx),Math.floor(this._mc.ty),a.index),a.debug&&(this.context.fillStyle="rgba(0, 255, 0, 0.4)",this.context.fillRect(Math.floor(this._mc.tx),Math.floor(this._mc.ty),this.map.tileWidth,this.map.tileHeight))),this._mc.tx+=this.map.tileWidth;this._mc.tx=this._mc.dx,this._mc.ty+=this.map.tileHeight}return this.debug&&(this.context.globalAlpha=1,this.renderDebug()),this.game.renderType===b.WEBGL&&PIXI.updateWebGLTexture(this.baseTexture,this.game.renderer.gl),this.dirty=!1,this.layer.dirty=!1,!0}},b.TilemapLayer.prototype.renderDebug=function(){this._mc.tx=this._mc.dx,this._mc.ty=this._mc.dy,this.context.strokeStyle=this.debugColor,this.context.fillStyle=this.debugFillColor;for(var a=this._mc.startY,b=this._mc.startY+this._mc.maxY;b>a;a++){this._column=this.layer.data[a];for(var c=this._mc.startX,d=this._mc.startX+this._mc.maxX;d>c;c++){var e=this._column[c];e&&(e.faceTop||e.faceBottom||e.faceLeft||e.faceRight)&&(this._mc.tx=Math.floor(this._mc.tx),this.debugFill&&this.context.fillRect(this._mc.tx,this._mc.ty,this._mc.cw,this._mc.ch),this.context.beginPath(),e.faceTop&&(this.context.moveTo(this._mc.tx,this._mc.ty),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty)),e.faceBottom&&(this.context.moveTo(this._mc.tx,this._mc.ty+this._mc.ch),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty+this._mc.ch)),e.faceLeft&&(this.context.moveTo(this._mc.tx,this._mc.ty),this.context.lineTo(this._mc.tx,this._mc.ty+this._mc.ch)),e.faceRight&&(this.context.moveTo(this._mc.tx+this._mc.cw,this._mc.ty),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty+this._mc.ch)),this.context.stroke()),this._mc.tx+=this.map.tileWidth}this._mc.tx=this._mc.dx,this._mc.ty+=this.map.tileHeight}},Object.defineProperty(b.TilemapLayer.prototype,"scrollX",{get:function(){return this._mc.x},set:function(a){a!==this._mc.x&&a>=0&&this.layer.widthInPixels>this.width&&(this._mc.x=a,this._mc.x>this.layer.widthInPixels-this.width&&(this._mc.x=this.layer.widthInPixels-this.width),this._mc.startX=this.game.math.floor(this._mc.x/this.map.tileWidth),this._mc.startX<0&&(this._mc.startX=0),this._mc.startX+this._mc.maxX>this.layer.width&&(this._mc.startX=this.layer.width-this._mc.maxX),this.dirty=!0)}}),Object.defineProperty(b.TilemapLayer.prototype,"scrollY",{get:function(){return this._mc.y},set:function(a){a!==this._mc.y&&a>=0&&this.layer.heightInPixels>this.height&&(this._mc.y=a,this._mc.y>this.layer.heightInPixels-this.height&&(this._mc.y=this.layer.heightInPixels-this.height),this._mc.startY=this.game.math.floor(this._mc.y/this.map.tileHeight),this._mc.startY<0&&(this._mc.startY=0),this._mc.startY+this._mc.maxY>this.layer.height&&(this._mc.startY=this.layer.height-this._mc.maxY),this.dirty=!0)}}),Object.defineProperty(b.TilemapLayer.prototype,"collisionWidth",{get:function(){return this._mc.cw},set:function(a){this._mc.cw=a,this.dirty=!0}}),Object.defineProperty(b.TilemapLayer.prototype,"collisionHeight",{get:function(){return this._mc.ch},set:function(a){this._mc.ch=a,this.dirty=!0}}),b.TilemapParser={parse:function(a,c,d,e,f,g){if("undefined"==typeof d&&(d=32),"undefined"==typeof e&&(e=32),"undefined"==typeof f&&(f=10),"undefined"==typeof g&&(g=10),"undefined"==typeof c)return this.getEmptyData();if(null===c)return this.getEmptyData(d,e,f,g);var h=a.cache.getTilemapData(c);if(h){if(h.format===b.Tilemap.CSV)return this.parseCSV(c,h.data,d,e);if(!h.format||h.format===b.Tilemap.TILED_JSON)return this.parseTiledJSON(h.data)}else console.warn("Phaser.TilemapParser.parse - No map data found for key "+c)},parseCSV:function(a,c,d,e){var f=this.getEmptyData();c=c.trim();for(var g=[],h=c.split("\n"),i=h.length,j=0,k=0;kj;j++)h.push(a.layers[e].data[j]>0?new b.Tile(f,a.layers[e].data[j],g,i.length,a.tilewidth,a.tileheight):null),g++,g===a.layers[e].width&&(i.push(h),g=0,h=[]);f.data=i,d.push(f)}c.layers=d;for(var l=[],e=0;es;s++)if(a.layers[e].objects[s].gid){var t={gid:a.layers[e].objects[s].gid,name:a.layers[e].objects[s].name,x:a.layers[e].objects[s].x,y:a.layers[e].objects[s].y,visible:a.layers[e].objects[s].visible,properties:a.layers[e].objects[s].properties};q[a.layers[e].name].push(t)}else if(a.layers[e].objects[s].polyline){var t={name:a.layers[e].objects[s].name,x:a.layers[e].objects[s].x,y:a.layers[e].objects[s].y,width:a.layers[e].objects[s].width,height:a.layers[e].objects[s].height,visible:a.layers[e].objects[s].visible,properties:a.layers[e].objects[s].properties};t.polyline=[];for(var u=0;u=c)&&(c=32),("undefined"==typeof d||0>=d)&&(d=32),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=0),this.name=a,this.firstgid=b,this.tileWidth=c,this.tileHeight=d,this.tileMargin=e,this.tileSpacing=f,this.properties=g,this.image=null,this.rows=0,this.columns=0,this.total=0,this.drawCoords=[]},b.Tileset.prototype={draw:function(a,b,c,d){this.image&&this.drawCoords[d]&&a.drawImage(this.image,this.drawCoords[d][0],this.drawCoords[d][1],this.tileWidth,this.tileHeight,b,c,this.tileWidth,this.tileHeight)},setImage:function(a){this.image=a,this.rows=Math.round((a.height-this.tileMargin)/(this.tileHeight+this.tileSpacing)),this.columns=Math.round((a.width-this.tileMargin)/(this.tileWidth+this.tileSpacing)),this.total=this.rows*this.columns,this.drawCoords.length=0;for(var b=this.tileMargin,c=this.tileMargin,d=this.firstgid,e=0;e0&&this.enable(a[f],b,c,d,!0));else a instanceof Phaser.Group?this.enable(a.children,b,c,d,e):(this.enableBody(a,b,c,d),e&&a.hasOwnProperty("children")&&a.children.length>0&&this.enable(a.children,b,c,d,!0))},enableBody:function(a,b,c,d){a.hasOwnProperty("body")&&null===a.body&&(a.body=new Phaser.Physics.Ninja.Body(this,a,b,c,d),a.anchor.set(.5))},setBounds:function(a,b,c,d){this.bounds.setTo(a,b,c,d)},setBoundsToWorld:function(){this.bounds.setTo(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height)},clearTilemapLayerBodies:function(a,b){b=a.getLayer(b);for(var c=a.layers[b].bodies.length;c--;)a.layers[b].bodies[c].destroy();a.layers[b].bodies.length=[]},convertTilemap:function(a,b,c){b=a.getLayer(b),this.clearTilemapLayerBodies(a,b);for(var d=0,e=a.layers[b].height;e>d;d++)for(var f=0,g=a.layers[b].width;g>f;f++){var h=a.layers[b].data[d][f];if(h&&c.hasOwnProperty(h.index)){var i=new Phaser.Physics.Ninja.Body(this,null,3,c[h.index],0,h.worldX+h.centerX,h.worldY+h.centerY,h.width,h.height);a.layers[b].bodies.push(i)}}return a.layers[b].bodies},overlap:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!0);else this.collideHandler(a,b,c,d,e,!0);return this._total>0},collide:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!1);else this.collideHandler(a,b,c,d,e,!1);return this._total>0},collideHandler:function(a,b,c,d,e,f){return"undefined"!=typeof b||a.type!==Phaser.GROUP&&a.type!==Phaser.EMITTER?void(a&&b&&a.exists&&b.exists&&(a.type==Phaser.SPRITE||a.type==Phaser.TILESPRITE?b.type==Phaser.SPRITE||b.type==Phaser.TILESPRITE?this.collideSpriteVsSprite(a,b,c,d,e,f):b.type==Phaser.GROUP||b.type==Phaser.EMITTER?this.collideSpriteVsGroup(a,b,c,d,e,f):b.type==Phaser.TILEMAPLAYER&&this.collideSpriteVsTilemapLayer(a,b,c,d,e):a.type==Phaser.GROUP?b.type==Phaser.SPRITE||b.type==Phaser.TILESPRITE?this.collideSpriteVsGroup(b,a,c,d,e,f):b.type==Phaser.GROUP||b.type==Phaser.EMITTER?this.collideGroupVsGroup(a,b,c,d,e,f):b.type==Phaser.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,b,c,d,e):a.type==Phaser.TILEMAPLAYER?b.type==Phaser.SPRITE||b.type==Phaser.TILESPRITE?this.collideSpriteVsTilemapLayer(b,a,c,d,e):(b.type==Phaser.GROUP||b.type==Phaser.EMITTER)&&this.collideGroupVsTilemapLayer(b,a,c,d,e):a.type==Phaser.EMITTER&&(b.type==Phaser.SPRITE||b.type==Phaser.TILESPRITE?this.collideSpriteVsGroup(b,a,c,d,e,f):b.type==Phaser.GROUP||b.type==Phaser.EMITTER?this.collideGroupVsGroup(a,b,c,d,e,f):b.type==Phaser.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,b,c,d,e)))):void this.collideGroupVsSelf(a,c,d,e,f)},collideSpriteVsSprite:function(a,b,c,d,e,f){this.separate(a.body,b.body,d,e,f)&&(c&&c.call(e,a,b),this._total++)},collideSpriteVsGroup:function(a,b,c,d,e,f){if(0!==b.length)for(var g=0,h=b.children.length;h>g;g++)b.children[g].exists&&b.children[g].body&&this.separate(a.body,b.children[g].body,d,e,f)&&(c&&c.call(e,a,b.children[g]),this._total++)},collideGroupVsSelf:function(a,b,c,d,e){if(0!==a.length)for(var f=a.children.length,g=0;f>g;g++)for(var h=g+1;f>=h;h++)a.children[g]&&a.children[h]&&a.children[g].exists&&a.children[h].exists&&this.collideSpriteVsSprite(a.children[g],a.children[h],b,c,d,e)},collideGroupVsGroup:function(a,b,c,d,e,f){if(0!==a.length&&0!==b.length)for(var g=0,h=a.children.length;h>g;g++)a.children[g].exists&&this.collideSpriteVsGroup(a.children[g],b,c,d,e,f)},separate:function(a,b){return a.type!==Phaser.Physics.NINJA||b.type!==Phaser.Physics.NINJA?!1:a.aabb&&b.aabb?a.aabb.collideAABBVsAABB(b.aabb):a.aabb&&b.tile?a.aabb.collideAABBVsTile(b.tile):a.tile&&b.aabb?b.aabb.collideAABBVsTile(a.tile):a.circle&&b.tile?a.circle.collideCircleVsTile(b.tile):a.tile&&b.circle?b.circle.collideCircleVsTile(a.tile):void 0}},Phaser.Physics.Ninja.Body=function(a,b,c,d,e,f,g,h,i){b=b||null,"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1),"undefined"==typeof e&&(e=16),this.sprite=b,this.game=a.game,this.type=Phaser.Physics.NINJA,this.system=a,this.aabb=null,this.tile=null,this.circle=null,this.shape=null,this.drag=1,this.friction=.05,this.gravityScale=1,this.bounce=.3,this.velocity=new Phaser.Point,this.facing=Phaser.NONE,this.immovable=!1,this.collideWorldBounds=!0,this.checkCollision={none:!1,any:!0,up:!0,down:!0,left:!0,right:!0},this.touching={none:!0,up:!1,down:!1,left:!1,right:!1},this.wasTouching={none:!0,up:!1,down:!1,left:!1,right:!1},this.maxSpeed=8,b&&(f=b.x,g=b.y,h=b.width,i=b.height,0===b.anchor.x&&(f+=.5*b.width),0===b.anchor.y&&(g+=.5*b.height)),1===c?(this.aabb=new Phaser.Physics.Ninja.AABB(this,f,g,h,i),this.shape=this.aabb):2===c?(this.circle=new Phaser.Physics.Ninja.Circle(this,f,g,e),this.shape=this.circle):3===c&&(this.tile=new Phaser.Physics.Ninja.Tile(this,f,g,h,i,d),this.shape=this.tile)},Phaser.Physics.Ninja.Body.prototype={preUpdate:function(){this.wasTouching.none=this.touching.none,this.wasTouching.up=this.touching.up,this.wasTouching.down=this.touching.down,this.wasTouching.left=this.touching.left,this.wasTouching.right=this.touching.right,this.touching.none=!0,this.touching.up=!1,this.touching.down=!1,this.touching.left=!1,this.touching.right=!1,this.shape.integrate(),this.collideWorldBounds&&this.shape.collideWorldBounds()},postUpdate:function(){this.sprite&&(this.sprite.type===Phaser.TILESPRITE?(this.sprite.x=this.shape.pos.x-this.shape.xw,this.sprite.y=this.shape.pos.y-this.shape.yw):(this.sprite.x=this.shape.pos.x,this.sprite.y=this.shape.pos.y)),this.velocity.x<0?this.facing=Phaser.LEFT:this.velocity.x>0&&(this.facing=Phaser.RIGHT),this.velocity.y<0?this.facing=Phaser.UP:this.velocity.y>0&&(this.facing=Phaser.DOWN)},setZeroVelocity:function(){this.shape.oldpos.x=this.shape.pos.x,this.shape.oldpos.y=this.shape.pos.y},moveTo:function(a,b){var c=a*this.game.time.physicsElapsed,b=this.game.math.degToRad(b);this.shape.pos.x=this.shape.oldpos.x+c*Math.cos(b),this.shape.pos.y=this.shape.oldpos.y+c*Math.sin(b)},moveFrom:function(a,b){var c=-a*this.game.time.physicsElapsed,b=this.game.math.degToRad(b);this.shape.pos.x=this.shape.oldpos.x+c*Math.cos(b),this.shape.pos.y=this.shape.oldpos.y+c*Math.sin(b)},moveLeft:function(a){var b=-a*this.game.time.physicsElapsed;this.shape.pos.x=this.shape.oldpos.x+Math.min(this.maxSpeed,Math.max(-this.maxSpeed,this.shape.pos.x-this.shape.oldpos.x+b))},moveRight:function(a){var b=a*this.game.time.physicsElapsed;this.shape.pos.x=this.shape.oldpos.x+Math.min(this.maxSpeed,Math.max(-this.maxSpeed,this.shape.pos.x-this.shape.oldpos.x+b))},moveUp:function(a){var b=-a*this.game.time.physicsElapsed;this.shape.pos.y=this.shape.oldpos.y+Math.min(this.maxSpeed,Math.max(-this.maxSpeed,this.shape.pos.y-this.shape.oldpos.y+b))},moveDown:function(a){var b=a*this.game.time.physicsElapsed;this.shape.pos.y=this.shape.oldpos.y+Math.min(this.maxSpeed,Math.max(-this.maxSpeed,this.shape.pos.y-this.shape.oldpos.y+b))},reset:function(){this.velocity.set(0),this.shape.pos.x=this.sprite.x,this.shape.pos.y=this.sprite.y,this.shape.oldpos.copyFrom(this.shape.pos)},deltaAbsX:function(){return this.deltaX()>0?this.deltaX():-this.deltaX()},deltaAbsY:function(){return this.deltaY()>0?this.deltaY():-this.deltaY()},deltaX:function(){return this.shape.pos.x-this.shape.oldpos.x},deltaY:function(){return this.shape.pos.y-this.shape.oldpos.y},destroy:function(){this.sprite=null,this.system=null,this.aabb=null,this.tile=null,this.circle=null,this.shape.destroy(),this.shape=null}},Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"x",{get:function(){return this.shape.pos.x},set:function(a){this.shape.pos.x=a}}),Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"y",{get:function(){return this.shape.pos.y},set:function(a){this.shape.pos.y=a}}),Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"width",{get:function(){return this.shape.width}}),Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"height",{get:function(){return this.shape.height}}),Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"bottom",{get:function(){return this.shape.pos.y+this.shape.yw}}),Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"right",{get:function(){return this.shape.pos.x+this.shape.xw}}),Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"speed",{get:function(){return Math.sqrt(this.shape.velocity.x*this.shape.velocity.x+this.shape.velocity.y*this.shape.velocity.y)}}),Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"angle",{get:function(){return Math.atan2(this.shape.velocity.y,this.shape.velocity.x)}}),Phaser.Physics.Ninja.AABB=function(a,b,c,d,e){this.body=a,this.system=a.system,this.pos=new Phaser.Point(b,c),this.oldpos=new Phaser.Point(b,c),this.xw=Math.abs(d/2),this.yw=Math.abs(e/2),this.width=d,this.height=e,this.oH=0,this.oV=0,this.velocity=new Phaser.Point,this.aabbTileProjections={},this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_FULL]=this.projAABB_Full,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_45DEG]=this.projAABB_45Deg,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_CONCAVE]=this.projAABB_Concave,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_CONVEX]=this.projAABB_Convex,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_22DEGs]=this.projAABB_22DegS,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_22DEGb]=this.projAABB_22DegB,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_67DEGs]=this.projAABB_67DegS,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_67DEGb]=this.projAABB_67DegB,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_HALF]=this.projAABB_Half},Phaser.Physics.Ninja.AABB.prototype.constructor=Phaser.Physics.Ninja.AABB,Phaser.Physics.Ninja.AABB.COL_NONE=0,Phaser.Physics.Ninja.AABB.COL_AXIS=1,Phaser.Physics.Ninja.AABB.COL_OTHER=2,Phaser.Physics.Ninja.AABB.prototype={integrate:function(){var a=this.pos.x,b=this.pos.y;this.pos.x+=this.body.drag*this.pos.x-this.body.drag*this.oldpos.x,this.pos.y+=this.body.drag*this.pos.y-this.body.drag*this.oldpos.y+this.system.gravity*this.body.gravityScale,this.velocity.set(this.pos.x-a,this.pos.y-b),this.oldpos.set(a,b)},reportCollisionVsWorld:function(a,b,c,d){var e,f,g,h,i,j=this.pos,k=this.oldpos,l=j.x-k.x,m=j.y-k.y,n=l*c+m*d,o=n*c,p=n*d,q=l-o,r=m-p;0>n?(h=q*this.body.friction,i=r*this.body.friction,e=1+this.body.bounce,f=o*e,g=p*e,1===c?this.body.touching.left=!0:-1===c&&(this.body.touching.right=!0),1===d?this.body.touching.up=!0:-1===d&&(this.body.touching.down=!0)):f=g=h=i=0,j.x+=a,j.y+=b,k.x+=a+f+h,k.y+=b+g+i},reverse:function(){var a=this.pos.x-this.oldpos.x,b=this.pos.y-this.oldpos.y;this.oldpos.xthis.pos.x&&(this.oldpos.x=this.pos.x-a),this.oldpos.ythis.pos.y&&(this.oldpos.y=this.pos.y-b)},reportCollisionVsBody:function(a,b,c,d,e){var f=this.pos.x-this.oldpos.x,g=this.pos.y-this.oldpos.y,h=f*c+g*d;return this.body.immovable&&e.body.immovable?(a*=.5,b*=.5,this.pos.add(a,b),this.oldpos.set(this.pos.x,this.pos.y),e.pos.subtract(a,b),void e.oldpos.set(e.pos.x,e.pos.y)):void(this.body.immovable||e.body.immovable?this.body.immovable?e.body.immovable||(e.pos.subtract(a,b),0>h&&e.reverse()):(this.pos.subtract(a,b),0>h&&this.reverse()):(a*=.5,b*=.5,this.pos.add(a,b),e.pos.subtract(a,b),0>h&&(this.reverse(),e.reverse())))},collideWorldBounds:function(){var a=this.system.bounds.x-(this.pos.x-this.xw);a>0?this.reportCollisionVsWorld(a,0,1,0,null):(a=this.pos.x+this.xw-this.system.bounds.right,a>0&&this.reportCollisionVsWorld(-a,0,-1,0,null));var b=this.system.bounds.y-(this.pos.y-this.yw);b>0?this.reportCollisionVsWorld(0,b,0,1,null):(b=this.pos.y+this.yw-this.system.bounds.bottom,b>0&&this.reportCollisionVsWorld(0,-b,0,-1,null))},collideAABBVsAABB:function(a){var b=this.pos,c=a,d=c.pos.x,e=c.pos.y,f=c.xw,g=c.yw,h=b.x-d,i=f+this.xw-Math.abs(h);if(i>0){var j=b.y-e,k=g+this.yw-Math.abs(j);if(k>0){k>i?0>h?(i*=-1,k=0):k=0:0>j?(i=0,k*=-1):i=0;var l=Math.sqrt(i*i+k*k);return this.reportCollisionVsBody(i,k,i/l,k/l,c),Phaser.Physics.Ninja.AABB.COL_AXIS}}return!1},collideAABBVsTile:function(a){var b=this.pos.x-a.pos.x,c=a.xw+this.xw-Math.abs(b);if(c>0){var d=this.pos.y-a.pos.y,e=a.yw+this.yw-Math.abs(d);if(e>0)return e>c?0>b?(c*=-1,e=0):e=0:0>d?(c=0,e*=-1):c=0,this.resolveTile(c,e,this,a)}return!1},resolveTile:function(a,b,c,d){return 0i){e*=-i,f*=-i;var j=Math.sqrt(e*e+f*f),k=Math.sqrt(a*a+b*b);return j>k?(c.reportCollisionVsWorld(a,b,a/k,b/k,d),Phaser.Physics.Ninja.AABB.COL_AXIS):(c.reportCollisionVsWorld(e,f,d.signx,d.signy,d),Phaser.Physics.Ninja.AABB.COL_OTHER)}return Phaser.Physics.Ninja.AABB.COL_NONE},projAABB_45Deg:function(a,b,c,d){var e=d.signx,f=d.signy,g=c.pos.x-e*c.xw-d.pos.x,h=c.pos.y-f*c.yw-d.pos.y,i=d.sx,j=d.sy,k=g*i+h*j;if(0>k){i*=-k,j*=-k;var l=Math.sqrt(i*i+j*j),m=Math.sqrt(a*a+b*b);return l>m?(c.reportCollisionVsWorld(a,b,a/m,b/m,d),Phaser.Physics.Ninja.AABB.COL_AXIS):(c.reportCollisionVsWorld(i,j,d.sx,d.sy),Phaser.Physics.Ninja.AABB.COL_OTHER)}return Phaser.Physics.Ninja.AABB.COL_NONE},projAABB_22DegS:function(a,b,c,d){var e=d.signx,f=d.signy,g=c.pos.y-f*c.yw,h=d.pos.y-g;if(h*f>0){var i=c.pos.x-e*c.xw-(d.pos.x+e*d.xw),j=c.pos.y-f*c.yw-(d.pos.y-f*d.yw),k=d.sx,l=d.sy,m=i*k+j*l;if(0>m){k*=-m,l*=-m;var n=Math.sqrt(k*k+l*l),o=Math.sqrt(a*a+b*b),p=Math.abs(h);return n>o?o>p?(c.reportCollisionVsWorld(0,h,0,h/p,d),Phaser.Physics.Ninja.AABB.COL_OTHER):(c.reportCollisionVsWorld(a,b,a/o,b/o,d),Phaser.Physics.Ninja.AABB.COL_AXIS):n>p?(c.reportCollisionVsWorld(0,h,0,h/p,d),Phaser.Physics.Ninja.AABB.COL_OTHER):(c.reportCollisionVsWorld(k,l,d.sx,d.sy,d),Phaser.Physics.Ninja.AABB.COL_OTHER)}}return Phaser.Physics.Ninja.AABB.COL_NONE},projAABB_22DegB:function(a,b,c,d){var e=d.signx,f=d.signy,g=c.pos.x-e*c.xw-(d.pos.x-e*d.xw),h=c.pos.y-f*c.yw-(d.pos.y+f*d.yw),i=d.sx,j=d.sy,k=g*i+h*j;if(0>k){i*=-k,j*=-k;var l=Math.sqrt(i*i+j*j),m=Math.sqrt(a*a+b*b);return l>m?(c.reportCollisionVsWorld(a,b,a/m,b/m,d),Phaser.Physics.Ninja.AABB.COL_AXIS):(c.reportCollisionVsWorld(i,j,d.sx,d.sy,d),Phaser.Physics.Ninja.AABB.COL_OTHER)}return Phaser.Physics.Ninja.AABB.COL_NONE},projAABB_67DegS:function(a,b,c,d){var e=d.signx,f=d.signy,g=c.pos.x-e*c.xw,h=d.pos.x-g;if(h*e>0){var i=c.pos.x-e*c.xw-(d.pos.x-e*d.xw),j=c.pos.y-f*c.yw-(d.pos.y+f*d.yw),k=d.sx,l=d.sy,m=i*k+j*l;if(0>m){k*=-m,l*=-m;var n=Math.sqrt(k*k+l*l),o=Math.sqrt(a*a+b*b),p=Math.abs(h);return n>o?o>p?(c.reportCollisionVsWorld(h,0,h/p,0,d),Phaser.Physics.Ninja.AABB.COL_OTHER):(c.reportCollisionVsWorld(a,b,a/o,b/o,d),Phaser.Physics.Ninja.AABB.COL_AXIS):n>p?(c.reportCollisionVsWorld(h,0,h/p,0,d),Phaser.Physics.Ninja.AABB.COL_OTHER):(c.reportCollisionVsWorld(k,l,d.sx,d.sy,d),Phaser.Physics.Ninja.AABB.COL_OTHER)}}return Phaser.Physics.Ninja.AABB.COL_NONE},projAABB_67DegB:function(a,b,c,d){var e=d.signx,f=d.signy,g=c.pos.x-e*c.xw-(d.pos.x+e*d.xw),h=c.pos.y-f*c.yw-(d.pos.y-f*d.yw),i=d.sx,j=d.sy,k=g*i+h*j;if(0>k){i*=-k,j*=-k;var l=Math.sqrt(i*i+j*j),m=Math.sqrt(a*a+b*b);return l>m?(c.reportCollisionVsWorld(a,b,a/m,b/m,d),Phaser.Physics.Ninja.AABB.COL_AXIS):(c.reportCollisionVsWorld(i,j,d.sx,d.sy,d),Phaser.Physics.Ninja.AABB.COL_OTHER)}return Phaser.Physics.Ninja.AABB.COL_NONE},projAABB_Convex:function(a,b,c,d){var e=d.signx,f=d.signy,g=c.pos.x-e*c.xw-(d.pos.x-e*d.xw),h=c.pos.y-f*c.yw-(d.pos.y-f*d.yw),i=Math.sqrt(g*g+h*h),j=2*d.xw,k=Math.sqrt(j*j+0),l=k-i;if(0>e*g||0>f*h){var m=Math.sqrt(a*a+b*b);return c.reportCollisionVsWorld(a,b,a/m,b/m,d),Phaser.Physics.Ninja.AABB.COL_AXIS}return l>0?(g/=i,h/=i,c.reportCollisionVsWorld(g*l,h*l,g,h,d),Phaser.Physics.Ninja.AABB.COL_OTHER):Phaser.Physics.Ninja.AABB.COL_NONE},projAABB_Concave:function(a,b,c,d){var e=d.signx,f=d.signy,g=d.pos.x+e*d.xw-(c.pos.x-e*c.xw),h=d.pos.y+f*d.yw-(c.pos.y-f*c.yw),i=2*d.xw,j=Math.sqrt(i*i+0),k=Math.sqrt(g*g+h*h),l=k-j;if(l>0){var m=Math.sqrt(a*a+b*b);return l>m?(c.reportCollisionVsWorld(a,b,a/m,b/m,d),Phaser.Physics.Ninja.AABB.COL_AXIS):(g/=k,h/=k,c.reportCollisionVsWorld(g*l,h*l,g,h,d),Phaser.Physics.Ninja.AABB.COL_OTHER)}return Phaser.Physics.Ninja.AABB.COL_NONE},destroy:function(){this.body=null,this.system=null}},Phaser.Physics.Ninja.Tile=function(a,b,c,d,e,f){"undefined"==typeof f&&(f=Phaser.Physics.Ninja.Tile.EMPTY),this.body=a,this.system=a.system,this.id=f,this.type=Phaser.Physics.Ninja.Tile.TYPE_EMPTY,this.pos=new Phaser.Point(b,c),this.oldpos=new Phaser.Point(b,c),this.id>1&&this.id<30&&(e=d),this.xw=Math.abs(d/2),this.yw=Math.abs(e/2),this.width=d,this.height=e,this.velocity=new Phaser.Point,this.signx=0,this.signy=0,this.sx=0,this.sy=0,this.body.gravityScale=0,this.body.collideWorldBounds=!1,this.id>0&&this.setType(this.id)},Phaser.Physics.Ninja.Tile.prototype.constructor=Phaser.Physics.Ninja.Tile,Phaser.Physics.Ninja.Tile.prototype={integrate:function(){var a=this.pos.x,b=this.pos.y;this.pos.x+=this.body.drag*this.pos.x-this.body.drag*this.oldpos.x,this.pos.y+=this.body.drag*this.pos.y-this.body.drag*this.oldpos.y+this.system.gravity*this.body.gravityScale,this.velocity.set(this.pos.x-a,this.pos.y-b),this.oldpos.set(a,b)},collideWorldBounds:function(){var a=this.system.bounds.x-(this.pos.x-this.xw);a>0?this.reportCollisionVsWorld(a,0,1,0,null):(a=this.pos.x+this.xw-this.system.bounds.right,a>0&&this.reportCollisionVsWorld(-a,0,-1,0,null));var b=this.system.bounds.y-(this.pos.y-this.yw);b>0?this.reportCollisionVsWorld(0,b,0,1,null):(b=this.pos.y+this.yw-this.system.bounds.bottom,b>0&&this.reportCollisionVsWorld(0,-b,0,-1,null))},reportCollisionVsWorld:function(a,b,c,d){var e,f,g,h,i,j=this.pos,k=this.oldpos,l=j.x-k.x,m=j.y-k.y,n=l*c+m*d,o=n*c,p=n*d,q=l-o,r=m-p;0>n?(h=q*this.body.friction,i=r*this.body.friction,e=1+this.body.bounce,f=o*e,g=p*e,1===c?this.body.touching.left=!0:-1===c&&(this.body.touching.right=!0),1===d?this.body.touching.up=!0:-1===d&&(this.body.touching.down=!0)):f=g=h=i=0,j.x+=a,j.y+=b,k.x+=a+f+h,k.y+=b+g+i},setType:function(a){return a===Phaser.Physics.Ninja.Tile.EMPTY?this.clear():(this.id=a,this.updateType()),this},clear:function(){this.id=Phaser.Physics.Ninja.Tile.EMPTY,this.updateType()},destroy:function(){this.body=null,this.system=null},updateType:function(){if(0===this.id)return this.type=Phaser.Physics.Ninja.Tile.TYPE_EMPTY,this.signx=0,this.signy=0,this.sx=0,this.sy=0,!0; -if(this.idn?(h=q*this.body.friction,i=r*this.body.friction,e=1+this.body.bounce,f=o*e,g=p*e,1===c?this.body.touching.left=!0:-1===c&&(this.body.touching.right=!0),1===d?this.body.touching.up=!0:-1===d&&(this.body.touching.down=!0)):f=g=h=i=0,j.x+=a,j.y+=b,k.x+=a+f+h,k.y+=b+g+i},collideWorldBounds:function(){var a=this.system.bounds.x-(this.pos.x-this.radius);a>0?this.reportCollisionVsWorld(a,0,1,0,null):(a=this.pos.x+this.radius-this.system.bounds.right,a>0&&this.reportCollisionVsWorld(-a,0,-1,0,null));var b=this.system.bounds.y-(this.pos.y-this.radius);b>0?this.reportCollisionVsWorld(0,b,0,1,null):(b=this.pos.y+this.radius-this.system.bounds.bottom,b>0&&this.reportCollisionVsWorld(0,-b,0,-1,null))},collideCircleVsTile:function(a){var b=this.pos,c=this.radius,d=a,e=d.pos.x,f=d.pos.y,g=d.xw,h=d.yw,i=b.x-e,j=g+c-Math.abs(i);if(j>0){var k=b.y-f,l=h+c-Math.abs(k);if(l>0)return this.oH=0,this.oV=0,-g>i?this.oH=-1:i>g&&(this.oH=1),-h>k?this.oV=-1:k>h&&(this.oV=1),this.resolveCircleTile(j,l,this.oH,this.oV,this,d)}},resolveCircleTile:function(a,b,c,d,e,f){return 0a){var g=e.pos.x-f.pos.x;return 0>g?(e.reportCollisionVsWorld(-a,0,-1,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(a,0,1,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS)}var h=e.pos.y-f.pos.y;return 0>h?(e.reportCollisionVsWorld(0,-b,0,-1,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(0,b,0,1,f),Phaser.Physics.Ninja.Circle.COL_AXIS)}return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS}if(0===d)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var i=f.pos.x+c*f.xw,j=f.pos.y+d*f.yw,g=e.pos.x-i,h=e.pos.y-j,k=Math.sqrt(g*g+h*h),l=e.radius-k;return l>0?(0===k?(g=c/Math.SQRT2,h=d/Math.SQRT2):(g/=k,h/=k),e.reportCollisionVsWorld(g*l,h*l,g,h,f),Phaser.Physics.Ninja.Circle.COL_OTHER):Phaser.Physics.Ninja.Circle.COL_NONE},projCircle_45Deg:function(a,b,c,d,e,f){var g,h=f.signx,i=f.signy;if(0===c)if(0===d){var j=f.sx,k=f.sy,l=e.pos.x-j*e.radius-f.pos.x,m=e.pos.y-k*e.radius-f.pos.y,n=l*j+m*k;if(0>n){j*=-n,k*=-n,b>a?(g=a,b=0,e.pos.x-f.pos.x<0&&(a*=-1)):(g=b,a=0,e.pos.y-f.pos.y<0&&(b*=-1));var o=Math.sqrt(j*j+k*k);return o>g?(e.reportCollisionVsWorld(a,b,a/g,b/g,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(j,k,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER)}}else{if(0>i*d)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=f.sx,k=f.sy,l=e.pos.x-(f.pos.x-h*f.xw),m=e.pos.y-(f.pos.y+d*f.yw),p=l*-k+m*j;if(p*h*i>0){var q=Math.sqrt(l*l+m*m),r=e.radius-q;if(r>0)return l/=q,m/=q,e.reportCollisionVsWorld(l*r,m*r,l,m,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var n=l*j+m*k,r=e.radius-Math.abs(n);if(r>0)return e.reportCollisionVsWorld(j*r,k*r,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else if(0===d){if(0>h*c)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=f.sx,k=f.sy,l=e.pos.x-(f.pos.x+c*f.xw),m=e.pos.y-(f.pos.y-i*f.yw),p=l*-k+m*j;if(0>p*h*i){var q=Math.sqrt(l*l+m*m),r=e.radius-q;if(r>0)return l/=q,m/=q,e.reportCollisionVsWorld(l*r,m*r,l,m,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var n=l*j+m*k,r=e.radius-Math.abs(n);if(r>0)return e.reportCollisionVsWorld(j*r,k*r,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else{if(h*c+i*d>0)return Phaser.Physics.Ninja.Circle.COL_NONE;var s=f.pos.x+c*f.xw,t=f.pos.y+d*f.yw,u=e.pos.x-s,v=e.pos.y-t,q=Math.sqrt(u*u+v*v),r=e.radius-q;if(r>0)return 0===q?(u=c/Math.SQRT2,v=d/Math.SQRT2):(u/=q,v/=q),e.reportCollisionVsWorld(u*r,v*r,u,v,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE},projCircle_Concave:function(a,b,c,d,e,f){var g,h=f.signx,i=f.signy;if(0===c){if(0===d){var j=f.pos.x+h*f.xw-e.pos.x,k=f.pos.y+i*f.yw-e.pos.y,l=2*f.xw,m=Math.sqrt(l*l+0),n=Math.sqrt(j*j+k*k),o=n+e.radius-m;return o>0?(b>a?(g=a,b=0,e.pos.x-f.pos.x<0&&(a*=-1)):(g=b,a=0,e.pos.y-f.pos.y<0&&(b*=-1)),o>g?(e.reportCollisionVsWorld(a,b,a/g,b/g,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(j/=n,k/=n,e.reportCollisionVsWorld(j*o,k*o,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER)):Phaser.Physics.Ninja.Circle.COL_NONE}if(0>i*d)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var p=f.pos.x-h*f.xw,q=f.pos.y+d*f.yw,r=e.pos.x-p,s=e.pos.y-q,n=Math.sqrt(r*r+s*s),o=e.radius-n;if(o>0)return 0===n?(r=0,s=d):(r/=n,s/=n),e.reportCollisionVsWorld(r*o,s*o,r,s,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else if(0===d){if(0>h*c)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var p=f.pos.x+c*f.xw,q=f.pos.y-i*f.yw,r=e.pos.x-p,s=e.pos.y-q,n=Math.sqrt(r*r+s*s),o=e.radius-n;if(o>0)return 0===n?(r=c,s=0):(r/=n,s/=n),e.reportCollisionVsWorld(r*o,s*o,r,s,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{if(h*c+i*d>0)return Phaser.Physics.Ninja.Circle.COL_NONE;var p=f.pos.x+c*f.xw,q=f.pos.y+d*f.yw,r=e.pos.x-p,s=e.pos.y-q,n=Math.sqrt(r*r+s*s),o=e.radius-n;if(o>0)return 0===n?(r=c/Math.SQRT2,s=d/Math.SQRT2):(r/=n,s/=n),e.reportCollisionVsWorld(r*o,s*o,r,s,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE},projCircle_Convex:function(a,b,c,d,e,f){var g,h=f.signx,i=f.signy;if(0===c)if(0===d){var j=e.pos.x-(f.pos.x-h*f.xw),k=e.pos.y-(f.pos.y-i*f.yw),l=2*f.xw,m=Math.sqrt(l*l+0),n=Math.sqrt(j*j+k*k),o=m+e.radius-n;if(o>0)return b>a?(g=a,b=0,e.pos.x-f.pos.x<0&&(a*=-1)):(g=b,a=0,e.pos.y-f.pos.y<0&&(b*=-1)),o>g?(e.reportCollisionVsWorld(a,b,a/g,b/g,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(j/=n,k/=n,e.reportCollisionVsWorld(j*o,k*o,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER)}else{if(0>i*d)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=e.pos.x-(f.pos.x-h*f.xw),k=e.pos.y-(f.pos.y-i*f.yw),l=2*f.xw,m=Math.sqrt(l*l+0),n=Math.sqrt(j*j+k*k),o=m+e.radius-n;if(o>0)return j/=n,k/=n,e.reportCollisionVsWorld(j*o,k*o,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else if(0===d){if(0>h*c)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=e.pos.x-(f.pos.x-h*f.xw),k=e.pos.y-(f.pos.y-i*f.yw),l=2*f.xw,m=Math.sqrt(l*l+0),n=Math.sqrt(j*j+k*k),o=m+e.radius-n;if(o>0)return j/=n,k/=n,e.reportCollisionVsWorld(j*o,k*o,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else if(h*c+i*d>0){var j=e.pos.x-(f.pos.x-h*f.xw),k=e.pos.y-(f.pos.y-i*f.yw),l=2*f.xw,m=Math.sqrt(l*l+0),n=Math.sqrt(j*j+k*k),o=m+e.radius-n;if(o>0)return j/=n,k/=n,e.reportCollisionVsWorld(j*o,k*o,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var p=f.pos.x+c*f.xw,q=f.pos.y+d*f.yw,r=e.pos.x-p,s=e.pos.y-q,n=Math.sqrt(r*r+s*s),o=e.radius-n;if(o>0)return 0===n?(r=c/Math.SQRT2,s=d/Math.SQRT2):(r/=n,s/=n),e.reportCollisionVsWorld(r*o,s*o,r,s,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE},projCircle_Half:function(a,b,c,d,e,f){var g=f.signx,h=f.signy,i=c*g+d*h;if(i>0)return Phaser.Physics.Ninja.Circle.COL_NONE;if(0===c)if(0===d){var j=e.radius,k=e.pos.x-g*j-f.pos.x,l=e.pos.y-h*j-f.pos.y,m=g,n=h,o=k*m+l*n;if(0>o){m*=-o,n*=-o;var p=Math.sqrt(m*m+n*n),q=Math.sqrt(a*a+b*b);return p>q?(e.reportCollisionVsWorld(a,b,a/q,b/q,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(m,n,f.signx,f.signy),Phaser.Physics.Ninja.Circle.COL_OTHER)}}else{if(0!==i)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var r=e.pos.x-f.pos.x;if(0>r*g)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var s=e.pos.y-(f.pos.y+d*f.yw),t=Math.sqrt(r*r+s*s),u=e.radius-t;if(u>0)return 0===t?(r=g/Math.SQRT2,s=d/Math.SQRT2):(r/=t,s/=t),e.reportCollisionVsWorld(r*u,s*u,r,s,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else if(0===d){if(0!==i)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var s=e.pos.y-f.pos.y;if(0>s*h)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var r=e.pos.x-(f.pos.x+c*f.xw),t=Math.sqrt(r*r+s*s),u=e.radius-t;if(u>0)return 0===t?(r=g/Math.SQRT2,s=d/Math.SQRT2):(r/=t,s/=t),e.reportCollisionVsWorld(r*u,s*u,r,s,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var v=f.pos.x+c*f.xw,w=f.pos.y+d*f.yw,r=e.pos.x-v,s=e.pos.y-w,t=Math.sqrt(r*r+s*s),u=e.radius-t;if(u>0)return 0===t?(r=c/Math.SQRT2,s=d/Math.SQRT2):(r/=t,s/=t),e.reportCollisionVsWorld(r*u,s*u,r,s,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE},projCircle_22DegS:function(a,b,c,d,e,f){var g,h=f.signx,i=f.signy;if(i*d>0)return Phaser.Physics.Ninja.Circle.COL_NONE;if(0===c){if(0!==d)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=f.sx,k=f.sy,l=e.radius,m=e.pos.x-(f.pos.x-h*f.xw),n=e.pos.y-f.pos.y,o=m*-k+n*j;if(o*h*i>0){var p=Math.sqrt(m*m+n*n),q=l-p;if(q>0)return m/=p,n/=p,e.reportCollisionVsWorld(m*q,n*q,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{m-=l*j,n-=l*k;var r=m*j+n*k;if(0>r){j*=-r,k*=-r;var s=Math.sqrt(j*j+k*k);return b>a?(g=a,b=0,e.pos.x-f.pos.x<0&&(a*=-1)):(g=b,a=0,e.pos.y-f.pos.y<0&&(b*=-1)),s>g?(e.reportCollisionVsWorld(a,b,a/g,b/g,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(j,k,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER)}}}else if(0===d)if(0>h*c){var t=f.pos.x-h*f.xw,u=f.pos.y,v=e.pos.x-t,w=e.pos.y-u;if(0>w*i)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var p=Math.sqrt(v*v+w*w),q=e.radius-p;if(q>0)return 0===p?(v=c/Math.SQRT2,w=d/Math.SQRT2):(v/=p,w/=p),e.reportCollisionVsWorld(v*q,w*q,v,w,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var j=f.sx,k=f.sy,m=e.pos.x-(f.pos.x+c*f.xw),n=e.pos.y-(f.pos.y-i*f.yw),o=m*-k+n*j;if(0>o*h*i){var p=Math.sqrt(m*m+n*n),q=e.radius-p;if(q>0)return m/=p,n/=p,e.reportCollisionVsWorld(m*q,n*q,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var r=m*j+n*k,q=e.radius-Math.abs(r);if(q>0)return e.reportCollisionVsWorld(j*q,k*q,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else{var t=f.pos.x+c*f.xw,u=f.pos.y+d*f.yw,v=e.pos.x-t,w=e.pos.y-u,p=Math.sqrt(v*v+w*w),q=e.radius-p;if(q>0)return 0===p?(v=c/Math.SQRT2,w=d/Math.SQRT2):(v/=p,w/=p),e.reportCollisionVsWorld(v*q,w*q,v,w,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE},projCircle_22DegB:function(a,b,c,d,e,f){var g,h=f.signx,i=f.signy;if(0===c)if(0===d){var j=f.sx,k=f.sy,l=e.radius,m=e.pos.x-j*l-(f.pos.x-h*f.xw),n=e.pos.y-k*l-(f.pos.y+i*f.yw),o=m*j+n*k;if(0>o){j*=-o,k*=-o;var p=Math.sqrt(j*j+k*k);return b>a?(g=a,b=0,e.pos.x-f.pos.x<0&&(a*=-1)):(g=b,a=0,e.pos.y-f.pos.y<0&&(b*=-1)),p>g?(e.reportCollisionVsWorld(a,b,a/g,b/g,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(j,k,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER)}}else{if(0>i*d)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=f.sx,k=f.sy,m=e.pos.x-(f.pos.x-h*f.xw),n=e.pos.y-(f.pos.y+i*f.yw),q=m*-k+n*j;if(q*h*i>0){var r=Math.sqrt(m*m+n*n),s=e.radius-r;if(s>0)return m/=r,n/=r,e.reportCollisionVsWorld(m*s,n*s,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var o=m*j+n*k,s=e.radius-Math.abs(o);if(s>0)return e.reportCollisionVsWorld(j*s,k*s,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else if(0===d){if(0>h*c)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var m=e.pos.x-(f.pos.x+h*f.xw),n=e.pos.y-f.pos.y;if(0>n*i)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=f.sx,k=f.sy,q=m*-k+n*j;if(0>q*h*i){var r=Math.sqrt(m*m+n*n),s=e.radius-r;if(s>0)return m/=r,n/=r,e.reportCollisionVsWorld(m*s,n*s,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var o=m*j+n*k,s=e.radius-Math.abs(o);if(s>0)return e.reportCollisionVsWorld(j*s,k*s,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else{if(h*c+i*d>0){var t=Math.sqrt(5),j=1*h/t,k=2*i/t,l=e.radius,m=e.pos.x-j*l-(f.pos.x-h*f.xw),n=e.pos.y-k*l-(f.pos.y+i*f.yw),o=m*j+n*k;return 0>o?(e.reportCollisionVsWorld(-j*o,-k*o,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER):Phaser.Physics.Ninja.Circle.COL_NONE}var u=f.pos.x+c*f.xw,v=f.pos.y+d*f.yw,w=e.pos.x-u,x=e.pos.y-v,r=Math.sqrt(w*w+x*x),s=e.radius-r;if(s>0)return 0===r?(w=c/Math.SQRT2,x=d/Math.SQRT2):(w/=r,x/=r),e.reportCollisionVsWorld(w*s,x*s,w,x,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE},projCircle_67DegS:function(a,b,c,d,e,f){var g=f.signx,h=f.signy;if(g*c>0)return Phaser.Physics.Ninja.Circle.COL_NONE;if(0===c)if(0===d){var i,j=f.sx,k=f.sy,l=e.radius,m=e.pos.x-f.pos.x,n=e.pos.y-(f.pos.y-h*f.yw),o=m*-k+n*j;if(0>o*g*h){var p=Math.sqrt(m*m+n*n),q=l-p;if(q>0)return m/=p,n/=p,e.reportCollisionVsWorld(m*q,n*q,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{m-=l*j,n-=l*k;var r=m*j+n*k;if(0>r){j*=-r,k*=-r;var s=Math.sqrt(j*j+k*k);return b>a?(i=a,b=0,e.pos.x-f.pos.x<0&&(a*=-1)):(i=b,a=0,e.pos.y-f.pos.y<0&&(b*=-1)),s>i?(e.reportCollisionVsWorld(a,b,a/i,b/i,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(j,k,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER)}}}else if(0>h*d){var t=f.pos.x,u=f.pos.y-h*f.yw,v=e.pos.x-t,w=e.pos.y-u;if(0>v*g)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var p=Math.sqrt(v*v+w*w),q=e.radius-p;if(q>0)return 0===p?(v=c/Math.SQRT2,w=d/Math.SQRT2):(v/=p,w/=p),e.reportCollisionVsWorld(v*q,w*q,v,w,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var j=f.sx,k=f.sy,m=e.pos.x-(f.pos.x-g*f.xw),n=e.pos.y-(f.pos.y+d*f.yw),o=m*-k+n*j;if(o*g*h>0){var p=Math.sqrt(m*m+n*n),q=e.radius-p;if(q>0)return m/=p,n/=p,e.reportCollisionVsWorld(m*q,n*q,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var r=m*j+n*k,q=e.radius-Math.abs(r);if(q>0)return e.reportCollisionVsWorld(j*q,k*q,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else{if(0===d)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var t=f.pos.x+c*f.xw,u=f.pos.y+d*f.yw,v=e.pos.x-t,w=e.pos.y-u,p=Math.sqrt(v*v+w*w),q=e.radius-p;if(q>0)return 0===p?(v=c/Math.SQRT2,w=d/Math.SQRT2):(v/=p,w/=p),e.reportCollisionVsWorld(v*q,w*q,v,w,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE},projCircle_67DegB:function(a,b,c,d,e,f){var g=f.signx,h=f.signy;if(0===c)if(0===d){var i,j=f.sx,k=f.sy,l=e.radius,m=e.pos.x-j*l-(f.pos.x+g*f.xw),n=e.pos.y-k*l-(f.pos.y-h*f.yw),o=m*j+n*k;if(0>o){j*=-o,k*=-o;var p=Math.sqrt(j*j+k*k);return b>a?(i=a,b=0,e.pos.x-f.pos.x<0&&(a*=-1)):(i=b,a=0,e.pos.y-f.pos.y<0&&(b*=-1)),p>i?(e.reportCollisionVsWorld(a,b,a/i,b/i,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(j,k,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER)}}else{if(0>h*d)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var m=e.pos.x-f.pos.x,n=e.pos.y-(f.pos.y+h*f.yw);if(0>m*g)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=f.sx,k=f.sy,q=m*-k+n*j;if(q*g*h>0){var r=Math.sqrt(m*m+n*n),s=e.radius-r;if(s>0)return m/=r,n/=r,e.reportCollisionVsWorld(m*s,n*s,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var o=m*j+n*k,s=e.radius-Math.abs(o);if(s>0)return e.reportCollisionVsWorld(j*s,k*s,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else if(0===d){if(0>g*c)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var t=Math.sqrt(5),j=2*g/t,k=1*h/t,m=e.pos.x-(f.pos.x+g*f.xw),n=e.pos.y-(f.pos.y-h*f.yw),q=m*-k+n*j;if(0>q*g*h){var r=Math.sqrt(m*m+n*n),s=e.radius-r;if(s>0)return m/=r,n/=r,e.reportCollisionVsWorld(m*s,n*s,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var o=m*j+n*k,s=e.radius-Math.abs(o);if(s>0)return e.reportCollisionVsWorld(j*s,k*s,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else{if(g*c+h*d>0){var j=f.sx,k=f.sy,l=e.radius,m=e.pos.x-j*l-(f.pos.x+g*f.xw),n=e.pos.y-k*l-(f.pos.y-h*f.yw),o=m*j+n*k;return 0>o?(e.reportCollisionVsWorld(-j*o,-k*o,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER):Phaser.Physics.Ninja.Circle.COL_NONE}var u=f.pos.x+c*f.xw,v=f.pos.y+d*f.yw,w=e.pos.x-u,x=e.pos.y-v,r=Math.sqrt(w*w+x*x),s=e.radius-r;if(s>0)return 0===r?(w=c/Math.SQRT2,x=d/Math.SQRT2):(w/=r,x/=r),e.reportCollisionVsWorld(w*s,x*s,w,x,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE},destroy:function(){this.body=null,this.system=null}},!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define("p2",function(){return this.p2=a()}()):"undefined"!=typeof window?window.p2=a():"undefined"!=typeof global?self.p2=a():"undefined"!=typeof self&&(self.p2=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g0&&(e=1/Math.sqrt(e),a[0]=b[0]*e,a[1]=b[1]*e),a},g.dot=function(a,b){return a[0]*b[0]+a[1]*b[1]},g.cross=function(a,b,c){var d=b[0]*c[1]-b[1]*c[0];return a[0]=a[1]=0,a[2]=d,a},g.lerp=function(a,b,c,d){var e=b[0],f=b[1];return a[0]=e+d*(c[0]-e),a[1]=f+d*(c[1]-f),a},g.transformMat2=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[2]*e,a[1]=c[1]*d+c[3]*e,a},g.transformMat2d=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[2]*e+c[4],a[1]=c[1]*d+c[3]*e+c[5],a},g.transformMat3=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[3]*e+c[6],a[1]=c[1]*d+c[4]*e+c[7],a},g.transformMat4=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[4]*e+c[12],a[1]=c[1]*d+c[5]*e+c[13],a},g.forEach=function(){var a=g.create();return function(b,c,d,e,f,g){var h,i;for(c||(c=2),d||(d=0),i=e?Math.min(e*c+d,b.length):b.length,h=d;i>h;h+=c)a[0]=b[h],a[1]=b[h+1],f(a,a,g),b[h]=a[0],b[h+1]=a[1];return b}}(),g.str=function(a){return"vec2("+a[0]+", "+a[1]+")"},"undefined"!=typeof c&&(c.vec2=g)},{}],2:[function(a,b){function c(){}var d=a("./Scalar");b.exports=c,c.lineInt=function(a,b,c){c=c||0;var e,f,g,h,i,j,k,l=[0,0];return e=a[1][1]-a[0][1],f=a[0][0]-a[1][0],g=e*a[0][0]+f*a[0][1],h=b[1][1]-b[0][1],i=b[0][0]-b[1][0],j=h*b[0][0]+i*b[0][1],k=e*i-h*f,d.eq(k,0,c)||(l[0]=(i*g-f*j)/k,l[1]=(e*j-h*g)/k),l},c.segmentsIntersect=function(a,b,c,d){var e=b[0]-a[0],f=b[1]-a[1],g=d[0]-c[0],h=d[1]-c[1];if(g*f-h*e==0)return!1;var i=(e*(c[1]-a[1])+f*(a[0]-c[0]))/(g*f-h*e),j=(g*(a[1]-c[1])+h*(c[0]-a[0]))/(h*e-g*f);return i>=0&&1>=i&&j>=0&&1>=j}},{"./Scalar":5}],3:[function(a,b){function c(){}b.exports=c,c.area=function(a,b,c){return(b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1])},c.left=function(a,b,d){return c.area(a,b,d)>0},c.leftOn=function(a,b,d){return c.area(a,b,d)>=0},c.right=function(a,b,d){return c.area(a,b,d)<0},c.rightOn=function(a,b,d){return c.area(a,b,d)<=0};var d=[],e=[];c.collinear=function(a,b,f,g){if(g){var h=d,i=e;h[0]=b[0]-a[0],h[1]=b[1]-a[1],i[0]=f[0]-b[0],i[1]=f[1]-b[1];var j=h[0]*i[0]+h[1]*i[1],k=Math.sqrt(h[0]*h[0]+h[1]*h[1]),l=Math.sqrt(i[0]*i[0]+i[1]*i[1]),m=Math.acos(j/(k*l));return g>m}return 0==c.area(a,b,f)},c.sqdist=function(a,b){var c=b[0]-a[0],d=b[1]-a[1];return c*c+d*d}},{}],4:[function(a,b){function c(){this.vertices=[]}function d(a,b,c,d,e){e=e||0;var f=b[1]-a[1],h=a[0]-b[0],i=f*a[0]+h*a[1],j=d[1]-c[1],k=c[0]-d[0],l=j*c[0]+k*c[1],m=f*k-j*h;return g.eq(m,0,e)?[0,0]:[(k*i-h*l)/m,(f*l-j*i)/m]}var e=a("./Line"),f=a("./Point"),g=a("./Scalar");b.exports=c,c.prototype.at=function(a){var b=this.vertices,c=b.length;return b[0>a?a%c+c:a%c]},c.prototype.first=function(){return this.vertices[0]},c.prototype.last=function(){return this.vertices[this.vertices.length-1]},c.prototype.clear=function(){this.vertices.length=0},c.prototype.append=function(a,b,c){if("undefined"==typeof b)throw new Error("From is not given!");if("undefined"==typeof c)throw new Error("To is not given!");if(b>c-1)throw new Error("lol1");if(c>a.vertices.length)throw new Error("lol2");if(0>b)throw new Error("lol3");for(var d=b;c>d;d++)this.vertices.push(a.vertices[d])},c.prototype.makeCCW=function(){for(var a=0,b=this.vertices,c=1;cb[a][0])&&(a=c);f.left(this.at(a-1),this.at(a),this.at(a+1))||this.reverse()},c.prototype.reverse=function(){for(var a=[],b=0,c=this.vertices.length;b!==c;b++)a.push(this.vertices.pop());this.vertices=a},c.prototype.isReflex=function(a){return f.right(this.at(a-1),this.at(a),this.at(a+1))};var h=[],i=[];c.prototype.canSee=function(a,b){var c,d,g=h,j=i;if(f.leftOn(this.at(a+1),this.at(a),this.at(b))&&f.rightOn(this.at(a-1),this.at(a),this.at(b)))return!1;d=f.sqdist(this.at(a),this.at(b));for(var k=0;k!==this.vertices.length;++k)if((k+1)%this.vertices.length!==a&&k!==a&&f.leftOn(this.at(a),this.at(b),this.at(k+1))&&f.rightOn(this.at(a),this.at(b),this.at(k))&&(g[0]=this.at(a),g[1]=this.at(b),j[0]=this.at(k),j[1]=this.at(k+1),c=e.lineInt(g,j),f.sqdist(this.at(a),c)a)for(var f=a;b>=f;f++)e.vertices.push(this.vertices[f]);else{for(var f=0;b>=f;f++)e.vertices.push(this.vertices[f]);for(var f=a;f0?this.slice(a):[this]},c.prototype.slice=function(a){if(0==a.length)return[this];if(a instanceof Array&&a.length&&a[0]instanceof Array&&2==a[0].length&&a[0][0]instanceof Array){for(var b=[this],c=0;cc;c++)if(e.segmentsIntersect(a[b],a[b+1],a[c],a[c+1]))return!1;for(var b=1;bh)return console.warn("quickDecomp: max level ("+h+") reached."),a;for(var x=0;xo&&(n=o,k=l,r=y))),f.left(v.at(x+1),v.at(x),v.at(y+1))&&f.rightOn(v.at(x+1),v.at(x),v.at(y))&&(l=d(v.at(x+1),v.at(x),v.at(y),v.at(y+1)),f.left(v.at(x-1),v.at(x),l)&&(o=f.sqdist(v.vertices[x],l),m>o&&(m=o,j=l,q=y)));if(r==(q+1)%this.vertices.length)l[0]=(k[0]+j[0])/2,l[1]=(k[1]+j[1])/2,e.push(l),q>x?(t.append(v,x,q+1),t.vertices.push(l),u.vertices.push(l),0!=r&&u.append(v,r,v.vertices.length),u.append(v,0,x+1)):(0!=x&&t.append(v,x,v.vertices.length),t.append(v,0,q+1),t.vertices.push(l),u.vertices.push(l),u.append(v,r,x+1));else{if(r>q&&(q+=this.vertices.length),p=Number.MAX_VALUE,r>q)return a;for(var y=r;q>=y;++y)f.leftOn(v.at(x-1),v.at(x),v.at(y))&&f.rightOn(v.at(x+1),v.at(x),v.at(y))&&(o=f.sqdist(v.at(x),v.at(y)),p>o&&(p=o,s=y%this.vertices.length));s>x?(t.append(v,x,s+1),0!=s&&u.append(v,s,w.length),u.append(v,0,x+1)):(0!=x&&t.append(v,x,w.length),t.append(v,0,s+1),u.append(v,s,x+1))}return t.vertices.length3&&c>=0;--c)f.collinear(this.at(c-1),this.at(c),this.at(c+1),a)&&(this.vertices.splice(c%this.vertices.length,1),c--,b++);return b}},{"./Line":2,"./Point":3,"./Scalar":5}],5:[function(a,b){function c(){}b.exports=c,c.eq=function(a,b,c){return c=c||0,Math.abs(a-b) (http://steffe.se)",keywords:["p2.js","p2","physics","engine","2d"],main:"./src/p2.js",engines:{node:"*"},repository:{type:"git",url:"https://github.com/schteppe/p2.js.git"},bugs:{url:"https://github.com/schteppe/p2.js/issues"},licenses:[{type:"MIT"}],devDependencies:{grunt:"~0.4.0","grunt-contrib-jshint":"~0.9.2","grunt-contrib-nodeunit":"~0.1.2","grunt-contrib-uglify":"~0.4.0","grunt-browserify":"~2.0.1","z-schema":"~2.4.6"},dependencies:{"poly-decomp":"git://github.com/schteppe/poly-decomp.js","gl-matrix":"2.1.0"}}},{}],8:[function(a,b){function c(a){this.lowerBound=d.create(),a&&a.lowerBound&&d.copy(this.lowerBound,a.lowerBound),this.upperBound=d.create(),a&&a.upperBound&&d.copy(this.upperBound,a.upperBound)}{var d=a("../math/vec2");a("../utils/Utils")}b.exports=c;var e=d.create();c.prototype.setFromPoints=function(a,b,c){var f=this.lowerBound,g=this.upperBound;d.set(f,Number.MAX_VALUE,Number.MAX_VALUE),d.set(g,-Number.MAX_VALUE,-Number.MAX_VALUE);for(var h=0;hj;j++)i[j]>g[j]&&(g[j]=i[j]),i[j]b;b++)a.lowerBound[b]this.upperBound[b]&&(this.upperBound[b]=a.upperBound[b])},c.prototype.overlaps=function(a){var b=this.lowerBound,c=this.upperBound,d=a.lowerBound,e=a.upperBound;return(d[0]<=c[0]&&c[0]<=e[0]||b[0]<=e[0]&&e[0]<=c[0])&&(d[1]<=c[1]&&c[1]<=e[1]||b[1]<=e[1]&&e[1]<=c[1])}},{"../math/vec2":30,"../utils/Utils":45}],9:[function(a,b){function c(a){this.type=a,this.result=[],this.world=null,this.boundingVolumeType=c.AABB}var d=a("../math/vec2"),e=a("../objects/Body");b.exports=c,c.AABB=1,c.BOUNDING_CIRCLE=2,c.prototype.setWorld=function(a){this.world=a},c.prototype.getCollisionPairs=function(){throw new Error("getCollisionPairs must be implemented in a subclass!")};var f=d.create();c.boundingRadiusCheck=function(a,b){d.sub(f,a.position,b.position);var c=d.squaredLength(f),e=a.boundingRadius+b.boundingRadius;return e*e>=c},c.aabbCheck=function(a,b){return a.aabbNeedsUpdate&&a.updateAABB(),b.aabbNeedsUpdate&&b.updateAABB(),a.aabb.overlaps(b.aabb)},c.prototype.boundingVolumeCheck=function(a,b){var d;switch(this.boundingVolumeType){case c.BOUNDING_CIRCLE:d=c.boundingRadiusCheck(a,b);break;case c.AABB:d=c.aabbCheck(a,b);break;default:throw new Error("Bounding volume type not recognized: "+this.boundingVolumeType)}return d},c.canCollide=function(a,b){return a.motionState===e.STATIC&&b.motionState===e.STATIC?!1:a.motionState===e.KINEMATIC&&b.motionState===e.STATIC||a.motionState===e.STATIC&&b.motionState===e.KINEMATIC?!1:a.motionState===e.KINEMATIC&&b.motionState===e.KINEMATIC?!1:a.sleepState===e.SLEEPING&&b.sleepState===e.SLEEPING?!1:a.sleepState===e.SLEEPING&&b.motionState===e.STATIC||b.sleepState===e.SLEEPING&&a.motionState===e.STATIC?!1:!0},c.NAIVE=1,c.SAP=2},{"../math/vec2":30,"../objects/Body":31}],10:[function(a,b){function c(a){a=a||{},d.apply(this),e.extend(a,{xmin:-100,xmax:100,ymin:-100,ymax:100,nx:10,ny:10}),this.xmin=a.xmin,this.ymin=a.ymin,this.xmax=a.xmax,this.ymax=a.ymax,this.nx=a.nx,this.ny=a.ny,this.binsizeX=(this.xmax-this.xmin)/this.nx,this.binsizeY=(this.ymax-this.ymin)/this.ny}var d=(a("../shapes/Circle"),a("../shapes/Plane"),a("../shapes/Particle"),a("../collision/Broadphase")),e=(a("../math/vec2"),a("../utils/Utils"));b.exports=c,c.prototype=new d,c.prototype.getCollisionPairs=function(a){for(var b=[],c=a.bodies,e=c.length,f=(this.binsizeX,this.binsizeY,this.nx),g=this.ny,h=this.xmin,i=this.ymin,j=this.xmax,k=this.ymax,l=[],m=f*g,n=0;m>n;n++)l.push([]);for(var o=f/(j-h),p=g/(k-i),n=0;n!==e;n++)for(var q=c[n],r=q.aabb,s=Math.max(r.lowerBound[0],h),t=Math.max(r.lowerBound[1],i),u=Math.min(r.upperBound[0],j),v=Math.min(r.upperBound[1],k),w=Math.floor(o*(s-h)),x=Math.floor(p*(t-i)),y=Math.floor(o*(u-h)),z=Math.floor(p*(v-i)),A=w;y>=A;A++)for(var B=x;z>=B;B++){var C=A,D=B,E=C*(g-1)+D;E>=0&&m>E&&l[E].push(q)}for(var n=0;n!==m;n++)for(var F=l[n],A=0,G=F.length;A!==G;A++)for(var q=F[A],B=0;B!==A;B++){var H=F[B];d.canCollide(q,H)&&this.boundingVolumeCheck(q,H)&&b.push(q,H)}return b}},{"../collision/Broadphase":9,"../math/vec2":30,"../shapes/Circle":35,"../shapes/Particle":39,"../shapes/Plane":40,"../utils/Utils":45}],11:[function(a,b){function c(){d.call(this,d.NAIVE)}{var d=(a("../shapes/Circle"),a("../shapes/Plane"),a("../shapes/Shape"),a("../shapes/Particle"),a("../collision/Broadphase"));a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.getCollisionPairs=function(a){var b=a.bodies,c=this.result;c.length=0;for(var e=0,f=b.length;e!==f;e++)for(var g=b[e],h=0;e>h;h++){var i=b[h];d.canCollide(g,i)&&this.boundingVolumeCheck(g,i)&&c.push(g,i)}return c}},{"../collision/Broadphase":9,"../math/vec2":30,"../shapes/Circle":35,"../shapes/Particle":39,"../shapes/Plane":40,"../shapes/Shape":42}],12:[function(a,b){function c(){this.contactEquations=[],this.frictionEquations=[],this.enableFriction=!0,this.slipForce=10,this.frictionCoefficient=.3,this.surfaceVelocity=0,this.reuseObjects=!0,this.reusableContactEquations=[],this.reusableFrictionEquations=[],this.restitution=0,this.stiffness=1e7,this.relaxation=3,this.frictionStiffness=1e7,this.frictionRelaxation=3,this.collidingBodiesLastStep={keys:[]}}function d(a){for(var b=0,c=a.keys.length;c>b;b++)delete a[a.keys[b]];a.keys.length=0}function e(a,b){g.set(a.vertices[0],.5*-b.length,-b.radius),g.set(a.vertices[1],.5*b.length,-b.radius),g.set(a.vertices[2],.5*b.length,b.radius),g.set(a.vertices[3],.5*-b.length,b.radius)}function f(a,b,c,d){for(var e=P,f=Q,j=R,k=S,l=a,m=b.vertices,n=null,o=0;o!==m.length+1;o++){var p=m[o%m.length],q=m[(o+1)%m.length];g.rotate(e,p,d),g.rotate(f,q,d),i(e,e,c),i(f,f,c),h(j,e,l),h(k,f,l);var r=g.crossLength(j,k);if(null===n&&(n=r),0>=r*n)return!1;n=r}return!0}var g=a("../math/vec2"),h=g.sub,i=g.add,j=g.dot,k=a("../utils/Utils"),l=a("../equations/ContactEquation"),m=a("../equations/FrictionEquation"),n=a("../shapes/Circle"),o=a("../shapes/Shape"),p=(a("../objects/Body"),a("../shapes/Rectangle"));b.exports=c;var q=g.fromValues(0,1),r=g.fromValues(0,0),s=g.fromValues(0,0),t=g.fromValues(0,0),u=g.fromValues(0,0),v=g.fromValues(0,0),w=g.fromValues(0,0),x=g.fromValues(0,0),y=g.fromValues(0,0),z=g.fromValues(0,0),A=g.fromValues(0,0),B=g.fromValues(0,0),C=g.fromValues(0,0),D=g.fromValues(0,0),E=g.fromValues(0,0),F=g.fromValues(0,0),G=g.fromValues(0,0),H=g.fromValues(0,0),I=g.fromValues(0,0),J=[];c.prototype.collidedLastStep=function(a,b){var c=a.id,d=b.id;if(c>d){var e=c;c=d,d=e}return!!this.collidingBodiesLastStep[c+" "+d]},c.prototype.reset=function(){d(this.collidingBodiesLastStep);for(var a=0;a!==this.contactEquations.length;a++){var b=this.contactEquations[a],c=b.bodyA.id,e=b.bodyB.id;if(c>e){var f=c;c=e,e=f}var g=c+" "+e;this.collidingBodiesLastStep[g]||(this.collidingBodiesLastStep[g]=!0,this.collidingBodiesLastStep.keys.push(g))}if(this.reuseObjects){var h=this.contactEquations,i=this.frictionEquations,j=this.reusableFrictionEquations,l=this.reusableContactEquations;k.appendArray(l,h),k.appendArray(j,i)}this.contactEquations.length=this.frictionEquations.length=0},c.prototype.createContactEquation=function(a,b,c,d){var e=this.reusableContactEquations.length?this.reusableContactEquations.pop():new l(a,b);return e.bodyA=a,e.bodyB=b,e.shapeA=c,e.shapeB=d,e.restitution=this.restitution,e.firstImpact=!this.collidedLastStep(a,b),e.stiffness=this.stiffness,e.relaxation=this.relaxation,e.needsUpdate=!0,e.enabled=!0,e},c.prototype.createFrictionEquation=function(a,b,c,d){var e=this.reusableFrictionEquations.length?this.reusableFrictionEquations.pop():new m(a,b);return e.bodyA=a,e.bodyB=b,e.shapeA=c,e.shapeB=d,e.setSlipForce(this.slipForce),e.frictionCoefficient=this.frictionCoefficient,e.relativeVelocity=this.surfaceVelocity,e.enabled=!0,e.needsUpdate=!0,e.stiffness=this.frictionStiffness,e.relaxation=this.frictionRelaxation,e},c.prototype.createFrictionFromContact=function(a){var b=this.createFrictionEquation(a.bodyA,a.bodyB,a.shapeA,a.shapeB);return g.copy(b.contactPointA,a.contactPointA),g.copy(b.contactPointB,a.contactPointB),g.rotate(b.t,a.normalA,-Math.PI/2),b.contactEquation=a,b},c.prototype[o.LINE|o.CONVEX]=c.prototype.convexLine=function(a,b,c,d,e,f,g,h,i){return i?!1:0},c.prototype[o.LINE|o.RECTANGLE]=c.prototype.lineRectangle=function(a,b,c,d,e,f,g,h,i){return i?!1:0};var K=new p(1,1),L=g.create();c.prototype[o.CAPSULE|o.CONVEX]=c.prototype[o.CAPSULE|o.RECTANGLE]=c.prototype.convexCapsule=function(a,b,c,d,f,h,i,j,k){var l=L;g.set(l,h.length/2,0),g.rotate(l,l,j),g.add(l,l,i);var m=this.circleConvex(f,h,l,j,a,b,c,d,k,h.radius);g.set(l,-h.length/2,0),g.rotate(l,l,j),g.add(l,l,i);var n=this.circleConvex(f,h,l,j,a,b,c,d,k,h.radius);if(k&&(m||n))return!0;var o=K;e(o,h);var p=this.convexConvex(a,b,c,d,f,o,i,j,k);return p+m+n},c.prototype[o.CAPSULE|o.LINE]=c.prototype.lineCapsule=function(a,b,c,d,e,f,g,h,i){return i?!1:0};var M=g.create(),N=g.create(),O=new p(1,1);c.prototype[o.CAPSULE|o.CAPSULE]=c.prototype.capsuleCapsule=function(a,b,c,d,f,h,i,j,k){for(var l=M,m=N,n=0,o=0;2>o;o++){g.set(l,(0==o?-1:1)*b.length/2,0),g.rotate(l,l,d),g.add(l,l,c);for(var p=0;2>p;p++){g.set(m,(0==p?-1:1)*h.length/2,0),g.rotate(m,m,j),g.add(m,m,i);var q=this.circleCircle(a,b,l,d,f,h,m,j,k,b.radius,h.radius);if(k&&q)return!0;n+=q}}var r=O;e(r,b);var s=this.convexCapsule(a,r,c,d,f,h,i,j,k);if(k&&s)return!0;n+=s,e(r,h);var t=this.convexCapsule(f,r,i,j,a,b,c,d,k);return k&&t?!0:n+=t},c.prototype[o.LINE|o.LINE]=c.prototype.lineLine=function(a,b,c,d,e,f,g,h,i){return i?!1:0},c.prototype[o.PLANE|o.LINE]=c.prototype.planeLine=function(a,b,c,d,e,f,k,l,m){var n=r,o=s,p=t,A=u,B=v,C=w,D=x,E=y,F=z,G=J;numContacts=0,g.set(n,-f.length/2,0),g.set(o,f.length/2,0),g.rotate(p,n,l),g.rotate(A,o,l),i(p,p,k),i(A,A,k),g.copy(n,p),g.copy(o,A),h(B,o,n),g.normalize(C,B),g.rotate(F,C,-Math.PI/2),g.rotate(E,q,d),G[0]=n,G[1]=o;for(var H=0;HK){if(m)return!0;var L=this.createContactEquation(a,e,b,f);numContacts++,g.copy(L.normalA,E),g.normalize(L.normalA,L.normalA),g.scale(D,E,K),h(L.contactPointA,I,D),h(L.contactPointA,L.contactPointA,a.position),h(L.contactPointB,I,k),i(L.contactPointB,L.contactPointB,k),h(L.contactPointB,L.contactPointB,e.position),this.contactEquations.push(L),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(L))}}return numContacts},c.prototype[o.PARTICLE|o.CAPSULE]=c.prototype.particleCapsule=function(a,b,c,d,e,f,g,h,i){return this.circleLine(a,b,c,d,e,f,g,h,i,f.radius,0)},c.prototype[o.CIRCLE|o.LINE]=c.prototype.circleLine=function(a,b,c,d,e,f,k,l,m,n,o){var p=f,q=l,F=e,G=k,H=c,I=a,K=b,n=n||0,o="undefined"!=typeof o?o:K.radius,L=r,M=s,N=t,O=u,P=v,Q=w,R=x,S=y,T=z,U=A,V=B,W=C,X=D,Y=E,Z=J;g.set(S,-p.length/2,0),g.set(T,p.length/2,0),g.rotate(U,S,q),g.rotate(V,T,q),i(U,U,G),i(V,V,G),g.copy(S,U),g.copy(T,V),h(Q,T,S),g.normalize(R,Q),g.rotate(P,R,-Math.PI/2),h(W,H,S);var $=j(W,P);if(h(O,S,G),h(X,H,G),Math.abs($)ab&&bb>_){if(m)return!0;var cb=this.createContactEquation(I,F,b,f);return g.scale(cb.normalA,L,-1),g.normalize(cb.normalA,cb.normalA),g.scale(cb.contactPointA,cb.normalA,o),i(cb.contactPointA,cb.contactPointA,H),h(cb.contactPointA,cb.contactPointA,I.position),h(cb.contactPointB,N,G),i(cb.contactPointB,cb.contactPointB,G),h(cb.contactPointB,cb.contactPointB,F.position),this.contactEquations.push(cb),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(cb)),1}}Z[0]=S,Z[1]=T;for(var db=0;dbW&&(g.copy(Q,O),S=W,g.scale(N,K,W),g.add(N,N,O),R=!0)}}if(R){if(m)return!0;var X=this.createContactEquation(y,q,b,j);return g.sub(X.normalA,Q,x),g.normalize(X.normalA,X.normalA),g.scale(X.contactPointA,X.normalA,n),i(X.contactPointA,X.contactPointA,x),h(X.contactPointA,X.contactPointA,y.position),h(X.contactPointB,N,w),i(X.contactPointB,X.contactPointB,w),h(X.contactPointB,X.contactPointB,q.position),this.contactEquations.push(X),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(X)),1}if(n>0)for(var T=0;TW&&(Q=W,g.scale(N,J,W),g.add(N,N,z),g.copy(P,J),R=!0)}if(R){var X=this.createContactEquation(B,q,b,k);return g.scale(X.normalA,P,-1),g.normalize(X.normalA,X.normalA),g.set(X.contactPointA,0,0),i(X.contactPointA,X.contactPointA,z),h(X.contactPointA,X.contactPointA,B.position),h(X.contactPointB,N,y),i(X.contactPointB,X.contactPointB,y),h(X.contactPointB,X.contactPointB,q.position),this.contactEquations.push(X),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(X)),1}return 0},c.prototype[o.CIRCLE]=c.prototype.circleCircle=function(a,b,c,d,e,f,j,k,l,m,n){var o=a,p=b,q=c,s=e,t=f,u=j,v=r,m=m||p.radius,n=n||t.radius;h(v,c,j);var w=m+n;if(g.squaredLength(v)>w*w)return 0;if(l)return!0;var x=this.createContactEquation(o,s,b,f);return h(x.normalA,u,q),g.normalize(x.normalA,x.normalA),g.scale(x.contactPointA,x.normalA,m),g.scale(x.contactPointB,x.normalA,-n),i(x.contactPointA,x.contactPointA,q),h(x.contactPointA,x.contactPointA,o.position),i(x.contactPointB,x.contactPointB,u),h(x.contactPointB,x.contactPointB,s.position),this.contactEquations.push(x),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(x)),1},c.prototype[o.PLANE|o.CONVEX]=c.prototype[o.PLANE|o.RECTANGLE]=c.prototype.planeConvex=function(a,b,d,e,f,k,l,m,n){var o=f,p=l,u=k,v=m,w=a,x=b,y=d,z=e,A=r,B=s,C=t,D=0;g.rotate(B,q,z);for(var E=0;E0)return 0;if(l)return!0;var x=this.createContactEquation(o,m,f,b);return g.copy(x.normalA,v),g.scale(u,x.normalA,w),h(x.contactPointA,n,u),h(x.contactPointA,x.contactPointA,o.position),h(x.contactPointB,n,m.position),this.contactEquations.push(x),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(x)),1},c.prototype[o.CIRCLE|o.PARTICLE]=c.prototype.circleParticle=function(a,b,c,d,e,f,j,k,l){var m=a,n=b,o=c,p=e,q=j,s=r;if(h(s,q,o),g.squaredLength(s)>n.radius*n.radius)return 0;if(l)return!0;var t=this.createContactEquation(m,p,b,f);return g.copy(t.normalA,s),g.normalize(t.normalA,t.normalA),g.scale(t.contactPointA,t.normalA,n.radius),i(t.contactPointA,t.contactPointA,o),h(t.contactPointA,t.contactPointA,m.position),h(t.contactPointB,q,p.position),this.contactEquations.push(t),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(t)),1};{var T=new n(1),U=g.create(),V=g.create();g.create()}c.prototype[o.PLANE|o.CAPSULE]=c.prototype.planeCapsule=function(a,b,c,d,e,f,h,j,k){var l=U,m=V,n=T;g.set(l,-f.length/2,0),g.rotate(l,l,j),i(l,l,h),g.set(m,f.length/2,0),g.rotate(m,m,j),i(m,m,h),n.radius=f.radius;var o=this.circlePlane(e,n,l,0,a,b,c,d,k),p=this.circlePlane(e,n,m,0,a,b,c,d,k);return k?o||p:o+p},c.prototype.capsulePlane=function(a,b,c,d,e,f,g,h,i){return console.warn("Narrowphase.prototype.capsulePlane() is deprecated. Use .planeCapsule() instead!"),this.planeCapsule(e,f,g,h,a,b,c,d,i)},c.prototype[o.CIRCLE|o.PLANE]=c.prototype.circlePlane=function(a,b,c,d,e,f,k,l,m){var n=a,o=b,p=c,u=e,v=k,w=l;w=w||0;var x=r,y=s,z=t;h(x,p,v),g.rotate(y,q,w);var A=j(y,x);if(A>o.radius)return 0;if(m)return!0;var B=this.createContactEquation(u,n,f,b);return g.copy(B.normalA,y),g.scale(B.contactPointB,B.normalA,-o.radius),i(B.contactPointB,B.contactPointB,p),h(B.contactPointB,B.contactPointB,n.position),g.scale(z,B.normalA,A),h(B.contactPointA,x,z),i(B.contactPointA,B.contactPointA,v),h(B.contactPointA,B.contactPointA,u.position),this.contactEquations.push(B),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(B)),1},c.convexPrecision=1e-7,c.prototype[o.CONVEX]=c.prototype[o.CONVEX|o.RECTANGLE]=c.prototype[o.RECTANGLE]=c.prototype.convexConvex=function(a,b,d,e,f,k,l,m,n,o){var p=r,q=s,w=t,A=u,B=v,C=x,D=y,E=z,F=0,o=o||c.convexPrecision,G=c.findSeparatingAxis(b,d,e,k,l,m,p);if(!G)return 0;h(D,l,d),j(p,D)>0&&g.scale(p,p,-1);var H=c.getClosestEdge(b,e,p,!0),I=c.getClosestEdge(k,m,p);if(-1===H||-1===I)return 0;for(var J=0;2>J;J++){var K=H,L=I,M=b,N=k,O=d,P=l,Q=e,R=m,S=a,T=f;if(0===J){var U;U=K,K=L,L=U,U=M,M=N,N=U,U=O,O=P,P=U,U=Q,Q=R,R=U,U=S,S=T,T=U}for(var V=L;L+2>V;V++){var W=N.vertices[(V+N.vertices.length)%N.vertices.length];g.rotate(q,W,R),i(q,q,P);for(var X=0,Y=K-1;K+2>Y;Y++){var Z=M.vertices[(Y+M.vertices.length)%M.vertices.length],$=M.vertices[(Y+1+M.vertices.length)%M.vertices.length];g.rotate(w,Z,Q),g.rotate(A,$,Q),i(w,w,O),i(A,A,O),h(B,A,w),g.rotate(E,B,-Math.PI/2),g.normalize(E,E),h(D,q,w);var _=j(E,D);o>=_&&X++}if(X>=3){if(n)return!0;var ab=this.createContactEquation(S,T,M,N);F++;var Z=M.vertices[K%M.vertices.length],$=M.vertices[(K+1)%M.vertices.length];g.rotate(w,Z,Q),g.rotate(A,$,Q),i(w,w,O),i(A,A,O),h(B,A,w),g.rotate(ab.normalA,B,-Math.PI/2),g.normalize(ab.normalA,ab.normalA),h(D,q,w);var _=j(ab.normalA,D);g.scale(C,ab.normalA,_),h(ab.contactPointA,q,O),h(ab.contactPointA,ab.contactPointA,C),i(ab.contactPointA,ab.contactPointA,O),h(ab.contactPointA,ab.contactPointA,S.position),h(ab.contactPointB,q,P),i(ab.contactPointB,ab.contactPointB,P),h(ab.contactPointB,ab.contactPointB,T.position),this.contactEquations.push(ab),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(ab))}}}return F};var W=g.fromValues(0,0);c.projectConvexOntoAxis=function(a,b,c,d,e){var f,h,i=null,k=null,l=W;g.rotate(l,d,-c);for(var m=0;mi)&&(i=h),(null===k||k>h)&&(k=h);if(k>i){var n=k;k=i,i=n}var o=j(b,d);g.set(e,k+o,i+o)};var X=g.fromValues(0,0),Y=g.fromValues(0,0),Z=g.fromValues(0,0),$=g.fromValues(0,0),_=g.fromValues(0,0),ab=g.fromValues(0,0);c.findSeparatingAxis=function(a,b,d,e,f,i,j){for(var k=null,l=!1,m=!1,n=X,o=Y,p=Z,q=$,r=_,s=ab,t=0;2!==t;t++){var u=a,v=d;1===t&&(u=e,v=i);for(var w=0;w!==u.vertices.length;w++){g.rotate(o,u.vertices[w],v),g.rotate(p,u.vertices[(w+1)%u.vertices.length],v),h(n,p,o),g.rotate(q,n,-Math.PI/2),g.normalize(q,q),c.projectConvexOntoAxis(a,b,d,q,r),c.projectConvexOntoAxis(e,f,i,q,s);var x=r,y=s,z=!1;r[0]>s[0]&&(y=r,x=s,z=!0);var A=y[0]-x[1];l=A<=c.convexPrecision,(null===k||A>k)&&(g.copy(j,q),k=A,m=l)}}return m};var bb=g.fromValues(0,0),cb=g.fromValues(0,0),db=g.fromValues(0,0);c.getClosestEdge=function(a,b,c,d){var e=bb,f=cb,i=db;g.rotate(e,c,-b),d&&g.scale(e,e,-1);for(var k=-1,l=a.vertices.length,m=Math.PI/2,n=0;n!==l;n++){h(f,a.vertices[(n+1)%l],a.vertices[n%l]),g.rotate(i,f,-m),g.normalize(i,i);var o=j(i,e);(-1==k||o>maxDot)&&(k=n%l,maxDot=o)}return k};var eb=g.create(),fb=g.create(),gb=g.create(),hb=g.create(),ib=g.create(),jb=g.create(),kb=g.create();c.prototype[o.CIRCLE|o.HEIGHTFIELD]=c.prototype.circleHeightfield=function(a,b,c,d,e,f,j,k,l,m){var n=f.data,m=m||b.radius,o=f.elementWidth,p=fb,q=eb,r=ib,s=kb,t=jb,u=gb,v=hb,w=Math.floor((c[0]-m-j[0])/o),x=Math.ceil((c[0]+m-j[0])/o);0>w&&(w=0),x>=n.length&&(x=n.length-1);for(var y=n[w],z=n[x],A=w;x>A;A++)n[A]y&&(y=n[A]);if(c[1]-m>y)return l?!1:0;c[1]+mA;A++){g.set(u,A*o,n[A]),g.set(v,(A+1)*o,n[A+1]),g.add(u,u,j),g.add(v,v,j),g.sub(t,v,u),g.rotate(t,t,Math.PI/2),g.normalize(t,t),g.scale(q,t,-m),g.add(q,q,c),g.sub(p,q,u);var D=g.dot(p,t);if(q[0]>=u[0]&&q[0]=D&&(C===!1||Math.abs(D)0)for(var A=w;x>=A;A++)if(g.set(u,A*o,n[A]),g.add(u,u,j),g.sub(p,c,u),g.squaredLength(p)b;b++){for(var d=a[b],e=b-1;e>=0&&!(a[e].aabb.lowerBound[0]<=d.aabb.lowerBound[0]);e--)a[e+1]=a[e];a[e+1]=d}return a},c.sortAxisListY=function(a){for(var b=1,c=a.length;c>b;b++){for(var d=a[b],e=b-1;e>=0&&!(a[e].aabb.lowerBound[1]<=d.aabb.lowerBound[1]);e--)a[e+1]=a[e];a[e+1]=d}return a};var f={keys:[]};c.prototype.getCollisionPairs=function(){{var a=this.axisListX,b=this.axisListY,d=this.result;this.axisIndex}d.length=0;for(var g=0;g!==a.length;g++){var h=a[g];h.aabbNeedsUpdate&&h.updateAABB()}c.sortAxisListX(a),c.sortAxisListY(b);for(var g=0,i=a.length;g!==i;g++)for(var j=a[g],k=g+1;i>k;k++){var l=a[k];if(!c.checkBounds(j,l,0))break;if(e.canCollide(j,l)){var m=j.idk;k++){var l=b[k];if(!c.checkBounds(j,l,1))break;if(e.canCollide(j,l)){var m=j.idc)g.scale(e.normalA,i,-1),g.sub(e.contactPointA,j,h.position),g.sub(e.contactPointB,k,o.position),g.scale(n,i,c),g.add(e.contactPointA,e.contactPointA,n),-1==a.indexOf(e)&&a.push(e);else{var u=a.indexOf(e);-1!=u&&a.splice(u,1)}if(this.lowerLimitEnabled&&d>s)g.scale(f.normalA,i,1),g.sub(f.contactPointA,j,h.position),g.sub(f.contactPointB,k,o.position),g.scale(n,i,d),g.sub(f.contactPointB,f.contactPointB,n),-1==a.indexOf(f)&&a.push(f);else{var u=a.indexOf(f);-1!=u&&a.splice(u,1)}},c.prototype.enableMotor=function(){this.motorEnabled||(this.equations.push(this.motorEquation),this.motorEnabled=!0)},c.prototype.disableMotor=function(){if(this.motorEnabled){var a=this.equations.indexOf(this.motorEquation);this.equations.splice(a,1),this.motorEnabled=!1}}},{"../equations/ContactEquation":21,"../equations/Equation":22,"../equations/RotationalLockEquation":24,"../math/vec2":30,"./Constraint":14}],19:[function(a,b){function c(a,b,c,n,o){o=o||{},d.call(this,a,c,d.REVOLUTE,o);var p=this.maxForce="undefined"!=typeof o.maxForce?o.maxForce:Number.MAX_VALUE;this.pivotA=b,this.pivotB=n;var q=this.equations=[new e(a,c,-p,p),new e(a,c,-p,p)],r=q[0],s=q[1],t=this;r.computeGq=function(){return h.rotate(i,t.pivotA,a.angle),h.rotate(j,t.pivotB,c.angle),h.add(m,c.position,j),h.sub(m,m,a.position),h.sub(m,m,i),h.dot(m,k)},s.computeGq=function(){return h.rotate(i,t.pivotA,a.angle),h.rotate(j,t.pivotB,c.angle),h.add(m,c.position,j),h.sub(m,m,a.position),h.sub(m,m,i),h.dot(m,l)},s.minForce=r.minForce=-p,s.maxForce=r.maxForce=p,this.motorEquation=new f(a,c),this.motorEnabled=!1,this.angle=0,this.lowerLimitEnabled=!1,this.upperLimitEnabled=!1,this.lowerLimit=0,this.upperLimit=0,this.upperLimitEquation=new g(a,c),this.lowerLimitEquation=new g(a,c),this.upperLimitEquation.minForce=0,this.lowerLimitEquation.maxForce=0}var d=a("./Constraint"),e=a("../equations/Equation"),f=a("../equations/RotationalVelocityEquation"),g=a("../equations/RotationalLockEquation"),h=a("../math/vec2");b.exports=c;var i=h.create(),j=h.create(),k=h.fromValues(1,0),l=h.fromValues(0,1),m=h.create();c.prototype=new d,c.prototype.update=function(){var a=this.bodyA,b=this.bodyB,c=this.pivotA,d=this.pivotB,e=this.equations,f=(e[0],e[1],e[0]),g=e[1],m=this.upperLimit,n=this.lowerLimit,o=this.upperLimitEquation,p=this.lowerLimitEquation,q=this.angle=b.angle-a.angle;if(this.upperLimitEnabled&&q>m)o.angle=m,-1==e.indexOf(o)&&e.push(o);else{var r=e.indexOf(o);-1!=r&&e.splice(r,1)}if(this.lowerLimitEnabled&&n>q)p.angle=n,-1==e.indexOf(p)&&e.push(p);else{var r=e.indexOf(p);-1!=r&&e.splice(r,1)}h.rotate(i,c,a.angle),h.rotate(j,d,b.angle),f.G[0]=-1,f.G[1]=0,f.G[2]=-h.crossLength(i,k),f.G[3]=1,f.G[4]=0,f.G[5]=h.crossLength(j,k),g.G[0]=0,g.G[1]=-1,g.G[2]=-h.crossLength(i,l),g.G[3]=0,g.G[4]=1,g.G[5]=h.crossLength(j,l)},c.prototype.enableMotor=function(){this.motorEnabled||(this.equations.push(this.motorEquation),this.motorEnabled=!0)},c.prototype.disableMotor=function(){if(this.motorEnabled){var a=this.equations.indexOf(this.motorEquation);this.equations.splice(a,1),this.motorEnabled=!1}},c.prototype.motorIsEnabled=function(){return!!this.motorEnabled},c.prototype.setMotorSpeed=function(a){if(this.motorEnabled){var b=this.equations.indexOf(this.motorEquation);this.equations[b].relativeVelocity=a}},c.prototype.getMotorSpeed=function(){return this.motorEnabled?this.motorEquation.relativeVelocity:!1}},{"../equations/Equation":22,"../equations/RotationalLockEquation":24,"../equations/RotationalVelocityEquation":25,"../math/vec2":30,"./Constraint":14}],20:[function(a,b){function c(a,b,c){c=c||{},d.call(this,a,b,-Number.MAX_VALUE,Number.MAX_VALUE),this.angle=c.angle||0,this.ratio="number"==typeof c.ratio?c.ratio:1,this.setRatio(this.ratio)}{var d=a("./Equation");a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.constructor=c,c.prototype.computeGq=function(){return this.ratio*this.bodyA.angle-this.bodyB.angle+this.angle},c.prototype.setRatio=function(a){var b=this.G;b[2]=a,b[5]=-1,this.ratio=a},c.prototype.setMaxTorque=function(a){this.maxForce=a,this.minForce=-a}},{"../math/vec2":30,"./Equation":22}],21:[function(a,b){function c(a,b){d.call(this,a,b,0,Number.MAX_VALUE),this.contactPointA=e.create(),this.penetrationVec=e.create(),this.contactPointB=e.create(),this.normalA=e.create(),this.restitution=0,this.firstImpact=!1,this.shapeA=null,this.shapeB=null}var d=a("./Equation"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.constructor=c,c.prototype.computeB=function(a,b,c){var d=this.bodyA,f=this.bodyB,g=this.contactPointA,h=this.contactPointB,i=d.position,j=f.position,k=this.penetrationVec,l=this.normalA,m=this.G,n=e.crossLength(g,l),o=e.crossLength(h,l);m[0]=-l[0],m[1]=-l[1],m[2]=-n,m[3]=l[0],m[4]=l[1],m[5]=o,e.add(k,j,h),e.sub(k,k,i),e.sub(k,k,g);var p,q;this.firstImpact&&0!==this.restitution?(q=0,p=1/b*(1+this.restitution)*this.computeGW()):(q=e.dot(l,k),p=this.computeGW());var r=this.computeGiMf(),s=-q*a-p*b-c*r;return s}},{"../math/vec2":30,"./Equation":22}],22:[function(a,b){function c(a,b,d,e){this.minForce="undefined"==typeof d?-Number.MAX_VALUE:d,this.maxForce="undefined"==typeof e?Number.MAX_VALUE:e,this.bodyA=a,this.bodyB=b,this.stiffness=c.DEFAULT_STIFFNESS,this.relaxation=c.DEFAULT_RELAXATION,this.G=new h.ARRAY_TYPE(6);for(var f=0;6>f;f++)this.G[f]=0;this.offset=0,this.a=0,this.b=0,this.epsilon=0,this.timeStep=1/60,this.needsUpdate=!0,this.multiplier=0,this.relativeVelocity=0,this.enabled=!0}function d(a,b,c,d,e){return a[0]*b[0]+a[1]*b[1]+a[2]*c+a[3]*d[0]+a[4]*d[1]+a[5]*e}function e(a){return a.sleepState===i.SLEEPING?0:a.invMass}function f(a){return a.sleepState===i.SLEEPING?0:a.invInertia}b.exports=c;var g=a("../math/vec2"),h=a("../utils/Utils"),i=a("../objects/Body");c.prototype.constructor=c,c.DEFAULT_STIFFNESS=1e6,c.DEFAULT_RELAXATION=4,c.prototype.update=function(){var a=this.stiffness,b=this.relaxation,c=this.timeStep;this.a=4/(c*(1+4*b)),this.b=4*b/(1+4*b),this.epsilon=4/(c*c*a*(1+4*b)),this.needsUpdate=!1},c.prototype.computeB=function(a,b,c){var d=this.computeGW(),e=this.computeGq(),f=this.computeGiMf();return-e*a-d*b-f*c};var j=g.create(),k=g.create();c.prototype.computeGq=function(){var a=this.G,b=this.bodyA,c=this.bodyB,e=(b.position,c.position,b.angle),f=c.angle;return d(a,j,e,k,f)+this.offset};g.create(),g.create();c.prototype.transformedGmult=function(a,b,c,e,f){return d(a,b,c,e,f)},c.prototype.computeGW=function(){var a=this.G,b=this.bodyA,c=this.bodyB,d=b.velocity,e=c.velocity,f=b.angularVelocity,g=c.angularVelocity;return this.transformedGmult(a,d,f,e,g)+this.relativeVelocity},c.prototype.computeGWlambda=function(){var a=this.G,b=this.bodyA,c=this.bodyB,e=b.vlambda,f=c.vlambda,g=b.wlambda,h=c.wlambda;return d(a,e,g,f,h)};var l=g.create(),m=g.create();c.prototype.computeGiMf=function(){var a=this.bodyA,b=this.bodyB,c=a.force,d=a.angularForce,h=b.force,i=b.angularForce,j=e(a),k=e(b),n=f(a),o=f(b),p=this.G;return g.scale(l,c,j),g.scale(m,h,k),this.transformedGmult(p,l,d*n,m,i*o)},c.prototype.computeGiMGt=function(){var a=this.bodyA,b=this.bodyB,c=e(a),d=e(b),g=f(a),h=f(b),i=this.G;return i[0]*i[0]*c+i[1]*i[1]*c+i[2]*i[2]*g+i[3]*i[3]*d+i[4]*i[4]*d+i[5]*i[5]*h};{var n=g.create(),o=g.create(),p=g.create();g.create(),g.create(),g.create()}c.prototype.addToWlambda=function(a){var b=this.bodyA,c=this.bodyB,d=n,h=o,i=p,j=e(b),k=e(c),l=f(b),m=f(c),q=this.G;h[0]=q[0],h[1]=q[1],i[0]=q[3],i[1]=q[4],g.scale(d,h,j*a),g.add(b.vlambda,b.vlambda,d),b.wlambda+=l*q[2]*a,g.scale(d,i,k*a),g.add(c.vlambda,c.vlambda,d),c.wlambda+=m*q[5]*a},c.prototype.computeInvC=function(a){return 1/(this.computeGiMGt()+a)}},{"../math/vec2":30,"../objects/Body":31,"../utils/Utils":45}],23:[function(a,b){function c(a,b,c){e.call(this,a,b,-c,c),this.contactPointA=d.create(),this.contactPointB=d.create(),this.t=d.create(),this.contactEquation=null,this.shapeA=null,this.shapeB=null,this.frictionCoefficient=.3}{var d=a("../math/vec2"),e=a("./Equation");a("../utils/Utils")}b.exports=c,c.prototype=new e,c.prototype.constructor=c,c.prototype.setSlipForce=function(a){this.maxForce=a,this.minForce=-a},c.prototype.getSlipForce=function(){return this.maxForce},c.prototype.computeB=function(a,b,c){var e=(this.bodyA,this.bodyB,this.contactPointA),f=this.contactPointB,g=this.t,h=this.G;h[0]=-g[0],h[1]=-g[1],h[2]=-d.crossLength(e,g),h[3]=g[0],h[4]=g[1],h[5]=d.crossLength(f,g);var i=this.computeGW(),j=this.computeGiMf(),k=-i*b-c*j;return k}},{"../math/vec2":30,"../utils/Utils":45,"./Equation":22}],24:[function(a,b){function c(a,b,c){c=c||{},d.call(this,a,b,-Number.MAX_VALUE,Number.MAX_VALUE),this.angle=c.angle||0;var e=this.G;e[2]=1,e[5]=-1}var d=a("./Equation"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.constructor=c;var f=e.create(),g=e.create(),h=e.fromValues(1,0),i=e.fromValues(0,1);c.prototype.computeGq=function(){return e.rotate(f,h,this.bodyA.angle+this.angle),e.rotate(g,i,this.bodyB.angle),e.dot(f,g)}},{"../math/vec2":30,"./Equation":22}],25:[function(a,b){function c(a,b){d.call(this,a,b,-Number.MAX_VALUE,Number.MAX_VALUE),this.relativeVelocity=1,this.ratio=1}{var d=a("./Equation");a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.constructor=c,c.prototype.computeB=function(a,b,c){var d=this.G;d[2]=-1,d[5]=this.ratio;var e=this.computeGiMf(),f=this.computeGW(),g=-f*b-c*e;return g}},{"../math/vec2":30,"./Equation":22}],26:[function(a,b){var c=function(){};b.exports=c,c.prototype={constructor:c,on:function(a,b,c){b.context=c||this,void 0===this._listeners&&(this._listeners={});var d=this._listeners;return void 0===d[a]&&(d[a]=[]),-1===d[a].indexOf(b)&&d[a].push(b),this},has:function(a,b){if(void 0===this._listeners)return!1;var c=this._listeners;return void 0!==c[a]&&-1!==c[a].indexOf(b)?!0:!1},off:function(a,b){if(void 0===this._listeners)return this;var c=this._listeners,d=c[a].indexOf(b);return-1!==d&&c[a].splice(d,1),this},emit:function(a){if(void 0===this._listeners)return this;var b=this._listeners,c=b[a.type];if(void 0!==c){a.target=this;for(var d=0,e=c.length;e>d;d++){var f=c[d];f.call(f.context,a)}}return this}}},{}],27:[function(a,b){function c(a,b,f){if(f=f||{},!(a instanceof d&&b instanceof d))throw new Error("First two arguments must be Material instances.");this.id=c.idCounter++,this.materialA=a,this.materialB=b,this.friction="undefined"!=typeof f.friction?Number(f.friction):.3,this.restitution="undefined"!=typeof f.restitution?Number(f.restitution):0,this.stiffness="undefined"!=typeof f.stiffness?Number(f.stiffness):e.DEFAULT_STIFFNESS,this.relaxation="undefined"!=typeof f.relaxation?Number(f.relaxation):e.DEFAULT_RELAXATION,this.frictionStiffness="undefined"!=typeof f.frictionStiffness?Number(f.frictionStiffness):e.DEFAULT_STIFFNESS,this.frictionRelaxation="undefined"!=typeof f.frictionRelaxation?Number(f.frictionRelaxation):e.DEFAULT_RELAXATION,this.surfaceVelocity="undefined"!=typeof f.surfaceVelocity?Number(f.surfaceVelocity):0}var d=a("./Material"),e=a("../equations/Equation");b.exports=c,c.idCounter=0},{"../equations/Equation":22,"./Material":28}],28:[function(a,b){function c(){this.id=c.idCounter++}b.exports=c,c.idCounter=0},{}],29:[function(a,b){var c={};c.GetArea=function(a){if(a.length<6)return 0;for(var b=a.length-2,c=0,d=0;b>d;d+=2)c+=(a[d+2]-a[d])*(a[d+1]+a[d+3]);return c+=(a[0]-a[b])*(a[b+1]+a[1]),.5*-c},c.Triangulate=function(a){var b=a.length>>1;if(3>b)return[];for(var d=[],e=[],f=0;b>f;f++)e.push(f);for(var f=0,g=b;g>3;){var h=e[(f+0)%g],i=e[(f+1)%g],j=e[(f+2)%g],k=a[2*h],l=a[2*h+1],m=a[2*i],n=a[2*i+1],o=a[2*j],p=a[2*j+1],q=!1;if(c._convex(k,l,m,n,o,p)){q=!0;for(var r=0;g>r;r++){var s=e[r];if(s!=h&&s!=i&&s!=j&&c._PointInTriangle(a[2*s],a[2*s+1],k,l,m,n,o,p)){q=!1;break}}}if(q)d.push(h,i,j),e.splice((f+1)%g,1),g--,f=0;else if(f++>3*g)break}return d.push(e[0],e[1],e[2]),d},c._PointInTriangle=function(a,b,c,d,e,f,g,h){var i=g-c,j=h-d,k=e-c,l=f-d,m=a-c,n=b-d,o=i*i+j*j,p=i*k+j*l,q=i*m+j*n,r=k*k+l*l,s=k*m+l*n,t=1/(o*r-p*p),u=(r*q-p*s)*t,v=(o*s-p*q)*t;return u>=0&&v>=0&&1>u+v},c._convex=function(a,b,c,d,e,f){return(b-d)*(e-c)+(c-a)*(f-d)>=0},b.exports=c},{}],30:[function(a,b){var c=a("../../build/vec2").vec2;c.crossLength=function(a,b){return a[0]*b[1]-a[1]*b[0]},c.crossVZ=function(a,b,d){return c.rotate(a,b,-Math.PI/2),c.scale(a,a,d),a},c.crossZV=function(a,b,d){return c.rotate(a,d,Math.PI/2),c.scale(a,a,b),a},c.rotate=function(a,b,c){var d=Math.cos(c),e=Math.sin(c),f=b[0],g=b[1];a[0]=d*f-e*g,a[1]=e*f+d*g},c.toLocalFrame=function(a,b,d,e){c.copy(a,b),c.sub(a,a,d),c.rotate(a,a,-e)},c.toGlobalFrame=function(a,b,d,e){c.copy(a,b),c.rotate(a,a,e),c.add(a,a,d)},c.centroid=function(a,b,d,e){return c.add(a,b,d),c.add(a,a,e),c.scale(a,a,1/3),a},b.exports=c},{"../../build/vec2":1}],31:[function(a,b){function c(a){a=a||{},h.call(this),this.id=++c._idCounter,this.world=null,this.shapes=[],this.shapeOffsets=[],this.shapeAngles=[],this.mass=a.mass||0,this.invMass=0,this.inertia=0,this.invInertia=0,this.fixedRotation=!!a.fixedRotation||!1,this.position=d.fromValues(0,0),a.position&&d.copy(this.position,a.position),this.interpolatedPosition=d.fromValues(0,0),this.interpolatedAngle=0,this.previousPosition=d.fromValues(0,0),this.previousAngle=0,this.velocity=d.fromValues(0,0),a.velocity&&d.copy(this.velocity,a.velocity),this.vlambda=d.fromValues(0,0),this.wlambda=0,this.angle=a.angle||0,this.angularVelocity=a.angularVelocity||0,this.force=d.create(),a.force&&d.copy(this.force,a.force),this.angularForce=a.angularForce||0,this.damping="number"==typeof a.damping?a.damping:.1,this.angularDamping="number"==typeof a.angularDamping?a.angularDamping:.1,this.motionState=0===this.mass?c.STATIC:c.DYNAMIC,this.boundingRadius=0,this.aabb=new g,this.aabbNeedsUpdate=!0,this.allowSleep=!0,this.wantsToSleep=!1,this.sleepState=c.AWAKE,this.sleepSpeedLimit=.2,this.sleepTimeLimit=1,this.gravityScale=1,this.timeLastSleepy=0,this.concavePath=null,this.lastDampingScale=1,this.lastAngularDampingScale=1,this.lastDampingTimeStep=-1,this.updateMassProperties()}var d=a("../math/vec2"),e=a("poly-decomp"),f=a("../shapes/Convex"),g=a("../collision/AABB"),h=a("../events/EventEmitter");b.exports=c,c.prototype=new h,c._idCounter=0,c.prototype.setDensity=function(a){var b=this.getArea();this.mass=b*a,this.updateMassProperties()},c.prototype.getArea=function(){for(var a=0,b=0;be&&(e=h+i)}this.boundingRadius=e},c.prototype.addShape=function(a,b,c){c=c||0,b=b?d.fromValues(b[0],b[1]):d.fromValues(0,0),this.shapes.push(a),this.shapeOffsets.push(b),this.shapeAngles.push(c),this.updateMassProperties(),this.updateBoundingRadius(),this.aabbNeedsUpdate=!0},c.prototype.removeShape=function(a){var b=this.shapes.indexOf(a);return-1!==b?(this.shapes.splice(b,1),this.shapeOffsets.splice(b,1),this.shapeAngles.splice(b,1),this.aabbNeedsUpdate=!0,!0):!1},c.prototype.updateMassProperties=function(){if(this.motionState===c.STATIC||this.motionState===c.KINEMATIC)this.mass=Number.MAX_VALUE,this.invMass=0,this.inertia=Number.MAX_VALUE,this.invInertia=0;else{var a=this.shapes,b=a.length,e=this.mass/b,f=0;if(this.fixedRotation)this.inertia=Number.MAX_VALUE,this.invInertia=0;else{for(var g=0;b>g;g++){var h=a[g],i=d.squaredLength(this.shapeOffsets[g]),j=h.computeMomentOfInertia(e);f+=j+e*i}this.inertia=f,this.invInertia=f>0?1/f:0}this.invMass=1/this.mass}};var k=d.create();c.prototype.applyForce=function(a,b){var c=k;d.sub(c,b,this.position),d.add(this.force,this.force,a);var e=d.crossLength(c,a);this.angularForce+=e},c.prototype.toLocalFrame=function(a,b){d.toLocalFrame(a,b,this.position,this.angle)},c.prototype.toWorldFrame=function(a,b){d.toGlobalFrame(a,b,this.position,this.angle)},c.prototype.fromPolygon=function(a,b){b=b||{};for(var c=this.shapes.length;c>=0;--c)this.removeShape(this.shapes[c]);var g=new e.Polygon;if(g.vertices=a,g.makeCCW(),"number"==typeof b.removeCollinearPoints&&g.removeCollinearPoints(b.removeCollinearPoints),"undefined"==typeof b.skipSimpleCheck&&!g.isSimple())return!1;this.concavePath=g.vertices.slice(0);for(var c=0;c=g?(this.idleTime=0,this.sleepState=c.AWAKE):(this.idleTime+=e,this.sleepState=c.SLEEPY),this.idleTime>this.sleepTimeLimit&&(b?this.wantsToSleep=!0:this.sleep())}},c.prototype.getVelocityFromPosition=function(a,b){return a=a||d.create(),d.sub(a,this.position,this.previousPosition),d.scale(a,a,1/b),a},c.prototype.getAngularVelocityFromPosition=function(a){return(this.angle-this.previousAngle)/a},c.sleepyEvent={type:"sleepy"},c.sleepEvent={type:"sleep"},c.wakeUpEvent={type:"wakeup"},c.DYNAMIC=1,c.STATIC=2,c.KINEMATIC=4,c.AWAKE=0,c.SLEEPY=1,c.SLEEPING=2},{"../collision/AABB":8,"../events/EventEmitter":26,"../math/vec2":30,"../shapes/Convex":36,"poly-decomp":6}],32:[function(a,b){function c(a,b,c){c=c||{},this.restLength="number"==typeof c.restLength?c.restLength:1,this.stiffness=c.stiffness||100,this.damping=c.damping||1,this.bodyA=a,this.bodyB=b,this.localAnchorA=d.fromValues(0,0),this.localAnchorB=d.fromValues(0,0),c.localAnchorA&&d.copy(this.localAnchorA,c.localAnchorA),c.localAnchorB&&d.copy(this.localAnchorB,c.localAnchorB),c.worldAnchorA&&this.setWorldAnchorA(c.worldAnchorA),c.worldAnchorB&&this.setWorldAnchorB(c.worldAnchorB)}var d=a("../math/vec2");b.exports=c,c.prototype.setWorldAnchorA=function(a){this.bodyA.toLocalFrame(this.localAnchorA,a)},c.prototype.setWorldAnchorB=function(a){this.bodyB.toLocalFrame(this.localAnchorB,a)},c.prototype.getWorldAnchorA=function(a){this.bodyA.toWorldFrame(a,this.localAnchorA)},c.prototype.getWorldAnchorB=function(a){this.bodyB.toWorldFrame(a,this.localAnchorB)};var e=d.create(),f=d.create(),g=d.create(),h=d.create(),i=d.create(),j=d.create(),k=d.create(),l=d.create(),m=d.create();c.prototype.applyForce=function(){var a=this.stiffness,b=this.damping,c=this.restLength,n=this.bodyA,o=this.bodyB,p=e,q=f,r=g,s=h,t=m,u=i,v=j,w=k,x=l;this.getWorldAnchorA(u),this.getWorldAnchorB(v),d.sub(w,u,n.position),d.sub(x,v,o.position),d.sub(p,v,u);var y=d.len(p);d.normalize(q,p),d.sub(r,o.velocity,n.velocity),d.crossZV(t,o.angularVelocity,x),d.add(r,r,t),d.crossZV(t,n.angularVelocity,w),d.sub(r,r,t),d.scale(s,q,-a*(y-c)-b*d.dot(r,q)),d.sub(n.force,n.force,s),d.add(o.force,o.force,s);var z=d.crossLength(w,s),A=d.crossLength(x,s);n.angularForce-=z,o.angularForce+=A}},{"../math/vec2":30}],33:[function(a,b){b.exports={AABB:a("./collision/AABB"),AngleLockEquation:a("./equations/AngleLockEquation"),Body:a("./objects/Body"),Broadphase:a("./collision/Broadphase"),Capsule:a("./shapes/Capsule"),Circle:a("./shapes/Circle"),Constraint:a("./constraints/Constraint"),ContactEquation:a("./equations/ContactEquation"),ContactMaterial:a("./material/ContactMaterial"),Convex:a("./shapes/Convex"),DistanceConstraint:a("./constraints/DistanceConstraint"),Equation:a("./equations/Equation"),EventEmitter:a("./events/EventEmitter"),FrictionEquation:a("./equations/FrictionEquation"),GearConstraint:a("./constraints/GearConstraint"),GridBroadphase:a("./collision/GridBroadphase"),GSSolver:a("./solver/GSSolver"),Heightfield:a("./shapes/Heightfield"),Line:a("./shapes/Line"),LockConstraint:a("./constraints/LockConstraint"),Material:a("./material/Material"),Narrowphase:a("./collision/Narrowphase"),NaiveBroadphase:a("./collision/NaiveBroadphase"),Particle:a("./shapes/Particle"),Plane:a("./shapes/Plane"),RevoluteConstraint:a("./constraints/RevoluteConstraint"),PrismaticConstraint:a("./constraints/PrismaticConstraint"),Rectangle:a("./shapes/Rectangle"),RotationalVelocityEquation:a("./equations/RotationalVelocityEquation"),SAPBroadphase:a("./collision/SAPBroadphase"),Shape:a("./shapes/Shape"),Solver:a("./solver/Solver"),Spring:a("./objects/Spring"),Utils:a("./utils/Utils"),World:a("./world/World"),vec2:a("./math/vec2"),version:a("../package.json").version}},{"../package.json":7,"./collision/AABB":8,"./collision/Broadphase":9,"./collision/GridBroadphase":10,"./collision/NaiveBroadphase":11,"./collision/Narrowphase":12,"./collision/SAPBroadphase":13,"./constraints/Constraint":14,"./constraints/DistanceConstraint":15,"./constraints/GearConstraint":16,"./constraints/LockConstraint":17,"./constraints/PrismaticConstraint":18,"./constraints/RevoluteConstraint":19,"./equations/AngleLockEquation":20,"./equations/ContactEquation":21,"./equations/Equation":22,"./equations/FrictionEquation":23,"./equations/RotationalVelocityEquation":25,"./events/EventEmitter":26,"./material/ContactMaterial":27,"./material/Material":28,"./math/vec2":30,"./objects/Body":31,"./objects/Spring":32,"./shapes/Capsule":34,"./shapes/Circle":35,"./shapes/Convex":36,"./shapes/Heightfield":37,"./shapes/Line":38,"./shapes/Particle":39,"./shapes/Plane":40,"./shapes/Rectangle":41,"./shapes/Shape":42,"./solver/GSSolver":43,"./solver/Solver":44,"./utils/Utils":45,"./world/World":49}],34:[function(a,b){function c(a,b){this.length=a||1,this.radius=b||1,d.call(this,d.CAPSULE)}var d=a("./Shape"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.computeMomentOfInertia=function(a){var b=this.radius,c=this.length+b,d=2*b;return a*(d*d+c*c)/12},c.prototype.updateBoundingRadius=function(){this.boundingRadius=this.radius+this.length/2},c.prototype.updateArea=function(){this.area=Math.PI*this.radius*this.radius+2*this.radius*this.length};var f=e.create();c.prototype.computeAABB=function(a,b,c){var d=this.radius;e.set(f,this.length,0),e.rotate(f,f,c),e.set(a.upperBound,Math.max(f[0]+d,-f[0]+d),Math.max(f[1]+d,-f[1]+d)),e.set(a.lowerBound,Math.min(f[0]-d,-f[0]-d),Math.min(f[1]-d,-f[1]-d)),e.add(a.lowerBound,a.lowerBound,b),e.add(a.upperBound,a.upperBound,b)}},{"../math/vec2":30,"./Shape":42}],35:[function(a,b){function c(a){this.radius=a||1,d.call(this,d.CIRCLE)}var d=a("./Shape"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.computeMomentOfInertia=function(a){var b=this.radius;return a*b*b/2},c.prototype.updateBoundingRadius=function(){this.boundingRadius=this.radius},c.prototype.updateArea=function(){this.area=Math.PI*this.radius*this.radius},c.prototype.computeAABB=function(a,b){var c=this.radius;e.set(a.upperBound,c,c),e.set(a.lowerBound,-c,-c),b&&(e.add(a.lowerBound,a.lowerBound,b),e.add(a.upperBound,a.upperBound,b))}},{"../math/vec2":30,"./Shape":42}],36:[function(a,b){function c(a){this.vertices=[];for(var b=0;bg;f=g,g++){var h=this.vertices[f],i=this.vertices[g],j=Math.abs(e.crossLength(h,i)),k=e.dot(i,i)+e.dot(i,h)+e.dot(h,h);b+=j*k,c+=j}return a/6*(b/c)},c.prototype.updateBoundingRadius=function(){for(var a=this.vertices,b=0,c=0;c!==a.length;c++){var d=e.squaredLength(a[c]);d>b&&(b=d)}this.boundingRadius=Math.sqrt(b)},c.triangleArea=function(a,b,c){return.5*((b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1]))},c.prototype.updateArea=function(){this.updateTriangles(),this.area=0;for(var a=this.triangles,b=this.vertices,d=0;d!==a.length;d++){var e=a[d],f=b[e[0]],g=b[e[1]],h=b[e[2]],i=c.triangleArea(f,g,h);this.area+=i}},c.prototype.computeAABB=function(a,b,c){a.setFromPoints(this.vertices,b,c)}},{"../math/polyk":29,"../math/vec2":30,"./Shape":42,"poly-decomp":6}],37:[function(a,b){function c(a,b,c){this.data=a,this.maxValue=b,this.elementWidth=c,d.call(this,d.HEIGHTFIELD)}{var d=a("./Shape");a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.computeMomentOfInertia=function(){return Number.MAX_VALUE},c.prototype.updateBoundingRadius=function(){this.boundingRadius=Number.MAX_VALUE},c.prototype.updateArea=function(){for(var a=this.data,b=0,c=0;c=v*v)break}for(w=0;w!==l;w++){var y=k[w];if(y instanceof h){var z=y.contactEquation.multiplier*y.frictionCoefficient;y.maxForce=z,y.minForce=-z}}}for(f=0;f!==i;f++){for(v=0,w=0;w!==l;w++){u=k[w];var x=c.iterateEquation(w,u,u.epsilon,s,r,q,p,a,f);v+=Math.abs(x)}if(this.usedIterations++,m>=v*v)break}for(t=0;t!==o;t++)n[t].addConstraintVelocity()}},c.iterateEquation=function(a,b,c,d,e,f,g,h){var i=d[a],j=e[a],k=f[a],l=b.computeGWlambda(),m=b.maxForce,n=b.minForce;g&&(i=0);var o=j*(i-l-c*k),p=k+o;return n*h>p?o=n*h-k:p>m*h&&(o=m*h-k),f[a]+=o,b.multiplier=f[a]/h,b.addToWlambda(o),o}},{"../equations/FrictionEquation":23,"../math/vec2":30,"../utils/Utils":45,"./Solver":44}],44:[function(a,b){function c(a,b){a=a||{},d.call(this),this.type=b,this.equations=[],this.equationSortFunction=a.equationSortFunction||!1}var d=(a("../utils/Utils"),a("../events/EventEmitter"));b.exports=c,c.prototype=new d,c.prototype.solve=function(){throw new Error("Solver.solve should be implemented by subclasses!")};var e={bodies:[]};c.prototype.solveIsland=function(a,b){this.removeAllEquations(),b.equations.length&&(this.addEquations(b.equations),e.bodies.length=0,b.getBodies(e.bodies),e.bodies.length&&this.solve(a,e))},c.prototype.sortEquations=function(){this.equationSortFunction&&this.equations.sort(this.equationSortFunction)},c.prototype.addEquation=function(a){a.enabled&&this.equations.push(a)},c.prototype.addEquations=function(a){for(var b=0,c=a.length;b!==c;b++){var d=a[b];d.enabled&&this.equations.push(d)}},c.prototype.removeEquation=function(a){var b=this.equations.indexOf(a);-1!==b&&this.equations.splice(b,1)},c.prototype.removeAllEquations=function(){this.equations.length=0},c.GS=1,c.ISLAND=2},{"../events/EventEmitter":26,"../utils/Utils":45}],45:[function(a,b){function c(){}b.exports=c,c.appendArray=function(a,b){if(b.length<15e4)a.push.apply(a,b);else for(var c=0,d=b.length;c!==d;++c)a.push(b[c])},c.splice=function(a,b,c){c=c||1;for(var d=b,e=a.length-c;e>d;d++)a[d]=a[d+c];a.length=e},c.ARRAY_TYPE=Float32Array||Array,c.extend=function(a,b){for(var c in b)a[c]=b[c]}},{}],46:[function(a,b){function c(){this.equations=[],this.bodies=[]}var d=a("../objects/Body");b.exports=c,c.prototype.reset=function(){this.equations.length=this.bodies.length=0};var e=[];c.prototype.getBodies=function(a){var b=a||[],c=this.equations;e.length=0;for(var d=0;d!==c.length;d++){var f=c[d];-1===e.indexOf(f.bodyA.id)&&(b.push(f.bodyA),e.push(f.bodyA.id)),-1===e.indexOf(f.bodyB.id)&&(b.push(f.bodyB),e.push(f.bodyB.id))}return b},c.prototype.wantsToSleep=function(){for(var a=0;ae;e++)this.internalStep(a);this.time+=b;for(var f=this.time%a,g=0;g!==this.bodies.length;g++){var h=this.bodies[g];h.motionState!==s.STATIC&&h.sleepState!==s.SLEEPING?(j.sub(N,h.position,h.previousPosition),j.scale(N,N,f/a),j.add(h.interpolatedPosition,h.position,N),h.interpolatedAngle=h.angle+(h.angle-h.previousAngle)*f/a):(j.copy(h.interpolatedPosition,h.position),h.interpolatedAngle=h.angle)}}},c.prototype.internalStep=function(a){this.stepping=!0;var b,d,e=this,f=this.doProfiling,g=this.springs.length,h=this.springs,i=this.bodies,k=this.gravity,l=this.solver,m=this.bodies.length,n=this.broadphase,o=this.narrowphase,p=this.constraints,q=K,r=(j.scale,j.add),t=(j.rotate,this.islandManager);if(this.lastTimeStep=a,f&&(b=performance.now()),this.useWorldGravityAsFrictionGravity){var u=j.length(this.gravity);0===u&&this.useFrictionGravityOnZeroGravity||(this.frictionGravity=u)}if(this.applyGravity)for(var v=0;v!==m;v++){var w=i[v],x=w.force;w.motionState===s.DYNAMIC&&w.sleepState!==s.SLEEPING&&(j.scale(q,k,w.mass*w.gravityScale),r(x,x,q))}if(this.applySpringForces)for(var v=0;v!==g;v++){var y=h[v];y.applyForce()}if(this.applyDamping)for(var v=0;v!==m;v++){var w=i[v];w.motionState===s.DYNAMIC&&w.applyDamping(a)}for(var z=n.getCollisionPairs(this),A=this.disabledBodyCollisionPairs,v=A.length-2;v>=0;v-=2)for(var B=z.length-2;B>=0;B-=2)(A[v]===z[B]&&A[v+1]===z[B+1]||A[v+1]===z[B]&&A[v]===z[B+1])&&z.splice(B,2);var C=p.length;for(v=0;v!==C;v++){var D=p[v];if(!D.collideConnected)for(var B=z.length-2;B>=0;B-=2)(D.bodyA===z[B]&&D.bodyB===z[B+1]||D.bodyB===z[B]&&D.bodyA===z[B+1])&&z.splice(B,2)}this.postBroadphaseEvent.pairs=z,this.emit(this.postBroadphaseEvent),o.reset(this);for(var v=0,E=z.length;v!==E;v+=2)for(var F=z[v],G=z[v+1],I=0,J=F.shapes.length;I!==J;I++)for(var L=F.shapes[I],M=F.shapeOffsets[I],N=F.shapeAngles[I],O=0,P=G.shapes.length;O!==P;O++){var Q=G.shapes[O],R=G.shapeOffsets[O],S=G.shapeAngles[O],T=this.defaultContactMaterial;if(L.material&&Q.material){var U=this.getContactMaterial(L.material,Q.material);U&&(T=U)}this.runNarrowphase(o,F,L,M,N,G,Q,R,S,T,this.frictionGravity)}for(var V=this.overlappingShapesLastState,v=0;v!==V.keys.length;v++){var W=V.keys[v];if(V[W]===!0&&!this.overlappingShapesCurrentState[W]){var X=this.endContactEvent;X.shapeA=V[W+"_shapeA"],X.shapeB=V[W+"_shapeB"],X.bodyA=V[W+"_bodyA"],X.bodyB=V[W+"_bodyB"],this.emit(X)}}for(var v=0;v!==V.keys.length;v++)delete V[V.keys[v]];V.keys.length=0;for(var Y=this.overlappingShapesCurrentState,v=0;v!==Y.keys.length;v++)V[Y.keys[v]]=Y[Y.keys[v]],V.keys.push(Y.keys[v]);for(var v=0;v!==Y.keys.length;v++)delete Y[Y.keys[v]];Y.keys.length=0;var Z=this.preSolveEvent;Z.contactEquations=o.contactEquations,Z.frictionEquations=o.frictionEquations,this.emit(Z);var C=p.length;for(v=0;v!==C;v++)p[v].update();if(o.contactEquations.length||o.frictionEquations.length||p.length)if(this.islandSplit){for(t.equations.length=0,H.appendArray(t.equations,o.contactEquations),H.appendArray(t.equations,o.frictionEquations),v=0;v!==C;v++)H.appendArray(t.equations,p[v].equations);t.split(this);for(var v=0;v!==t.islands.length;v++){var $=t.islands[v];$.equations.length&&l.solveIsland(a,$)}}else{for(l.addEquations(o.contactEquations),l.addEquations(o.frictionEquations),v=0;v!==C;v++)l.addEquations(p[v].equations);this.solveConstraints&&l.solve(a,this),l.removeAllEquations()}for(var v=0;v!==m;v++){var _=i[v];_.sleepState!==s.SLEEPING&&_.motionState!==s.STATIC&&c.integrateBody(_,a)}for(var v=0;v!==m;v++)i[v].setZeroForce();if(f&&(d=performance.now(),e.lastStepTime=d-b),this.emitImpactEvent)for(var ab=this.impactEvent,v=0;v!==o.contactEquations.length;v++){var bb=o.contactEquations[v];bb.firstImpact&&(ab.bodyA=bb.bodyA,ab.bodyB=bb.bodyB,ab.shapeA=bb.shapeA,ab.shapeB=bb.shapeB,ab.contactEquation=bb,this.emit(ab))}if(this.enableBodySleeping)for(v=0;v!==m;v++)i[v].sleepTick(this.time,!1,a);else if(this.enableIslandSleeping&&this.islandSplit){for(v=0;v!==m;v++)i[v].sleepTick(this.time,!0,a);for(var v=0;v0,a.frictionCoefficient=k.friction;var o;o=b.motionState===s.STATIC||b.motionState===s.KINEMATIC?f.mass:f.motionState===s.STATIC||f.motionState===s.KINEMATIC?b.mass:b.mass*f.mass/(b.mass+f.mass),a.slipForce=k.friction*l*o,a.restitution=k.restitution,a.surfaceVelocity=k.surfaceVelocity,a.frictionStiffness=k.frictionStiffness,a.frictionRelaxation=k.frictionRelaxation,a.stiffness=k.stiffness,a.relaxation=k.relaxation;var p=a[c.type|g.type],q=0;if(p){var r=c.sensor||g.sensor,t=a.frictionEquations.length;q=c.type=2*A&&(v=!0),f.allowSleep&&f.motionState===s.DYNAMIC&&f.sleepState===s.SLEEPING&&b.sleepState===s.AWAKE&&b.motionState!==s.STATIC&&x>=2*y&&(w=!0),v&&b.wakeUp(),w&&f.wakeUp();var B=c.id1)for(var D=a.frictionEquations.length-u;D=0;b--)this.removeConstraint(a[b]);for(var d=this.bodies,b=d.length-1;b>=0;b--)this.removeBody(d[b]);for(var e=this.springs,b=e.length-1;b>=0;b--)this.removeSpring(e[b]);for(var f=this.contactMaterials,b=f.length-1;b>=0;b--)this.removeContactMaterial(f[b]);c.apply(this)},c.prototype.clone=function(){var a=new c;return a.fromJSON(this.toJSON()),a};var Q=j.create(),R=j.fromValues(0,0),S=j.fromValues(0,0);c.prototype.hitTest=function(a,b,c){c=c||0;var d=new s({position:a}),e=new q,f=a,g=0,h=Q,i=R,l=S;d.addShape(e);for(var n=this.narrowphase,r=[],t=0,u=b.length;t!==u;t++)for(var v=b[t],w=0,x=v.shapes.length;w!==x;w++){var y=v.shapes[w],z=v.shapeOffsets[w]||i,A=v.shapeAngles[w]||0;j.rotate(h,z,v.angle),j.add(h,h,v.position);var B=A+v.angle;(y instanceof k&&n.circleParticle(v,y,h,B,d,e,f,g,!0)||y instanceof m&&n.particleConvex(d,e,f,g,v,y,h,B,!0)||y instanceof o&&n.particlePlane(d,e,f,g,v,y,h,B,!0)||y instanceof p&&n.particleCapsule(d,e,f,g,v,y,h,B,!0)||y instanceof q&&j.squaredLength(j.sub(l,h,a))0&&this.enable(a[d],b,!0));else a instanceof Phaser.Group?this.enable(a.children,b,c):(this.enableBody(a,b),c&&a.hasOwnProperty("children")&&a.children.length>0&&this.enable(a.children,b,!0))},enableBody:function(a,b){a.hasOwnProperty("body")&&null===a.body&&(a.body=new Phaser.Physics.P2.Body(this.game,a,a.x,a.y,1),a.body.debug=b,a.anchor.set(.5))},setImpactEvents:function(a){a?this.world.on("impact",this.impactHandler,this):this.world.off("impact",this.impactHandler,this)},setPostBroadphaseCallback:function(a,b){this.postBroadphaseCallback=a,this.callbackContext=b,null!==a?this.world.on("postBroadphase",this.postBroadphaseHandler,this):this.world.off("postBroadphase",this.postBroadphaseHandler,this)},postBroadphaseHandler:function(a){if(this.postBroadphaseCallback)for(var b=a.pairs.length;b-=2;)a.pairs[b].parent&&a.pairs[b+1].parent&&!this.postBroadphaseCallback.call(this.callbackContext,a.pairs[b].parent,a.pairs[b+1].parent)&&a.pairs.splice(b,2)},impactHandler:function(a){if(a.bodyA.parent&&a.bodyB.parent){var b=a.bodyA.parent,c=a.bodyB.parent;b._bodyCallbacks[a.bodyB.id]&&b._bodyCallbacks[a.bodyB.id].call(b._bodyCallbackContext[a.bodyB.id],b,c,a.shapeA,a.shapeB),c._bodyCallbacks[a.bodyA.id]&&c._bodyCallbacks[a.bodyA.id].call(c._bodyCallbackContext[a.bodyA.id],c,b,a.shapeB,a.shapeA),b._groupCallbacks[a.shapeB.collisionGroup]&&b._groupCallbacks[a.shapeB.collisionGroup].call(b._groupCallbackContext[a.shapeB.collisionGroup],b,c,a.shapeA,a.shapeB),c._groupCallbacks[a.shapeA.collisionGroup]&&c._groupCallbacks[a.shapeA.collisionGroup].call(c._groupCallbackContext[a.shapeA.collisionGroup],c,b,a.shapeB,a.shapeA)}},beginContactHandler:function(a){this.onBeginContact.dispatch(a.bodyA,a.bodyB,a.shapeA,a.shapeB,a.contactEquations),a.bodyA.parent&&a.bodyA.parent.onBeginContact.dispatch(a.bodyB.parent,a.shapeA,a.shapeB,a.contactEquations),a.bodyB.parent&&a.bodyB.parent.onBeginContact.dispatch(a.bodyA.parent,a.shapeB,a.shapeA,a.contactEquations)},endContactHandler:function(a){this.onEndContact.dispatch(a.bodyA,a.bodyB,a.shapeA,a.shapeB),a.bodyA.parent&&a.bodyA.parent.onEndContact.dispatch(a.bodyB.parent,a.shapeA,a.shapeB),a.bodyB.parent&&a.bodyB.parent.onEndContact.dispatch(a.bodyA.parent,a.shapeB,a.shapeA)},setBoundsToWorld:function(a,b,c,d,e){this.setBounds(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,a,b,c,d,e)},setWorldMaterial:function(a,b,c,d,e){"undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=!0),b&&this.walls.left&&(this.walls.left.shapes[0].material=a),c&&this.walls.right&&(this.walls.right.shapes[0].material=a),d&&this.walls.top&&(this.walls.top.shapes[0].material=a),e&&this.walls.bottom&&(this.walls.bottom.shapes[0].material=a)},updateBoundsCollisionGroup:function(a){var b=this.everythingCollisionGroup.mask;"undefined"==typeof a&&(b=this.boundsCollisionGroup.mask),this.walls.left&&(this.walls.left.shapes[0].collisionGroup=b),this.walls.right&&(this.walls.right.shapes[0].collisionGroup=b),this.walls.top&&(this.walls.top.shapes[0].collisionGroup=b),this.walls.bottom&&(this.walls.bottom.shapes[0].collisionGroup=b)},setBounds:function(a,b,c,d,e,f,g,h,i){"undefined"==typeof e&&(e=!0),"undefined"==typeof f&&(f=!0),"undefined"==typeof g&&(g=!0),"undefined"==typeof h&&(h=!0),"undefined"==typeof i&&(i=!0),this.walls.left&&this.world.removeBody(this.walls.left),this.walls.right&&this.world.removeBody(this.walls.right),this.walls.top&&this.world.removeBody(this.walls.top),this.walls.bottom&&this.world.removeBody(this.walls.bottom),e&&(this.walls.left=new p2.Body({mass:0,position:[this.pxmi(a),this.pxmi(b)],angle:1.5707963267948966}),this.walls.left.addShape(new p2.Plane),i&&(this.walls.left.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.left)),f&&(this.walls.right=new p2.Body({mass:0,position:[this.pxmi(a+c),this.pxmi(b)],angle:-1.5707963267948966}),this.walls.right.addShape(new p2.Plane),i&&(this.walls.right.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.right)),g&&(this.walls.top=new p2.Body({mass:0,position:[this.pxmi(a),this.pxmi(b)],angle:-3.141592653589793}),this.walls.top.addShape(new p2.Plane),i&&(this.walls.top.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.top)),h&&(this.walls.bottom=new p2.Body({mass:0,position:[this.pxmi(a),this.pxmi(d)]}),this.walls.bottom.addShape(new p2.Plane),i&&(this.walls.bottom.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.bottom))},update:function(){this.world.step(this.useElapsedTime?this.game.time.physicsElapsed:this.frameRate)},clear:function(){this.world.clear(),this.world.off("beginContact",this.beginContactHandler,this),this.world.off("endContact",this.endContactHandler,this),this.postBroadphaseCallback=null,this.callbackContext=null,this.impactCallback=null,this.collisionGroups=[],this._toRemove=[],this._collisionGroupID=2,this.boundsCollidesWith=[]},destroy:function(){this.clear(),this.game=null},addBody:function(a){return a.data.world?!1:(this.world.addBody(a.data),this.onBodyAdded.dispatch(a),!0)},removeBody:function(a){return a.data.world==this.world&&(this.world.removeBody(a.data),this.onBodyRemoved.dispatch(a)),a},addSpring:function(a){return this.world.addSpring(a),this.onSpringAdded.dispatch(a),a},removeSpring:function(a){return this.world.removeSpring(a),this.onSpringRemoved.dispatch(a),a},createDistanceConstraint:function(a,b,c,d){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.DistanceConstraint(this,a,b,c,d)):void console.warn("Cannot create Constraint, invalid body objects given")},createGearConstraint:function(a,b,c,d){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.GearConstraint(this,a,b,c,d)):void console.warn("Cannot create Constraint, invalid body objects given")},createRevoluteConstraint:function(a,b,c,d,e){return a=this.getBody(a),c=this.getBody(c),a&&c?this.addConstraint(new Phaser.Physics.P2.RevoluteConstraint(this,a,b,c,d,e)):void console.warn("Cannot create Constraint, invalid body objects given")},createLockConstraint:function(a,b,c,d,e){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.LockConstraint(this,a,b,c,d,e)):void console.warn("Cannot create Constraint, invalid body objects given")},createPrismaticConstraint:function(a,b,c,d,e,f,g){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.PrismaticConstraint(this,a,b,c,d,e,f,g)):void console.warn("Cannot create Constraint, invalid body objects given")},addConstraint:function(a){return this.world.addConstraint(a),this.onConstraintAdded.dispatch(a),a},removeConstraint:function(a){return this.world.removeConstraint(a),this.onConstraintRemoved.dispatch(a),a},addContactMaterial:function(a){return this.world.addContactMaterial(a),this.onContactMaterialAdded.dispatch(a),a},removeContactMaterial:function(a){return this.world.removeContactMaterial(a),this.onContactMaterialRemoved.dispatch(a),a},getContactMaterial:function(a,b){return this.world.getContactMaterial(a,b)},setMaterial:function(a,b){for(var c=b.length;c--;)b.setMaterial(a)},createMaterial:function(a,b){a=a||"";var c=new Phaser.Physics.P2.Material(a);return this.materials.push(c),"undefined"!=typeof b&&b.setMaterial(c),c},createContactMaterial:function(a,b,c){"undefined"==typeof a&&(a=this.createMaterial()),"undefined"==typeof b&&(b=this.createMaterial());var d=new Phaser.Physics.P2.ContactMaterial(a,b,c);return this.addContactMaterial(d)},getBodies:function(){for(var a=[],b=this.world.bodies.length;b--;)a.push(this.world.bodies[b].parent);return a},getBody:function(a){return a instanceof p2.Body?a:a instanceof Phaser.Physics.P2.Body?a.data:a.body&&a.body.type===Phaser.Physics.P2JS?a.body.data:null},getSprings:function(){for(var a=[],b=this.world.springs.length;b--;)a.push(this.world.springs[b].parent);return a},getConstraints:function(){for(var a=[],b=this.world.constraints.length;b--;)a.push(this.world.constraints[b].parent);return a},hitTest:function(a,b,c,d){"undefined"==typeof b&&(b=this.world.bodies),"undefined"==typeof c&&(c=5),"undefined"==typeof d&&(d=!1);for(var e=[this.pxmi(a.x),this.pxmi(a.y)],f=[],g=b.length;g--;)b[g]instanceof Phaser.Physics.P2.Body&&(!d||b[g].data.motionState!==p2.Body.STATIC)?f.push(b[g].data):b[g]instanceof p2.Body&&b[g].parent&&(!d||b[g].motionState!==p2.Body.STATIC)?f.push(b[g]):b[g]instanceof Phaser.Sprite&&b[g].hasOwnProperty("body")&&(!d||b[g].body.data.motionState!==p2.Body.STATIC)&&f.push(b[g].body.data);return this.world.hitTest(e,f,c)},toJSON:function(){return this.world.toJSON()},createCollisionGroup:function(a){var b=Math.pow(2,this._collisionGroupID);this.walls.left&&(this.walls.left.shapes[0].collisionMask=this.walls.left.shapes[0].collisionMask|b),this.walls.right&&(this.walls.right.shapes[0].collisionMask=this.walls.right.shapes[0].collisionMask|b),this.walls.top&&(this.walls.top.shapes[0].collisionMask=this.walls.top.shapes[0].collisionMask|b),this.walls.bottom&&(this.walls.bottom.shapes[0].collisionMask=this.walls.bottom.shapes[0].collisionMask|b),this._collisionGroupID++;var c=new Phaser.Physics.P2.CollisionGroup(b);return this.collisionGroups.push(c),a&&this.setCollisionGroup(a,c),c},setCollisionGroup:function(a,b){if(a instanceof Phaser.Group)for(var c=0;ce;e++){var g=a.collision[b][e],h=this.createBody(g.x,g.y,0,c,{},g.polyline);h&&d.push(h)}return d},clearTilemapLayerBodies:function(a,b){b=a.getLayer(b);for(var c=a.layers[b].bodies.length;c--;)a.layers[b].bodies[c].destroy();a.layers[b].bodies.length=[]},convertTilemap:function(a,b,c,d){b=a.getLayer(b),"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!0),this.clearTilemapLayerBodies(a,b);for(var e=0,f=0,g=0,h=0,i=a.layers[b].height;i>h;h++){e=0;for(var j=0,k=a.layers[b].width;k>j;j++){var l=a.layers[b].data[h][j];if(l&&l.collides)if(d){var m=a.getTileRight(b,j,h);if(0===e&&(f=l.x*l.width,g=l.y*l.height,e=l.width),m&&m.collides)e+=l.width;else{var n=this.createBody(f,g,0,!1);n.addRectangle(e,l.height,e/2,l.height/2,0),c&&this.addBody(n),a.layers[b].bodies.push(n),e=0}}else{var n=this.createBody(l.x*l.width,l.y*l.height,0,!1);n.addRectangle(l.width,l.height,l.width/2,l.height/2,0),c&&this.addBody(n),a.layers[b].bodies.push(n)}}}return a.layers[b].bodies},mpx:function(a){return a*=20},pxm:function(a){return.05*a},mpxi:function(a){return a*=-20},pxmi:function(a){return a*-.05}},Object.defineProperty(Phaser.Physics.P2.prototype,"friction",{get:function(){return this.world.defaultContactMaterial.friction},set:function(a){this.world.defaultContactMaterial.friction=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"defaultFriction",{get:function(){return this.world.defaultContactMaterial.friction},set:function(a){this.world.defaultContactMaterial.friction=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"restitution",{get:function(){return this.world.defaultContactMaterial.restitution},set:function(a){this.world.defaultContactMaterial.restitution=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"defaultRestitution",{get:function(){return this.world.defaultContactMaterial.restitution},set:function(a){this.world.defaultContactMaterial.restitution=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"contactMaterial",{get:function(){return this.world.defaultContactMaterial},set:function(a){this.world.defaultContactMaterial=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"applySpringForces",{get:function(){return this.world.applySpringForces},set:function(a){this.world.applySpringForces=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"applyDamping",{get:function(){return this.world.applyDamping},set:function(a){this.world.applyDamping=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"applyGravity",{get:function(){return this.world.applyGravity},set:function(a){this.world.applyGravity=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"solveConstraints",{get:function(){return this.world.solveConstraints},set:function(a){this.world.solveConstraints=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"time",{get:function(){return this.world.time}}),Object.defineProperty(Phaser.Physics.P2.prototype,"emitImpactEvent",{get:function(){return this.world.emitImpactEvent},set:function(a){this.world.emitImpactEvent=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"enableBodySleeping",{get:function(){return this.world.enableBodySleeping},set:function(a){this.world.enableBodySleeping=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"total",{get:function(){return this.world.bodies.length}}),Phaser.Physics.P2.FixtureList=function(a){Array.isArray(a)||(a=[a]),this.rawList=a,this.init(),this.parse(this.rawList)},Phaser.Physics.P2.FixtureList.prototype={init:function(){this.namedFixtures={},this.groupedFixtures=[],this.allFixtures=[]},setCategory:function(a,b){var c=function(b){b.collisionGroup=a};this.getFixtures(b).forEach(c)},setMask:function(a,b){var c=function(b){b.collisionMask=a};this.getFixtures(b).forEach(c)},setSensor:function(a,b){var c=function(b){b.sensor=a};this.getFixtures(b).forEach(c)},setMaterial:function(a,b){var c=function(b){b.material=a};this.getFixtures(b).forEach(c)},getFixtures:function(a){var b=[];if(a){a instanceof Array||(a=[a]);var c=this;return a.forEach(function(a){c.namedFixtures[a]&&b.push(c.namedFixtures[a])}),this.flatten(b)}return this.allFixtures},getFixtureByKey:function(a){return this.namedFixtures[a]},getGroup:function(a){return this.groupedFixtures[a]},parse:function(){var a,b,c,d;c=this.rawList,d=[];for(a in c)b=c[a],isNaN(a-0)?this.namedFixtures[a]=this.flatten(b):(this.groupedFixtures[a]=this.groupedFixtures[a]||[],this.groupedFixtures[a]=this.groupedFixtures[a].concat(b)),d.push(this.allFixtures=this.flatten(this.groupedFixtures))},flatten:function(a){var b,c;return b=[],c=arguments.callee,a.forEach(function(a){return Array.prototype.push.apply(b,Array.isArray(a)?c(a):[a])}),b}},Phaser.Physics.P2.PointProxy=function(a,b){this.world=a,this.destination=b},Phaser.Physics.P2.PointProxy.prototype.constructor=Phaser.Physics.P2.PointProxy,Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype,"x",{get:function(){return this.destination[0]},set:function(a){this.destination[0]=this.world.pxm(a)}}),Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype,"y",{get:function(){return this.destination[1]},set:function(a){this.destination[1]=this.world.pxm(a)}}),Phaser.Physics.P2.InversePointProxy=function(a,b){this.world=a,this.destination=b},Phaser.Physics.P2.InversePointProxy.prototype.constructor=Phaser.Physics.P2.InversePointProxy,Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype,"x",{get:function(){return this.destination[0]},set:function(a){this.destination[0]=this.world.pxm(-a)}}),Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype,"y",{get:function(){return this.destination[1]},set:function(a){this.destination[1]=this.world.pxm(-a)}}),Phaser.Physics.P2.Body=function(a,b,c,d,e){b=b||null,c=c||0,d=d||0,"undefined"==typeof e&&(e=1),this.game=a,this.world=a.physics.p2,this.sprite=b,this.type=Phaser.Physics.P2JS,this.offset=new Phaser.Point,this.data=new p2.Body({position:[this.world.pxmi(c),this.world.pxmi(d)],mass:e}),this.data.parent=this,this.velocity=new Phaser.Physics.P2.InversePointProxy(this.world,this.data.velocity),this.force=new Phaser.Physics.P2.InversePointProxy(this.world,this.data.force),this.gravity=new Phaser.Point,this.onBeginContact=new Phaser.Signal,this.onEndContact=new Phaser.Signal,this.collidesWith=[],this.removeNextStep=!1,this.debugBody=null,this._collideWorldBounds=!0,this._bodyCallbacks={},this._bodyCallbackContext={},this._groupCallbacks={},this._groupCallbackContext={},b&&(this.setRectangleFromSprite(b),b.exists&&this.game.physics.p2.addBody(this))},Phaser.Physics.P2.Body.prototype={createBodyCallback:function(a,b,c){var d=-1;a.id?d=a.id:a.body&&(d=a.body.id),d>-1&&(null===b?(delete this._bodyCallbacks[d],delete this._bodyCallbackContext[d]):(this._bodyCallbacks[d]=b,this._bodyCallbackContext[d]=c))},createGroupCallback:function(a,b,c){null===b?(delete this._groupCallbacks[a.mask],delete this._groupCallbacksContext[a.mask]):(this._groupCallbacks[a.mask]=b,this._groupCallbackContext[a.mask]=c)},getCollisionMask:function(){var a=0;this._collideWorldBounds&&(a=this.game.physics.p2.boundsCollisionGroup.mask);for(var b=0;b=0;c--)this.data.shapes[c].collisionMask=b;else a.collisionMask=b},setCollisionGroup:function(a,b){var c=this.getCollisionMask();if("undefined"==typeof b)for(var d=this.data.shapes.length-1;d>=0;d--)this.data.shapes[d].collisionGroup=a.mask,this.data.shapes[d].collisionMask=c;else b.collisionGroup=a.mask,b.collisionMask=c},clearCollision:function(a,b,c){if("undefined"==typeof c)for(var d=this.data.shapes.length-1;d>=0;d--)a&&(this.data.shapes[d].collisionGroup=null),b&&(this.data.shapes[d].collisionMask=null);else a&&(c.collisionGroup=null),b&&(c.collisionMask=null);a&&(this.collidesWith.length=0)},collides:function(a,b,c,d){if(Array.isArray(a))for(var e=0;e=0;e--)this.data.shapes[e].collisionMask=f;else d.collisionMask=f},adjustCenterOfMass:function(){this.data.adjustCenterOfMass()},applyDamping:function(a){this.data.applyDamping(a)},applyForce:function(a,b,c){this.data.applyForce(a,[this.world.pxm(b),this.world.pxm(c)])},setZeroForce:function(){this.data.setZeroForce()},setZeroRotation:function(){this.data.angularVelocity=0},setZeroVelocity:function(){this.data.velocity[0]=0,this.data.velocity[1]=0},setZeroDamping:function(){this.data.damping=0,this.data.angularDamping=0},toLocalFrame:function(a,b){return this.data.toLocalFrame(a,b)},toWorldFrame:function(a,b){return this.data.toWorldFrame(a,b)},rotateLeft:function(a){this.data.angularVelocity=this.world.pxm(-a)},rotateRight:function(a){this.data.angularVelocity=this.world.pxm(a)},moveForward:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.velocity[0]=b*Math.cos(c),this.data.velocity[1]=b*Math.sin(c)},moveBackward:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.velocity[0]=-(b*Math.cos(c)),this.data.velocity[1]=-(b*Math.sin(c))},thrust:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.force[0]+=b*Math.cos(c),this.data.force[1]+=b*Math.sin(c)},reverse:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.force[0]-=b*Math.cos(c),this.data.force[1]-=b*Math.sin(c)},moveLeft:function(a){this.data.velocity[0]=this.world.pxmi(-a)},moveRight:function(a){this.data.velocity[0]=this.world.pxmi(a)},moveUp:function(a){this.data.velocity[1]=this.world.pxmi(-a)},moveDown:function(a){this.data.velocity[1]=this.world.pxmi(a)},preUpdate:function(){this.removeNextStep&&(this.removeFromWorld(),this.removeNextStep=!1)},postUpdate:function(){this.sprite.x=this.world.mpxi(this.data.position[0]),this.sprite.y=this.world.mpxi(this.data.position[1]),this.fixedRotation||(this.sprite.rotation=this.data.angle)},reset:function(a,b,c,d){"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1),this.setZeroForce(),this.setZeroVelocity(),this.setZeroRotation(),c&&this.setZeroDamping(),d&&(this.mass=1),this.x=a,this.y=b},addToWorld:function(){this.data.world!==this.game.physics.p2.world&&this.game.physics.p2.addBody(this)},removeFromWorld:function(){this.data.world===this.game.physics.p2.world&&this.game.physics.p2.removeBodyNextStep(this)},destroy:function(){this.removeFromWorld(),this.clearShapes(),this._bodyCallbacks={},this._bodyCallbackContext={},this._groupCallbacks={},this._groupCallbackContext={},this.debugBody&&this.debugBody.destroy(),this.debugBody=null,this.sprite=null},clearShapes:function(){for(var a=this.data.shapes.length;a--;)this.data.removeShape(this.data.shapes[a]);this.shapeChanged()},addShape:function(a,b,c,d){return"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),"undefined"==typeof d&&(d=0),this.data.addShape(a,[this.world.pxmi(b),this.world.pxmi(c)],d),this.shapeChanged(),a},addCircle:function(a,b,c,d){var e=new p2.Circle(this.world.pxm(a));return this.addShape(e,b,c,d)},addRectangle:function(a,b,c,d,e){var f=new p2.Rectangle(this.world.pxm(a),this.world.pxm(b));return this.addShape(f,c,d,e)},addPlane:function(a,b,c){var d=new p2.Plane;return this.addShape(d,a,b,c)},addParticle:function(a,b,c){var d=new p2.Particle;return this.addShape(d,a,b,c)},addLine:function(a,b,c,d){var e=new p2.Line(this.world.pxm(a));return this.addShape(e,b,c,d)},addCapsule:function(a,b,c,d,e){var f=new p2.Capsule(this.world.pxm(a),b);return this.addShape(f,c,d,e)},addPolygon:function(a,b){a=a||{},b=Array.prototype.slice.call(arguments,1);var c=[];if(1===b.length&&Array.isArray(b[0]))c=b[0].slice(0);else if(Array.isArray(b[0]))c=b[0].slice(0);else if("number"==typeof b[0])for(var d=0,e=b.length;e>d;d+=2)c.push([b[d],b[d+1]]);var f=c.length-1;c[f][0]===c[0][0]&&c[f][1]===c[0][1]&&c.pop();for(var g=0;g=0;c--)this.data.shapes[c].material=a;else b.material=a},shapeChanged:function(){this.debugBody&&this.debugBody.draw()},addPhaserPolygon:function(a,b){for(var c=this.game.cache.getPhysicsData(a,b),d=[],e=0;eg;g+=2)e.push([f.shape[g],f.shape[g+1]]);return this.addPolygon(c,e)}for(var i=p2.vec2.create(),g=0;g=0?o>n:n>o;e=o>=0?++n:--n)k=b.vertices[e],p2.vec2.rotate(m,k,a),l.push([(m[0]+i[0])*this.ppu,-(m[1]+i[1])*this.ppu]);this.drawConvex(j,l,b.triangles,f,c,g,this.settings.debugPolygons,[i[0]*this.ppu,-i[1]*this.ppu])}else b instanceof p2.Plane?this.drawPlane(j,i[0]*this.ppu,-i[1]*this.ppu,c,f,5*g,10*g,10*g,100*this.ppu,a):b instanceof p2.Line?this.drawLine(j,b.length*this.ppu,f,g):b instanceof p2.Rectangle&&this.drawRectangle(j,i[0]*this.ppu,-i[1]*this.ppu,a,b.width*this.ppu,b.height*this.ppu,f,c,g);d++}}},drawRectangle:function(a,b,c,d,e,f,g,h,i){"undefined"==typeof i&&(i=1),"undefined"==typeof g&&(g=0),a.lineStyle(i,g,1),a.beginFill(h),a.drawRect(b-e/2,c-f/2,e,f)},drawCircle:function(a,b,c,d,e,f,g){"undefined"==typeof g&&(g=1),"undefined"==typeof f&&(f=16777215),a.lineStyle(g,0,1),a.beginFill(f,1),a.drawCircle(b,c,-e),a.endFill(),a.moveTo(b,c),a.lineTo(b+e*Math.cos(-d),c+e*Math.sin(-d))},drawLine:function(a,b,c,d){"undefined"==typeof d&&(d=1),"undefined"==typeof c&&(c=0),a.lineStyle(5*d,c,1),a.moveTo(-b/2,0),a.lineTo(b/2,0)},drawConvex:function(a,b,c,d,e,f,g,h){var i,j,k,l,m,n,o,p,q,r,s;if("undefined"==typeof f&&(f=1),"undefined"==typeof d&&(d=0),g){for(i=[16711680,65280,255],j=0;j!==b.length+1;)l=b[j%b.length],m=b[(j+1)%b.length],o=l[0],r=l[1],p=m[0],s=m[1],a.lineStyle(f,i[j%i.length],1),a.moveTo(o,-r),a.lineTo(p,-s),a.drawCircle(o,-r,2*f),j++;return a.lineStyle(f,0,1),a.drawCircle(h[0],h[1],2*f)}for(a.lineStyle(f,d,1),a.beginFill(e),j=0;j!==b.length;)k=b[j],n=k[0],q=k[1],0===j?a.moveTo(n,-q):a.lineTo(n,-q),j++;return a.endFill(),b.length>2?(a.moveTo(b[b.length-1][0],-b[b.length-1][1]),a.lineTo(b[0][0],-b[0][1])):void 0},drawPath:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;for("undefined"==typeof e&&(e=1),"undefined"==typeof c&&(c=0),a.lineStyle(e,c,1),"number"==typeof d&&a.beginFill(d),h=null,i=null,g=0;g2&&"number"==typeof d&&(a.moveTo(b[b.length-1][0],b[b.length-1][1]),a.lineTo(b[0][0],b[0][1]))},drawPlane:function(a,b,c,d,e,f,g,h,i,j){var k,l,m;"undefined"==typeof f&&(f=1),"undefined"==typeof d&&(d=16777215),a.lineStyle(f,e,11),a.beginFill(d),k=i,a.moveTo(b,-c),l=b+Math.cos(j)*this.game.width,m=c+Math.sin(j)*this.game.height,a.lineTo(l,-m),a.moveTo(b,-c),l=b+Math.cos(j)*-this.game.width,m=c+Math.sin(j)*-this.game.height,a.lineTo(l,-m)},randomPastelHex:function(){var a,b,c,d;return c=[255,255,255],d=Math.floor(256*Math.random()),b=Math.floor(256*Math.random()),a=Math.floor(256*Math.random()),d=Math.floor((d+3*c[0])/4),b=Math.floor((b+3*c[1])/4),a=Math.floor((a+3*c[2])/4),this.rgbToHex(d,b,a)},rgbToHex:function(a,b,c){return this.componentToHex(a)+this.componentToHex(b)+this.componentToHex(c)},componentToHex:function(a){var b;return b=a.toString(16),2===b.len?b:b+"0"}}),Phaser.Physics.P2.Spring=function(a,b,c,d,e,f,g,h,i,j){this.game=a.game,this.world=a,"undefined"==typeof d&&(d=1),"undefined"==typeof e&&(e=100),"undefined"==typeof f&&(f=1),d=a.pxm(d);var k={restLength:d,stiffness:e,damping:f};"undefined"!=typeof g&&null!==g&&(k.worldAnchorA=[a.pxm(g[0]),a.pxm(g[1])]),"undefined"!=typeof h&&null!==h&&(k.worldAnchorB=[a.pxm(h[0]),a.pxm(h[1])]),"undefined"!=typeof i&&null!==i&&(k.localAnchorA=[a.pxm(i[0]),a.pxm(i[1])]),"undefined"!=typeof j&&null!==j&&(k.localAnchorB=[a.pxm(j[0]),a.pxm(j[1])]),p2.Spring.call(this,b,c,k)},Phaser.Physics.P2.Spring.prototype=Object.create(p2.Spring.prototype),Phaser.Physics.P2.Spring.prototype.constructor=Phaser.Physics.P2.Spring,Phaser.Physics.P2.Material=function(a){this.name=a,p2.Material.call(this)},Phaser.Physics.P2.Material.prototype=Object.create(p2.Material.prototype),Phaser.Physics.P2.Material.prototype.constructor=Phaser.Physics.P2.Material,Phaser.Physics.P2.ContactMaterial=function(a,b,c){p2.ContactMaterial.call(this,a,b,c)},Phaser.Physics.P2.ContactMaterial.prototype=Object.create(p2.ContactMaterial.prototype),Phaser.Physics.P2.ContactMaterial.prototype.constructor=Phaser.Physics.P2.ContactMaterial,Phaser.Physics.P2.CollisionGroup=function(a){this.mask=a},Phaser.Physics.P2.DistanceConstraint=function(a,b,c,d,e){"undefined"==typeof d&&(d=100),this.game=a.game,this.world=a,d=a.pxm(d),p2.DistanceConstraint.call(this,b,c,d,e)},Phaser.Physics.P2.DistanceConstraint.prototype=Object.create(p2.DistanceConstraint.prototype),Phaser.Physics.P2.DistanceConstraint.prototype.constructor=Phaser.Physics.P2.DistanceConstraint,Phaser.Physics.P2.GearConstraint=function(a,b,c,d,e){"undefined"==typeof d&&(d=0),"undefined"==typeof e&&(e=1),this.game=a.game,this.world=a;var f={angle:d,ratio:e};p2.GearConstraint.call(this,b,c,f)},Phaser.Physics.P2.GearConstraint.prototype=Object.create(p2.GearConstraint.prototype),Phaser.Physics.P2.GearConstraint.prototype.constructor=Phaser.Physics.P2.GearConstraint,Phaser.Physics.P2.LockConstraint=function(a,b,c,d,e,f){"undefined"==typeof d&&(d=[0,0]),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=Number.MAX_VALUE),this.game=a.game,this.world=a,d=[a.pxm(d[0]),a.pxm(d[1])];var g={localOffsetB:d,localAngleB:e,maxForce:f};p2.LockConstraint.call(this,b,c,g)},Phaser.Physics.P2.LockConstraint.prototype=Object.create(p2.LockConstraint.prototype),Phaser.Physics.P2.LockConstraint.prototype.constructor=Phaser.Physics.P2.LockConstraint,Phaser.Physics.P2.PrismaticConstraint=function(a,b,c,d,e,f,g,h){"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=[0,0]),"undefined"==typeof f&&(f=[0,0]),"undefined"==typeof g&&(g=[0,0]),"undefined"==typeof h&&(h=Number.MAX_VALUE),this.game=a.game,this.world=a,e=[a.pxmi(e[0]),a.pxmi(e[1])],f=[a.pxmi(f[0]),a.pxmi(f[1])];var i={localAnchorA:e,localAnchorB:f,localAxisA:g,maxForce:h,disableRotationalLock:!d};p2.PrismaticConstraint.call(this,b,c,i)},Phaser.Physics.P2.PrismaticConstraint.prototype=Object.create(p2.PrismaticConstraint.prototype),Phaser.Physics.P2.PrismaticConstraint.prototype.constructor=Phaser.Physics.P2.PrismaticConstraint,Phaser.Physics.P2.RevoluteConstraint=function(a,b,c,d,e,f){"undefined"==typeof f&&(f=Number.MAX_VALUE),this.game=a.game,this.world=a,c=[a.pxmi(c[0]),a.pxmi(c[1])],e=[a.pxmi(e[0]),a.pxmi(e[1])],p2.RevoluteConstraint.call(this,b,c,d,e,f)},Phaser.Physics.P2.RevoluteConstraint.prototype=Object.create(p2.RevoluteConstraint.prototype),Phaser.Physics.P2.RevoluteConstraint.prototype.constructor=Phaser.Physics.P2.RevoluteConstraint; +(function(){var a=this,b=b||{};b.WEBGL_RENDERER=0,b.CANVAS_RENDERER=1,b.VERSION="v1.5.2",b.blendModes={NORMAL:0,ADD:1,MULTIPLY:2,SCREEN:3,OVERLAY:4,DARKEN:5,LIGHTEN:6,COLOR_DODGE:7,COLOR_BURN:8,HARD_LIGHT:9,SOFT_LIGHT:10,DIFFERENCE:11,EXCLUSION:12,HUE:13,SATURATION:14,COLOR:15,LUMINOSITY:16},b.scaleModes={DEFAULT:0,LINEAR:0,NEAREST:1},b.INTERACTION_FREQUENCY=30,b.AUTO_PREVENT_DEFAULT=!0,b.RAD_TO_DEG=180/Math.PI,b.DEG_TO_RAD=Math.PI/180,b.Point=function(a,b){this.x=a||0,this.y=b||0},b.Point.prototype.clone=function(){return new b.Point(this.x,this.y)},b.Point.prototype.constructor=b.Point,b.Point.prototype.set=function(a,b){this.x=a||0,this.y=b||(0!==b?this.x:0)},b.Rectangle=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},b.Rectangle.prototype.clone=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},b.Rectangle.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=this.x;if(a>=c&&a<=c+this.width){var d=this.y;if(b>=d&&b<=d+this.height)return!0}return!1},b.Rectangle.prototype.constructor=b.Rectangle,b.EmptyRectangle=new b.Rectangle(0,0,0,0),b.Polygon=function(a){if(a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var c=[],d=0,e=a.length;e>d;d+=2)c.push(new b.Point(a[d],a[d+1]));a=c}this.points=a},b.Polygon.prototype.clone=function(){for(var a=[],c=0;cb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!c)}return c},b.Polygon.prototype.constructor=b.Polygon,b.Circle=function(a,b,c){this.x=a||0,this.y=b||0,this.radius=c||0},b.Circle.prototype.clone=function(){return new b.Circle(this.x,this.y,this.radius)},b.Circle.prototype.contains=function(a,b){if(this.radius<=0)return!1;var c=this.x-a,d=this.y-b,e=this.radius*this.radius;return c*=c,d*=d,e>=c+d},b.Circle.prototype.constructor=b.Circle,b.Ellipse=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},b.Ellipse.prototype.clone=function(){return new b.Ellipse(this.x,this.y,this.width,this.height)},b.Ellipse.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=(a-this.x)/this.width,d=(b-this.y)/this.height;return c*=c,d*=d,1>=c+d},b.Ellipse.prototype.getBounds=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},b.Ellipse.prototype.constructor=b.Ellipse,b.determineMatrixArrayType=function(){return"undefined"!=typeof Float32Array?Float32Array:Array},b.Matrix2=b.determineMatrixArrayType(),b.Matrix=function(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0},b.Matrix.prototype.fromArray=function(a){this.a=a[0],this.b=a[1],this.c=a[3],this.d=a[4],this.tx=a[2],this.ty=a[5]},b.Matrix.prototype.toArray=function(a){this.array||(this.array=new Float32Array(9));var b=this.array;return a?(this.array[0]=this.a,this.array[1]=this.c,this.array[2]=0,this.array[3]=this.b,this.array[4]=this.d,this.array[5]=0,this.array[6]=this.tx,this.array[7]=this.ty,this.array[8]=1):(this.array[0]=this.a,this.array[1]=this.b,this.array[2]=this.tx,this.array[3]=this.c,this.array[4]=this.d,this.array[5]=this.ty,this.array[6]=0,this.array[7]=0,this.array[8]=1),b},b.identityMatrix=new b.Matrix,b.DisplayObject=function(){this.position=new b.Point,this.scale=new b.Point(1,1),this.pivot=new b.Point(0,0),this.rotation=0,this.alpha=1,this.visible=!0,this.hitArea=null,this.buttonMode=!1,this.renderable=!1,this.parent=null,this.stage=null,this.worldAlpha=1,this._interactive=!1,this.defaultCursor="pointer",this.worldTransform=new b.Matrix,this.color=[],this.dynamic=!0,this._sr=0,this._cr=1,this.filterArea=null,this._bounds=new b.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this._cacheAsBitmap=!1,this._cacheIsDirty=!1},b.DisplayObject.prototype.constructor=b.DisplayObject,b.DisplayObject.prototype.setInteractive=function(a){this.interactive=a},Object.defineProperty(b.DisplayObject.prototype,"interactive",{get:function(){return this._interactive},set:function(a){this._interactive=a,this.stage&&(this.stage.dirty=!0)}}),Object.defineProperty(b.DisplayObject.prototype,"worldVisible",{get:function(){var a=this;do{if(!a.visible)return!1;a=a.parent}while(a);return!0}}),Object.defineProperty(b.DisplayObject.prototype,"mask",{get:function(){return this._mask},set:function(a){this._mask&&(this._mask.isMask=!1),this._mask=a,this._mask&&(this._mask.isMask=!0)}}),Object.defineProperty(b.DisplayObject.prototype,"filters",{get:function(){return this._filters},set:function(a){if(a){for(var b=[],c=0;c=0&&b<=this.children.length))throw new Error(a+" The index "+b+" supplied is out of bounds "+this.children.length);a.parent&&a.parent.removeChild(a),a.parent=this,this.children.splice(b,0,a),this.stage&&a.setStageReference(this.stage)},b.DisplayObjectContainer.prototype.swapChildren=function(a,b){if(a!==b){var c=this.children.indexOf(a),d=this.children.indexOf(b);if(0>c||0>d)throw new Error("swapChildren: Both the supplied DisplayObjects must be a child of the caller.");this.children[c]=b,this.children[d]=a}},b.DisplayObjectContainer.prototype.getChildAt=function(a){if(a>=0&&a0&&d>=e){for(var f=this.children.splice(c,e),g=0;ga;a++)this.children[a].updateTransform()},b.DisplayObjectContainer.prototype.getBounds=function(a){if(0===this.children.length)return b.EmptyRectangle;if(a){var c=this.worldTransform;this.worldTransform=a,this.updateTransform(),this.worldTransform=c}for(var d,e,f,g=1/0,h=1/0,i=-1/0,j=-1/0,k=!1,l=0,m=this.children.length;m>l;l++){var n=this.children[l];n.visible&&(k=!0,d=this.children[l].getBounds(a),g=ge?i:e,j=j>f?j:f)}if(!k)return b.EmptyRectangle;var o=this._bounds;return o.x=g,o.y=h,o.width=i-g,o.height=j-h,o},b.DisplayObjectContainer.prototype.getLocalBounds=function(){var a=this.worldTransform;this.worldTransform=b.identityMatrix;for(var c=0,d=this.children.length;d>c;c++)this.children[c].updateTransform();var e=this.getBounds();return this.worldTransform=a,e},b.DisplayObjectContainer.prototype.setStageReference=function(a){this.stage=a,this._interactive&&(this.stage.dirty=!0);for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d.setStageReference(a)}},b.DisplayObjectContainer.prototype.removeStageReference=function(){for(var a=0,b=this.children.length;b>a;a++){var c=this.children[a];c.removeStageReference()}this._interactive&&(this.stage.dirty=!0),this.stage=null},b.DisplayObjectContainer.prototype._renderWebGL=function(a){if(this.visible&&!(this.alpha<=0)){if(this._cacheAsBitmap)return void this._renderCachedSprite(a);var b,c;if(this._mask||this._filters){for(this._mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a),a.spriteBatch.start()),this._filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);a.spriteBatch.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),a.spriteBatch.start()}else for(b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},b.DisplayObjectContainer.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){if(this._cacheAsBitmap)return void this._renderCachedSprite(a);this._mask&&a.maskManager.pushMask(this._mask,a.context);for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},b.Sprite=function(a){b.DisplayObjectContainer.call(this),this.anchor=new b.Point,this.texture=a,this._width=0,this._height=0,this.tint=16777215,this.blendMode=b.blendModes.NORMAL,a.baseTexture.hasLoaded?this.onTextureUpdate():(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},b.Sprite.prototype=Object.create(b.DisplayObjectContainer.prototype),b.Sprite.prototype.constructor=b.Sprite,Object.defineProperty(b.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(a){this.scale.x=a/this.texture.frame.width,this._width=a}}),Object.defineProperty(b.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(a){this.scale.y=a/this.texture.frame.height,this._height=a}}),b.Sprite.prototype.setTexture=function(a){this.texture.baseTexture!==a.baseTexture?(this.textureChange=!0,this.texture=a):this.texture=a,this.cachedTint=16777215,this.updateFrame=!0},b.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},b.Sprite.prototype.getBounds=function(a){var b=this.texture.frame.width,c=this.texture.frame.height,d=b*(1-this.anchor.x),e=b*-this.anchor.x,f=c*(1-this.anchor.y),g=c*-this.anchor.y,h=a||this.worldTransform,i=h.a,j=h.c,k=h.b,l=h.d,m=h.tx,n=h.ty,o=i*e+k*g+m,p=l*g+j*e+n,q=i*d+k*g+m,r=l*g+j*d+n,s=i*d+k*f+m,t=l*f+j*d+n,u=i*e+k*f+m,v=l*f+j*e+n,w=-1/0,x=-1/0,y=1/0,z=1/0;y=y>o?o:y,y=y>q?q:y,y=y>s?s:y,y=y>u?u:y,z=z>p?p:z,z=z>r?r:z,z=z>t?t:z,z=z>v?v:z,w=o>w?o:w,w=q>w?q:w,w=s>w?s:w,w=u>w?u:w,x=p>x?p:x,x=r>x?r:x,x=t>x?t:x,x=v>x?v:x;var A=this._bounds;return A.x=y,A.width=w-y,A.y=z,A.height=x-z,this._currentBounds=A,A},b.Sprite.prototype._renderWebGL=function(a){if(this.visible&&!(this.alpha<=0)){var b,c;if(this._mask||this._filters){var d=a.spriteBatch;for(this._mask&&(d.stop(),a.maskManager.pushMask(this.mask,a),d.start()),this._filters&&(d.flush(),a.filterManager.pushFilter(this._filterBlock)),d.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);d.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),d.start()}else for(a.spriteBatch.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},b.Sprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){var c=this.texture.frame,d=a.context,e=this.texture;if(this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,d.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),this._mask&&a.maskManager.pushMask(this._mask,a.context),c&&c.width&&c.height&&e.baseTexture.source){d.globalAlpha=this.worldAlpha;var f=this.worldTransform;if(a.roundPixels?d.setTransform(f.a,f.c,f.b,f.d,0|f.tx,0|f.ty):d.setTransform(f.a,f.c,f.b,f.d,f.tx,f.ty),a.smoothProperty&&a.scaleMode!==this.texture.baseTexture.scaleMode&&(a.scaleMode=this.texture.baseTexture.scaleMode,d[a.smoothProperty]=a.scaleMode===b.scaleModes.LINEAR),16777215!==this.tint){if(this.cachedTint!==this.tint){if(!e.baseTexture.hasLoaded)return;this.cachedTint=this.tint,this.tintedTexture=b.CanvasTinter.getTintedTexture(this,this.tint)}d.drawImage(this.tintedTexture,0,0,c.width,c.height,this.anchor.x*-c.width,this.anchor.y*-c.height,c.width,c.height)}else if(e.trim){var g=e.trim;d.drawImage(this.texture.baseTexture.source,c.x,c.y,c.width,c.height,g.x-this.anchor.x*g.width,g.y-this.anchor.y*g.height,c.width,c.height)}else d.drawImage(this.texture.baseTexture.source,c.x,c.y,c.width,c.height,this.anchor.x*-c.width,this.anchor.y*-c.height,c.width,c.height)}for(var h=0,i=this.children.length;i>h;h++){var j=this.children[h];j._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},b.Sprite.fromFrame=function(a){var c=b.TextureCache[a];if(!c)throw new Error('The frameId "'+a+'" does not exist in the texture cache'+this);return new b.Sprite(c)},b.Sprite.fromImage=function(a,c,d){var e=b.Texture.fromImage(a,c,d);return new b.Sprite(e)},b.SpriteBatch=function(a){b.DisplayObjectContainer.call(this),this.textureThing=a,this.ready=!1},b.SpriteBatch.prototype=Object.create(b.DisplayObjectContainer.prototype),b.SpriteBatch.constructor=b.SpriteBatch,b.SpriteBatch.prototype.initWebGL=function(a){this.fastSpriteBatch=new b.WebGLFastSpriteBatch(a),this.ready=!0},b.SpriteBatch.prototype.updateTransform=function(){b.DisplayObject.prototype.updateTransform.call(this)},b.SpriteBatch.prototype._renderWebGL=function(a){!this.visible||this.alpha<=0||!this.children.length||(this.ready||this.initWebGL(a.gl),a.spriteBatch.stop(),a.shaderManager.activateShader(a.shaderManager.fastShader),this.fastSpriteBatch.begin(this,a),this.fastSpriteBatch.render(this),a.shaderManager.activateShader(a.shaderManager.defaultShader),a.spriteBatch.start())},b.SpriteBatch.prototype._renderCanvas=function(a){var c=a.context;c.globalAlpha=this.worldAlpha,b.DisplayObject.prototype.updateTransform.call(this);for(var d=this.worldTransform,e=!0,f=0;fe?(g>0&&(b+="\n"),b+=f[g],e=this.style.wordWrapWidth-h):(e-=i,b+=" "+f[g])}d=2?parseInt(c[c.length-2],10):b.BitmapText.fonts[this.fontName].size,this.dirty=!0,this.tint=a.tint},b.BitmapText.prototype.updateText=function(){for(var a=b.BitmapText.fonts[this.fontName],c=new b.Point,d=null,e=[],f=0,g=[],h=0,i=this.fontSize/a.size,j=0;j=j;j++){var n=0;"right"===this.style.align?n=f-g[j]:"center"===this.style.align&&(n=(f-g[j])/2),m.push(n)}var o=this.children.length,p=e.length,q=this.tint||16777215;for(j=0;p>j;j++){var r=o>j?this.children[j]:this._pool.pop();r?r.setTexture(e[j].texture):r=new b.Sprite(e[j].texture),r.position.x=(e[j].position.x+m[e[j].line])*i,r.position.y=e[j].position.y*i,r.scale.x=r.scale.y=i,r.tint=q,r.parent||this.addChild(r)}for(;this.children.length>p;){var s=this.getChildAt(this.children.length-1);this._pool.push(s),this.removeChild(s)}this.textWidth=f*i,this.textHeight=(c.y+a.lineHeight)*i},b.BitmapText.prototype.updateTransform=function(){this.dirty&&(this.updateText(),this.dirty=!1),b.DisplayObjectContainer.prototype.updateTransform.call(this)},b.BitmapText.fonts={},b.Stage=function(a){b.DisplayObjectContainer.call(this),this.worldTransform=new b.Matrix,this.interactive=!0,this.interactionManager=new b.InteractionManager(this),this.dirty=!0,this.stage=this,this.stage.hitArea=new b.Rectangle(0,0,1e5,1e5),this.setBackgroundColor(a)},b.Stage.prototype=Object.create(b.DisplayObjectContainer.prototype),b.Stage.prototype.constructor=b.Stage,b.Stage.prototype.setInteractionDelegate=function(a){this.interactionManager.setTargetDomElement(a)},b.Stage.prototype.updateTransform=function(){this.worldAlpha=1;for(var a=0,b=this.children.length;b>a;a++)this.children[a].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},b.Stage.prototype.setBackgroundColor=function(a){this.backgroundColor=a||0,this.backgroundColorSplit=b.hex2rgb(this.backgroundColor);var c=this.backgroundColor.toString(16);c="000000".substr(0,6-c.length)+c,this.backgroundColorString="#"+c},b.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global};for(var c=0,d=["ms","moz","webkit","o"],e=0;e>16&255)/255,(a>>8&255)/255,(255&a)/255]},b.rgb2hex=function(a){return(255*a[0]<<16)+(255*a[1]<<8)+255*a[2]},"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),b.AjaxRequest=function(){var a=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new window.XMLHttpRequest:!1;for(var b=0;b0&&0===(a&a-1))return a;for(var b=1;a>b;)b<<=1;return b},b.EventTarget=function(){var a={};this.addEventListener=this.on=function(b,c){void 0===a[b]&&(a[b]=[]),-1===a[b].indexOf(c)&&a[b].push(c)},this.dispatchEvent=this.emit=function(b){if(a[b.type]&&a[b.type].length)for(var c=0,d=a[b.type].length;d>c;c++)a[b.type][c](b)},this.removeEventListener=this.off=function(b,c){var d=a[b].indexOf(c);-1!==d&&a[b].splice(d,1)},this.removeAllEventListeners=function(b){var c=a[b];c&&(c.length=0)}},b.PolyK={},b.PolyK.Triangulate=function(a){var c=!0,d=a.length>>1;if(3>d)return[];for(var e=[],f=[],g=0;d>g;g++)f.push(g);g=0;for(var h=d;h>3;){var i=f[(g+0)%h],j=f[(g+1)%h],k=f[(g+2)%h],l=a[2*i],m=a[2*i+1],n=a[2*j],o=a[2*j+1],p=a[2*k],q=a[2*k+1],r=!1;if(b.PolyK._convex(l,m,n,o,p,q,c)){r=!0;for(var s=0;h>s;s++){var t=f[s];if(t!==i&&t!==j&&t!==k&&b.PolyK._PointInTriangle(a[2*t],a[2*t+1],l,m,n,o,p,q)){r=!1;break}}}if(r)e.push(i,j,k),f.splice((g+1)%h,1),h--,g=0;else if(g++>3*h){if(!c)return window.console.log("PIXI Warning: shape too complex to fill"),[];for(e=[],f=[],g=0;d>g;g++)f.push(g);g=0,h=d,c=!1}}return e.push(f[0],f[1],f[2]),e},b.PolyK._PointInTriangle=function(a,b,c,d,e,f,g,h){var i=g-c,j=h-d,k=e-c,l=f-d,m=a-c,n=b-d,o=i*i+j*j,p=i*k+j*l,q=i*m+j*n,r=k*k+l*l,s=k*m+l*n,t=1/(o*r-p*p),u=(r*q-p*s)*t,v=(o*s-p*q)*t;return u>=0&&v>=0&&1>u+v},b.PolyK._convex=function(a,b,c,d,e,f,g){return(b-d)*(e-c)+(c-a)*(f-d)>=0===g},b.initDefaultShaders=function(){},b.CompileVertexShader=function(a,c){return b._CompileShader(a,c,a.VERTEX_SHADER)},b.CompileFragmentShader=function(a,c){return b._CompileShader(a,c,a.FRAGMENT_SHADER)},b._CompileShader=function(a,b,c){var d=b.join("\n"),e=a.createShader(c);return a.shaderSource(e,d),a.compileShader(e),a.getShaderParameter(e,a.COMPILE_STATUS)?e:(window.console.log(a.getShaderInfoLog(e)),null)},b.compileProgram=function(a,c,d){var e=b.CompileFragmentShader(a,d),f=b.CompileVertexShader(a,c),g=a.createProgram();return a.attachShader(g,f),a.attachShader(g,e),a.linkProgram(g),a.getProgramParameter(g,a.LINK_STATUS)||window.console.log("Could not initialise shaders"),g},b.PixiShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"],this.textureCount=0,this.attributes=[],this.init()},b.PixiShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc||b.PixiShader.defaultVertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.dimensions=a.getUniformLocation(c,"dimensions"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.colorAttribute=a.getAttribLocation(c,"aColor"),-1===this.colorAttribute&&(this.colorAttribute=2),this.attributes=[this.aVertexPosition,this.aTextureCoord,this.colorAttribute];for(var d in this.uniforms)this.uniforms[d].uniformLocation=a.getUniformLocation(c,d);this.initUniforms(),this.program=c},b.PixiShader.prototype.initUniforms=function(){this.textureCount=1;var a,b=this.gl;for(var c in this.uniforms){a=this.uniforms[c];var d=a.type;"sampler2D"===d?(a._init=!1,null!==a.value&&this.initSampler2D(a)):"mat2"===d||"mat3"===d||"mat4"===d?(a.glMatrix=!0,a.glValueLength=1,"mat2"===d?a.glFunc=b.uniformMatrix2fv:"mat3"===d?a.glFunc=b.uniformMatrix3fv:"mat4"===d&&(a.glFunc=b.uniformMatrix4fv)):(a.glFunc=b["uniform"+d],a.glValueLength="2f"===d||"2i"===d?2:"3f"===d||"3i"===d?3:"4f"===d||"4i"===d?4:1)}},b.PixiShader.prototype.initSampler2D=function(a){if(a.value&&a.value.baseTexture&&a.value.baseTexture.hasLoaded){var b=this.gl;if(b.activeTexture(b["TEXTURE"+this.textureCount]),b.bindTexture(b.TEXTURE_2D,a.value.baseTexture._glTextures[b.id]),a.textureData){var c=a.textureData,d=c.magFilter?c.magFilter:b.LINEAR,e=c.minFilter?c.minFilter:b.LINEAR,f=c.wrapS?c.wrapS:b.CLAMP_TO_EDGE,g=c.wrapT?c.wrapT:b.CLAMP_TO_EDGE,h=c.luminance?b.LUMINANCE:b.RGBA;if(c.repeat&&(f=b.REPEAT,g=b.REPEAT),b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL,!!c.flipY),c.width){var i=c.width?c.width:512,j=c.height?c.height:2,k=c.border?c.border:0;b.texImage2D(b.TEXTURE_2D,0,h,i,j,k,h,b.UNSIGNED_BYTE,null)}else b.texImage2D(b.TEXTURE_2D,0,h,b.RGBA,b.UNSIGNED_BYTE,a.value.baseTexture.source);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,d),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,e),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,f),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,g)}b.uniform1i(a.uniformLocation,this.textureCount),a._init=!0,this.textureCount++}},b.PixiShader.prototype.syncUniforms=function(){this.textureCount=1;var a,c=this.gl;for(var d in this.uniforms)a=this.uniforms[d],1===a.glValueLength?a.glMatrix===!0?a.glFunc.call(c,a.uniformLocation,a.transpose,a.value):a.glFunc.call(c,a.uniformLocation,a.value):2===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y):3===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y,a.value.z):4===a.glValueLength?a.glFunc.call(c,a.uniformLocation,a.value.x,a.value.y,a.value.z,a.value.w):"sampler2D"===a.type&&(a._init?(c.activeTexture(c["TEXTURE"+this.textureCount]),c.bindTexture(c.TEXTURE_2D,a.value.baseTexture._glTextures[c.id]||b.createWebGLTexture(a.value.baseTexture,c)),c.uniform1i(a.uniformLocation,this.textureCount),this.textureCount++):this.initSampler2D(a)) +},b.PixiShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attributes=null},b.PixiShader.defaultVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec2 aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","varying vec2 vTextureCoord;","varying vec4 vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {"," gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vec3 color = mod(vec3(aColor.y/65536.0, aColor.y/256.0, aColor.y), 256.0) / 256.0;"," vColor = vec4(color * aColor.x, aColor.x);","}"],b.PixiFastShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform mat3 uMatrix;","varying vec2 vTextureCoord;","varying float vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {"," vec2 v;"," vec2 sv = aVertexPosition * aScale;"," v.x = (sv.x) * cos(aRotation) - (sv.y) * sin(aRotation);"," v.y = (sv.x) * sin(aRotation) + (sv.y) * cos(aRotation);"," v = ( uMatrix * vec3(v + aPositionCoord , 1.0) ).xy ;"," gl_Position = vec4( ( v / projectionVector) + center , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"],this.textureCount=0,this.init()},b.PixiFastShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.dimensions=a.getUniformLocation(c,"dimensions"),this.uMatrix=a.getUniformLocation(c,"uMatrix"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aPositionCoord=a.getAttribLocation(c,"aPositionCoord"),this.aScale=a.getAttribLocation(c,"aScale"),this.aRotation=a.getAttribLocation(c,"aRotation"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.colorAttribute=a.getAttribLocation(c,"aColor"),-1===this.colorAttribute&&(this.colorAttribute=2),this.attributes=[this.aVertexPosition,this.aPositionCoord,this.aScale,this.aRotation,this.aTextureCoord,this.colorAttribute],this.program=c},b.PixiFastShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attributes=null},b.StripShader=function(){this.program=null,this.fragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform float alpha;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));"," gl_FragColor = gl_FragColor * alpha;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","varying vec2 vTextureCoord;","uniform vec2 offsetVector;","varying float vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition, 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / projectionVector.y + 1.0 , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"]},b.StripShader.prototype.init=function(){var a=b.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.uSampler=a.getUniformLocation(c,"uSampler"),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.colorAttribute=a.getAttribLocation(c,"aColor"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.aTextureCoord=a.getAttribLocation(c,"aTextureCoord"),this.translationMatrix=a.getUniformLocation(c,"translationMatrix"),this.alpha=a.getUniformLocation(c,"alpha"),this.program=c},b.PrimitiveShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision mediump float;","varying vec4 vColor;","void main(void) {"," gl_FragColor = vColor;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform float alpha;","uniform vec3 tint;","varying vec4 vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"],this.init()},b.PrimitiveShader.prototype.init=function(){var a=this.gl,c=b.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(c),this.projectionVector=a.getUniformLocation(c,"projectionVector"),this.offsetVector=a.getUniformLocation(c,"offsetVector"),this.tintColor=a.getUniformLocation(c,"tint"),this.aVertexPosition=a.getAttribLocation(c,"aVertexPosition"),this.colorAttribute=a.getAttribLocation(c,"aColor"),this.attributes=[this.aVertexPosition,this.colorAttribute],this.translationMatrix=a.getUniformLocation(c,"translationMatrix"),this.alpha=a.getUniformLocation(c,"alpha"),this.program=c},b.PrimitiveShader.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.uniforms=null,this.gl=null,this.attribute=null},b.WebGLGraphics=function(){},b.WebGLGraphics.renderGraphics=function(a,c){var d=c.gl,e=c.projection,f=c.offset,g=c.shaderManager.primitiveShader;a._webGL[d.id]||(a._webGL[d.id]={points:[],indices:[],lastIndex:0,buffer:d.createBuffer(),indexBuffer:d.createBuffer()});var h=a._webGL[d.id];a.dirty&&(a.dirty=!1,a.clearDirty&&(a.clearDirty=!1,h.lastIndex=0,h.points=[],h.indices=[]),b.WebGLGraphics.updateGraphics(a,d)),c.shaderManager.activatePrimitiveShader(),d.blendFunc(d.ONE,d.ONE_MINUS_SRC_ALPHA),d.uniformMatrix3fv(g.translationMatrix,!1,a.worldTransform.toArray(!0)),d.uniform2f(g.projectionVector,e.x,-e.y),d.uniform2f(g.offsetVector,-f.x,-f.y),d.uniform3fv(g.tintColor,b.hex2rgb(a.tint)),d.uniform1f(g.alpha,a.worldAlpha),d.bindBuffer(d.ARRAY_BUFFER,h.buffer),d.vertexAttribPointer(g.aVertexPosition,2,d.FLOAT,!1,24,0),d.vertexAttribPointer(g.colorAttribute,4,d.FLOAT,!1,24,8),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,h.indexBuffer),d.drawElements(d.TRIANGLE_STRIP,h.indices.length,d.UNSIGNED_SHORT,0),c.shaderManager.deactivatePrimitiveShader()},b.WebGLGraphics.updateGraphics=function(a,c){for(var d=a._webGL[c.id],e=d.lastIndex;e3&&b.WebGLGraphics.buildPoly(f,d),f.lineWidth>0&&b.WebGLGraphics.buildLine(f,d)):f.type===b.Graphics.RECT?b.WebGLGraphics.buildRectangle(f,d):(f.type===b.Graphics.CIRC||f.type===b.Graphics.ELIP)&&b.WebGLGraphics.buildCircle(f,d)}d.lastIndex=a.graphicsData.length,d.glPoints=new Float32Array(d.points),c.bindBuffer(c.ARRAY_BUFFER,d.buffer),c.bufferData(c.ARRAY_BUFFER,d.glPoints,c.STATIC_DRAW),d.glIndicies=new Uint16Array(d.indices),c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,d.indexBuffer),c.bufferData(c.ELEMENT_ARRAY_BUFFER,d.glIndicies,c.STATIC_DRAW)},b.WebGLGraphics.buildRectangle=function(a,c){var d=a.points,e=d[0],f=d[1],g=d[2],h=d[3];if(a.fill){var i=b.hex2rgb(a.fillColor),j=a.fillAlpha,k=i[0]*j,l=i[1]*j,m=i[2]*j,n=c.points,o=c.indices,p=n.length/6;n.push(e,f),n.push(k,l,m,j),n.push(e+g,f),n.push(k,l,m,j),n.push(e,f+h),n.push(k,l,m,j),n.push(e+g,f+h),n.push(k,l,m,j),o.push(p,p,p+1,p+2,p+3,p+3)}if(a.lineWidth){var q=a.points;a.points=[e,f,e+g,f,e+g,f+h,e,f+h,e,f],b.WebGLGraphics.buildLine(a,c),a.points=q}},b.WebGLGraphics.buildCircle=function(a,c){var d=a.points,e=d[0],f=d[1],g=d[2],h=d[3],i=40,j=2*Math.PI/i,k=0;if(a.fill){var l=b.hex2rgb(a.fillColor),m=a.fillAlpha,n=l[0]*m,o=l[1]*m,p=l[2]*m,q=c.points,r=c.indices,s=q.length/6;for(r.push(s),k=0;i+1>k;k++)q.push(e,f,n,o,p,m),q.push(e+Math.sin(j*k)*g,f+Math.cos(j*k)*h,n,o,p,m),r.push(s++,s++);r.push(s-1)}if(a.lineWidth){var t=a.points;for(a.points=[],k=0;i+1>k;k++)a.points.push(e+Math.sin(j*k)*g,f+Math.cos(j*k)*h);b.WebGLGraphics.buildLine(a,c),a.points=t}},b.WebGLGraphics.buildLine=function(a,c){var d=0,e=a.points;if(0!==e.length){if(a.lineWidth%2)for(d=0;dd;d++)l=e[2*(d-1)],m=e[2*(d-1)+1],n=e[2*d],o=e[2*d+1],p=e[2*(d+1)],q=e[2*(d+1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,t=-(o-q),u=n-p,F=Math.sqrt(t*t+u*u),t/=F,u/=F,t*=L,u*=L,x=-s+m-(-s+o),y=-r+n-(-r+l),z=(-r+l)*(-s+o)-(-r+n)*(-s+m),A=-u+q-(-u+o),B=-t+n-(-t+p),C=(-t+p)*(-u+o)-(-t+n)*(-u+q),D=x*B-A*y,Math.abs(D)<.1?(D+=10.1,G.push(n-r,o-s,O,P,Q,N),G.push(n+r,o+s,O,P,Q,N)):(j=(y*C-B*z)/D,k=(A*z-x*C)/D,E=(j-n)*(j-n)+(k-o)+(k-o),E>19600?(v=r-t,w=s-u,F=Math.sqrt(v*v+w*w),v/=F,w/=F,v*=L,w*=L,G.push(n-v,o-w),G.push(O,P,Q,N),G.push(n+v,o+w),G.push(O,P,Q,N),G.push(n-v,o-w),G.push(O,P,Q,N),J++):(G.push(j,k),G.push(O,P,Q,N),G.push(n-(j-n),o-(k-o)),G.push(O,P,Q,N)));for(l=e[2*(I-2)],m=e[2*(I-2)+1],n=e[2*(I-1)],o=e[2*(I-1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,G.push(n-r,o-s),G.push(O,P,Q,N),G.push(n+r,o+s),G.push(O,P,Q,N),H.push(K),d=0;J>d;d++)H.push(K++);H.push(K-1)}},b.WebGLGraphics.buildPoly=function(a,c){var d=a.points;if(!(d.length<6)){var e=c.points,f=c.indices,g=d.length/2,h=b.hex2rgb(a.fillColor),i=a.fillAlpha,j=h[0]*i,k=h[1]*i,l=h[2]*i,m=b.PolyK.Triangulate(d),n=e.length/6,o=0;for(o=0;oo;o++)e.push(d[2*o],d[2*o+1],j,k,l,i)}},b.glContexts=[],b.WebGLRenderer=function(a,c,d,e,f){b.defaultRenderer||(b.defaultRenderer=this),this.type=b.WEBGL_RENDERER,this.transparent=!!e,this.width=a||800,this.height=c||600,this.view=d||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height,this.contextLost=this.handleContextLost.bind(this),this.contextRestoredLost=this.handleContextRestored.bind(this),this.view.addEventListener("webglcontextlost",this.contextLost,!1),this.view.addEventListener("webglcontextrestored",this.contextRestoredLost,!1),this.options={alpha:this.transparent,antialias:!!f,premultipliedAlpha:!!e,stencil:!0};try{this.gl=this.view.getContext("experimental-webgl",this.options)}catch(g){try{this.gl=this.view.getContext("webgl",this.options)}catch(h){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}var i=this.gl;this.glContextId=i.id=b.WebGLRenderer.glContextId++,b.glContexts[this.glContextId]=i,b.blendModesWebGL||(b.blendModesWebGL=[],b.blendModesWebGL[b.blendModes.NORMAL]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.ADD]=[i.SRC_ALPHA,i.DST_ALPHA],b.blendModesWebGL[b.blendModes.MULTIPLY]=[i.DST_COLOR,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SCREEN]=[i.SRC_ALPHA,i.ONE],b.blendModesWebGL[b.blendModes.OVERLAY]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.DARKEN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.LIGHTEN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR_DODGE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR_BURN]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.HARD_LIGHT]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SOFT_LIGHT]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.DIFFERENCE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.EXCLUSION]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.HUE]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.SATURATION]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.COLOR]=[i.ONE,i.ONE_MINUS_SRC_ALPHA],b.blendModesWebGL[b.blendModes.LUMINOSITY]=[i.ONE,i.ONE_MINUS_SRC_ALPHA]),this.projection=new b.Point,this.projection.x=this.width/2,this.projection.y=-this.height/2,this.offset=new b.Point(0,0),this.resize(this.width,this.height),this.contextLost=!1,this.shaderManager=new b.WebGLShaderManager(i),this.spriteBatch=new b.WebGLSpriteBatch(i),this.maskManager=new b.WebGLMaskManager(i),this.filterManager=new b.WebGLFilterManager(i,this.transparent),this.renderSession={},this.renderSession.gl=this.gl,this.renderSession.drawCount=0,this.renderSession.shaderManager=this.shaderManager,this.renderSession.maskManager=this.maskManager,this.renderSession.filterManager=this.filterManager,this.renderSession.spriteBatch=this.spriteBatch,this.renderSession.renderer=this,i.useProgram(this.shaderManager.defaultShader.program),i.disable(i.DEPTH_TEST),i.disable(i.CULL_FACE),i.enable(i.BLEND),i.colorMask(!0,!0,!0,this.transparent)},b.WebGLRenderer.prototype.constructor=b.WebGLRenderer,b.WebGLRenderer.prototype.render=function(a){if(!this.contextLost){this.__stage!==a&&(a.interactive&&a.interactionManager.removeEvents(),this.__stage=a),b.WebGLRenderer.updateTextures(),a.updateTransform(),a._interactive&&(a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this)));var c=this.gl;c.viewport(0,0,this.width,this.height),c.bindFramebuffer(c.FRAMEBUFFER,null),this.transparent?c.clearColor(0,0,0,0):c.clearColor(a.backgroundColorSplit[0],a.backgroundColorSplit[1],a.backgroundColorSplit[2],1),c.clear(c.COLOR_BUFFER_BIT),this.renderDisplayObject(a,this.projection),a.interactive?a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this)):a._interactiveEventsAdded&&(a._interactiveEventsAdded=!1,a.interactionManager.setTarget(this))}},b.WebGLRenderer.prototype.renderDisplayObject=function(a,b,c){this.renderSession.drawCount=0,this.renderSession.currentBlendMode=9999,this.renderSession.projection=b,this.renderSession.offset=this.offset,this.spriteBatch.begin(this.renderSession),this.filterManager.begin(this.renderSession,c),a._renderWebGL(this.renderSession),this.spriteBatch.end()},b.WebGLRenderer.updateTextures=function(){var a=0;for(a=0;a=0;c--){var d=a._glTextures[c],e=b.glContexts[c];e&&d&&e.deleteTexture(d)}a._glTextures.length=0},b.WebGLRenderer.updateTextureFrame=function(a){a.updateFrame=!1,a._updateWebGLuvs()},b.WebGLRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b,this.gl.viewport(0,0,this.width,this.height),this.projection.x=this.width/2,this.projection.y=-this.height/2},b.createWebGLTexture=function(a,c){return a.hasLoaded&&(a._glTextures[c.id]=c.createTexture(),c.bindTexture(c.TEXTURE_2D,a._glTextures[c.id]),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,a.source),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),a._powerOf2?(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.REPEAT),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.REPEAT)):(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE)),c.bindTexture(c.TEXTURE_2D,null)),a._glTextures[c.id]},b.updateWebGLTexture=function(a,c){a._glTextures[c.id]&&(c.bindTexture(c.TEXTURE_2D,a._glTextures[c.id]),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,a.source),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,a.scaleMode===b.scaleModes.LINEAR?c.LINEAR:c.NEAREST),a._powerOf2?(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.REPEAT),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.REPEAT)):(c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE)),c.bindTexture(c.TEXTURE_2D,null))},b.WebGLRenderer.prototype.handleContextLost=function(a){a.preventDefault(),this.contextLost=!0},b.WebGLRenderer.prototype.handleContextRestored=function(){try{this.gl=this.view.getContext("experimental-webgl",this.options)}catch(a){try{this.gl=this.view.getContext("webgl",this.options)}catch(c){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}var d=this.gl;d.id=b.WebGLRenderer.glContextId++,this.shaderManager.setContext(d),this.spriteBatch.setContext(d),this.maskManager.setContext(d),this.filterManager.setContext(d),this.renderSession.gl=this.gl,d.disable(d.DEPTH_TEST),d.disable(d.CULL_FACE),d.enable(d.BLEND),d.colorMask(!0,!0,!0,this.transparent),this.gl.viewport(0,0,this.width,this.height);for(var e in b.TextureCache){var f=b.TextureCache[e].baseTexture;f._glTextures=[]}this.contextLost=!1},b.WebGLRenderer.prototype.destroy=function(){this.view.removeEventListener("webglcontextlost",this.contextLost),this.view.removeEventListener("webglcontextrestored",this.contextRestoredLost),b.glContexts[this.glContextId]=null,this.projection=null,this.offset=null,this.shaderManager.destroy(),this.spriteBatch.destroy(),this.maskManager.destroy(),this.filterManager.destroy(),this.shaderManager=null,this.spriteBatch=null,this.maskManager=null,this.filterManager=null,this.gl=null,this.renderSession=null},b.WebGLRenderer.glContextId=0,b.WebGLMaskManager=function(a){this.maskStack=[],this.maskPosition=0,this.setContext(a)},b.WebGLMaskManager.prototype.setContext=function(a){this.gl=a},b.WebGLMaskManager.prototype.pushMask=function(a,c){var d=this.gl;0===this.maskStack.length&&(d.enable(d.STENCIL_TEST),d.stencilFunc(d.ALWAYS,1,1)),this.maskStack.push(a),d.colorMask(!1,!1,!1,!1),d.stencilOp(d.KEEP,d.KEEP,d.INCR),b.WebGLGraphics.renderGraphics(a,c),d.colorMask(!0,!0,!0,!0),d.stencilFunc(d.NOTEQUAL,0,this.maskStack.length),d.stencilOp(d.KEEP,d.KEEP,d.KEEP)},b.WebGLMaskManager.prototype.popMask=function(a){var c=this.gl,d=this.maskStack.pop();d&&(c.colorMask(!1,!1,!1,!1),c.stencilOp(c.KEEP,c.KEEP,c.DECR),b.WebGLGraphics.renderGraphics(d,a),c.colorMask(!0,!0,!0,!0),c.stencilFunc(c.NOTEQUAL,0,this.maskStack.length),c.stencilOp(c.KEEP,c.KEEP,c.KEEP)),0===this.maskStack.length&&c.disable(c.STENCIL_TEST)},b.WebGLMaskManager.prototype.destroy=function(){this.maskStack=null,this.gl=null},b.WebGLShaderManager=function(a){this.maxAttibs=10,this.attribState=[],this.tempAttribState=[];for(var b=0;bd;d+=6,e+=4)this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3;this.drawing=!1,this.currentBatchSize=0,this.currentBaseTexture=null,this.setContext(a)},b.WebGLSpriteBatch.prototype.setContext=function(a){this.gl=a,this.vertexBuffer=a.createBuffer(),this.indexBuffer=a.createBuffer(),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,this.vertices,a.DYNAMIC_DRAW),this.currentBlendMode=99999},b.WebGLSpriteBatch.prototype.begin=function(a){this.renderSession=a,this.shader=this.renderSession.shaderManager.defaultShader,this.start()},b.WebGLSpriteBatch.prototype.end=function(){this.flush()},b.WebGLSpriteBatch.prototype.render=function(a){var b=a.texture;(b.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=b.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode);var c=a._uvs||a.texture._uvs;if(c){var d,e,f,g,h=a.worldAlpha,i=a.tint,j=this.vertices,k=a.anchor.x,l=a.anchor.y;if(a.texture.trim){var m=a.texture.trim;e=m.x-k*m.width,d=e+b.frame.width,g=m.y-l*m.height,f=g+b.frame.height}else d=b.frame.width*(1-k),e=b.frame.width*-k,f=b.frame.height*(1-l),g=b.frame.height*-l;var n=4*this.currentBatchSize*this.vertSize,o=a.worldTransform,p=o.a,q=o.c,r=o.b,s=o.d,t=o.tx,u=o.ty;j[n++]=p*e+r*g+t,j[n++]=s*g+q*e+u,j[n++]=c.x0,j[n++]=c.y0,j[n++]=h,j[n++]=i,j[n++]=p*d+r*g+t,j[n++]=s*g+q*d+u,j[n++]=c.x1,j[n++]=c.y1,j[n++]=h,j[n++]=i,j[n++]=p*d+r*f+t,j[n++]=s*f+q*d+u,j[n++]=c.x2,j[n++]=c.y2,j[n++]=h,j[n++]=i,j[n++]=p*e+r*f+t,j[n++]=s*f+q*e+u,j[n++]=c.x3,j[n++]=c.y3,j[n++]=h,j[n++]=i,this.currentBatchSize++}},b.WebGLSpriteBatch.prototype.renderTilingSprite=function(a){var c=a.tilingTexture;(c.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=c.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode),a._uvs||(a._uvs=new b.TextureUvs);var d=a._uvs;a.tilePosition.x%=c.baseTexture.width*a.tileScaleOffset.x,a.tilePosition.y%=c.baseTexture.height*a.tileScaleOffset.y;var e=a.tilePosition.x/(c.baseTexture.width*a.tileScaleOffset.x),f=a.tilePosition.y/(c.baseTexture.height*a.tileScaleOffset.y),g=a.width/c.baseTexture.width/(a.tileScale.x*a.tileScaleOffset.x),h=a.height/c.baseTexture.height/(a.tileScale.y*a.tileScaleOffset.y);d.x0=0-e,d.y0=0-f,d.x1=1*g-e,d.y1=0-f,d.x2=1*g-e,d.y2=1*h-f,d.x3=0-e,d.y3=1*h-f;var i=a.worldAlpha,j=a.tint,k=this.vertices,l=a.width,m=a.height,n=a.anchor.x,o=a.anchor.y,p=l*(1-n),q=l*-n,r=m*(1-o),s=m*-o,t=4*this.currentBatchSize*this.vertSize,u=a.worldTransform,v=u.a,w=u.c,x=u.b,y=u.d,z=u.tx,A=u.ty;k[t++]=v*q+x*s+z,k[t++]=y*s+w*q+A,k[t++]=d.x0,k[t++]=d.y0,k[t++]=i,k[t++]=j,k[t++]=v*p+x*s+z,k[t++]=y*s+w*p+A,k[t++]=d.x1,k[t++]=d.y1,k[t++]=i,k[t++]=j,k[t++]=v*p+x*r+z,k[t++]=y*r+w*p+A,k[t++]=d.x2,k[t++]=d.y2,k[t++]=i,k[t++]=j,k[t++]=v*q+x*r+z,k[t++]=y*r+w*q+A,k[t++]=d.x3,k[t++]=d.y3,k[t++]=i,k[t++]=j,this.currentBatchSize++},b.WebGLSpriteBatch.prototype.flush=function(){if(0!==this.currentBatchSize){var a=this.gl;if(a.bindTexture(a.TEXTURE_2D,this.currentBaseTexture._glTextures[a.id]||b.createWebGLTexture(this.currentBaseTexture,a)),this.currentBatchSize>.5*this.size)a.bufferSubData(a.ARRAY_BUFFER,0,this.vertices);else{var c=this.vertices.subarray(0,4*this.currentBatchSize*this.vertSize);a.bufferSubData(a.ARRAY_BUFFER,0,c)}a.drawElements(a.TRIANGLES,6*this.currentBatchSize,a.UNSIGNED_SHORT,0),this.currentBatchSize=0,this.renderSession.drawCount++}},b.WebGLSpriteBatch.prototype.stop=function(){this.flush()},b.WebGLSpriteBatch.prototype.start=function(){var a=this.gl;a.activeTexture(a.TEXTURE0),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var c=this.renderSession.projection;a.uniform2f(this.shader.projectionVector,c.x,c.y);var d=4*this.vertSize;a.vertexAttribPointer(this.shader.aVertexPosition,2,a.FLOAT,!1,d,0),a.vertexAttribPointer(this.shader.aTextureCoord,2,a.FLOAT,!1,d,8),a.vertexAttribPointer(this.shader.colorAttribute,2,a.FLOAT,!1,d,16),this.currentBlendMode!==b.blendModes.NORMAL&&this.setBlendMode(b.blendModes.NORMAL)},b.WebGLSpriteBatch.prototype.setBlendMode=function(a){this.flush(),this.currentBlendMode=a;var c=b.blendModesWebGL[this.currentBlendMode];this.gl.blendFunc(c[0],c[1])},b.WebGLSpriteBatch.prototype.destroy=function(){this.vertices=null,this.indices=null,this.gl.deleteBuffer(this.vertexBuffer),this.gl.deleteBuffer(this.indexBuffer),this.currentBaseTexture=null,this.gl=null},b.WebGLFastSpriteBatch=function(a){this.vertSize=10,this.maxSize=6e3,this.size=this.maxSize;var b=4*this.size*this.vertSize,c=6*this.maxSize;this.vertices=new Float32Array(b),this.indices=new Uint16Array(c),this.vertexBuffer=null,this.indexBuffer=null,this.lastIndexCount=0;for(var d=0,e=0;c>d;d+=6,e+=4)this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3;this.drawing=!1,this.currentBatchSize=0,this.currentBaseTexture=null,this.currentBlendMode=0,this.renderSession=null,this.shader=null,this.matrix=null,this.setContext(a)},b.WebGLFastSpriteBatch.prototype.setContext=function(a){this.gl=a,this.vertexBuffer=a.createBuffer(),this.indexBuffer=a.createBuffer(),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,this.vertices,a.DYNAMIC_DRAW),this.currentBlendMode=99999},b.WebGLFastSpriteBatch.prototype.begin=function(a,b){this.renderSession=b,this.shader=this.renderSession.shaderManager.fastShader,this.matrix=a.worldTransform.toArray(!0),this.start()},b.WebGLFastSpriteBatch.prototype.end=function(){this.flush()},b.WebGLFastSpriteBatch.prototype.render=function(a){var b=a.children,c=b[0];if(c.texture._uvs){this.currentBaseTexture=c.texture.baseTexture,c.blendMode!==this.currentBlendMode&&this.setBlendMode(c.blendMode);for(var d=0,e=b.length;e>d;d++)this.renderSprite(b[d]);this.flush()}},b.WebGLFastSpriteBatch.prototype.renderSprite=function(a){if(a.visible&&(a.texture.baseTexture===this.currentBaseTexture||(this.flush(),this.currentBaseTexture=a.texture.baseTexture,a.texture._uvs))){var b,c,d,e,f,g,h,i,j=this.vertices;if(b=a.texture._uvs,c=a.texture.frame.width,d=a.texture.frame.height,a.texture.trim){var k=a.texture.trim;f=k.x-a.anchor.x*k.width,e=f+a.texture.frame.width,h=k.y-a.anchor.y*k.height,g=h+a.texture.frame.height}else e=a.texture.frame.width*(1-a.anchor.x),f=a.texture.frame.width*-a.anchor.x,g=a.texture.frame.height*(1-a.anchor.y),h=a.texture.frame.height*-a.anchor.y;i=4*this.currentBatchSize*this.vertSize,j[i++]=f,j[i++]=h,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x0,j[i++]=b.y1,j[i++]=a.alpha,j[i++]=e,j[i++]=h,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x1,j[i++]=b.y1,j[i++]=a.alpha,j[i++]=e,j[i++]=g,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x2,j[i++]=b.y2,j[i++]=a.alpha,j[i++]=f,j[i++]=g,j[i++]=a.position.x,j[i++]=a.position.y,j[i++]=a.scale.x,j[i++]=a.scale.y,j[i++]=a.rotation,j[i++]=b.x3,j[i++]=b.y3,j[i++]=a.alpha,this.currentBatchSize++,this.currentBatchSize>=this.size&&this.flush()}},b.WebGLFastSpriteBatch.prototype.flush=function(){if(0!==this.currentBatchSize){var a=this.gl;if(this.currentBaseTexture._glTextures[a.id]||b.createWebGLTexture(this.currentBaseTexture,a),a.bindTexture(a.TEXTURE_2D,this.currentBaseTexture._glTextures[a.id]),this.currentBatchSize>.5*this.size)a.bufferSubData(a.ARRAY_BUFFER,0,this.vertices);else{var c=this.vertices.subarray(0,4*this.currentBatchSize*this.vertSize);a.bufferSubData(a.ARRAY_BUFFER,0,c)}a.drawElements(a.TRIANGLES,6*this.currentBatchSize,a.UNSIGNED_SHORT,0),this.currentBatchSize=0,this.renderSession.drawCount++}},b.WebGLFastSpriteBatch.prototype.stop=function(){this.flush()},b.WebGLFastSpriteBatch.prototype.start=function(){var a=this.gl;a.activeTexture(a.TEXTURE0),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var c=this.renderSession.projection;a.uniform2f(this.shader.projectionVector,c.x,c.y),a.uniformMatrix3fv(this.shader.uMatrix,!1,this.matrix);var d=4*this.vertSize;a.vertexAttribPointer(this.shader.aVertexPosition,2,a.FLOAT,!1,d,0),a.vertexAttribPointer(this.shader.aPositionCoord,2,a.FLOAT,!1,d,8),a.vertexAttribPointer(this.shader.aScale,2,a.FLOAT,!1,d,16),a.vertexAttribPointer(this.shader.aRotation,1,a.FLOAT,!1,d,24),a.vertexAttribPointer(this.shader.aTextureCoord,2,a.FLOAT,!1,d,28),a.vertexAttribPointer(this.shader.colorAttribute,1,a.FLOAT,!1,d,36),this.currentBlendMode!==b.blendModes.NORMAL&&this.setBlendMode(b.blendModes.NORMAL)},b.WebGLFastSpriteBatch.prototype.setBlendMode=function(a){this.flush(),this.currentBlendMode=a;var c=b.blendModesWebGL[this.currentBlendMode];this.gl.blendFunc(c[0],c[1])},b.WebGLFilterManager=function(a,b){this.transparent=b,this.filterStack=[],this.offsetX=0,this.offsetY=0,this.setContext(a)},b.WebGLFilterManager.prototype.setContext=function(a){this.gl=a,this.texturePool=[],this.initShaderBuffers()},b.WebGLFilterManager.prototype.begin=function(a,b){this.renderSession=a,this.defaultShader=a.shaderManager.defaultShader;var c=this.renderSession.projection;this.width=2*c.x,this.height=2*-c.y,this.buffer=b},b.WebGLFilterManager.prototype.pushFilter=function(a){var c=this.gl,d=this.renderSession.projection,e=this.renderSession.offset;a._filterArea=a.target.filterArea||a.target.getBounds(),this.filterStack.push(a);var f=a.filterPasses[0];this.offsetX+=a._filterArea.x,this.offsetY+=a._filterArea.y;var g=this.texturePool.pop();g?g.resize(this.width,this.height):g=new b.FilterTexture(this.gl,this.width,this.height),c.bindTexture(c.TEXTURE_2D,g.texture);var h=a._filterArea,i=f.padding;h.x-=i,h.y-=i,h.width+=2*i,h.height+=2*i,h.x<0&&(h.x=0),h.width>this.width&&(h.width=this.width),h.y<0&&(h.y=0),h.height>this.height&&(h.height=this.height),c.bindFramebuffer(c.FRAMEBUFFER,g.frameBuffer),c.viewport(0,0,h.width,h.height),d.x=h.width/2,d.y=-h.height/2,e.x=-h.x,e.y=-h.y,c.uniform2f(this.defaultShader.projectionVector,h.width/2,-h.height/2),c.uniform2f(this.defaultShader.offsetVector,-h.x,-h.y),c.colorMask(!0,!0,!0,!0),c.clearColor(0,0,0,0),c.clear(c.COLOR_BUFFER_BIT),a._glFilterTexture=g},b.WebGLFilterManager.prototype.popFilter=function(){var a=this.gl,c=this.filterStack.pop(),d=c._filterArea,e=c._glFilterTexture,f=this.renderSession.projection,g=this.renderSession.offset;if(c.filterPasses.length>1){a.viewport(0,0,d.width,d.height),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),this.vertexArray[0]=0,this.vertexArray[1]=d.height,this.vertexArray[2]=d.width,this.vertexArray[3]=d.height,this.vertexArray[4]=0,this.vertexArray[5]=0,this.vertexArray[6]=d.width,this.vertexArray[7]=0,a.bufferSubData(a.ARRAY_BUFFER,0,this.vertexArray),a.bindBuffer(a.ARRAY_BUFFER,this.uvBuffer),this.uvArray[2]=d.width/this.width,this.uvArray[5]=d.height/this.height,this.uvArray[6]=d.width/this.width,this.uvArray[7]=d.height/this.height,a.bufferSubData(a.ARRAY_BUFFER,0,this.uvArray); +var h=e,i=this.texturePool.pop();i||(i=new b.FilterTexture(this.gl,this.width,this.height)),i.resize(this.width,this.height),a.bindFramebuffer(a.FRAMEBUFFER,i.frameBuffer),a.clear(a.COLOR_BUFFER_BIT),a.disable(a.BLEND);for(var j=0;j0&&(b.Texture.frameUpdates.length=0)},b.CanvasRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b},b.CanvasRenderer.prototype.renderDisplayObject=function(a,b){this.renderSession.context=b||this.context,a._renderCanvas(this.renderSession)},b.CanvasRenderer.prototype.renderStripFlat=function(a){var b=this.context,c=a.verticies,d=c.length/2;this.count++,b.beginPath();for(var e=1;d-2>e;e++){var f=2*e,g=c[f],h=c[f+2],i=c[f+4],j=c[f+1],k=c[f+3],l=c[f+5];b.moveTo(g,j),b.lineTo(h,k),b.lineTo(i,l)}b.fillStyle="#FF0000",b.fill(),b.closePath()},b.CanvasRenderer.prototype.renderStrip=function(a){var b=this.context,c=a.verticies,d=a.uvs,e=c.length/2;this.count++;for(var f=1;e-2>f;f++){var g=2*f,h=c[g],i=c[g+2],j=c[g+4],k=c[g+1],l=c[g+3],m=c[g+5],n=d[g]*a.texture.width,o=d[g+2]*a.texture.width,p=d[g+4]*a.texture.width,q=d[g+1]*a.texture.height,r=d[g+3]*a.texture.height,s=d[g+5]*a.texture.height;b.save(),b.beginPath(),b.moveTo(h,k),b.lineTo(i,l),b.lineTo(j,m),b.closePath(),b.clip();var t=n*r+q*p+o*s-r*p-q*o-n*s,u=h*r+q*j+i*s-r*j-q*i-h*s,v=n*i+h*p+o*j-i*p-h*o-n*j,w=n*r*j+q*i*p+h*o*s-h*r*p-q*o*j-n*i*s,x=k*r+q*m+l*s-r*m-q*l-k*s,y=n*l+k*p+o*m-l*p-k*o-n*m,z=n*r*m+q*l*p+k*o*s-k*r*p-q*o*m-n*l*s;b.transform(u/t,x/t,v/t,y/t,w/t,z/t),b.drawImage(a.texture.baseTexture.source,0,0),b.restore()}},b.CanvasBuffer=function(a,b){this.width=a,this.height=b,this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=a,this.canvas.height=b},b.CanvasBuffer.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},b.CanvasBuffer.prototype.resize=function(a,b){this.width=this.canvas.width=a,this.height=this.canvas.height=b},b.CanvasGraphics=function(){},b.CanvasGraphics.renderGraphics=function(a,c){for(var d=a.worldAlpha,e="",f=0;f1&&(d=1,window.console.log("Pixi.js warning: masks in canvas can only mask using the first path in the graphics object"));for(var e=0;1>e;e++){var f=a.graphicsData[e],g=f.points;if(f.type===b.Graphics.POLY){c.beginPath(),c.moveTo(g[0],g[1]);for(var h=1;hd;d++)this.children[d]._renderWebGL(a);a.spriteBatch.stop()}this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),a.drawCount++,a.spriteBatch.start()}},b.Graphics.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha&&this.isMask!==!0){var c=a.context,d=this.worldTransform;this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,c.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),c.setTransform(d.a,d.c,d.b,d.d,d.tx,d.ty),b.CanvasGraphics.renderGraphics(this,c);for(var e=0,f=this.children.length;f>e;e++)this.children[e]._renderCanvas(a)}},b.Graphics.prototype.getBounds=function(a){this.bounds||this.updateBounds();var b=this.bounds.x,c=this.bounds.width+this.bounds.x,d=this.bounds.y,e=this.bounds.height+this.bounds.y,f=a||this.worldTransform,g=f.a,h=f.c,i=f.b,j=f.d,k=f.tx,l=f.ty,m=g*c+i*e+k,n=j*e+h*c+l,o=g*b+i*e+k,p=j*e+h*b+l,q=g*b+i*d+k,r=j*d+h*b+l,s=g*c+i*d+k,t=j*d+h*c+l,u=m,v=n,w=m,x=n;w=w>o?o:w,w=w>q?q:w,w=w>s?s:w,x=x>p?p:x,x=x>r?r:x,x=x>t?t:x,u=o>u?o:u,u=q>u?q:u,u=s>u?s:u,v=p>v?p:v,v=r>v?r:v,v=t>v?t:v;var y=this._bounds;return y.x=w,y.width=u-w,y.y=x,y.height=v-x,y},b.Graphics.prototype.updateBounds=function(){for(var a,c,d,e,f,g=1/0,h=-1/0,i=1/0,j=-1/0,k=0;kc?c:g,h=c+e>h?c+e:h,i=i>d?c:i,j=d+f>j?d+f:j;else if(m===b.Graphics.CIRC||m===b.Graphics.ELIP)c=a[0],d=a[1],e=a[2]+n/2,f=a[3]+n/2,g=g>c-e?c-e:g,h=c+e>h?c+e:h,i=i>d-f?d-f:i,j=d+f>j?d+f:j;else for(var o=0;oc-n?c-n:g,h=c+n>h?c+n:h,i=i>d-n?d-n:i,j=d+n>j?d+n:j}var p=this.boundsPadding;this.bounds=new b.Rectangle(g-p,i-p,h-g+2*p,j-i+2*p)},b.Graphics.prototype._generateCachedSprite=function(){var a=this.getLocalBounds();if(this._cachedSprite)this._cachedSprite.buffer.resize(a.width,a.height);else{var c=new b.CanvasBuffer(a.width,a.height),d=b.Texture.fromCanvas(c.canvas);this._cachedSprite=new b.Sprite(d),this._cachedSprite.buffer=c,this._cachedSprite.worldTransform=this.worldTransform}this._cachedSprite.anchor.x=-(a.x/a.width),this._cachedSprite.anchor.y=-(a.y/a.height),this._cachedSprite.buffer.context.translate(-a.x,-a.y),b.CanvasGraphics.renderGraphics(this,this._cachedSprite.buffer.context),this._cachedSprite.alpha=this.alpha},b.Graphics.prototype.destroyCachedSprite=function(){this._cachedSprite.texture.destroy(!0),this._cachedSprite=null},b.Graphics.POLY=0,b.Graphics.RECT=1,b.Graphics.CIRC=2,b.Graphics.ELIP=3,b.TilingSprite=function(a,c,d){b.Sprite.call(this,a),this.width=c||100,this.height=d||100,this.tileScale=new b.Point(1,1),this.tileScaleOffset=new b.Point(1,1),this.tilePosition=new b.Point(0,0),this.renderable=!0,this.tint=16777215,this.blendMode=b.blendModes.NORMAL},b.TilingSprite.prototype=Object.create(b.Sprite.prototype),b.TilingSprite.prototype.constructor=b.TilingSprite,Object.defineProperty(b.TilingSprite.prototype,"width",{get:function(){return this._width},set:function(a){this._width=a}}),Object.defineProperty(b.TilingSprite.prototype,"height",{get:function(){return this._height},set:function(a){this._height=a}}),b.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},b.TilingSprite.prototype.setTexture=function(a){this.texture!==a&&(this.texture=a,this.refreshTexture=!0,this.cachedTint=16777215)},b.TilingSprite.prototype._renderWebGL=function(a){if(this.visible!==!1&&0!==this.alpha){var c,d;for(this.mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a),a.spriteBatch.start()),this.filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),!this.tilingTexture||this.refreshTexture?(this.generateTilingTexture(!0),this.tilingTexture&&this.tilingTexture.needsUpdate&&(b.updateWebGLTexture(this.tilingTexture.baseTexture,a.gl),this.tilingTexture.needsUpdate=!1)):a.spriteBatch.renderTilingSprite(this),c=0,d=this.children.length;d>c;c++)this.children[c]._renderWebGL(a);a.spriteBatch.stop(),this.filters&&a.filterManager.popFilter(),this.mask&&a.maskManager.popMask(a),a.spriteBatch.start()}},b.TilingSprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){var c=a.context;this._mask&&a.maskManager.pushMask(this._mask,c),c.globalAlpha=this.worldAlpha;var d=this.worldTransform;if(c.setTransform(d.a,d.c,d.b,d.d,d.tx,d.ty),!this.__tilePattern||this.refreshTexture){if(this.generateTilingTexture(!1),!this.tilingTexture)return;this.__tilePattern=c.createPattern(this.tilingTexture.baseTexture.source,"repeat")}this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,c.globalCompositeOperation=b.blendModesCanvas[a.currentBlendMode]),c.beginPath();var e=this.tilePosition,f=this.tileScale;e.x%=this.tilingTexture.baseTexture.width,e.y%=this.tilingTexture.baseTexture.height,c.scale(f.x,f.y),c.translate(e.x,e.y),c.fillStyle=this.__tilePattern,c.fillRect(-e.x+this.anchor.x*-this._width,-e.y+this.anchor.y*-this._height,this._width/f.x,this._height/f.y),c.scale(1/f.x,1/f.y),c.translate(-e.x,-e.y),c.closePath(),this._mask&&a.maskManager.popMask(a.context)}},b.TilingSprite.prototype.getBounds=function(){var a=this._width,b=this._height,c=a*(1-this.anchor.x),d=a*-this.anchor.x,e=b*(1-this.anchor.y),f=b*-this.anchor.y,g=this.worldTransform,h=g.a,i=g.c,j=g.b,k=g.d,l=g.tx,m=g.ty,n=h*d+j*f+l,o=k*f+i*d+m,p=h*c+j*f+l,q=k*f+i*c+m,r=h*c+j*e+l,s=k*e+i*c+m,t=h*d+j*e+l,u=k*e+i*d+m,v=-1/0,w=-1/0,x=1/0,y=1/0;x=x>n?n:x,x=x>p?p:x,x=x>r?r:x,x=x>t?t:x,y=y>o?o:y,y=y>q?q:y,y=y>s?s:y,y=y>u?u:y,v=n>v?n:v,v=p>v?p:v,v=r>v?r:v,v=t>v?t:v,w=o>w?o:w,w=q>w?q:w,w=s>w?s:w,w=u>w?u:w;var z=this._bounds;return z.x=x,z.width=v-x,z.y=y,z.height=w-y,this._currentBounds=z,z},b.TilingSprite.prototype.generateTilingTexture=function(a){var c=this.texture;if(c.baseTexture.hasLoaded){var d,e,f=c.baseTexture,g=c.frame,h=g.width!==f.width||g.height!==f.height,i=!1;if(a?(d=b.getNextPowerOfTwo(g.width),e=b.getNextPowerOfTwo(g.height),g.width!==d&&g.height!==e&&(i=!0)):h&&(d=g.width,e=g.height,i=!0),i){var j;this.tilingTexture&&this.tilingTexture.isTiling?(j=this.tilingTexture.canvasBuffer,j.resize(d,e),this.tilingTexture.baseTexture.width=d,this.tilingTexture.baseTexture.height=e,this.tilingTexture.needsUpdate=!0):(j=new b.CanvasBuffer(d,e),this.tilingTexture=b.Texture.fromCanvas(j.canvas),this.tilingTexture.canvasBuffer=j,this.tilingTexture.isTiling=!0),j.context.drawImage(c.baseTexture.source,g.x,g.y,g.width,g.height,0,0,d,e),this.tileScaleOffset.x=g.width/d,this.tileScaleOffset.y=g.height/e}else this.tilingTexture&&this.tilingTexture.isTiling&&this.tilingTexture.destroy(!0),this.tileScaleOffset.x=1,this.tileScaleOffset.y=1,this.tilingTexture=c;this.refreshTexture=!1,this.tilingTexture.baseTexture._powerOf2=!0}},b.BaseTextureCache={},b.texturesToUpdate=[],b.texturesToDestroy=[],b.BaseTextureCacheIdGenerator=0,b.BaseTexture=function(a,c){if(b.EventTarget.call(this),this.width=100,this.height=100,this.scaleMode=c||b.scaleModes.DEFAULT,this.hasLoaded=!1,this.source=a,this.id=b.BaseTextureCacheIdGenerator++,this._glTextures=[],a){if((this.source.complete||this.source.getContext)&&this.source.width&&this.source.height)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,b.texturesToUpdate.push(this);else{var d=this;this.source.onload=function(){d.hasLoaded=!0,d.width=d.source.width,d.height=d.source.height,b.texturesToUpdate.push(d),d.dispatchEvent({type:"loaded",content:d})}}this.imageUrl=null,this._powerOf2=!1}},b.BaseTexture.prototype.constructor=b.BaseTexture,b.BaseTexture.prototype.destroy=function(){this.imageUrl&&(delete b.BaseTextureCache[this.imageUrl],this.imageUrl=null,this.source.src=null),this.source=null,b.texturesToDestroy.push(this)},b.BaseTexture.prototype.updateSourceImage=function(a){this.hasLoaded=!1,this.source.src=null,this.source.src=a},b.BaseTexture.fromImage=function(a,c,d){var e=b.BaseTextureCache[a];if(void 0===c&&-1===a.indexOf("data:")&&(c=!0),!e){var f=new Image;c&&(f.crossOrigin=""),f.src=a,e=new b.BaseTexture(f,d),e.imageUrl=a,b.BaseTextureCache[a]=e}return e},b.BaseTexture.fromCanvas=function(a,c){a._pixiId||(a._pixiId="canvas_"+b.TextureCacheIdGenerator++);var d=b.BaseTextureCache[a._pixiId];return d||(d=new b.BaseTexture(a,c),b.BaseTextureCache[a._pixiId]=d),d},b.TextureCache={},b.FrameCache={},b.TextureCacheIdGenerator=0,b.Texture=function(a,c){if(b.EventTarget.call(this),c||(this.noFrame=!0,c=new b.Rectangle(0,0,1,1)),a instanceof b.Texture&&(a=a.baseTexture),this.baseTexture=a,this.frame=c,this.trim=null,this.scope=this,this._uvs=null,a.hasLoaded)this.noFrame&&(c=new b.Rectangle(0,0,a.width,a.height)),this.setFrame(c);else{var d=this;a.addEventListener("loaded",function(){d.onBaseTextureLoaded()})}},b.Texture.prototype.constructor=b.Texture,b.Texture.prototype.onBaseTextureLoaded=function(){var a=this.baseTexture;a.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new b.Rectangle(0,0,a.width,a.height)),this.setFrame(this.frame),this.scope.dispatchEvent({type:"update",content:this})},b.Texture.prototype.destroy=function(a){a&&this.baseTexture.destroy()},b.Texture.prototype.setFrame=function(a){if(this.frame=a,this.width=a.width,this.height=a.height,a.x+a.width>this.baseTexture.width||a.y+a.height>this.baseTexture.height)throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,b.Texture.frameUpdates.push(this)},b.Texture.prototype._updateWebGLuvs=function(){this._uvs||(this._uvs=new b.TextureUvs);var a=this.frame,c=this.baseTexture.width,d=this.baseTexture.height;this._uvs.x0=a.x/c,this._uvs.y0=a.y/d,this._uvs.x1=(a.x+a.width)/c,this._uvs.y1=a.y/d,this._uvs.x2=(a.x+a.width)/c,this._uvs.y2=(a.y+a.height)/d,this._uvs.x3=a.x/c,this._uvs.y3=(a.y+a.height)/d},b.Texture.fromImage=function(a,c,d){var e=b.TextureCache[a];return e||(e=new b.Texture(b.BaseTexture.fromImage(a,c,d)),b.TextureCache[a]=e),e},b.Texture.fromFrame=function(a){var c=b.TextureCache[a];if(!c)throw new Error('The frameId "'+a+'" does not exist in the texture cache ');return c},b.Texture.fromCanvas=function(a,c){var d=b.BaseTexture.fromCanvas(a,c);return new b.Texture(d)},b.Texture.addTextureToCache=function(a,c){b.TextureCache[c]=a},b.Texture.removeTextureFromCache=function(a){var c=b.TextureCache[a];return delete b.TextureCache[a],delete b.BaseTextureCache[a],c},b.Texture.frameUpdates=[],b.TextureUvs=function(){this.x0=0,this.y0=0,this.x1=0,this.y1=0,this.x2=0,this.y2=0,this.x3=0,this.y4=0},b.RenderTexture=function(a,c,d,e){if(b.EventTarget.call(this),this.width=a||100,this.height=c||100,this.frame=new b.Rectangle(0,0,this.width,this.height),this.baseTexture=new b.BaseTexture,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.baseTexture._glTextures=[],this.baseTexture.scaleMode=e||b.scaleModes.DEFAULT,this.baseTexture.hasLoaded=!0,this.renderer=d||b.defaultRenderer,this.renderer.type===b.WEBGL_RENDERER){var f=this.renderer.gl;this.textureBuffer=new b.FilterTexture(f,this.width,this.height,this.baseTexture.scaleMode),this.baseTexture._glTextures[f.id]=this.textureBuffer.texture,this.render=this.renderWebGL,this.projection=new b.Point(this.width/2,-this.height/2)}else this.render=this.renderCanvas,this.textureBuffer=new b.CanvasBuffer(this.width,this.height),this.baseTexture.source=this.textureBuffer.canvas;b.Texture.frameUpdates.push(this)},b.RenderTexture.prototype=Object.create(b.Texture.prototype),b.RenderTexture.prototype.constructor=b.RenderTexture,b.RenderTexture.prototype.resize=function(a,c){if(this.width=a,this.height=c,this.frame.width=this.width,this.frame.height=this.height,this.renderer.type===b.WEBGL_RENDERER){this.projection.x=this.width/2,this.projection.y=-this.height/2;var d=this.renderer.gl;d.bindTexture(d.TEXTURE_2D,this.baseTexture._glTextures[d.id]),d.texImage2D(d.TEXTURE_2D,0,d.RGBA,this.width,this.height,0,d.RGBA,d.UNSIGNED_BYTE,null)}else this.textureBuffer.resize(this.width,this.height);b.Texture.frameUpdates.push(this)},b.RenderTexture.prototype.renderWebGL=function(a,c,d){var e=this.renderer.gl; +e.colorMask(!0,!0,!0,!0),e.viewport(0,0,this.width,this.height),e.bindFramebuffer(e.FRAMEBUFFER,this.textureBuffer.frameBuffer),d&&this.textureBuffer.clear();var f=a.children,g=a.worldTransform;a.worldTransform=b.RenderTexture.tempMatrix,a.worldTransform.d=-1,a.worldTransform.ty=-2*this.projection.y,c&&(a.worldTransform.tx=c.x,a.worldTransform.ty-=c.y);for(var h=0,i=f.length;i>h;h++)f[h].updateTransform();b.WebGLRenderer.updateTextures(),this.renderer.renderDisplayObject(a,this.projection,this.textureBuffer.frameBuffer),a.worldTransform=g},b.RenderTexture.prototype.renderCanvas=function(a,c,d){var e=a.children,f=a.worldTransform;a.worldTransform=b.RenderTexture.tempMatrix,c&&(a.worldTransform.tx=c.x,a.worldTransform.ty=c.y);for(var g=0,h=e.length;h>g;g++)e[g].updateTransform();d&&this.textureBuffer.clear();var i=this.textureBuffer.context;this.renderer.renderDisplayObject(a,i),i.setTransform(1,0,0,1,0,0),a.worldTransform=f},b.RenderTexture.tempMatrix=new b.Matrix,"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=b),exports.PIXI=b):"undefined"!=typeof define&&define.amd?define("PIXI",function(){return a.PIXI=b}()):a.PIXI=b}).call(this),function(){var a=this,b=b||{VERSION:"2.0.4",GAMES:[],AUTO:0,CANVAS:1,WEBGL:2,HEADLESS:3,NONE:0,LEFT:1,RIGHT:2,UP:3,DOWN:4,SPRITE:0,BUTTON:1,IMAGE:2,GRAPHICS:3,TEXT:4,TILESPRITE:5,BITMAPTEXT:6,GROUP:7,RENDERTEXTURE:8,TILEMAP:9,TILEMAPLAYER:10,EMITTER:11,POLYGON:12,BITMAPDATA:13,CANVAS_FILTER:14,WEBGL_FILTER:15,ELLIPSE:16,SPRITEBATCH:17,RETROFONT:18,blendModes:{NORMAL:0,ADD:1,MULTIPLY:2,SCREEN:3,OVERLAY:4,DARKEN:5,LIGHTEN:6,COLOR_DODGE:7,COLOR_BURN:8,HARD_LIGHT:9,SOFT_LIGHT:10,DIFFERENCE:11,EXCLUSION:12,HUE:13,SATURATION:14,COLOR:15,LUMINOSITY:16},scaleModes:{DEFAULT:0,LINEAR:0,NEAREST:1}};if(PIXI.InteractionManager=function(){},b.Utils={parseDimension:function(a,b){var c=0,d=0;return"string"==typeof a?"%"===a.substr(-1)?(c=parseInt(a,10)/100,d=0===b?window.innerWidth*c:window.innerHeight*c):d=parseInt(a,10):d=a,d},shuffle:function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},pad:function(a,b,c,d){if("undefined"==typeof b)var b=0;if("undefined"==typeof c)var c=" ";if("undefined"==typeof d)var d=3;var e=0;if(b+1>=a.length)switch(d){case 1:a=new Array(b+1-a.length).join(c)+a;break;case 3:var f=Math.ceil((e=b-a.length)/2),g=e-f;a=new Array(g+1).join(c)+a+new Array(f+1).join(c);break;default:a+=new Array(b+1-a.length).join(c)}return a},isPlainObject:function(a){if("object"!=typeof a||a.nodeType||a===a.window)return!1;try{if(a.constructor&&!{}.hasOwnProperty.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},extend:function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for("boolean"==typeof h&&(k=h,h=arguments[1]||{},i=2),j===i&&(h=this,--i);j>i;i++)if(null!=(a=arguments[i]))for(c in a)d=h[c],e=a[c],h!==e&&(k&&e&&(b.Utils.isPlainObject(e)||(f=Array.isArray(e)))?(f?(f=!1,g=d&&Array.isArray(d)?d:[]):g=d&&b.Utils.isPlainObject(d)?d:{},h[c]=b.Utils.extend(k,g,e)):void 0!==e&&(h[c]=e));return h}},"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),Array.isArray||(Array.isArray=function(a){return"[object Array]"==Object.prototype.toString.call(a)}),Array.prototype.forEach||(Array.prototype.forEach=function(a){"use strict";if(void 0===this||null===this)throw new TypeError;var b=Object(this),c=b.length>>>0;if("function"!=typeof a)throw new TypeError;for(var d=arguments.length>=2?arguments[1]:void 0,e=0;c>e;e++)e in b&&a.call(d,b[e],e,b)}),"function"!=typeof window.Uint32Array){var c=function(a){var b=new Array;window[a]=function(a){if("number"==typeof a){Array.call(this,a),this.length=a;for(var b=0;b0?.5*c:0},b.Circle.prototype={circumference:function(){return 2*Math.PI*this._radius},setTo:function(a,b,c){return this.x=a,this.y=b,this._diameter=c,this._radius=.5*c,this},copyFrom:function(a){return this.setTo(a.x,a.y,a.diameter)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.diameter=this._diameter,a},distance:function(a,c){return"undefined"==typeof c&&(c=!1),c?b.Math.distanceRounded(this.x,this.y,a.x,a.y):b.Math.distance(this.x,this.y,a.x,a.y)},clone:function(a){return"undefined"==typeof a?a=new b.Circle(this.x,this.y,this.diameter):a.setTo(this.x,this.y,this.diameter),a},contains:function(a,c){return b.Circle.contains(this,a,c)},circumferencePoint:function(a,c,d){return b.Circle.circumferencePoint(this,a,c,d)},offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},toString:function(){return"[{Phaser.Circle (x="+this.x+" y="+this.y+" diameter="+this.diameter+" radius="+this.radius+")}]"}},b.Circle.prototype.constructor=b.Circle,Object.defineProperty(b.Circle.prototype,"diameter",{get:function(){return this._diameter},set:function(a){a>0&&(this._diameter=a,this._radius=.5*a)}}),Object.defineProperty(b.Circle.prototype,"radius",{get:function(){return this._radius},set:function(a){a>0&&(this._radius=a,this._diameter=2*a)}}),Object.defineProperty(b.Circle.prototype,"left",{get:function(){return this.x-this._radius},set:function(a){a>this.x?(this._radius=0,this._diameter=0):this.radius=this.x-a}}),Object.defineProperty(b.Circle.prototype,"right",{get:function(){return this.x+this._radius},set:function(a){athis.y?(this._radius=0,this._diameter=0):this.radius=this.y-a}}),Object.defineProperty(b.Circle.prototype,"bottom",{get:function(){return this.y+this._radius},set:function(a){a0?Math.PI*this._radius*this._radius:0}}),Object.defineProperty(b.Circle.prototype,"empty",{get:function(){return 0===this._diameter},set:function(a){a===!0&&this.setTo(0,0,0)}}),b.Circle.contains=function(a,b,c){if(a.radius>0&&b>=a.left&&b<=a.right&&c>=a.top&&c<=a.bottom){var d=(a.x-b)*(a.x-b),e=(a.y-c)*(a.y-c);return d+e<=a.radius*a.radius}return!1},b.Circle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.diameter==b.diameter},b.Circle.intersects=function(a,c){return b.Math.distance(a.x,a.y,c.x,c.y)<=a.radius+c.radius},b.Circle.circumferencePoint=function(a,c,d,e){return"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=new b.Point),d===!0&&(c=b.Math.degToRad(c)),e.x=a.x+a.radius*Math.cos(c),e.y=a.y+a.radius*Math.sin(c),e},b.Circle.intersectsRectangle=function(a,b){var c=Math.abs(a.x-b.x-b.halfWidth),d=b.halfWidth+a.radius;if(c>d)return!1;var e=Math.abs(a.y-b.y-b.halfHeight),f=b.halfHeight+a.radius;if(e>f)return!1;if(c<=b.halfWidth||e<=b.halfHeight)return!0;var g=c-b.halfWidth,h=e-b.halfHeight,i=g*g,j=h*h,k=a.radius*a.radius;return k>=i+j},PIXI.Circle=b.Circle,b.Point=function(a,b){a=a||0,b=b||0,this.x=a,this.y=b},b.Point.prototype={copyFrom:function(a){return this.setTo(a.x,a.y)},invert:function(){return this.setTo(this.y,this.x)},setTo:function(a,b){return this.x=a||0,this.y=b||(0!==b?this.x:0),this},set:function(a,b){return this.x=a||0,this.y=b||(0!==b?this.x:0),this},add:function(a,b){return this.x+=a,this.y+=b,this},subtract:function(a,b){return this.x-=a,this.y-=b,this},multiply:function(a,b){return this.x*=a,this.y*=b,this},divide:function(a,b){return this.x/=a,this.y/=b,this},clampX:function(a,c){return this.x=b.Math.clamp(this.x,a,c),this},clampY:function(a,c){return this.y=b.Math.clamp(this.y,a,c),this},clamp:function(a,c){return this.x=b.Math.clamp(this.x,a,c),this.y=b.Math.clamp(this.y,a,c),this},clone:function(a){return"undefined"==typeof a?a=new b.Point(this.x,this.y):a.setTo(this.x,this.y),a},copyTo:function(a){return a.x=this.x,a.y=this.y,a},distance:function(a,c){return b.Point.distance(this,a,c)},equals:function(a){return a.x===this.x&&a.y===this.y},angle:function(a){return Math.atan2(this.x*a.y-this.y*a.x,this.x*a.x+this.y*a.y)},angleSq:function(a){return this.subtract(a).angle(a.subtract(this))},rotate:function(a,c,d,e,f){return b.Point.rotate(this,a,c,d,e,f)},getMagnitude:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},getMagnitudeSq:function(){return this.x*this.x+this.y*this.y},setMagnitude:function(a){return this.normalize().multiply(a,a)},normalize:function(){if(!this.isZero()){var a=this.getMagnitude();this.x/=a,this.y/=a}return this},isZero:function(){return 0===this.x&&0===this.y},dot:function(a){return this.x*a.x+this.y*a.y},cross:function(a){return this.x*a.y-this.y*a.x},perp:function(){return this.setTo(-this.y,this.x)},rperp:function(){return this.setTo(this.y,-this.x)},normalRightHand:function(){return this.setTo(-1*this.y,this.x)},toString:function(){return"[{Point (x="+this.x+" y="+this.y+")}]"}},b.Point.prototype.constructor=b.Point,b.Point.add=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x+c.x,d.y=a.y+c.y,d},b.Point.subtract=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x-c.x,d.y=a.y-c.y,d},b.Point.multiply=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x*c.x,d.y=a.y*c.y,d},b.Point.divide=function(a,c,d){return"undefined"==typeof d&&(d=new b.Point),d.x=a.x/c.x,d.y=a.y/c.y,d},b.Point.equals=function(a,b){return a.x===b.x&&a.y===b.y},b.Point.angle=function(a,b){return Math.atan2(a.x*b.y-a.y*b.x,a.x*b.x+a.y*b.y)},b.Point.angleSq=function(a,b){return a.subtract(b).angle(b.subtract(a))},b.Point.negative=function(a,c){return"undefined"==typeof c&&(c=new b.Point),c.setTo(-a.x,-a.y)},b.Point.multiplyAdd=function(a,c,d,e){return"undefined"==typeof e&&(e=new b.Point),e.setTo(a.x+c.x*d,a.y+c.y*d)},b.Point.interpolate=function(a,c,d,e){return"undefined"==typeof e&&(e=new b.Point),e.setTo(a.x+(c.x-a.x)*d,a.y+(c.y-a.y)*d)},b.Point.perp=function(a,c){return"undefined"==typeof c&&(c=new b.Point),c.setTo(-a.y,a.x)},b.Point.rperp=function(a,c){return"undefined"==typeof c&&(c=new b.Point),c.setTo(a.y,-a.x)},b.Point.distance=function(a,c,d){return"undefined"==typeof d&&(d=!1),d?b.Math.distanceRounded(a.x,a.y,c.x,c.y):b.Math.distance(a.x,a.y,c.x,c.y)},b.Point.project=function(a,c,d){"undefined"==typeof d&&(d=new b.Point);var e=a.dot(c)/c.getMagnitudeSq();return 0!==e&&d.setTo(e*c.x,e*c.y),d},b.Point.projectUnit=function(a,c,d){"undefined"==typeof d&&(d=new b.Point);var e=a.dot(c);return 0!==e&&d.setTo(e*c.x,e*c.y),d},b.Point.normalRightHand=function(a,c){return"undefined"==typeof c&&(c=new b.Point),c.setTo(-1*a.y,a.x)},b.Point.normalize=function(a,c){"undefined"==typeof c&&(c=new b.Point);var d=a.getMagnitude();return 0!==d&&c.setTo(a.x/d,a.y/d),c},b.Point.rotate=function(a,c,d,e,f,g){return f=f||!1,g=g||null,f&&(e=b.Math.degToRad(e)),null===g&&(g=Math.sqrt((c-a.x)*(c-a.x)+(d-a.y)*(d-a.y))),a.setTo(c+g*Math.cos(e),d+g*Math.sin(e))},b.Point.centroid=function(a,c){if("undefined"==typeof c&&(c=new b.Point),"[object Array]"!==Object.prototype.toString.call(a))throw new Error("Phaser.Point. Parameter 'points' must be an array");var d=a.length;if(1>d)throw new Error("Phaser.Point. Parameter 'points' array must not be empty");if(1===d)return c.copyFrom(a[0]),c;for(var e=0;d>e;e++)b.Point.add(c,a[e],c);return c.divide(d,d),c},PIXI.Point=b.Point,b.Rectangle=function(a,b,c,d){a=a||0,b=b||0,c=c||0,d=d||0,this.x=a,this.y=b,this.width=c,this.height=d},b.Rectangle.prototype={offset:function(a,b){return this.x+=a,this.y+=b,this},offsetPoint:function(a){return this.offset(a.x,a.y)},setTo:function(a,b,c,d){return this.x=a,this.y=b,this.width=c,this.height=d,this},floor:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y)},floorAll:function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.width=Math.floor(this.width),this.height=Math.floor(this.height)},copyFrom:function(a){return this.setTo(a.x,a.y,a.width,a.height)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.width=this.width,a.height=this.height,a},inflate:function(a,c){return b.Rectangle.inflate(this,a,c)},size:function(a){return b.Rectangle.size(this,a)},clone:function(a){return b.Rectangle.clone(this,a)},contains:function(a,c){return b.Rectangle.contains(this,a,c)},containsRect:function(a){return b.Rectangle.containsRect(this,a)},equals:function(a){return b.Rectangle.equals(this,a)},intersection:function(a,c){return b.Rectangle.intersection(this,a,c)},intersects:function(a,c){return b.Rectangle.intersects(this,a,c)},intersectsRaw:function(a,c,d,e,f){return b.Rectangle.intersectsRaw(this,a,c,d,e,f)},union:function(a,c){return b.Rectangle.union(this,a,c)},toString:function(){return"[{Rectangle (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+" empty="+this.empty+")}]"}},Object.defineProperty(b.Rectangle.prototype,"halfWidth",{get:function(){return Math.round(this.width/2)}}),Object.defineProperty(b.Rectangle.prototype,"halfHeight",{get:function(){return Math.round(this.height/2)}}),Object.defineProperty(b.Rectangle.prototype,"bottom",{get:function(){return this.y+this.height},set:function(a){this.height=a<=this.y?0:this.y-a}}),Object.defineProperty(b.Rectangle.prototype,"bottomRight",{get:function(){return new b.Point(this.right,this.bottom)},set:function(a){this.right=a.x,this.bottom=a.y}}),Object.defineProperty(b.Rectangle.prototype,"left",{get:function(){return this.x},set:function(a){this.width=a>=this.right?0:this.right-a,this.x=a}}),Object.defineProperty(b.Rectangle.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=a<=this.x?0:this.x+a}}),Object.defineProperty(b.Rectangle.prototype,"volume",{get:function(){return this.width*this.height}}),Object.defineProperty(b.Rectangle.prototype,"perimeter",{get:function(){return 2*this.width+2*this.height}}),Object.defineProperty(b.Rectangle.prototype,"centerX",{get:function(){return this.x+this.halfWidth},set:function(a){this.x=a-this.halfWidth}}),Object.defineProperty(b.Rectangle.prototype,"centerY",{get:function(){return this.y+this.halfHeight},set:function(a){this.y=a-this.halfHeight}}),Object.defineProperty(b.Rectangle.prototype,"top",{get:function(){return this.y},set:function(a){a>=this.bottom?(this.height=0,this.y=a):this.height=this.bottom-a}}),Object.defineProperty(b.Rectangle.prototype,"topLeft",{get:function(){return new b.Point(this.x,this.y)},set:function(a){this.x=a.x,this.y=a.y}}),Object.defineProperty(b.Rectangle.prototype,"empty",{get:function(){return!this.width||!this.height},set:function(a){a===!0&&this.setTo(0,0,0,0)}}),b.Rectangle.prototype.constructor=b.Rectangle,b.Rectangle.inflate=function(a,b,c){return a.x-=b,a.width+=2*b,a.y-=c,a.height+=2*c,a},b.Rectangle.inflatePoint=function(a,c){return b.Rectangle.inflate(a,c.x,c.y)},b.Rectangle.size=function(a,c){return"undefined"==typeof c?c=new b.Point(a.width,a.height):c.setTo(a.width,a.height),c},b.Rectangle.clone=function(a,c){return"undefined"==typeof c?c=new b.Rectangle(a.x,a.y,a.width,a.height):c.setTo(a.x,a.y,a.width,a.height),c},b.Rectangle.contains=function(a,b,c){return a.width<=0||a.height<=0?!1:b>=a.x&&b<=a.right&&c>=a.y&&c<=a.bottom},b.Rectangle.containsRaw=function(a,b,c,d,e,f){return e>=a&&a+c>=e&&f>=b&&b+d>=f},b.Rectangle.containsPoint=function(a,c){return b.Rectangle.contains(a,c.x,c.y)},b.Rectangle.containsRect=function(a,b){return a.volume>b.volume?!1:a.x>=b.x&&a.y>=b.y&&a.right<=b.right&&a.bottom<=b.bottom},b.Rectangle.equals=function(a,b){return a.x==b.x&&a.y==b.y&&a.width==b.width&&a.height==b.height},b.Rectangle.intersection=function(a,c,d){return"undefined"==typeof d&&(d=new b.Rectangle),b.Rectangle.intersects(a,c)&&(d.x=Math.max(a.x,c.x),d.y=Math.max(a.y,c.y),d.width=Math.min(a.right,c.right)-d.x,d.height=Math.min(a.bottom,c.bottom)-d.y),d},b.Rectangle.intersects=function(a,b){return a.width<=0||a.height<=0||b.width<=0||b.height<=0?!1:!(a.rightb.right||a.y>b.bottom)},b.Rectangle.intersectsRaw=function(a,b,c,d,e,f){return"undefined"==typeof f&&(f=0),!(b>a.right+f||ca.bottom+f||e=c&&d>=a&&b>=e&&f>=b},coordinatesOnLine:function(a,b){"undefined"==typeof a&&(a=1),"undefined"==typeof b&&(b=[]);var c=Math.round(this.start.x),d=Math.round(this.start.y),e=Math.round(this.end.x),f=Math.round(this.end.y),g=Math.abs(e-c),h=Math.abs(f-d),i=e>c?1:-1,j=f>d?1:-1,k=g-h;b.push([c,d]);for(var l=1;c!=e||d!=f;){var m=k<<1;m>-h&&(k-=h,c+=i),g>m&&(k+=g,d+=j),l%a===0&&b.push([c,d]),l++}return b}},Object.defineProperty(b.Line.prototype,"length",{get:function(){return Math.sqrt((this.end.x-this.start.x)*(this.end.x-this.start.x)+(this.end.y-this.start.y)*(this.end.y-this.start.y))}}),Object.defineProperty(b.Line.prototype,"angle",{get:function(){return Math.atan2(this.end.y-this.start.y,this.end.x-this.start.x)}}),Object.defineProperty(b.Line.prototype,"slope",{get:function(){return(this.end.y-this.start.y)/(this.end.x-this.start.x)}}),Object.defineProperty(b.Line.prototype,"perpSlope",{get:function(){return-((this.end.x-this.start.x)/(this.end.y-this.start.y))}}),Object.defineProperty(b.Line.prototype,"x",{get:function(){return Math.min(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"y",{get:function(){return Math.min(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"left",{get:function(){return Math.min(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"right",{get:function(){return Math.max(this.start.x,this.end.x)}}),Object.defineProperty(b.Line.prototype,"top",{get:function(){return Math.min(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"bottom",{get:function(){return Math.max(this.start.y,this.end.y)}}),Object.defineProperty(b.Line.prototype,"width",{get:function(){return Math.abs(this.start.x-this.end.x)}}),Object.defineProperty(b.Line.prototype,"height",{get:function(){return Math.abs(this.start.y-this.end.y)}}),b.Line.intersectsPoints=function(a,c,d,e,f,g){"undefined"==typeof f&&(f=!0),"undefined"==typeof g&&(g=new b.Point);var h=c.y-a.y,i=e.y-d.y,j=a.x-c.x,k=d.x-e.x,l=c.x*a.y-a.x*c.y,m=e.x*d.y-d.x*e.y,n=h*k-i*j;if(0===n)return null;if(g.x=(j*m-k*l)/n,g.y=(i*l-h*m)/n,f){if(Math.pow(g.x-c.x+(g.y-c.y),2)>Math.pow(a.x-c.x+(a.y-c.y),2))return null;if(Math.pow(g.x-a.x+(g.y-a.y),2)>Math.pow(a.x-c.x+(a.y-c.y),2))return null;if(Math.pow(g.x-e.x+(g.y-e.y),2)>Math.pow(d.x-e.x+(d.y-e.y),2))return null;if(Math.pow(g.x-d.x+(g.y-d.y),2)>Math.pow(d.x-e.x+(d.y-e.y),2))return null}return g},b.Line.intersects=function(a,c,d,e){return b.Line.intersectsPoints(a.start,a.end,c.start,c.end,d,e)},b.Ellipse=function(a,c,d,e){this.type=b.ELLIPSE,a=a||0,c=c||0,d=d||0,e=e||0,this.x=a,this.y=c,this.width=d,this.height=e},b.Ellipse.prototype={setTo:function(a,b,c,d){return this.x=a,this.y=b,this.width=c,this.height=d,this},copyFrom:function(a){return this.setTo(a.x,a.y,a.width,a.height)},copyTo:function(a){return a.x=this.x,a.y=this.y,a.width=this.width,a.height=this.height,a},clone:function(a){return"undefined"==typeof a?a=new b.Ellipse(this.x,this.y,this.width,this.height):a.setTo(this.x,this.y,this.width,this.height),a},contains:function(a,c){return b.Ellipse.contains(this,a,c)},toString:function(){return"[{Phaser.Ellipse (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+")}]"}},b.Ellipse.prototype.constructor=b.Ellipse,Object.defineProperty(b.Ellipse.prototype,"left",{get:function(){return this.x},set:function(a){this.x=a}}),Object.defineProperty(b.Ellipse.prototype,"right",{get:function(){return this.x+this.width},set:function(a){this.width=ad+e},b.Ellipse.prototype.getBounds=function(){return new b.Rectangle(this.x,this.y,this.width,this.height)},PIXI.Ellipse=b.Ellipse,b.Polygon=function(a){if(this.type=b.POLYGON,a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var c=[],d=0,e=a.length;e>d;d+=2)c.push(new b.Point(a[d],a[d+1]));a=c}this.points=a},b.Polygon.prototype={clone:function(){for(var a=[],c=0;cb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!c)}return c}},b.Polygon.prototype.constructor=b.Polygon,PIXI.Polygon=b.Polygon,b.Camera=function(a,c,d,e,f,g){this.game=a,this.world=a.world,this.id=0,this.view=new b.Rectangle(d,e,f,g),this.screenView=new b.Rectangle(d,e,f,g),this.bounds=new b.Rectangle(d,e,f,g),this.deadzone=null,this.visible=!0,this.atLimit={x:!1,y:!1},this.target=null,this._edge=0,this.displayObject=null,this.scale=null},b.Camera.FOLLOW_LOCKON=0,b.Camera.FOLLOW_PLATFORMER=1,b.Camera.FOLLOW_TOPDOWN=2,b.Camera.FOLLOW_TOPDOWN_TIGHT=3,b.Camera.prototype={follow:function(a,c){"undefined"==typeof c&&(c=b.Camera.FOLLOW_LOCKON),this.target=a;var d;switch(c){case b.Camera.FOLLOW_PLATFORMER:var e=this.width/8,f=this.height/3;this.deadzone=new b.Rectangle((this.width-e)/2,(this.height-f)/2-.25*f,e,f);break;case b.Camera.FOLLOW_TOPDOWN:d=Math.max(this.width,this.height)/4,this.deadzone=new b.Rectangle((this.width-d)/2,(this.height-d)/2,d,d);break;case b.Camera.FOLLOW_TOPDOWN_TIGHT:d=Math.max(this.width,this.height)/8,this.deadzone=new b.Rectangle((this.width-d)/2,(this.height-d)/2,d,d);break;case b.Camera.FOLLOW_LOCKON:this.deadzone=null;break;default:this.deadzone=null}},unfollow:function(){this.target=null},focusOn:function(a){this.setPosition(Math.round(a.x-this.view.halfWidth),Math.round(a.y-this.view.halfHeight))},focusOnXY:function(a,b){this.setPosition(Math.round(a-this.view.halfWidth),Math.round(b-this.view.halfHeight))},update:function(){this.target&&this.updateTarget(),this.bounds&&this.checkBounds(),this.displayObject.position.x=-this.view.x,this.displayObject.position.y=-this.view.y},updateTarget:function(){this.deadzone?(this._edge=this.target.x-this.deadzone.x,this.view.x>this._edge&&(this.view.x=this._edge),this._edge=this.target.x+this.target.width-this.deadzone.x-this.deadzone.width,this.view.xthis._edge&&(this.view.y=this._edge),this._edge=this.target.y+this.target.height-this.deadzone.y-this.deadzone.height,this.view.y=this.bounds.right&&(this.atLimit.x=!0,this.view.x=this.bounds.right-this.width),this.view.y<=this.bounds.top&&(this.atLimit.y=!0,this.view.y=this.bounds.top),this.view.bottom>=this.bounds.bottom&&(this.atLimit.y=!0,this.view.y=this.bounds.bottom-this.height),this.view.floor()},setPosition:function(a,b){this.view.x=a,this.view.y=b,this.bounds&&this.checkBounds()},setSize:function(a,b){this.view.width=a,this.view.height=b},reset:function(){this.target=null,this.view.x=0,this.view.y=0}},b.Camera.prototype.constructor=b.Camera,Object.defineProperty(b.Camera.prototype,"x",{get:function(){return this.view.x},set:function(a){this.view.x=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(b.Camera.prototype,"y",{get:function(){return this.view.y},set:function(a){this.view.y=a,this.bounds&&this.checkBounds()}}),Object.defineProperty(b.Camera.prototype,"width",{get:function(){return this.view.width},set:function(a){this.view.width=a}}),Object.defineProperty(b.Camera.prototype,"height",{get:function(){return this.view.height},set:function(a){this.view.height=a}}),b.State=function(){this.game=null,this.add=null,this.make=null,this.camera=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.sound=null,this.scale=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.particles=null,this.physics=null,this.rnd=null},b.State.prototype={preload:function(){},loadUpdate:function(){},loadRender:function(){},create:function(){},update:function(){},render:function(){},paused:function(){},pauseUpdate:function(){},shutdown:function(){}},b.State.prototype.constructor=b.State,b.StateManager=function(a,b){this.game=a,this.states={},this._pendingState=null,"undefined"!=typeof b&&null!==b&&(this._pendingState=b),this._clearWorld=!1,this._clearCache=!1,this._created=!1,this._args=[],this.current="",this.onInitCallback=null,this.onPreloadCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPreRenderCallback=null,this.onLoadUpdateCallback=null,this.onLoadRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onPauseUpdateCallback=null,this.onShutDownCallback=null},b.StateManager.prototype={boot:function(){this.game.onPause.add(this.pause,this),this.game.onResume.add(this.resume,this),this.game.load.onLoadComplete.add(this.loadComplete,this),null!==this._pendingState&&("string"==typeof this._pendingState?this.start(this._pendingState,!1,!1):this.add("default",this._pendingState,!0))},add:function(a,c,d){"undefined"==typeof d&&(d=!1);var e;return c instanceof b.State?e=c:"object"==typeof c?(e=c,e.game=this.game):"function"==typeof c&&(e=new c(this.game)),this.states[a]=e,d&&(this.game.isBooted?this.start(a):this._pendingState=a),e},remove:function(a){this.current===a&&(this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onPauseUpdateCallback=null),delete this.states[a]},start:function(a,b,c){"undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=!1),this.checkState(a)&&(this._pendingState=a,this._clearWorld=b,this._clearCache=c,arguments.length>3&&(this._args=Array.prototype.splice.call(arguments,3)))},restart:function(a,b){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!1),this._pendingState=this.current,this._clearWorld=a,this._clearCache=b,arguments.length>2&&(this._args=Array.prototype.splice.call(arguments,2))},dummy:function(){},preUpdate:function(){this._pendingState&&this.game.isBooted&&(this.current&&(this.onShutDownCallback.call(this.callbackContext,this.game),this.game.tweens.removeAll(),this.game.camera.reset(),this.game.input.reset(!0),this.game.physics.clear(),this.game.time.removeAll(),this._clearWorld&&(this.game.world.shutdown(),this._clearCache===!0&&this.game.cache.destroy())),this.setCurrentState(this._pendingState),this.onPreloadCallback?(this.game.load.reset(),this.onPreloadCallback.call(this.callbackContext,this.game),0===this.game.load.totalQueuedFiles()?this.loadComplete():this.game.load.start()):this.loadComplete(),this.current===this._pendingState&&(this._pendingState=null))},checkState:function(a){if(this.states[a]){var b=!1;return this.states[a].preload&&(b=!0),this.states[a].create&&(b=!0),this.states[a].update&&(b=!0),this.states[a].render&&(b=!0),b===!1?(console.warn("Invalid Phaser State object given. Must contain at least a one of the required functions: preload, create, update or render"),!1):!0}return console.warn("Phaser.StateManager - No state found with the key: "+a),!1},link:function(a){this.states[a].game=this.game,this.states[a].add=this.game.add,this.states[a].make=this.game.make,this.states[a].camera=this.game.camera,this.states[a].cache=this.game.cache,this.states[a].input=this.game.input,this.states[a].load=this.game.load,this.states[a].math=this.game.math,this.states[a].sound=this.game.sound,this.states[a].scale=this.game.scale,this.states[a].state=this,this.states[a].stage=this.game.stage,this.states[a].time=this.game.time,this.states[a].tweens=this.game.tweens,this.states[a].world=this.game.world,this.states[a].particles=this.game.particles,this.states[a].rnd=this.game.rnd,this.states[a].physics=this.game.physics},setCurrentState:function(a){this.callbackContext=this.states[a],this.link(a),this.onInitCallback=this.states[a].init||this.dummy,this.onPreloadCallback=this.states[a].preload||null,this.onLoadRenderCallback=this.states[a].loadRender||null,this.onLoadUpdateCallback=this.states[a].loadUpdate||null,this.onCreateCallback=this.states[a].create||null,this.onUpdateCallback=this.states[a].update||null,this.onPreRenderCallback=this.states[a].preRender||null,this.onRenderCallback=this.states[a].render||null,this.onPausedCallback=this.states[a].paused||null,this.onResumedCallback=this.states[a].resumed||null,this.onPauseUpdateCallback=this.states[a].pauseUpdate||null,this.onShutDownCallback=this.states[a].shutdown||this.dummy,this.current=a,this._created=!1,this.onInitCallback.apply(this.callbackContext,this._args),this._args=[]},getCurrentState:function(){return this.states[this.current]},loadComplete:function(){this._created===!1&&this.onCreateCallback?(this._created=!0,this.onCreateCallback.call(this.callbackContext,this.game)):this._created=!0},pause:function(){this._created&&this.onPausedCallback&&this.onPausedCallback.call(this.callbackContext,this.game)},resume:function(){this._created&&this.onResumedCallback&&this.onResumedCallback.call(this.callbackContext,this.game)},update:function(){this._created&&this.onUpdateCallback?this.onUpdateCallback.call(this.callbackContext,this.game):this.onLoadUpdateCallback&&this.onLoadUpdateCallback.call(this.callbackContext,this.game)},pauseUpdate:function(){this._created&&this.onPauseUpdateCallback?this.onPauseUpdateCallback.call(this.callbackContext,this.game):this.onLoadUpdateCallback&&this.onLoadUpdateCallback.call(this.callbackContext,this.game) +},preRender:function(){this.onPreRenderCallback&&this.onPreRenderCallback.call(this.callbackContext,this.game)},render:function(){this._created&&this.onRenderCallback?(this.game.renderType===b.CANVAS&&(this.game.context.save(),this.game.context.setTransform(1,0,0,1,0,0)),this.onRenderCallback.call(this.callbackContext,this.game),this.game.renderType===b.CANVAS&&this.game.context.restore()):this.onLoadRenderCallback&&this.onLoadRenderCallback.call(this.callbackContext,this.game)},destroy:function(){this.callbackContext=null,this.onInitCallback=null,this.onShutDownCallback=null,this.onPreloadCallback=null,this.onLoadRenderCallback=null,this.onLoadUpdateCallback=null,this.onCreateCallback=null,this.onUpdateCallback=null,this.onRenderCallback=null,this.onPausedCallback=null,this.onResumedCallback=null,this.onPauseUpdateCallback=null,this.game=null,this.states={},this._pendingState=null}},b.StateManager.prototype.constructor=b.StateManager,b.LinkedList=function(){this.next=null,this.prev=null,this.first=null,this.last=null,this.total=0},b.LinkedList.prototype={add:function(a){return 0===this.total&&null===this.first&&null===this.last?(this.first=a,this.last=a,this.next=a,a.prev=this,this.total++,a):(this.last.next=a,a.prev=this.last,this.last=a,this.total++,a)},reset:function(){this.first=null,this.last=null,this.next=null,this.prev=null,this.total=0},remove:function(a){return 1===this.total?(this.reset(),void(a.next=a.prev=null)):(a===this.first?this.first=this.first.next:a===this.last&&(this.last=this.last.prev),a.prev&&(a.prev.next=a.next),a.next&&(a.next.prev=a.prev),a.next=a.prev=null,null===this.first&&(this.last=null),void this.total--)},callAll:function(a){if(this.first&&this.last){var b=this.first;do b&&b[a]&&b[a].call(b),b=b.next;while(b!=this.last.next)}}},b.LinkedList.prototype.constructor=b.LinkedList,b.ArrayList=function(){this.total=0,this.position=0,this.list=[]},b.ArrayList.prototype={add:function(a){return this.exists(a)||(this.list.push(a),this.total++),a},getIndex:function(a){return this.list.indexOf(a)},exists:function(a){return this.list.indexOf(a)>-1},reset:function(){this.list.length=0,this.total=0},remove:function(a){var b=this.list.indexOf(a);return b>-1?(this.list.splice(b,1),this.total--,a):void 0},callAll:function(a){for(var b=Array.prototype.splice.call(arguments,1),c=this.list.length;c--;)this.list[c]&&this.list[c][a]&&this.list[c][a].apply(this.list[c],b)}},Object.defineProperty(b.ArrayList.prototype,"first",{get:function(){return this.position=0,this.total>0?this.list[0]:null}}),Object.defineProperty(b.ArrayList.prototype,"next",{get:function(){return this.position0&&(this.uniforms.mouse.x=a.x.toFixed(2)),a.y>0&&(this.uniforms.mouse.y=a.y.toFixed(2))),this.uniforms.time.value=this.game.time.totalElapsedSeconds()},destroy:function(){this.game=null}},b.Filter.prototype.constructor=b.Filter,Object.defineProperty(b.Filter.prototype,"width",{get:function(){return this.uniforms.resolution.value.x},set:function(a){this.uniforms.resolution.value.x=a}}),Object.defineProperty(b.Filter.prototype,"height",{get:function(){return this.uniforms.resolution.value.y},set:function(a){this.uniforms.resolution.value.y=a}}),b.Plugin=function(a,b){"undefined"==typeof b&&(b=null),this.game=a,this.parent=b,this.active=!1,this.visible=!1,this.hasPreUpdate=!1,this.hasUpdate=!1,this.hasPostUpdate=!1,this.hasRender=!1,this.hasPostRender=!1},b.Plugin.prototype={preUpdate:function(){},update:function(){},render:function(){},postRender:function(){},destroy:function(){this.game=null,this.parent=null,this.active=!1,this.visible=!1}},b.Plugin.prototype.constructor=b.Plugin,b.PluginManager=function(a){this.game=a,this.plugins=[],this._len=0,this._i=0},b.PluginManager.prototype={add:function(a){var b=!1;return"function"==typeof a?a=new a(this.game,this._parent):(a.game=this.game,a.parent=this),"function"==typeof a.preUpdate&&(a.hasPreUpdate=!0,b=!0),"function"==typeof a.update&&(a.hasUpdate=!0,b=!0),"function"==typeof a.postUpdate&&(a.hasPostUpdate=!0,b=!0),"function"==typeof a.render&&(a.hasRender=!0,b=!0),"function"==typeof a.postRender&&(a.hasPostRender=!0,b=!0),b?((a.hasPreUpdate||a.hasUpdate||a.hasPostUpdate)&&(a.active=!0),(a.hasRender||a.hasPostRender)&&(a.visible=!0),this._len=this.plugins.push(a),"function"==typeof a.init&&a.init(),a):null},remove:function(a){for(this._i=this._len;this._i--;)if(this.plugins[this._i]===a)return a.destroy(),this.plugins.splice(this._i,1),void this._len--},removeAll:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].destroy();this.plugins.length=0,this._len=0},preUpdate:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasPreUpdate&&this.plugins[this._i].preUpdate()},update:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasUpdate&&this.plugins[this._i].update()},postUpdate:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].active&&this.plugins[this._i].hasPostUpdate&&this.plugins[this._i].postUpdate()},render:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].visible&&this.plugins[this._i].hasRender&&this.plugins[this._i].render()},postRender:function(){for(this._i=this._len;this._i--;)this.plugins[this._i].visible&&this.plugins[this._i].hasPostRender&&this.plugins[this._i].postRender()},destroy:function(){this.removeAll(),this.game=null}},b.PluginManager.prototype.constructor=b.PluginManager,b.Stage=function(a,c,d){this.game=a,this.offset=new b.Point,PIXI.Stage.call(this,0,!1),this.name="_stage_root",this.interactive=!1,this.disableVisibilityChange=!1,this.checkOffsetInterval=2500,this.exists=!0,this.currentRenderOrderID=0,this._hiddenVar="hidden",this._nextOffsetCheck=0,this._backgroundColor=0,a.config?this.parseConfig(a.config):(this.game.canvas=b.Canvas.create(c,d),this.game.canvas.style["-webkit-full-screen"]="width: 100%; height: 100%")},b.Stage.prototype=Object.create(PIXI.Stage.prototype),b.Stage.prototype.constructor=b.Stage,b.Stage.prototype.preUpdate=function(){this.currentRenderOrderID=0;for(var a=this.children.length,b=0;a>b;b++)this.children[b].preUpdate()},b.Stage.prototype.update=function(){for(var a=this.children.length;a--;)this.children[a].update()},b.Stage.prototype.postUpdate=function(){if(this.game.world.camera.target){this.game.world.camera.target.postUpdate(),this.game.world.camera.update();for(var a=this.children.length;a--;)this.children[a]!==this.game.world.camera.target&&this.children[a].postUpdate()}else{this.game.world.camera.update();for(var a=this.children.length;a--;)this.children[a].postUpdate()}this.checkOffsetInterval!==!1&&this.game.time.now>this._nextOffsetCheck&&(b.Canvas.getOffset(this.game.canvas,this.offset),this._nextOffsetCheck=this.game.time.now+this.checkOffsetInterval)},b.Stage.prototype.parseConfig=function(a){this.game.canvas=a.canvasID?b.Canvas.create(this.game.width,this.game.height,a.canvasID):b.Canvas.create(this.game.width,this.game.height),a.canvasStyle?this.game.canvas.stlye=a.canvasStyle:this.game.canvas.style["-webkit-full-screen"]="width: 100%; height: 100%",a.checkOffsetInterval&&(this.checkOffsetInterval=a.checkOffsetInterval),a.disableVisibilityChange&&(this.disableVisibilityChange=a.disableVisibilityChange),a.fullScreenScaleMode&&(this.fullScreenScaleMode=a.fullScreenScaleMode),a.scaleMode&&(this.scaleMode=a.scaleMode),a.backgroundColor&&(this.backgroundColor=a.backgroundColor)},b.Stage.prototype.boot=function(){b.Canvas.getOffset(this.game.canvas,this.offset),this.bounds=new b.Rectangle(this.offset.x,this.offset.y,this.game.width,this.game.height);var a=this;this._onChange=function(b){return a.visibilityChange(b)},b.Canvas.setUserSelect(this.game.canvas,"none"),b.Canvas.setTouchAction(this.game.canvas,"none"),this.checkVisibility()},b.Stage.prototype.checkVisibility=function(){this._hiddenVar=void 0!==document.webkitHidden?"webkitvisibilitychange":void 0!==document.mozHidden?"mozvisibilitychange":void 0!==document.msHidden?"msvisibilitychange":void 0!==document.hidden?"visibilitychange":null,this._hiddenVar&&document.addEventListener(this._hiddenVar,this._onChange,!1),window.onpagehide=this._onChange,window.onpageshow=this._onChange,window.onblur=this._onChange,window.onfocus=this._onChange},b.Stage.prototype.visibilityChange=function(a){return this.disableVisibilityChange?void 0:"pagehide"===a.type||"blur"===a.type||"pageshow"===a.type||"focus"===a.type?void("pagehide"===a.type||"blur"===a.type?this.game.focusLoss(a):("pageshow"===a.type||"focus"===a.type)&&this.game.focusGain(a)):void(document.hidden||document.mozHidden||document.msHidden||document.webkitHidden?this.game.gamePaused(a):this.game.gameResumed(a))},b.Stage.prototype.setBackgroundColor=function(a){this._backgroundColor=a||0,this.backgroundColorSplit=PIXI.hex2rgb(this.backgroundColor);var b=this._backgroundColor.toString(16);b="000000".substr(0,6-b.length)+b,this.backgroundColorString="#"+b},Object.defineProperty(b.Stage.prototype,"backgroundColor",{get:function(){return this._backgroundColor},set:function(a){this._backgroundColor=a,this.game.transparent===!1&&("string"==typeof a&&(a=b.Color.hexToRGB(a)),this.setBackgroundColor(a))}}),Object.defineProperty(b.Stage.prototype,"smoothed",{get:function(){return!PIXI.scaleModes.LINEAR},set:function(a){PIXI.scaleModes.LINEAR=a?0:1}}),b.Group=function(a,c,d,e,f,g){"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=!1),"undefined"==typeof g&&(g=b.Physics.ARCADE),this.game=a,"undefined"==typeof c&&(c=a.world),this.name=d||"group",PIXI.DisplayObjectContainer.call(this),e?this.game.stage.addChild(this):c&&c.addChild(this),this.z=0,this.type=b.GROUP,this.alive=!0,this.exists=!0,this.classType=b.Sprite,this.scale=new b.Point(1,1),this.cursor=null,this.cameraOffset=new b.Point,this.enableBody=f,this.enableBodyDebug=!1,this.physicsBodyType=g,this._sortProperty="z",this._cache=[0,0,0,0,1,0,1,0,0,0]},b.Group.prototype=Object.create(PIXI.DisplayObjectContainer.prototype),b.Group.prototype.constructor=b.Group,b.Group.RETURN_NONE=0,b.Group.RETURN_TOTAL=1,b.Group.RETURN_CHILD=2,b.Group.SORT_ASCENDING=-1,b.Group.SORT_DESCENDING=1,b.Group.prototype.add=function(a){return a.parent!==this&&(this.enableBody&&this.game.physics.enable(a,this.physicsBodyType),this.addChild(a),a.z=this.children.length,a.events&&a.events.onAddedToGroup.dispatch(a,this),null===this.cursor&&(this.cursor=a)),a},b.Group.prototype.addAt=function(a,b){return a.parent!==this&&(this.enableBody&&this.game.physics.enable(a,this.physicsBodyType),this.addChildAt(a,b),this.updateZ(),a.events&&a.events.onAddedToGroup.dispatch(a,this),null===this.cursor&&(this.cursor=a)),a},b.Group.prototype.getAt=function(a){return 0>a||a>=this.children.length?-1:this.getChildAt(a)},b.Group.prototype.create=function(a,b,c,d,e){"undefined"==typeof e&&(e=!0);var f=new this.classType(this.game,a,b,c,d);return this.enableBody&&this.game.physics.enable(f,this.physicsBodyType),f.exists=e,f.visible=e,f.alive=e,this.addChild(f),f.z=this.children.length,f.events&&f.events.onAddedToGroup.dispatch(f,this),null===this.cursor&&(this.cursor=f),f},b.Group.prototype.createMultiple=function(a,b,c,d){"undefined"==typeof d&&(d=!1);for(var e=0;a>e;e++)this.create(0,0,b,c,d)},b.Group.prototype.updateZ=function(){for(var a=this.children.length;a--;)this.children[a].z=a},b.Group.prototype.resetCursor=function(a){return"undefined"==typeof a&&(a=0),a>this.children.length-1&&(a=0),this.cursor?(this._cache[8]=a,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.next=function(){return this.cursor?(this._cache[8]>=this.children.length-1?this._cache[8]=0:this._cache[8]++,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.previous=function(){return this.cursor?(0===this._cache[8]?this._cache[8]=this.children.length-1:this._cache[8]--,this.cursor=this.children[this._cache[8]],this.cursor):void 0},b.Group.prototype.swap=function(a,b){var c=this.swapChildren(a,b);return c&&this.updateZ(),c},b.Group.prototype.bringToTop=function(a){return a.parent===this&&this.getIndex(a)0&&(this.remove(a),this.addAt(a,0)),a},b.Group.prototype.moveUp=function(a){if(a.parent===this&&this.getIndex(a)0){var b=this.getIndex(a),c=this.getAt(b-1);c&&this.swap(a,c)}return a},b.Group.prototype.xy=function(a,b,c){return 0>a||a>this.children.length?-1:(this.getChildAt(a).x=b,void(this.getChildAt(a).y=c))},b.Group.prototype.reverse=function(){this.children.reverse(),this.updateZ()},b.Group.prototype.getIndex=function(a){return this.children.indexOf(a)},b.Group.prototype.replace=function(a,c){var d=this.getIndex(a);if(-1!==d){void 0!==c.parent&&(c.events.onRemovedFromGroup.dispatch(c,this),c.parent.removeChild(c),c.parent instanceof b.Group&&c.parent.updateZ());var e=a;return this.remove(e),this.addAt(c,d),e}},b.Group.prototype.setProperty=function(a,b,c,d){d=d||0;var e=b.length;1===e&&a.hasOwnProperty(b[0])?0===d?a[b[0]]=c:1==d?a[b[0]]+=c:2==d?a[b[0]]-=c:3==d?a[b[0]]*=c:4==d&&(a[b[0]]/=c):2===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])?0===d?a[b[0]][b[1]]=c:1==d?a[b[0]][b[1]]+=c:2==d?a[b[0]][b[1]]-=c:3==d?a[b[0]][b[1]]*=c:4==d&&(a[b[0]][b[1]]/=c):3===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])&&a[b[0]][b[1]].hasOwnProperty(b[2])?0===d?a[b[0]][b[1]][b[2]]=c:1==d?a[b[0]][b[1]][b[2]]+=c:2==d?a[b[0]][b[1]][b[2]]-=c:3==d?a[b[0]][b[1]][b[2]]*=c:4==d&&(a[b[0]][b[1]][b[2]]/=c):4===e&&a.hasOwnProperty(b[0])&&a[b[0]].hasOwnProperty(b[1])&&a[b[0]][b[1]].hasOwnProperty(b[2])&&a[b[0]][b[1]][b[2]].hasOwnProperty(b[3])&&(0===d?a[b[0]][b[1]][b[2]][b[3]]=c:1==d?a[b[0]][b[1]][b[2]][b[3]]+=c:2==d?a[b[0]][b[1]][b[2]][b[3]]-=c:3==d?a[b[0]][b[1]][b[2]][b[3]]*=c:4==d&&(a[b[0]][b[1]][b[2]][b[3]]/=c))},b.Group.prototype.set=function(a,b,c,d,e,f){b=b.split("."),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1),(d===!1||d&&a.alive)&&(e===!1||e&&a.visible)&&this.setProperty(a,b,c,f)},b.Group.prototype.setAll=function(a,b,c,d,e){a=a.split("."),"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1),e=e||0;for(var f=0,g=this.children.length;g>f;f++)(!c||c&&this.children[f].alive)&&(!d||d&&this.children[f].visible)&&this.setProperty(this.children[f],a,b,e)},b.Group.prototype.setAllChildren=function(a,c,d,e,f){"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1),f=f||0;for(var g=0,h=this.children.length;h>g;g++)(!d||d&&this.children[g].alive)&&(!e||e&&this.children[g].visible)&&(this.children[g]instanceof b.Group?this.children[g].setAllChildren(a,c,d,e,f):this.setProperty(this.children[g],a.split("."),c,f))},b.Group.prototype.addAll=function(a,b,c,d){this.setAll(a,b,c,d,1)},b.Group.prototype.subAll=function(a,b,c,d){this.setAll(a,b,c,d,2)},b.Group.prototype.multiplyAll=function(a,b,c,d){this.setAll(a,b,c,d,3)},b.Group.prototype.divideAll=function(a,b,c,d){this.setAll(a,b,c,d,4)},b.Group.prototype.callAllExists=function(a,b){for(var c=Array.prototype.splice.call(arguments,2),d=0,e=this.children.length;e>d;d++)this.children[d].exists===b&&this.children[d][a]&&this.children[d][a].apply(this.children[d],c)},b.Group.prototype.callbackFromArray=function(a,b,c){if(1==c){if(a[b[0]])return a[b[0]]}else if(2==c){if(a[b[0]][b[1]])return a[b[0]][b[1]]}else if(3==c){if(a[b[0]][b[1]][b[2]])return a[b[0]][b[1]][b[2]]}else if(4==c){if(a[b[0]][b[1]][b[2]][b[3]])return a[b[0]][b[1]][b[2]][b[3]]}else if(a[b])return a[b];return!1},b.Group.prototype.callAll=function(a,b){if("undefined"!=typeof a){a=a.split(".");var c=a.length;if("undefined"==typeof b||null===b||""===b)b=null;else if("string"==typeof b){b=b.split(".");var d=b.length}for(var e=Array.prototype.splice.call(arguments,2),f=null,g=null,h=0,i=this.children.length;i>h;h++)f=this.callbackFromArray(this.children[h],a,c),b&&f?(g=this.callbackFromArray(this.children[h],b,d),f&&f.apply(g,e)):f&&f.apply(this.children[h],e)}},b.Group.prototype.preUpdate=function(){if(!this.exists||!this.parent.exists)return this.renderOrderID=-1,!1;for(var a=this.children.length;a--;)this.children[a].preUpdate();return!0},b.Group.prototype.update=function(){for(var a=this.children.length;a--;)this.children[a].update()},b.Group.prototype.postUpdate=function(){1===this._cache[7]&&(this.x=this.game.camera.view.x+this.cameraOffset.x,this.y=this.game.camera.view.y+this.cameraOffset.y);for(var a=this.children.length;a--;)this.children[a].postUpdate()},b.Group.prototype.forEach=function(a,b,c){"undefined"==typeof c&&(c=!1);var d=Array.prototype.splice.call(arguments,3);d.unshift(null);for(var e=0,f=this.children.length;f>e;e++)(!c||c&&this.children[e].exists)&&(d[0]=this.children[e],a.apply(b,d))},b.Group.prototype.forEachExists=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("exists",!0,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.forEachAlive=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("alive",!0,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.forEachDead=function(a,c){var d=Array.prototype.splice.call(arguments,2);d.unshift(null),this.iterate("alive",!1,b.Group.RETURN_TOTAL,a,c,d)},b.Group.prototype.sort=function(a,c){this.children.length<2||("undefined"==typeof a&&(a="z"),"undefined"==typeof c&&(c=b.Group.SORT_ASCENDING),this._sortProperty=a,this.children.sort(c===b.Group.SORT_ASCENDING?this.ascendingSortHandler.bind(this):this.descendingSortHandler.bind(this)),this.updateZ())},b.Group.prototype.customSort=function(a,b){this.children.length<2||(this.children.sort(a.bind(b)),this.updateZ())},b.Group.prototype.ascendingSortHandler=function(a,b){return a[this._sortProperty]b[this._sortProperty]?1:a.zb[this._sortProperty]?-1:0},b.Group.prototype.iterate=function(a,c,d,e,f,g){if(d===b.Group.RETURN_TOTAL&&0===this.children.length)return 0;"undefined"==typeof e&&(e=!1);for(var h=0,i=0,j=this.children.length;j>i;i++)if(this.children[i][a]===c&&(h++,e&&(g[0]=this.children[i],e.apply(f,g)),d===b.Group.RETURN_CHILD))return this.children[i];return d===b.Group.RETURN_TOTAL?h:d===b.Group.RETURN_CHILD?null:void 0},b.Group.prototype.getFirstExists=function(a){return"boolean"!=typeof a&&(a=!0),this.iterate("exists",a,b.Group.RETURN_CHILD)},b.Group.prototype.getFirstAlive=function(){return this.iterate("alive",!0,b.Group.RETURN_CHILD)},b.Group.prototype.getFirstDead=function(){return this.iterate("alive",!1,b.Group.RETURN_CHILD)},b.Group.prototype.getTop=function(){return this.children.length>0?this.children[this.children.length-1]:void 0},b.Group.prototype.getBottom=function(){return this.children.length>0?this.children[0]:void 0},b.Group.prototype.countLiving=function(){return this.iterate("alive",!0,b.Group.RETURN_TOTAL)},b.Group.prototype.countDead=function(){return this.iterate("alive",!1,b.Group.RETURN_TOTAL)},b.Group.prototype.getRandom=function(a,b){return 0===this.children.length?null:(a=a||0,b=b||this.children.length,this.game.math.getRandom(this.children,a,b))},b.Group.prototype.remove=function(a,b){if("undefined"==typeof b&&(b=!1),0===this.children.length||-1===this.children.indexOf(a))return!1;a.events&&!a.destroyPhase&&a.events.onRemovedFromGroup.dispatch(a,this);var c=this.removeChild(a);return this.updateZ(),this.cursor===a&&this.next(),b&&c&&c.destroy(!0),!0},b.Group.prototype.removeAll=function(a){if("undefined"==typeof a&&(a=!1),0!==this.children.length){do{this.children[0].events&&this.children[0].events.onRemovedFromGroup.dispatch(this.children[0],this);var b=this.removeChild(this.children[0]);a&&b&&b.destroy(!0)}while(this.children.length>0);this.cursor=null}},b.Group.prototype.removeBetween=function(a,b,c){if("undefined"==typeof b&&(b=this.children.length),"undefined"==typeof c&&(c=!1),0!==this.children.length){if(a>b||0>a||b>this.children.length)return!1;for(var d=b;d>=a;){this.children[d].events&&this.children[d].events.onRemovedFromGroup.dispatch(this.children[d],this);var e=this.removeChild(this.children[d]);c&&e&&e.destroy(!0),this.cursor===this.children[d]&&(this.cursor=null),d--}this.updateZ()}},b.Group.prototype.destroy=function(a,b){null!==this.game&&("undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!1),this.removeAll(a),this.cursor=null,b||(this.parent&&this.parent.removeChild(this),this.game=null,this.exists=!1))},Object.defineProperty(b.Group.prototype,"total",{get:function(){return this.iterate("exists",!0,b.Group.RETURN_TOTAL)}}),Object.defineProperty(b.Group.prototype,"length",{get:function(){return this.children.length}}),Object.defineProperty(b.Group.prototype,"angle",{get:function(){return b.Math.radToDeg(this.rotation)},set:function(a){this.rotation=b.Math.degToRad(a)}}),Object.defineProperty(b.Group.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),b.World=function(a){b.Group.call(this,a,null,"__world",!1),this.bounds=new b.Rectangle(0,0,a.width,a.height),this.camera=null},b.World.prototype=Object.create(b.Group.prototype),b.World.prototype.constructor=b.World,b.World.prototype.boot=function(){this.camera=new b.Camera(this.game,0,0,0,this.game.width,this.game.height),this.camera.displayObject=this,this.camera.scale=this.scale,this.game.camera=this.camera,this.game.stage.addChild(this)},b.World.prototype.setBounds=function(a,b,c,d){cthis.bounds.right&&(a.x=this.bounds.left),a._currentBounds.bottomthis.bounds.bottom&&(a.y=this.bounds.top)):(a.x+bthis.bounds.right&&(a.x=this.bounds.left-b),a.y+bthis.bounds.bottom&&(a.y=this.bounds.top-b))},Object.defineProperty(b.World.prototype,"width",{get:function(){return this.bounds.width},set:function(a){this.bounds.width=a}}),Object.defineProperty(b.World.prototype,"height",{get:function(){return this.bounds.height},set:function(a){this.bounds.height=a}}),Object.defineProperty(b.World.prototype,"centerX",{get:function(){return this.bounds.halfWidth}}),Object.defineProperty(b.World.prototype,"centerY",{get:function(){return this.bounds.halfHeight}}),Object.defineProperty(b.World.prototype,"randomX",{get:function(){return this.bounds.x<0?this.game.rnd.integerInRange(this.bounds.x,this.bounds.width-Math.abs(this.bounds.x)):this.game.rnd.integerInRange(this.bounds.x,this.bounds.width)}}),Object.defineProperty(b.World.prototype,"randomY",{get:function(){return this.bounds.y<0?this.game.rnd.integerInRange(this.bounds.y,this.bounds.height-Math.abs(this.bounds.y)):this.game.rnd.integerInRange(this.bounds.y,this.bounds.height)}}),b.ScaleManager=function(a,c,d){this.game=a,this.width=c,this.height=d,this.minWidth=null,this.maxWidth=null,this.minHeight=null,this.maxHeight=null,this.forceLandscape=!1,this.forcePortrait=!1,this.incorrectOrientation=!1,this.pageAlignHorizontally=!1,this.pageAlignVertically=!1,this.maxIterations=5,this.orientationSprite=null,this.enterLandscape=new b.Signal,this.enterPortrait=new b.Signal,this.enterIncorrectOrientation=new b.Signal,this.leaveIncorrectOrientation=new b.Signal,this.hasResized=new b.Signal,this.fullScreenTarget=this.game.canvas,this.enterFullScreen=new b.Signal,this.leaveFullScreen=new b.Signal,this.orientation=0,window.orientation?this.orientation=window.orientation:window.outerWidth>window.outerHeight&&(this.orientation=90),this.scaleFactor=new b.Point(1,1),this.scaleFactorInversed=new b.Point(1,1),this.margin=new b.Point(0,0),this.aspectRatio=0,this.sourceAspectRatio=c/d,this.event=null,this.scaleMode=b.ScaleManager.NO_SCALE,this.fullScreenScaleMode=b.ScaleManager.NO_SCALE,this._startHeight=0,this._width=0,this._height=0;var e=this;window.addEventListener("orientationchange",function(a){return e.checkOrientation(a)},!1),window.addEventListener("resize",function(a){return e.checkResize(a)},!1),document.addEventListener("webkitfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("mozfullscreenchange",function(a){return e.fullScreenChange(a)},!1),document.addEventListener("fullscreenchange",function(a){return e.fullScreenChange(a)},!1)},b.ScaleManager.EXACT_FIT=0,b.ScaleManager.NO_SCALE=1,b.ScaleManager.SHOW_ALL=2,b.ScaleManager.prototype={startFullScreen:function(a){!this.isFullScreen&&this.game.device.fullscreen&&("undefined"!=typeof a&&this.game.renderType===b.CANVAS&&(this.game.stage.smoothed=a),this._width=this.width,this._height=this.height,this.game.device.fullscreenKeyboard?this.fullScreenTarget[this.game.device.requestFullscreen](Element.ALLOW_KEYBOARD_INPUT):this.fullScreenTarget[this.game.device.requestFullscreen]())},stopFullScreen:function(){this.fullScreenTarget[this.game.device.cancelFullscreen]()},fullScreenChange:function(a){this.event=a,this.isFullScreen?(this.fullScreenScaleMode===b.ScaleManager.EXACT_FIT?(this.fullScreenTarget.style.width="100%",this.fullScreenTarget.style.height="100%",this.width=window.outerWidth,this.height=window.outerHeight,this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height,this.checkResize()):this.fullScreenScaleMode===b.ScaleManager.SHOW_ALL&&(this.setShowAll(),this.refresh()),this.enterFullScreen.dispatch(this.width,this.height)):(this.fullScreenTarget.style.width=this.game.width+"px",this.fullScreenTarget.style.height=this.game.height+"px",this.width=this._width,this.height=this._height,this.game.input.scale.setTo(this.game.width/this.width,this.game.height/this.height),this.aspectRatio=this.width/this.height,this.scaleFactor.x=this.game.width/this.width,this.scaleFactor.y=this.game.height/this.height,this.leaveFullScreen.dispatch(this.width,this.height))},forceOrientation:function(a,c,d){"undefined"==typeof c&&(c=!1),this.forceLandscape=a,this.forcePortrait=c,"undefined"!=typeof d&&((null===d||this.game.cache.checkImageKey(d)===!1)&&(d="__default"),this.orientationSprite=new b.Image(this.game,this.game.width/2,this.game.height/2,PIXI.TextureCache[d]),this.orientationSprite.anchor.set(.5),this.checkOrientationState(),this.incorrectOrientation?(this.orientationSprite.visible=!0,this.game.world.visible=!1):(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.game.stage.addChild(this.orientationSprite))},checkOrientationState:function(){this.incorrectOrientation?(this.forceLandscape&&window.innerWidth>window.innerHeight||this.forcePortrait&&window.innerHeight>window.innerWidth)&&(this.incorrectOrientation=!1,this.leaveIncorrectOrientation.dispatch(),this.orientationSprite&&(this.orientationSprite.visible=!1,this.game.world.visible=!0),this.scaleMode!==b.ScaleManager.NO_SCALE&&this.refresh()):(this.forceLandscape&&window.innerWidthwindow.outerHeight?90:0,this.isLandscape?this.enterLandscape.dispatch(this.orientation,!0,!1):this.enterPortrait.dispatch(this.orientation,!1,!0),this.scaleMode!==b.ScaleManager.NO_SCALE&&this.refresh(),this.checkOrientationState() +},refresh:function(){if(this.game.device.iPad||this.game.device.webApp||this.game.device.desktop||(this.game.device.android&&!this.game.device.chrome?window.scrollTo(0,1):window.scrollTo(0,0)),null===this._check&&this.maxIterations>0){this._iterations=this.maxIterations;var a=this;this._check=window.setInterval(function(){return a.setScreenSize()},10),this.setScreenSize()}},setScreenSize:function(a){"undefined"==typeof a&&(a=!1),this.game.device.iPad||this.game.device.webApp||this.game.device.desktop||(this.game.device.android&&!this.game.device.chrome?window.scrollTo(0,1):window.scrollTo(0,0)),this._iterations--,(a||window.innerHeight>this._startHeight||this._iterations<0)&&(document.documentElement.style.minHeight=window.innerHeight+"px",this.incorrectOrientation?this.setMaximum():this.isFullScreen?this.fullScreenScaleMode===b.ScaleManager.EXACT_FIT?this.setExactFit():this.fullScreenScaleMode===b.ScaleManager.SHOW_ALL&&this.setShowAll():this.scaleMode===b.ScaleManager.EXACT_FIT?this.setExactFit():this.scaleMode===b.ScaleManager.SHOW_ALL&&this.setShowAll(),this.setSize(),clearInterval(this._check),this._check=null)},setSize:function(){this.incorrectOrientation||(this.maxWidth&&this.width>this.maxWidth&&(this.width=this.maxWidth),this.maxHeight&&this.height>this.maxHeight&&(this.height=this.maxHeight),this.minWidth&&this.widththis.maxWidth?this.maxWidth:a,this.height=this.maxHeight&&b>this.maxHeight?this.maxHeight:b}},b.ScaleManager.prototype.constructor=b.ScaleManager,Object.defineProperty(b.ScaleManager.prototype,"isFullScreen",{get:function(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement}}),Object.defineProperty(b.ScaleManager.prototype,"isPortrait",{get:function(){return 0===this.orientation||180===this.orientation}}),Object.defineProperty(b.ScaleManager.prototype,"isLandscape",{get:function(){return 90===this.orientation||-90===this.orientation}}),b.Game=function(a,c,d,e,f,g,h,i){this.id=b.GAMES.push(this)-1,this.config=null,this.physicsConfig=i,this.parent="",this.width=800,this.height=600,this.transparent=!1,this.antialias=!0,this.renderer=null,this.renderType=b.AUTO,this.state=null,this.isBooted=!1,this.isRunning=!1,this.raf=null,this.add=null,this.make=null,this.cache=null,this.input=null,this.load=null,this.math=null,this.net=null,this.scale=null,this.sound=null,this.stage=null,this.time=null,this.tweens=null,this.world=null,this.physics=null,this.rnd=null,this.device=null,this.camera=null,this.canvas=null,this.context=null,this.debug=null,this.particles=null,this.stepping=!1,this.pendingStep=!1,this.stepCount=0,this.onPause=null,this.onResume=null,this.onBlur=null,this.onFocus=null,this._paused=!1,this._codePaused=!1,1===arguments.length&&"object"==typeof arguments[0]?this.parseConfig(arguments[0]):("undefined"!=typeof a&&(this.width=a),"undefined"!=typeof c&&(this.height=c),"undefined"!=typeof d&&(this.renderer=d,this.renderType=d),"undefined"!=typeof e&&(this.parent=e),"undefined"!=typeof g&&(this.transparent=g),"undefined"!=typeof h&&(this.antialias=h),this.rnd=new b.RandomDataGenerator([(Date.now()*Math.random()).toString()]),this.state=new b.StateManager(this,f));var j=this;return this._onBoot=function(){return j.boot()},"complete"===document.readyState||"interactive"===document.readyState?window.setTimeout(this._onBoot,0):(document.addEventListener("DOMContentLoaded",this._onBoot,!1),window.addEventListener("load",this._onBoot,!1)),this},b.Game.prototype={parseConfig:function(a){this.config=a,a.width&&(this.width=b.Utils.parseDimension(a.width,0)),a.height&&(this.height=b.Utils.parseDimension(a.height,1)),a.renderer&&(this.renderer=a.renderer,this.renderType=a.renderer),a.parent&&(this.parent=a.parent),a.transparent&&(this.transparent=a.transparent),a.antialias&&(this.antialias=a.antialias),a.physicsConfig&&(this.physicsConfig=a.physicsConfig);var c=[(Date.now()*Math.random()).toString()];a.seed&&(c=a.seed),this.rnd=new b.RandomDataGenerator(c);var d=null;a.state&&(d=a.state),this.state=new b.StateManager(this,d)},boot:function(){this.isBooted||(document.body?(document.removeEventListener("DOMContentLoaded",this._onBoot),window.removeEventListener("load",this._onBoot),this.onPause=new b.Signal,this.onResume=new b.Signal,this.onBlur=new b.Signal,this.onFocus=new b.Signal,this.isBooted=!0,this.device=new b.Device(this),this.math=b.Math,this.stage=new b.Stage(this,this.width,this.height),this.scale=new b.ScaleManager(this,this.width,this.height),this.setUpRenderer(),this.device.checkFullScreenSupport(),this.world=new b.World(this),this.add=new b.GameObjectFactory(this),this.make=new b.GameObjectCreator(this),this.cache=new b.Cache(this),this.load=new b.Loader(this),this.time=new b.Time(this),this.tweens=new b.TweenManager(this),this.input=new b.Input(this),this.sound=new b.SoundManager(this),this.physics=new b.Physics(this,this.physicsConfig),this.particles=new b.Particles(this),this.plugins=new b.PluginManager(this),this.net=new b.Net(this),this.debug=new b.Utils.Debug(this),this.scratch=new b.BitmapData(this,"__root",1024,1024),this.time.boot(),this.stage.boot(),this.world.boot(),this.input.boot(),this.sound.boot(),this.state.boot(),this.debug.boot(),this.showDebugHeader(),this.isRunning=!0,this.raf=this.config&&this.config.forceSetTimeOut?new b.RequestAnimationFrame(this,this.config.forceSetTimeOut):new b.RequestAnimationFrame(this,!1),this.raf.start()):window.setTimeout(this._onBoot,20))},showDebugHeader:function(){var a=b.VERSION,c="Canvas",d="HTML Audio",e=1;if(this.renderType===b.WEBGL?(c="WebGL",e++):this.renderType==b.HEADLESS&&(c="Headless"),this.device.webAudio&&(d="WebAudio",e++),this.device.chrome){for(var f=["%c %c %c Phaser v"+a+" - "+c+" - "+d+" %c %c http://phaser.io %c %c ♥%c♥%c♥ ","background: #0cf300","background: #00bc17","color: #ffffff; background: #00711f;","background: #00bc17","background: #0cf300","background: #00bc17"],g=0;3>g;g++)f.push(e>g?"color: #ff2424; background: #fff":"color: #959595; background: #fff");console.log.apply(console,f)}else window.console&&console.log("Phaser v"+a+" - Renderer: "+c+" - Audio: "+d+" - http://phaser.io")},setUpRenderer:function(){if(this.device.trident&&(this.renderType=b.CANVAS),this.renderType===b.HEADLESS||this.renderType===b.CANVAS||this.renderType===b.AUTO&&this.device.webGL===!1){if(!this.device.canvas)throw new Error("Phaser.Game - cannot create Canvas or WebGL context, aborting.");this.renderType===b.AUTO&&(this.renderType=b.CANVAS),this.renderer=new PIXI.CanvasRenderer(this.width,this.height,this.canvas,this.transparent),this.context=this.renderer.context}else this.renderType=b.WEBGL,this.renderer=new PIXI.WebGLRenderer(this.width,this.height,this.canvas,this.transparent,this.antialias),this.context=null;this.renderType!==b.HEADLESS&&(this.stage.smoothed=this.antialias,b.Canvas.addToDOM(this.canvas,this.parent,!0),b.Canvas.setTouchAction(this.canvas))},update:function(a){this.time.update(a),this._paused||this.pendingStep?(this.state.pauseUpdate(),this.debug.preUpdate()):(this.stepping&&(this.pendingStep=!0),this.debug.preUpdate(),this.physics.preUpdate(),this.state.preUpdate(),this.plugins.preUpdate(),this.stage.preUpdate(),this.state.update(),this.stage.update(),this.tweens.update(),this.sound.update(),this.input.update(),this.physics.update(),this.particles.update(),this.plugins.update(),this.stage.postUpdate(),this.plugins.postUpdate()),this.renderType!=b.HEADLESS&&(this.renderer.render(this.stage),this.plugins.render(),this.state.render(),this.plugins.postRender())},enableStep:function(){this.stepping=!0,this.pendingStep=!1,this.stepCount=0},disableStep:function(){this.stepping=!1,this.pendingStep=!1},step:function(){this.pendingStep=!1,this.stepCount++},destroy:function(){this.raf.stop(),this.input.destroy(),this.state.destroy(),this.physics.destroy(),this.state=null,this.cache=null,this.input=null,this.load=null,this.sound=null,this.stage=null,this.time=null,this.world=null,this.isBooted=!1},gamePaused:function(a){this._paused||(this._paused=!0,this.time.gamePaused(),this.sound.setMute(),this.onPause.dispatch(a))},gameResumed:function(a){this._paused&&!this._codePaused&&(this._paused=!1,this.time.gameResumed(),this.input.reset(),this.sound.unsetMute(),this.onResume.dispatch(a))},focusLoss:function(a){this.onBlur.dispatch(a),this.gamePaused(a)},focusGain:function(a){this.onFocus.dispatch(a),this.gameResumed(a)}},b.Game.prototype.constructor=b.Game,Object.defineProperty(b.Game.prototype,"paused",{get:function(){return this._paused},set:function(a){a===!0?this._paused===!1&&(this._paused=!0,this._codePaused=!0,this.sound.setMute(),this.time.gamePaused(),this.onPause.dispatch(this)):this._paused&&(this._paused=!1,this._codePaused=!1,this.input.reset(),this.sound.unsetMute(),this.time.gameResumed(),this.onResume.dispatch(this))}}),b.Input=function(a){this.game=a,this.hitCanvas=null,this.hitContext=null,this.moveCallback=null,this.moveCallbackContext=this,this.pollRate=0,this.disabled=!1,this.multiInputOverride=b.Input.MOUSE_TOUCH_COMBINE,this.position=null,this.speed=null,this.circle=null,this.scale=null,this.maxPointers=10,this.currentPointers=0,this.tapRate=200,this.doubleTapRate=300,this.holdRate=2e3,this.justPressedRate=200,this.justReleasedRate=200,this.recordPointerHistory=!1,this.recordRate=100,this.recordLimit=100,this.pointer1=null,this.pointer2=null,this.pointer3=null,this.pointer4=null,this.pointer5=null,this.pointer6=null,this.pointer7=null,this.pointer8=null,this.pointer9=null,this.pointer10=null,this.activePointer=null,this.mousePointer=null,this.mouse=null,this.keyboard=null,this.touch=null,this.mspointer=null,this.gamepad=null,this.resetLocked=!1,this.onDown=null,this.onUp=null,this.onTap=null,this.onHold=null,this.interactiveItems=new b.ArrayList,this._localPoint=new b.Point,this._pollCounter=0,this._oldPosition=null,this._x=0,this._y=0},b.Input.MOUSE_OVERRIDES_TOUCH=0,b.Input.TOUCH_OVERRIDES_MOUSE=1,b.Input.MOUSE_TOUCH_COMBINE=2,b.Input.prototype={boot:function(){this.mousePointer=new b.Pointer(this.game,0),this.pointer1=new b.Pointer(this.game,1),this.pointer2=new b.Pointer(this.game,2),this.mouse=new b.Mouse(this.game),this.keyboard=new b.Keyboard(this.game),this.touch=new b.Touch(this.game),this.mspointer=new b.MSPointer(this.game),this.gamepad=new b.Gamepad(this.game),this.onDown=new b.Signal,this.onUp=new b.Signal,this.onTap=new b.Signal,this.onHold=new b.Signal,this.scale=new b.Point(1,1),this.speed=new b.Point,this.position=new b.Point,this._oldPosition=new b.Point,this.circle=new b.Circle(0,0,44),this.activePointer=this.mousePointer,this.currentPointers=0,this.hitCanvas=document.createElement("canvas"),this.hitCanvas.width=1,this.hitCanvas.height=1,this.hitContext=this.hitCanvas.getContext("2d"),this.mouse.start(),this.keyboard.start(),this.touch.start(),this.mspointer.start(),this.mousePointer.active=!0},destroy:function(){this.mouse.stop(),this.keyboard.stop(),this.touch.stop(),this.mspointer.stop(),this.gamepad.stop(),this.moveCallback=null},setMoveCallback:function(a,b){this.moveCallback=a,this.moveCallbackContext=b},addPointer:function(){for(var a=0,c=10;c>0;c--)null===this["pointer"+c]&&(a=c);return 0===a?(console.warn("You can only have 10 Pointer objects"),null):(this["pointer"+a]=new b.Pointer(this.game,a),this["pointer"+a])},update:function(){return this.keyboard.update(),this.pollRate>0&&this._pollCounter=c;c++)this["pointer"+c]&&this["pointer"+c].reset();this.currentPointers=0,"none"!==this.game.canvas.style.cursor&&(this.game.canvas.style.cursor="inherit"),a&&(this.onDown.dispose(),this.onUp.dispose(),this.onTap.dispose(),this.onHold.dispose(),this.onDown=new b.Signal,this.onUp=new b.Signal,this.onTap=new b.Signal,this.onHold=new b.Signal),this._pollCounter=0}},resetSpeed:function(a,b){this._oldPosition.setTo(a,b),this.speed.setTo(0,0)},startPointer:function(a){if(this.maxPointers<10&&this.totalActivePointers==this.maxPointers)return null;if(this.pointer1.active===!1)return this.pointer1.start(a);if(this.pointer2.active===!1)return this.pointer2.start(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active===!1)return this["pointer"+b].start(a);return null},updatePointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.move(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.move(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].move(a);return null},stopPointer:function(a){if(this.pointer1.active&&this.pointer1.identifier==a.identifier)return this.pointer1.stop(a);if(this.pointer2.active&&this.pointer2.identifier==a.identifier)return this.pointer2.stop(a);for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active&&this["pointer"+b].identifier==a.identifier)return this["pointer"+b].stop(a);return null},getPointer:function(a){if(a=a||!1,this.pointer1.active==a)return this.pointer1;if(this.pointer2.active==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].active==a)return this["pointer"+b];return null},getPointerFromIdentifier:function(a){if(this.pointer1.identifier==a)return this.pointer1;if(this.pointer2.identifier==a)return this.pointer2;for(var b=3;10>=b;b++)if(this["pointer"+b]&&this["pointer"+b].identifier==a)return this["pointer"+b];return null},getLocalPosition:function(a,c,d){"undefined"==typeof d&&(d=new b.Point);var e=a.worldTransform,f=1/(e.a*e.d+e.b*-e.c);return d.setTo(e.d*f*c.x+-e.b*f*c.y+(e.ty*e.b-e.tx*e.d)*f,e.a*f*c.y+-e.c*f*c.x+(-e.ty*e.a+e.tx*e.c)*f)},hitTest:function(a,c,d){if(!a.worldVisible)return!1;if(this.getLocalPosition(a,c,this._localPoint),d.copyFrom(this._localPoint),a.hitArea&&a.hitArea.contains)return a.hitArea.contains(this._localPoint.x,this._localPoint.y)?!0:!1;if(a instanceof b.TileSprite){var e=a.width,f=a.height,g=-e*a.anchor.x;if(this._localPoint.x>g&&this._localPoint.xh&&this._localPoint.yg&&this._localPoint.xh&&this._localPoint.yi;i++)if(this.hitTest(a.children[i],c,d))return!0;return!1}},b.Input.prototype.constructor=b.Input,Object.defineProperty(b.Input.prototype,"x",{get:function(){return this._x},set:function(a){this._x=Math.floor(a)}}),Object.defineProperty(b.Input.prototype,"y",{get:function(){return this._y},set:function(a){this._y=Math.floor(a)}}),Object.defineProperty(b.Input.prototype,"pollLocked",{get:function(){return this.pollRate>0&&this._pollCounter=a;a++)this["pointer"+a]&&this["pointer"+a].active&&this.currentPointers++;return this.currentPointers}}),Object.defineProperty(b.Input.prototype,"worldX",{get:function(){return this.game.camera.view.x+this.x}}),Object.defineProperty(b.Input.prototype,"worldY",{get:function(){return this.game.camera.view.y+this.y}}),b.Key=function(a,c){this.game=a,this.enabled=!0,this.event=null,this.isDown=!1,this.isUp=!0,this.altKey=!1,this.ctrlKey=!1,this.shiftKey=!1,this.timeDown=0,this.duration=0,this.timeUp=-2500,this.repeats=0,this.keyCode=c,this.onDown=new b.Signal,this.onHoldCallback=null,this.onHoldContext=null,this.onUp=new b.Signal},b.Key.prototype={update:function(){this.enabled&&this.isDown&&(this.duration=this.game.time.now-this.timeDown,this.repeats++,this.onHoldCallback&&this.onHoldCallback.call(this.onHoldContext,this))},processKeyDown:function(a){this.enabled&&(this.event=a,this.isDown||(this.altKey=a.altKey,this.ctrlKey=a.ctrlKey,this.shiftKey=a.shiftKey,this.isDown=!0,this.isUp=!1,this.timeDown=this.game.time.now,this.duration=0,this.repeats=0,this.onDown.dispatch(this)))},processKeyUp:function(a){this.enabled&&(this.event=a,this.isUp||(this.isDown=!1,this.isUp=!0,this.timeUp=this.game.time.now,this.duration=this.game.time.now-this.timeDown,this.onUp.dispatch(this)))},reset:function(a){"undefined"==typeof a&&(a=!0),this.isDown=!1,this.isUp=!0,this.timeUp=this.game.time.now,this.duration=this.game.time.now-this.timeDown,this.enabled=!0,a&&(this.onDown.removeAll(),this.onUp.removeAll(),this.onHoldCallback=null,this.onHoldContext=null)},justPressed:function(a){return"undefined"==typeof a&&(a=2500),this.isDown&&this.duration=this.game.input.holdRate&&((this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&this.game.input.onHold.dispatch(this),this._holdSent=!0),this.game.input.recordPointerHistory&&this.game.time.now>=this._nextDrop&&(this._nextDrop=this.game.time.now+this.game.input.recordRate,this._history.push({x:this.position.x,y:this.position.y}),this._history.length>this.game.input.recordLimit&&this._history.shift()))},move:function(a,c){if(!this.game.input.pollLocked){if("undefined"==typeof c&&(c=!1),"undefined"!=typeof a.button&&(this.button=a.button),this.clientX=a.clientX,this.clientY=a.clientY,this.pageX=a.pageX,this.pageY=a.pageY,this.screenX=a.screenX,this.screenY=a.screenY,this.x=(this.pageX-this.game.stage.offset.x)*this.game.input.scale.x,this.y=(this.pageY-this.game.stage.offset.y)*this.game.input.scale.y,this.position.setTo(this.x,this.y),this.circle.x=this.x,this.circle.y=this.y,(this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.activePointer=this,this.game.input.x=this.x,this.game.input.y=this.y,this.game.input.position.setTo(this.game.input.x,this.game.input.y),this.game.input.circle.x=this.game.input.x,this.game.input.circle.y=this.game.input.y),this.game.paused)return this; +if(this.game.input.moveCallback&&this.game.input.moveCallback.call(this.game.input.moveCallbackContext,this,this.x,this.y),null!==this.targetObject&&this.targetObject.isDragged===!0)return this.targetObject.update(this)===!1&&(this.targetObject=null),this;if(this._highestRenderOrderID=Number.MAX_SAFE_INTEGER,this._highestRenderObject=null,this._highestInputPriorityID=-1,this.game.input.interactiveItems.total>0){var d=this.game.input.interactiveItems.first;do d&&d.validForInput(this._highestInputPriorityID,this._highestRenderOrderID)&&(!c&&d.checkPointerOver(this)||c&&d.checkPointerDown(this))&&(this._highestRenderOrderID=d.sprite._cache[3],this._highestInputPriorityID=d.priorityID,this._highestRenderObject=d),d=this.game.input.interactiveItems.next;while(null!==d)}return null===this._highestRenderObject?this.targetObject&&(this.targetObject._pointerOutHandler(this),this.targetObject=null):null===this.targetObject?(this.targetObject=this._highestRenderObject,this._highestRenderObject._pointerOverHandler(this)):this.targetObject===this._highestRenderObject?this._highestRenderObject.update(this)===!1&&(this.targetObject=null):(this.targetObject._pointerOutHandler(this),this.targetObject=this._highestRenderObject,this.targetObject._pointerOverHandler(this)),this}},leave:function(a){this.withinGame=!1,this.move(a,!1)},stop:function(a){return this._stateReset?void a.preventDefault():(this.timeUp=this.game.time.now,(this.game.input.multiInputOverride==b.Input.MOUSE_OVERRIDES_TOUCH||this.game.input.multiInputOverride==b.Input.MOUSE_TOUCH_COMBINE||this.game.input.multiInputOverride==b.Input.TOUCH_OVERRIDES_MOUSE&&0===this.game.input.currentPointers)&&(this.game.input.onUp.dispatch(this,a),this.duration>=0&&this.duration<=this.game.input.tapRate&&(this.timeUp-this.previousTapTime0&&(this.active=!1),this.withinGame=!1,this.isDown=!1,this.isUp=!0,this.positionUp.setTo(this.x,this.y),this.isMouse===!1&&this.game.input.currentPointers--,this.game.input.interactiveItems.callAll("_releasedHandler",this),this.targetObject=null,this)},justPressed:function(a){return a=a||this.game.input.justPressedRate,this.isDown===!0&&this.timeDown+a>this.game.time.now},justReleased:function(a){return a=a||this.game.input.justReleasedRate,this.isUp===!0&&this.timeUp+a>this.game.time.now},reset:function(){this.isMouse===!1&&(this.active=!1),this.identifier=null,this.isDown=!1,this.isUp=!0,this.totalTouches=0,this._holdSent=!1,this._history.length=0,this._stateReset=!0,this.targetObject&&this.targetObject._releasedHandler(this),this.targetObject=null}},b.Pointer.prototype.constructor=b.Pointer,Object.defineProperty(b.Pointer.prototype,"duration",{get:function(){return this.isUp?-1:this.game.time.now-this.timeDown}}),Object.defineProperty(b.Pointer.prototype,"worldX",{get:function(){return this.game.world.camera.x+this.x}}),Object.defineProperty(b.Pointer.prototype,"worldY",{get:function(){return this.game.world.camera.y+this.y}}),b.Touch=function(a){this.game=a,this.disabled=!1,this.callbackContext=this.game,this.touchStartCallback=null,this.touchMoveCallback=null,this.touchEndCallback=null,this.touchEnterCallback=null,this.touchLeaveCallback=null,this.touchCancelCallback=null,this.preventDefault=!0,this.event=null,this._onTouchStart=null,this._onTouchMove=null,this._onTouchEnd=null,this._onTouchEnter=null,this._onTouchLeave=null,this._onTouchCancel=null,this._onTouchMove=null},b.Touch.prototype={start:function(){if(null===this._onTouchStart){var a=this;this.game.device.touch&&(this._onTouchStart=function(b){return a.onTouchStart(b)},this._onTouchMove=function(b){return a.onTouchMove(b)},this._onTouchEnd=function(b){return a.onTouchEnd(b)},this._onTouchEnter=function(b){return a.onTouchEnter(b)},this._onTouchLeave=function(b){return a.onTouchLeave(b)},this._onTouchCancel=function(b){return a.onTouchCancel(b)},this.game.canvas.addEventListener("touchstart",this._onTouchStart,!1),this.game.canvas.addEventListener("touchmove",this._onTouchMove,!1),this.game.canvas.addEventListener("touchend",this._onTouchEnd,!1),this.game.canvas.addEventListener("touchenter",this._onTouchEnter,!1),this.game.canvas.addEventListener("touchleave",this._onTouchLeave,!1),this.game.canvas.addEventListener("touchcancel",this._onTouchCancel,!1))}},consumeDocumentTouches:function(){this._documentTouchMove=function(a){a.preventDefault()},document.addEventListener("touchmove",this._documentTouchMove,!1)},onTouchStart:function(a){if(this.event=a,this.touchStartCallback&&this.touchStartCallback.call(this.callbackContext,a),!this.game.input.disabled&&!this.disabled){this.preventDefault&&a.preventDefault();for(var b=0;b0&&e>this.deadZone||0>e&&e<-this.deadZone?{axis:d,value:e}:{axis:d,value:0})}this._prevTimestamp=this._rawPad.timestamp}},connect:function(a){var b=!this._connected;this._index=a.index,this._connected=!0,this._rawPad=a,this._rawButtons=a.buttons,this._axes=a.axes,b&&this._padParent.onConnectCallback&&this._padParent.onConnectCallback.call(this._padParent.callbackContext,this._index),b&&this.onConnectCallback&&this.onConnectCallback.call(this.callbackContext)},disconnect:function(){var a=this._connected;this._connected=!1,this._rawPad=void 0,this._rawButtons=[],this._buttons=[];var b=this._index;this._index=null,a&&this._padParent.onDisconnectCallback&&this._padParent.onDisconnectCallback.call(this._padParent.callbackContext,b),a&&this.onDisconnectCallback&&this.onDisconnectCallback.call(this.callbackContext)},processAxisChange:function(a){this.game.input.disabled||this.game.input.gamepad.disabled||this._axes[a.axis]!==a.value&&(this._axes[a.axis]=a.value,this._padParent.onAxisCallback&&this._padParent.onAxisCallback.call(this._padParent.callbackContext,a,this._index),this.onAxisCallback&&this.onAxisCallback.call(this.callbackContext,a))},processButtonDown:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onDownCallback&&this._padParent.onDownCallback.call(this._padParent.callbackContext,a,b,this._index),this.onDownCallback&&this.onDownCallback.call(this.callbackContext,a,b),this._buttons[a]&&this._buttons[a].isDown?this._buttons[a].duration=this.game.time.now-this._buttons[a].timeDown:this._buttons[a]?(this._buttons[a].isDown=!0,this._buttons[a].timeDown=this.game.time.now,this._buttons[a].duration=0,this._buttons[a].value=b):this._buttons[a]={isDown:!0,timeDown:this.game.time.now,timeUp:0,duration:0,value:b},this._hotkeys[a]&&this._hotkeys[a].processButtonDown(b))},processButtonUp:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onUpCallback&&this._padParent.onUpCallback.call(this._padParent.callbackContext,a,b,this._index),this.onUpCallback&&this.onUpCallback.call(this.callbackContext,a,b),this._hotkeys[a]&&this._hotkeys[a].processButtonUp(b),this._buttons[a]?(this._buttons[a].isDown=!1,this._buttons[a].timeUp=this.game.time.now,this._buttons[a].value=b):this._buttons[a]={isDown:!1,timeDown:this.game.time.now,timeUp:this.game.time.now,duration:0,value:b})},processButtonFloat:function(a,b){this.game.input.disabled||this.game.input.gamepad.disabled||(this._padParent.onFloatCallback&&this._padParent.onFloatCallback.call(this._padParent.callbackContext,a,b,this._index),this.onFloatCallback&&this.onFloatCallback.call(this.callbackContext,a,b),this._buttons[a]?this._buttons[a].value=b:this._buttons[a]={value:b},this._hotkeys[a]&&this._hotkeys[a].processButtonFloat(b))},axis:function(a){return this._axes[a]?this._axes[a]:!1},isDown:function(a){return this._buttons[a]?this._buttons[a].isDown:!1},justReleased:function(a,b){return"undefined"==typeof b&&(b=250),this._buttons[a]&&this._buttons[a].isDown===!1&&this.game.time.now-this._buttons[a].timeUpd;d++)this._pointerData[d]={id:d,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1};this.snapOffset=new b.Point,this.enabled=!0,this._wasEnabled=!0,this.sprite.events&&null===this.sprite.events.onInputOver&&(this.sprite.events.onInputOver=new b.Signal,this.sprite.events.onInputOut=new b.Signal,this.sprite.events.onInputDown=new b.Signal,this.sprite.events.onInputUp=new b.Signal,this.sprite.events.onDragStart=new b.Signal,this.sprite.events.onDragStop=new b.Signal)}return this.sprite.events.onAddedToGroup.add(this.addedToGroup,this),this.sprite.events.onRemovedFromGroup.add(this.removedFromGroup,this),this.sprite},addedToGroup:function(){this._wasEnabled&&!this.enabled&&this.start()},removedFromGroup:function(){this.enabled?(this._wasEnabled=!0,this.stop()):this._wasEnabled=!1},reset:function(){this.enabled=!1;for(var a=0;10>a;a++)this._pointerData[a]={id:a,x:0,y:0,isDown:!1,isUp:!1,isOver:!1,isOut:!1,timeOver:0,timeOut:0,timeDown:0,timeUp:0,downDuration:0,isDragged:!1}},stop:function(){this.enabled!==!1&&(this.enabled=!1,this.game.input.interactiveItems.remove(this))},destroy:function(){this.sprite&&(this._setHandCursor&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1),this.enabled=!1,this.game.input.interactiveItems.remove(this),this._pointerData.length=0,this.boundsRect=null,this.boundsSprite=null,this.sprite=null)},validForInput:function(a,b){return 0===this.sprite.scale.x||0===this.sprite.scale.y?!1:this.pixelPerfectClick||this.pixelPerfectOver?!0:this.priorityID>a||this.priorityID===a&&this.sprite._cache[3]b;b++)if(this._pointerData[b].isOver)return!0}return!1},pointerOut:function(a){if(this.enabled){if("undefined"!=typeof a)return this._pointerData[a].isOut;for(var b=0;10>b;b++)if(this._pointerData[b].isOut)return!0}return!1},pointerTimeOver:function(a){return a=a||0,this._pointerData[a].timeOver},pointerTimeOut:function(a){return a=a||0,this._pointerData[a].timeOut},pointerDragged:function(a){return a=a||0,this._pointerData[a].isDragged},checkPointerDown:function(a){return this.enabled&&this.sprite&&this.sprite.parent&&this.sprite.visible&&this.sprite.parent.visible&&this.game.input.hitTest(this.sprite,a,this._tempPoint)?this.pixelPerfectClick?this.checkPixel(this._tempPoint.x,this._tempPoint.y):!0:!1},checkPointerOver:function(a){return this.enabled&&this.sprite&&this.sprite.parent&&this.sprite.visible&&this.sprite.parent.visible&&this.game.input.hitTest(this.sprite,a,this._tempPoint)?this.pixelPerfectOver?this.checkPixel(this._tempPoint.x,this._tempPoint.y):!0:!1},checkPixel:function(a,b,c){if(this.sprite.texture.baseTexture.source){if(this.game.input.hitContext.clearRect(0,0,1,1),null===a&&null===b){this.game.input.getLocalPosition(this.sprite,c,this._tempPoint);var a=this._tempPoint.x,b=this._tempPoint.y}0!==this.sprite.anchor.x&&(a-=-this.sprite.texture.frame.width*this.sprite.anchor.x),0!==this.sprite.anchor.y&&(b-=-this.sprite.texture.frame.height*this.sprite.anchor.y),a+=this.sprite.texture.frame.x,b+=this.sprite.texture.frame.y,this.game.input.hitContext.drawImage(this.sprite.texture.baseTexture.source,a,b,1,1,0,0,1,1);var d=this.game.input.hitContext.getImageData(0,0,1,1);if(d.data[3]>=this.pixelPerfectAlpha)return!0}return!1},update:function(a){return null!==this.sprite&&void 0!==this.sprite.parent?this.enabled&&this.sprite.visible&&this.sprite.parent.visible?this.draggable&&this._draggedPointerID==a.id?this.updateDrag(a):this._pointerData[a.id].isOver===!0?this.checkPointerOver(a)?(this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,!0):(this._pointerOutHandler(a),!1):void 0:(this._pointerOutHandler(a),!1):void 0},_pointerOverHandler:function(a){null!==this.sprite&&this._pointerData[a.id].isOver===!1&&(this._pointerData[a.id].isOver=!0,this._pointerData[a.id].isOut=!1,this._pointerData[a.id].timeOver=this.game.time.now,this._pointerData[a.id].x=a.x-this.sprite.x,this._pointerData[a.id].y=a.y-this.sprite.y,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.canvas.style.cursor="pointer",this._setHandCursor=!0),this.sprite&&this.sprite.events&&this.sprite.events.onInputOver.dispatch(this.sprite,a))},_pointerOutHandler:function(a){null!==this.sprite&&(this._pointerData[a.id].isOver=!1,this._pointerData[a.id].isOut=!0,this._pointerData[a.id].timeOut=this.game.time.now,this.useHandCursor&&this._pointerData[a.id].isDragged===!1&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1),this.sprite&&this.sprite.events&&this.sprite.events.onInputOut.dispatch(this.sprite,a))},_touchedHandler:function(a){if(null!==this.sprite){if(this._pointerData[a.id].isDown===!1&&this._pointerData[a.id].isOver===!0){if(this.pixelPerfectClick&&!this.checkPixel(null,null,a))return;this._pointerData[a.id].isDown=!0,this._pointerData[a.id].isUp=!1,this._pointerData[a.id].timeDown=this.game.time.now,this.sprite&&this.sprite.events&&this.sprite.events.onInputDown.dispatch(this.sprite,a),this.draggable&&this.isDragged===!1&&this.startDrag(a),this.bringToTop&&this.sprite.bringToTop()}return this.consumePointerEvent}},_releasedHandler:function(a){null!==this.sprite&&this._pointerData[a.id].isDown&&a.isUp&&(this._pointerData[a.id].isDown=!1,this._pointerData[a.id].isUp=!0,this._pointerData[a.id].timeUp=this.game.time.now,this._pointerData[a.id].downDuration=this._pointerData[a.id].timeUp-this._pointerData[a.id].timeDown,this.checkPointerOver(a)?this.sprite&&this.sprite.events&&this.sprite.events.onInputUp.dispatch(this.sprite,a,!0):(this.sprite&&this.sprite.events&&this.sprite.events.onInputUp.dispatch(this.sprite,a,!1),this.useHandCursor&&(this.game.canvas.style.cursor="default",this._setHandCursor=!1)),this.draggable&&this.isDragged&&this._draggedPointerID==a.id&&this.stopDrag(a))},updateDrag:function(a){return a.isUp?(this.stopDrag(a),!1):(this.sprite.fixedToCamera?(this.allowHorizontalDrag&&(this.sprite.cameraOffset.x=a.x+this._dragPoint.x+this.dragOffset.x),this.allowVerticalDrag&&(this.sprite.cameraOffset.y=a.y+this._dragPoint.y+this.dragOffset.y),this.boundsRect&&this.checkBoundsRect(),this.boundsSprite&&this.checkBoundsSprite(),this.snapOnDrag&&(this.sprite.cameraOffset.x=Math.round((this.sprite.cameraOffset.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.cameraOffset.y=Math.round((this.sprite.cameraOffset.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)):(this.allowHorizontalDrag&&(this.sprite.x=a.x+this._dragPoint.x+this.dragOffset.x),this.allowVerticalDrag&&(this.sprite.y=a.y+this._dragPoint.y+this.dragOffset.y),this.boundsRect&&this.checkBoundsRect(),this.boundsSprite&&this.checkBoundsSprite(),this.snapOnDrag&&(this.sprite.x=Math.round((this.sprite.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.y=Math.round((this.sprite.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)),!0)},justOver:function(a,b){return a=a||0,b=b||500,this._pointerData[a].isOver&&this.overDuration(a)a;a++)this._pointerData[a].isDragged=!1;this.draggable=!1,this.isDragged=!1,this._draggedPointerID=-1},startDrag:function(a){if(this.isDragged=!0,this._draggedPointerID=a.id,this._pointerData[a.id].isDragged=!0,this.sprite.fixedToCamera)this.dragFromCenter?(this.sprite.centerOn(a.x,a.y),this._dragPoint.setTo(this.sprite.cameraOffset.x-a.x,this.sprite.cameraOffset.y-a.y)):this._dragPoint.setTo(this.sprite.cameraOffset.x-a.x,this.sprite.cameraOffset.y-a.y);else if(this.dragFromCenter){var b=this.sprite.getBounds();this.sprite.x=a.x+(this.sprite.x-b.centerX),this.sprite.y=a.y+(this.sprite.y-b.centerY),this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y)}else this._dragPoint.setTo(this.sprite.x-a.x,this.sprite.y-a.y);this.updateDrag(a),this.bringToTop&&this.sprite.bringToTop(),this.sprite.events.onDragStart.dispatch(this.sprite,a)},stopDrag:function(a){this.isDragged=!1,this._draggedPointerID=-1,this._pointerData[a.id].isDragged=!1,this.snapOnRelease&&(this.sprite.fixedToCamera?(this.sprite.cameraOffset.x=Math.round((this.sprite.cameraOffset.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.cameraOffset.y=Math.round((this.sprite.cameraOffset.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY):(this.sprite.x=Math.round((this.sprite.x-this.snapOffsetX%this.snapX)/this.snapX)*this.snapX+this.snapOffsetX%this.snapX,this.sprite.y=Math.round((this.sprite.y-this.snapOffsetY%this.snapY)/this.snapY)*this.snapY+this.snapOffsetY%this.snapY)),this.sprite.events.onDragStop.dispatch(this.sprite,a),this.checkPointerOver(a)===!1&&this._pointerOutHandler(a)},setDragLock:function(a,b){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=!0),this.allowHorizontalDrag=a,this.allowVerticalDrag=b},enableSnap:function(a,b,c,d,e,f){"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=0),this.snapX=a,this.snapY=b,this.snapOffsetX=e,this.snapOffsetY=f,this.snapOnDrag=c,this.snapOnRelease=d},disableSnap:function(){this.snapOnDrag=!1,this.snapOnRelease=!1},checkBoundsRect:function(){this.sprite.fixedToCamera?(this.sprite.cameraOffset.xthis.boundsRect.right&&(this.sprite.cameraOffset.x=this.boundsRect.right-this.sprite.width),this.sprite.cameraOffset.ythis.boundsRect.bottom&&(this.sprite.cameraOffset.y=this.boundsRect.bottom-this.sprite.height)):(this.sprite.xthis.boundsRect.right&&(this.sprite.x=this.boundsRect.right-this.sprite.width),this.sprite.ythis.boundsRect.bottom&&(this.sprite.y=this.boundsRect.bottom-this.sprite.height))},checkBoundsSprite:function(){this.sprite.fixedToCamera&&this.boundsSprite.fixedToCamera?(this.sprite.cameraOffset.xthis.boundsSprite.camerOffset.x+this.boundsSprite.width&&(this.sprite.cameraOffset.x=this.boundsSprite.camerOffset.x+this.boundsSprite.width-this.sprite.width),this.sprite.cameraOffset.ythis.boundsSprite.camerOffset.y+this.boundsSprite.height&&(this.sprite.cameraOffset.y=this.boundsSprite.camerOffset.y+this.boundsSprite.height-this.sprite.height)):(this.sprite.xthis.boundsSprite.x+this.boundsSprite.width&&(this.sprite.x=this.boundsSprite.x+this.boundsSprite.width-this.sprite.width),this.sprite.ythis.boundsSprite.y+this.boundsSprite.height&&(this.sprite.y=this.boundsSprite.y+this.boundsSprite.height-this.sprite.height))}},b.InputHandler.prototype.constructor=b.InputHandler,b.Events=function(a){this.parent=a,this.onAddedToGroup=new b.Signal,this.onRemovedFromGroup=new b.Signal,this.onKilled=new b.Signal,this.onRevived=new b.Signal,this.onOutOfBounds=new b.Signal,this.onEnterBounds=new b.Signal,this.onInputOver=null,this.onInputOut=null,this.onInputDown=null,this.onInputUp=null,this.onDragStart=null,this.onDragStop=null,this.onAnimationStart=null,this.onAnimationComplete=null,this.onAnimationLoop=null +},b.Events.prototype={destroy:function(){this.parent=null,this.onAddedToGroup.dispose(),this.onRemovedFromGroup.dispose(),this.onKilled.dispose(),this.onRevived.dispose(),this.onOutOfBounds.dispose(),this.onInputOver&&(this.onInputOver.dispose(),this.onInputOut.dispose(),this.onInputDown.dispose(),this.onInputUp.dispose(),this.onDragStart.dispose(),this.onDragStop.dispose()),this.onAnimationStart&&(this.onAnimationStart.dispose(),this.onAnimationComplete.dispose(),this.onAnimationLoop.dispose())}},b.Events.prototype.constructor=b.Events,b.GameObjectFactory=function(a){this.game=a,this.world=this.game.world},b.GameObjectFactory.prototype={existing:function(a){return this.world.add(a)},image:function(a,c,d,e,f){return"undefined"==typeof f&&(f=this.world),f.add(new b.Image(this.game,a,c,d,e))},sprite:function(a,b,c,d,e){return"undefined"==typeof e&&(e=this.world),e.create(a,b,c,d)},tween:function(a){return this.game.tweens.create(a)},group:function(a,c,d,e,f){return new b.Group(this.game,a,c,d,e,f)},physicsGroup:function(a,c,d,e){return new b.Group(this.game,c,d,e,!0,a)},spriteBatch:function(a,c,d){return"undefined"==typeof c&&(c="group"),"undefined"==typeof d&&(d=!1),new b.SpriteBatch(this.game,a,c,d)},audio:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},sound:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},tileSprite:function(a,c,d,e,f,g,h){return"undefined"==typeof h&&(h=this.world),h.add(new b.TileSprite(this.game,a,c,d,e,f,g))},text:function(a,c,d,e,f){return"undefined"==typeof f&&(f=this.world),f.add(new b.Text(this.game,a,c,d,e))},button:function(a,c,d,e,f,g,h,i,j,k){return"undefined"==typeof k&&(k=this.world),k.add(new b.Button(this.game,a,c,d,e,f,g,h,i,j))},graphics:function(a,c,d){return"undefined"==typeof d&&(d=this.world),d.add(new b.Graphics(this.game,a,c))},emitter:function(a,c,d){return this.game.particles.add(new b.Particles.Arcade.Emitter(this.game,a,c,d))},retroFont:function(a,c,d,e,f,g,h,i,j){return new b.RetroFont(this.game,a,c,d,e,f,g,h,i,j)},bitmapText:function(a,c,d,e,f,g){return"undefined"==typeof g&&(g=this.world),g.add(new b.BitmapText(this.game,a,c,d,e,f))},tilemap:function(a,c,d,e,f){return new b.Tilemap(this.game,a,c,d,e,f)},renderTexture:function(a,c,d,e){("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid()),"undefined"==typeof e&&(e=!1);var f=new b.RenderTexture(this.game,a,c,d);return e&&this.game.cache.addRenderTexture(d,f),f},bitmapData:function(a,c,d,e){"undefined"==typeof e&&(e=!1),("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid());var f=new b.BitmapData(this.game,d,a,c);return e&&this.game.cache.addBitmapData(d,f),f},filter:function(a){var c=Array.prototype.splice.call(arguments,1),a=new b.Filter[a](this.game);return a.init.apply(a,c),a}},b.GameObjectFactory.prototype.constructor=b.GameObjectFactory,b.GameObjectCreator=function(a){this.game=a,this.world=this.game.world},b.GameObjectCreator.prototype={image:function(a,c,d,e){return new b.Image(this.game,a,c,d,e)},sprite:function(a,c,d,e){return new b.Sprite(this.game,a,c,d,e)},tween:function(a){return new b.Tween(a,this.game)},group:function(a,c,d,e,f){return new b.Group(this.game,null,c,d,e,f)},spriteBatch:function(a,c,d){return"undefined"==typeof c&&(c="group"),"undefined"==typeof d&&(d=!1),new b.SpriteBatch(this.game,a,c,d)},audio:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},sound:function(a,b,c,d){return this.game.sound.add(a,b,c,d)},tileSprite:function(a,c,d,e,f,g){return new b.TileSprite(this.game,a,c,d,e,f,g)},text:function(a,c,d,e){return new b.Text(this.game,a,c,d,e)},button:function(a,c,d,e,f,g,h,i,j){return new b.Button(this.game,a,c,d,e,f,g,h,i,j)},graphics:function(a,c){return new b.Graphics(this.game,a,c)},emitter:function(a,c,d){return new b.Particles.Arcade.Emitter(this.game,a,c,d)},retroFont:function(a,c,d,e,f,g,h,i,j){return new b.RetroFont(this.game,a,c,d,e,f,g,h,i,j)},bitmapText:function(a,c,d,e,f){return new b.BitmapText(this.game,a,c,d,e,f)},tilemap:function(a,c,d,e,f){return new b.Tilemap(this.game,a,c,d,e,f)},renderTexture:function(a,c,d,e){("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid()),"undefined"==typeof e&&(e=!1);var f=new b.RenderTexture(this.game,a,c,d);return e&&this.game.cache.addRenderTexture(d,f),f},bitmapData:function(a,c,d,e){"undefined"==typeof e&&(e=!1),("undefined"==typeof d||""===d)&&(d=this.game.rnd.uuid());var f=new b.BitmapData(this.game,d,a,c);return e&&this.game.cache.addBitmapData(d,f),f},filter:function(a){var c=Array.prototype.splice.call(arguments,1),a=new b.Filter[a](this.game);return a.init.apply(a,c),a}},b.GameObjectCreator.prototype.constructor=b.GameObjectCreator,b.BitmapData=function(a,c,d,e){"undefined"==typeof d&&(d=100),"undefined"==typeof e&&(e=100),this.game=a,this.key=c,this.width=d,this.height=e,this.canvas=b.Canvas.create(d,e,"",!0),this.context=this.canvas.getContext("2d"),this.ctx=this.context,this.imageData=this.context.getImageData(0,0,d,e),this.data=this.imageData.data,this.pixels=null,this.imageData.data.buffer?(this.buffer=this.imageData.data.buffer,this.pixels=new Uint32Array(this.buffer)):window.ArrayBuffer?(this.buffer=new ArrayBuffer(this.imageData.data.length),this.pixels=new Uint32Array(this.buffer)):this.pixels=this.imageData.data,this.baseTexture=new PIXI.BaseTexture(this.canvas),this.texture=new PIXI.Texture(this.baseTexture),this.textureFrame=new b.Frame(0,0,0,d,e,"bitmapData",a.rnd.uuid()),this.type=b.BITMAPDATA,this.disableTextureUpload=!1,this.dirty=!1,this.cls=this.clear,this.update=this.refreshBuffer,this._tempR=0,this._tempG=0,this._tempB=0},b.BitmapData.prototype={add:function(a){if(Array.isArray(a))for(var b=0;bm;m++)for(var n=d;h>n;n++)b.Color.unpackPixel(this.getPixel32(n,m),j),k=a.call(c,j,n,m),k!==!1&&null!==k&&(this.setPixel32(n,m,k.r,k.g,k.b,k.a,!1),l=!0);l&&(this.context.putImageData(this.imageData,0,0),this.dirty=!0)},processPixel:function(a,b,c,d,e,f){"undefined"==typeof c&&(c=0),"undefined"==typeof d&&(d=0),"undefined"==typeof e&&(e=this.width),"undefined"==typeof f&&(f=this.height);for(var g=c+e,h=d+f,i=0,j=0,k=!1,l=d;h>l;l++)for(var m=c;g>m;m++)i=this.getPixel32(m,l),j=a.call(b,i,m,l),j!==i&&(this.pixels[l*this.width+m]=j,k=!0);k&&(this.context.putImageData(this.imageData,0,0),this.dirty=!0)},replaceRGB:function(a,c,d,e,f,g,h,i,j){var k=0,l=0,m=this.width,n=this.height,o=b.Color.packPixel(a,c,d,e);void 0!==j&&j instanceof b.Rectangle&&(k=j.x,l=j.y,m=j.width,n=j.height);for(var p=0;n>p;p++)for(var q=0;m>q;q++)this.getPixel32(k+q,l+p)===o&&this.setPixel32(k+q,l+p,f,g,h,i,!1);this.context.putImageData(this.imageData,0,0),this.dirty=!0},setHSL:function(a,c,d,e){if(("undefined"==typeof a||null===a)&&(a=!1),("undefined"==typeof c||null===c)&&(c=!1),("undefined"==typeof d||null===d)&&(d=!1),a||c||d){"undefined"==typeof e&&(e=new b.Rectangle(0,0,this.width,this.height));for(var f=b.Color.createColor(),g=e.y;g=0&&a<=this.width&&c>=0&&c<=this.height&&(this.pixels[c*this.width+a]=b.Device.LITTLE_ENDIAN?g<<24|f<<16|e<<8|d:d<<24|e<<16|f<<8|g,h&&(this.context.putImageData(this.imageData,0,0),this.dirty=!0))},setPixel:function(a,b,c,d,e,f){this.setPixel32(a,b,c,d,e,255,f)},getPixel:function(a,c,d){d||(d=b.Color.createColor());var e=~~(a+c*this.width);return e*=4,this.data[e]&&(d.r=this.data[e],d.g=this.data[++e],d.b=this.data[++e],d.a=this.data[++e]),d},getPixel32:function(a,b){return a>=0&&a<=this.width&&b>=0&&b<=this.height?this.pixels[b*this.width+a]:void 0},getPixelRGB:function(a,c,d,e,f){return b.Color.unpackPixel(this.getPixel32(a,c),d,e,f)},getPixels:function(a){return this.context.getImageData(a.x,a.y,a.width,a.height)},copyPixels:function(a,b,c,d){"string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,b.x,b.y,b.width,b.height,c,d,b.width,b.height),this.dirty=!0},draw:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),"string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,0,0,a.width,a.height,b,c,a.width,a.height),this.dirty=!0},drawSprite:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0);var d=a.texture.frame;this.context.drawImage(a.texture.baseTexture.source,d.x,d.y,d.width,d.height,b,c,d.width,d.height),this.dirty=!0},alphaMask:function(a,b){var c=this.context.globalCompositeOperation;"string"==typeof b&&(b=this.game.cache.getImage(b)),b&&this.context.drawImage(b,0,0),this.context.globalCompositeOperation="source-atop","string"==typeof a&&(a=this.game.cache.getImage(a)),a&&this.context.drawImage(a,0,0),this.context.globalCompositeOperation=c,this.dirty=!0},extract:function(a,b,c,d,e){return"undefined"==typeof e&&(e=255),this.processPixelRGB(function(f,g,h){return f.r===b&&f.g===c&&f.b===d&&a.setPixel32(g,h,b,c,d,e,!1),!1},this),a.context.putImageData(a.imageData,0,0),a.dirty=!0,a},circle:function(a,b,c,d){"undefined"!=typeof d&&(this.context.fillStyle=d),this.context.beginPath(),this.context.arc(a,b,c,0,2*Math.PI,!1),this.context.closePath(),this.context.fill()},render:function(){!this.disableTextureUpload&&this.game.renderType===b.WEBGL&&this.dirty&&(PIXI.updateWebGLTexture(this.baseTexture,this.game.renderer.gl),this.dirty=!1)}},b.BitmapData.prototype.constructor=b.BitmapData,b.Sprite=function(a,c,d,e,f){c=c||0,d=d||0,e=e||null,f=f||null,this.game=a,this.name="",this.type=b.SPRITE,this.z=0,this.events=new b.Events(this),this.animations=new b.AnimationManager(this),this.key=e,this._frame=0,this._frameName="",PIXI.Sprite.call(this,PIXI.TextureCache.__default),this.loadTexture(e,f),this.position.set(c,d),this.world=new b.Point(c,d),this.autoCull=!1,this.input=null,this.body=null,this.health=1,this.lifespan=0,this.checkWorldBounds=!1,this.outOfBoundsKill=!1,this.debug=!1,this.cameraOffset=new b.Point,this._cache=[0,0,0,0,1,0,1,0,0],this._bounds=new b.Rectangle},b.Sprite.prototype=Object.create(PIXI.Sprite.prototype),b.Sprite.prototype.constructor=b.Sprite,b.Sprite.prototype.preUpdate=function(){if(1===this._cache[4]&&this.exists)return this.world.setTo(this.parent.position.x+this.position.x,this.parent.position.y+this.position.y),this.worldTransform.tx=this.world.x,this.worldTransform.ty=this.world.y,this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,this.body&&this.body.preUpdate(),this._cache[4]=0,!1;if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this._cache[3]=-1,!1;if(this.lifespan>0&&(this.lifespan-=this.game.time.elapsed,this.lifespan<=0))return this.kill(),!1;if((this.autoCull||this.checkWorldBounds)&&this._bounds.copyFrom(this.getBounds()),this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this._bounds)),this.checkWorldBounds)if(1===this._cache[5]&&this.game.world.bounds.intersects(this._bounds))this._cache[5]=0,this.events.onEnterBounds.dispatch(this);else if(0===this._cache[5]&&!this.game.world.bounds.intersects(this._bounds)&&(this._cache[5]=1,this.events.onOutOfBounds.dispatch(this),this.outOfBoundsKill))return this.kill(),!1;this.world.setTo(this.game.camera.x+this.worldTransform.tx,this.game.camera.y+this.worldTransform.ty),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++),this.animations.update(),this.body&&this.body.preUpdate();for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Sprite.prototype.update=function(){},b.Sprite.prototype.postUpdate=function(){this.key instanceof b.BitmapData&&this.key.render(),this.exists&&this.body&&this.body.postUpdate(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,c=this.children.length;c>a;a++)this.children[a].postUpdate()},b.Sprite.prototype.loadTexture=function(a,c){return c=c||0,a instanceof b.RenderTexture?(this.key=a.key,void this.setTexture(a)):a instanceof b.BitmapData?(this.key=a,void this.setTexture(a.texture)):a instanceof PIXI.Texture?(this.key=a,void this.setTexture(a)):null===a||"undefined"==typeof a?(this.key="__default",void this.setTexture(PIXI.TextureCache[this.key])):"string"!=typeof a||this.game.cache.checkImageKey(a)?this.game.cache.isSpriteSheet(a)?(this.key=a,this.animations.loadFrameData(this.game.cache.getFrameData(a)),"string"==typeof c?this.frameName=c:this.frame=c,void 0):(this.key=a,void this.setTexture(PIXI.TextureCache[a])):(this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]))},b.Sprite.prototype.crop=function(a){if("undefined"==typeof a||null===a)this.texture.hasOwnProperty("sourceWidth")&&this.texture.setFrame(new b.Rectangle(0,0,this.texture.sourceWidth,this.texture.sourceHeight));else if(this.texture instanceof PIXI.Texture){var c={};b.Utils.extend(!0,c,this.texture),c.sourceWidth=c.width,c.sourceHeight=c.height,c.frame=a,c.width=a.width,c.height=a.height,this.texture=c,this.texture.updateFrame=!0,PIXI.Texture.frameUpdates.push(this.texture)}else this.texture.setFrame(a)},b.Sprite.prototype.revive=function(a){return"undefined"==typeof a&&(a=1),this.alive=!0,this.exists=!0,this.visible=!0,this.health=a,this.events&&this.events.onRevived.dispatch(this),this},b.Sprite.prototype.kill=function(){return this.alive=!1,this.exists=!1,this.visible=!1,this.events&&this.events.onKilled.dispatch(this),this},b.Sprite.prototype.destroy=function(a){if(null!==this.game&&1!==this._cache[8]){"undefined"==typeof a&&(a=!0),this._cache[8]=1,this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.input&&this.input.destroy(),this.animations&&this.animations.destroy(),this.body&&this.body.destroy(),this.events&&this.events.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.alive=!1,this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null,this._cache[8]=0}},b.Sprite.prototype.damage=function(a){return this.alive&&(this.health-=a,this.health<=0&&this.kill()),this},b.Sprite.prototype.reset=function(a,b,c){return"undefined"==typeof c&&(c=1),this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.health=c,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this},b.Sprite.prototype.bringToTop=function(){return this.parent&&this.parent.bringToTop(this),this},b.Sprite.prototype.play=function(a,b,c,d){return this.animations?this.animations.play(a,b,c,d):void 0},b.Sprite.prototype.overlap=function(a){return b.Rectangle.intersects(this.getBounds(),a.getBounds())},Object.defineProperty(b.Sprite.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.Sprite.prototype,"deltaX",{get:function(){return this.world.x-this._cache[0]}}),Object.defineProperty(b.Sprite.prototype,"deltaY",{get:function(){return this.world.y-this._cache[1]}}),Object.defineProperty(b.Sprite.prototype,"deltaZ",{get:function(){return this.rotation-this._cache[2]}}),Object.defineProperty(b.Sprite.prototype,"inWorld",{get:function(){return this.game.world.bounds.intersects(this.getBounds())}}),Object.defineProperty(b.Sprite.prototype,"inCamera",{get:function(){return this.game.world.camera.screenView.intersects(this.getBounds())}}),Object.defineProperty(b.Sprite.prototype,"frame",{get:function(){return this.animations.frame},set:function(a){this.animations.frame=a}}),Object.defineProperty(b.Sprite.prototype,"frameName",{get:function(){return this.animations.frameName},set:function(a){this.animations.frameName=a}}),Object.defineProperty(b.Sprite.prototype,"renderOrderID",{get:function(){return this._cache[3]}}),Object.defineProperty(b.Sprite.prototype,"inputEnabled",{get:function(){return this.input&&this.input.enabled},set:function(a){a?null===this.input?(this.input=new b.InputHandler(this),this.input.start()):this.input&&!this.input.enabled&&this.input.start():this.input&&this.input.enabled&&this.input.stop()}}),Object.defineProperty(b.Sprite.prototype,"exists",{get:function(){return!!this._cache[6]},set:function(a){a?(this._cache[6]=1,this.body&&this.body.type===b.Physics.P2JS&&this.body.addToWorld(),this.visible=!0):(this._cache[6]=0,this.body&&this.body.type===b.Physics.P2JS&&this.body.removeFromWorld(),this.visible=!1)}}),Object.defineProperty(b.Sprite.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),Object.defineProperty(b.Sprite.prototype,"smoothed",{get:function(){return!this.texture.baseTexture.scaleMode},set:function(a){a?this.texture&&(this.texture.baseTexture.scaleMode=0):this.texture&&(this.texture.baseTexture.scaleMode=1)}}),Object.defineProperty(b.Sprite.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.Sprite.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.Sprite.prototype,"destroyPhase",{get:function(){return!!this._cache[8]}}),b.Image=function(a,c,d,e,f){c=c||0,d=d||0,e=e||null,f=f||null,this.game=a,this.exists=!0,this.name="",this.type=b.IMAGE,this.z=0,this.events=new b.Events(this),this.key=e,this._frame=0,this._frameName="",PIXI.Sprite.call(this,PIXI.TextureCache.__default),this.loadTexture(e,f),this.position.set(c,d),this.world=new b.Point(c,d),this.autoCull=!1,this.input=null,this.cameraOffset=new b.Point,this._cache=[0,0,0,0,1,0,1,0,0]},b.Image.prototype=Object.create(PIXI.Sprite.prototype),b.Image.prototype.constructor=b.Image,b.Image.prototype.preUpdate=function(){if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this._cache[3]=-1,!1;this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this.getBounds())),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++);for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Image.prototype.update=function(){},b.Image.prototype.postUpdate=function(){this.key instanceof b.BitmapData&&this.key.render(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,c=this.children.length;c>a;a++)this.children[a].postUpdate()},b.Image.prototype.loadTexture=function(a,c){if(c=c||0,a instanceof b.RenderTexture)return this.key=a.key,void this.setTexture(a);if(a instanceof b.BitmapData)return this.key=a,void this.setTexture(a.texture);if(a instanceof PIXI.Texture)return this.key=a,void this.setTexture(a);if(null===a||"undefined"==typeof a)return this.key="__default",void this.setTexture(PIXI.TextureCache[this.key]);if("string"==typeof a&&!this.game.cache.checkImageKey(a))return this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]);if(this.game.cache.isSpriteSheet(a)){this.key=a;var d=this.game.cache.getFrameData(a);return"string"==typeof c?(this._frame=0,this._frameName=c,void this.setTexture(PIXI.TextureCache[d.getFrameByName(c).uuid])):(this._frame=c,this._frameName="",void this.setTexture(PIXI.TextureCache[d.getFrame(c).uuid]))}return this.key=a,void this.setTexture(PIXI.TextureCache[a])},b.Image.prototype.crop=function(a){if("undefined"==typeof a||null===a)this.texture.hasOwnProperty("sourceWidth")&&this.texture.setFrame(new b.Rectangle(0,0,this.texture.sourceWidth,this.texture.sourceHeight));else if(this.texture instanceof PIXI.Texture){var c={};b.Utils.extend(!0,c,this.texture),c.sourceWidth=c.width,c.sourceHeight=c.height,c.frame=a,c.width=a.width,c.height=a.height,this.texture=c,this.texture.updateFrame=!0,PIXI.Texture.frameUpdates.push(this.texture)}else this.texture.setFrame(a)},b.Image.prototype.revive=function(){return this.alive=!0,this.exists=!0,this.visible=!0,this.events&&this.events.onRevived.dispatch(this),this},b.Image.prototype.kill=function(){return this.alive=!1,this.exists=!1,this.visible=!1,this.events&&this.events.onKilled.dispatch(this),this},b.Image.prototype.destroy=function(a){if(null!==this.game&&!this.destroyPhase){"undefined"==typeof a&&(a=!0),this._cache[8]=1,this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.events&&this.events.destroy(),this.input&&this.input.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.alive=!1,this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null,this._cache[8]=0}},b.Image.prototype.reset=function(a,b){return this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this},b.Image.prototype.bringToTop=function(){return this.parent&&this.parent.bringToTop(this),this},Object.defineProperty(b.Image.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.Image.prototype,"deltaX",{get:function(){return this.world.x-this._cache[0]}}),Object.defineProperty(b.Image.prototype,"deltaY",{get:function(){return this.world.y-this._cache[1]}}),Object.defineProperty(b.Image.prototype,"deltaZ",{get:function(){return this.rotation-this._cache[2]}}),Object.defineProperty(b.Image.prototype,"inWorld",{get:function(){return this.game.world.bounds.intersects(this.getBounds())}}),Object.defineProperty(b.Image.prototype,"inCamera",{get:function(){return this.game.world.camera.screenView.intersects(this.getBounds())}}),Object.defineProperty(b.Image.prototype,"frame",{get:function(){return this._frame},set:function(a){if(a!==this.frame&&this.game.cache.isSpriteSheet(this.key)){var b=this.game.cache.getFrameData(this.key);b&&aa;a++)this.children[a].preUpdate();return!0},b.TileSprite.prototype.update=function(){},b.TileSprite.prototype.postUpdate=function(){this.exists&&this.body&&this.body.postUpdate(),1===this._cache[7]&&(this.position.x=this.game.camera.view.x+this.cameraOffset.x,this.position.y=this.game.camera.view.y+this.cameraOffset.y);for(var a=0,b=this.children.length;b>a;a++)this.children[a].postUpdate()},b.TileSprite.prototype.autoScroll=function(a,b){this._scroll.set(a,b)},b.TileSprite.prototype.stopScroll=function(){this._scroll.set(0,0)},b.TileSprite.prototype.loadTexture=function(a,c){return c=c||0,a instanceof b.RenderTexture?(this.key=a.key,void this.setTexture(a)):a instanceof b.BitmapData?(this.key=a,void this.setTexture(a.texture)):a instanceof PIXI.Texture?(this.key=a,void this.setTexture(a)):null===a||"undefined"==typeof a?(this.key="__default",void this.setTexture(PIXI.TextureCache[this.key])):"string"!=typeof a||this.game.cache.checkImageKey(a)?this.game.cache.isSpriteSheet(a)?(this.key=a,this.animations.loadFrameData(this.game.cache.getFrameData(a)),"string"==typeof c?this.frameName=c:this.frame=c,void 0):(this.key=a,void this.setTexture(PIXI.TextureCache[a])):(this.key="__missing",void this.setTexture(PIXI.TextureCache[this.key]))},b.TileSprite.prototype.destroy=function(a){if(null!==this.game&&!this.destroyPhase){"undefined"==typeof a&&(a=!0),this._cache[8]=1,this.filters&&(this.filters=null),this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.animations.destroy(),this.events.destroy();var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null,this._cache[8]=0}},b.TileSprite.prototype.play=function(a,b,c,d){return this.animations.play(a,b,c,d)},b.TileSprite.prototype.reset=function(a,b){return this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.tilePosition.x=0,this.tilePosition.y=0,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this},Object.defineProperty(b.TileSprite.prototype,"angle",{get:function(){return b.Math.wrapAngle(b.Math.radToDeg(this.rotation))},set:function(a){this.rotation=b.Math.degToRad(b.Math.wrapAngle(a))}}),Object.defineProperty(b.TileSprite.prototype,"frame",{get:function(){return this.animations.frame},set:function(a){a!==this.animations.frame&&(this.animations.frame=a)}}),Object.defineProperty(b.TileSprite.prototype,"frameName",{get:function(){return this.animations.frameName},set:function(a){a!==this.animations.frameName&&(this.animations.frameName=a)}}),Object.defineProperty(b.TileSprite.prototype,"fixedToCamera",{get:function(){return!!this._cache[7]},set:function(a){a?(this._cache[7]=1,this.cameraOffset.set(this.x,this.y)):this._cache[7]=0}}),Object.defineProperty(b.TileSprite.prototype,"exists",{get:function(){return!!this._cache[6]},set:function(a){a?(this._cache[6]=1,this.body&&this.body.type===b.Physics.P2JS&&this.body.addToWorld(),this.visible=!0):(this._cache[6]=0,this.body&&this.body.type===b.Physics.P2JS&&(this.body.safeRemove=!0),this.visible=!1)}}),Object.defineProperty(b.TileSprite.prototype,"inputEnabled",{get:function(){return this.input&&this.input.enabled},set:function(a){a?null===this.input?(this.input=new b.InputHandler(this),this.input.start()):this.input&&!this.input.enabled&&this.input.start():this.input&&this.input.enabled&&this.input.stop()}}),Object.defineProperty(b.TileSprite.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.TileSprite.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a,this.body&&this.body.type===b.Physics.ARCADE&&2===this.body.phase&&(this.body._reset=1)}}),Object.defineProperty(b.TileSprite.prototype,"destroyPhase",{get:function(){return!!this._cache[8] +}}),b.Text=function(a,c,d,e,f){c=c||0,d=d||0,e=e||" ",f=f||{},e=0===e.length?" ":e.toString(),this.game=a,this.exists=!0,this.name="",this.type=b.TEXT,this.z=0,this.world=new b.Point(c,d),this._text=e,this._font="",this._fontSize=32,this._fontWeight="normal",this._lineSpacing=0,this.events=new b.Events(this),this.input=null,this.cameraOffset=new b.Point,this.setStyle(f),PIXI.Text.call(this,e,this.style),this.position.set(c,d),this._cache=[0,0,0,0,1,0,1,0,0]},b.Text.prototype=Object.create(PIXI.Text.prototype),b.Text.prototype.constructor=b.Text,b.Text.prototype.preUpdate=function(){if(this._cache[0]=this.world.x,this._cache[1]=this.world.y,this._cache[2]=this.rotation,!this.exists||!this.parent.exists)return this.renderOrderID=-1,!1;this.autoCull&&(this.renderable=this.game.world.camera.screenView.intersects(this.getBounds())),this.world.setTo(this.game.camera.x+this.worldTransform[2],this.game.camera.y+this.worldTransform[5]),this.visible&&(this._cache[3]=this.game.stage.currentRenderOrderID++);for(var a=0,b=this.children.length;b>a;a++)this.children[a].preUpdate();return!0},b.Text.prototype.update=function(){},b.Text.prototype.postUpdate=function(){1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y);for(var a=0,b=this.children.length;b>a;a++)this.children[a].postUpdate()},b.Text.prototype.destroy=function(a){if(null!==this.game&&!this.destroyPhase){"undefined"==typeof a&&(a=!0),this._cache[8]=1,this.parent&&(this.parent instanceof b.Group?this.parent.remove(this):this.parent.removeChild(this)),this.texture.destroy(),this.canvas.parentNode?this.canvas.parentNode.removeChild(this.canvas):(this.canvas=null,this.context=null);var c=this.children.length;if(a)for(;c--;)this.children[c].destroy(a);else for(;c--;)this.removeChild(this.children[c]);this.exists=!1,this.visible=!1,this.filters=null,this.mask=null,this.game=null,this._cache[8]=0}},b.Text.prototype.setShadow=function(a,b,c,d){this.style.shadowOffsetX=a||0,this.style.shadowOffsetY=b||0,this.style.shadowColor=c||"rgba(0,0,0,0)",this.style.shadowBlur=d||0,this.dirty=!0},b.Text.prototype.setStyle=function(a){a=a||{},a.font=a.font||"bold 20pt Arial",a.fill=a.fill||"black",a.align=a.align||"left",a.stroke=a.stroke||"black",a.strokeThickness=a.strokeThickness||0,a.wordWrap=a.wordWrap||!1,a.wordWrapWidth=a.wordWrapWidth||100,a.shadowOffsetX=a.shadowOffsetX||0,a.shadowOffsetY=a.shadowOffsetY||0,a.shadowColor=a.shadowColor||"rgba(0,0,0,0)",a.shadowBlur=a.shadowBlur||0,this.style=a,this.dirty=!0},b.Text.prototype.updateText=function(){this.context.font=this.style.font;var a=this.text;this.style.wordWrap&&(a=this.runWordWrap(this.text));for(var b=a.split(/(?:\r\n|\r|\n)/),c=[],d=0,e=0;ee?(g>0&&(b+="\n"),b+=f[g]+" ",e=this.style.wordWrapWidth-h):(e-=i,b+=f[g]+" ")}d?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",b.RetroFont.TEXT_SET2=" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET3="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ",b.RetroFont.TEXT_SET4="ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789",b.RetroFont.TEXT_SET5="ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/() '!?-*:0123456789",b.RetroFont.TEXT_SET6="ABCDEFGHIJKLMNOPQRSTUVWXYZ!?:;0123456789\"(),-.' ",b.RetroFont.TEXT_SET7="AGMSY+:4BHNTZ!;5CIOU.?06DJPV,(17EKQW\")28FLRX-'39",b.RetroFont.TEXT_SET8="0123456789 .ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET9="ABCDEFGHIJKLMNOPQRSTUVWXYZ()-0123456789.:,'\"?!",b.RetroFont.TEXT_SET10="ABCDEFGHIJKLMNOPQRSTUVWXYZ",b.RetroFont.TEXT_SET11="ABCDEFGHIJKLMNOPQRSTUVWXYZ.,\"-+!?()':;0123456789",b.RetroFont.prototype.setFixedWidth=function(a,b){"undefined"==typeof b&&(b="left"),this.fixedWidth=a,this.align=b},b.RetroFont.prototype.setText=function(a,b,c,d,e,f){this.multiLine=b||!1,this.customSpacingX=c||0,this.customSpacingY=d||0,this.align=e||"left",this.autoUpperCase=f?!1:!0,a.length>0&&(this.text=a)},b.RetroFont.prototype.resize=function(a,b){if(this.width=a,this.height=b,this.frame.width=this.width,this.frame.height=this.height,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.renderer.type===PIXI.WEBGL_RENDERER){this.projection.x=this.width/2,this.projection.y=-this.height/2;var c=this.renderer.gl;c.bindTexture(c.TEXTURE_2D,this.baseTexture._glTextures[c.id]),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,this.width,this.height,0,c.RGBA,c.UNSIGNED_BYTE,null)}else this.textureBuffer.resize(this.width,this.height);PIXI.Texture.frameUpdates.push(this)},b.RetroFont.prototype.buildRetroFontText=function(){var a=0,c=0;if(this.multiLine){var d=this._text.split("\n");this.fixedWidth>0?this.resize(this.fixedWidth,d.length*(this.characterHeight+this.customSpacingY)-this.customSpacingY):this.resize(this.getLongestLine()*(this.characterWidth+this.customSpacingX),d.length*(this.characterHeight+this.customSpacingY)-this.customSpacingY),this.textureBuffer.clear();for(var e=0;ea&&(a=0),this.pasteLine(d[e],a,c,this.customSpacingX),c+=this.characterHeight+this.customSpacingY}}else{switch(this.fixedWidth>0?this.resize(this.fixedWidth,this.characterHeight):this.resize(this._text.length*(this.characterWidth+this.customSpacingX),this.characterHeight),this.textureBuffer.clear(),this.align){case b.RetroFont.ALIGN_LEFT:a=0;break;case b.RetroFont.ALIGN_RIGHT:a=this.width-this._text.length*(this.characterWidth+this.customSpacingX);break;case b.RetroFont.ALIGN_CENTER:a=this.width/2-this._text.length*(this.characterWidth+this.customSpacingX)/2,a+=this.customSpacingX/2}this.pasteLine(this._text,a,0,this.customSpacingX)}},b.RetroFont.prototype.pasteLine=function(a,c,d,e){for(var f=new b.Point,g=0;g=0&&(this.stamp.frame=this.grabData[a.charCodeAt(g)],f.set(c,d),this.render(this.stamp,f,!1),c+=this.characterWidth+e,c>this.width))break},b.RetroFont.prototype.getLongestLine=function(){var a=0;if(this._text.length>0)for(var b=this._text.split("\n"),c=0;ca&&(a=b[c].length);return a},b.RetroFont.prototype.removeUnsupportedCharacters=function(a){for(var b="",c=0;c=0||!a&&"\n"===d)&&(b=b.concat(d))}return b},Object.defineProperty(b.RetroFont.prototype,"text",{get:function(){return this._text},set:function(a){var b;b=this.autoUpperCase?a.toUpperCase():a,b!==this._text&&(this._text=b,this.removeUnsupportedCharacters(this.multiLine),this.buildRetroFontText())}}),b.Particle=function(a,c,d,e,f){b.Sprite.call(this,a,c,d,e,f),this.autoScale=!1,this.scaleData=null,this._s=0,this.autoAlpha=!1,this.alphaData=null,this._a=0},b.Particle.prototype=Object.create(b.Sprite.prototype),b.Particle.prototype.constructor=b.Particle,b.Particle.prototype.update=function(){this.autoScale&&(this._s--,this._s?this.scale.set(this.scaleData[this._s].x,this.scaleData[this._s].y):this.autoScale=!1),this.autoAlpha&&(this._a--,this._a?this.alpha=this.alphaData[this._a].v:this.autoAlpha=!1)},b.Particle.prototype.onEmit=function(){},b.Particle.prototype.setAlphaData=function(a){this.alphaData=a,this._a=a.length-1,this.alpha=this.alphaData[this._a].v,this.autoAlpha=!0},b.Particle.prototype.setScaleData=function(a){this.scaleData=a,this._s=a.length-1,this.scale.set(this.scaleData[this._s].x,this.scaleData[this._s].y),this.autoScale=!0},b.Particle.prototype.reset=function(a,b,c){return"undefined"==typeof c&&(c=1),this.world.setTo(a,b),this.position.x=a,this.position.y=b,this.alive=!0,this.exists=!0,this.visible=!0,this.renderable=!0,this._outOfBoundsFired=!1,this.health=c,this.body&&this.body.reset(a,b,!1,!1),this._cache[4]=1,this.alpha=1,this.scale.set(1),this.autoScale=!1,this.autoAlpha=!1,this},b.Canvas={create:function(a,b,c,d){if("undefined"==typeof d&&(d=!1),a=a||256,b=b||256,d)var e=document.createElement("canvas");else var e=document.createElement(navigator.isCocoonJS?"screencanvas":"canvas");return"string"==typeof c&&""!==c&&(e.id=c),e.width=a,e.height=b,e.style.display="block",e},getOffset:function(a,c){c=c||new b.Point;var d=a.getBoundingClientRect(),e=a.clientTop||document.body.clientTop||0,f=a.clientLeft||document.body.clientLeft||0,g=0,h=0;return"CSS1Compat"===document.compatMode?(g=window.pageYOffset||document.documentElement.scrollTop||a.scrollTop||0,h=window.pageXOffset||document.documentElement.scrollLeft||a.scrollLeft||0):(g=window.pageYOffset||document.body.scrollTop||a.scrollTop||0,h=window.pageXOffset||document.body.scrollLeft||a.scrollLeft||0),c.x=d.left+h-f,c.y=d.top+g-e,c},getAspectRatio:function(a){return a.width/a.height},setBackgroundColor:function(a,b){return b=b||"rgb(0,0,0)",a.style.backgroundColor=b,a},setTouchAction:function(a,b){return b=b||"none",a.style.msTouchAction=b,a.style["ms-touch-action"]=b,a.style["touch-action"]=b,a},setUserSelect:function(a,b){return b=b||"none",a.style["-webkit-touch-callout"]=b,a.style["-webkit-user-select"]=b,a.style["-khtml-user-select"]=b,a.style["-moz-user-select"]=b,a.style["-ms-user-select"]=b,a.style["user-select"]=b,a.style["-webkit-tap-highlight-color"]="rgba(0, 0, 0, 0)",a},addToDOM:function(a,b,c){var d;return"undefined"==typeof c&&(c=!0),b&&("string"==typeof b?d=document.getElementById(b):"object"==typeof b&&1===b.nodeType&&(d=b)),d||(d=document.body),c&&d.style&&(d.style.overflow="hidden"),d.appendChild(a),a},setTransform:function(a,b,c,d,e,f,g){return a.setTransform(d,f,g,e,b,c),a},setSmoothingEnabled:function(a,b){return a.imageSmoothingEnabled=b,a.mozImageSmoothingEnabled=b,a.oImageSmoothingEnabled=b,a.webkitImageSmoothingEnabled=b,a.msImageSmoothingEnabled=b,a},setImageRenderingCrisp:function(a){return a.style["image-rendering"]="optimizeSpeed",a.style["image-rendering"]="crisp-edges",a.style["image-rendering"]="-moz-crisp-edges",a.style["image-rendering"]="-webkit-optimize-contrast",a.style["image-rendering"]="optimize-contrast",a.style.msInterpolationMode="nearest-neighbor",a},setImageRenderingBicubic:function(a){return a.style["image-rendering"]="auto",a.style.msInterpolationMode="bicubic",a}},b.Device=function(a){this.game=a,this.desktop=!1,this.iOS=!1,this.cocoonJS=!1,this.ejecta=!1,this.crosswalk=!1,this.android=!1,this.chromeOS=!1,this.linux=!1,this.macOS=!1,this.windows=!1,this.windowsPhone=!1,this.canvas=!1,this.file=!1,this.fileSystem=!1,this.localStorage=!1,this.webGL=!1,this.worker=!1,this.touch=!1,this.mspointer=!1,this.css3D=!1,this.pointerLock=!1,this.typedArray=!1,this.vibration=!1,this.getUserMedia=!1,this.quirksMode=!1,this.arora=!1,this.chrome=!1,this.epiphany=!1,this.firefox=!1,this.ie=!1,this.ieVersion=0,this.trident=!1,this.tridentVersion=0,this.mobileSafari=!1,this.midori=!1,this.opera=!1,this.safari=!1,this.webApp=!1,this.silk=!1,this.audioData=!1,this.webAudio=!1,this.ogg=!1,this.opus=!1,this.mp3=!1,this.wav=!1,this.m4a=!1,this.webm=!1,this.iPhone=!1,this.iPhone4=!1,this.iPad=!1,this.pixelRatio=0,this.littleEndian=!1,this.support32bit=!1,this.fullscreen=!1,this.requestFullscreen="",this.cancelFullscreen="",this.fullscreenKeyboard=!1,this._checkAudio(),this._checkBrowser(),this._checkCSS3D(),this._checkDevice(),this._checkFeatures(),this._checkOS()},b.Device.LITTLE_ENDIAN=!1,b.Device.prototype={_checkOS:function(){var a=navigator.userAgent;/Android/.test(a)?this.android=!0:/CrOS/.test(a)?this.chromeOS=!0:/iP[ao]d|iPhone/i.test(a)?this.iOS=!0:/Linux/.test(a)?this.linux=!0:/Mac OS/.test(a)?this.macOS=!0:/Windows/.test(a)&&(this.windows=!0,/Windows Phone/i.test(a)&&(this.windowsPhone=!0)),(this.windows||this.macOS||this.linux&&this.silk===!1)&&(this.desktop=!0),(this.windowsPhone||/Windows NT/i.test(a)&&/Touch/i.test(a))&&(this.desktop=!1)},_checkFeatures:function(){this.canvas=!!window.CanvasRenderingContext2D||this.cocoonJS;try{this.localStorage=!!localStorage.getItem}catch(a){this.localStorage=!1}this.file=!!(window.File&&window.FileReader&&window.FileList&&window.Blob),this.fileSystem=!!window.requestFileSystem,this.webGL=function(){try{var a=document.createElement("canvas");return!!window.WebGLRenderingContext&&(a.getContext("webgl")||a.getContext("experimental-webgl"))}catch(b){return!1}}(),this.webGL=null===this.webGL||this.webGL===!1?!1:!0,this.worker=!!window.Worker,("ontouchstart"in document.documentElement||window.navigator.maxTouchPoints&&window.navigator.maxTouchPoints>1)&&(this.touch=!0),(window.navigator.msPointerEnabled||window.navigator.pointerEnabled)&&(this.mspointer=!0),this.pointerLock="pointerLockElement"in document||"mozPointerLockElement"in document||"webkitPointerLockElement"in document,this.quirksMode="CSS1Compat"===document.compatMode?!1:!0,this.getUserMedia=!!(navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia)},checkFullScreenSupport:function(){for(var a=["requestFullscreen","requestFullScreen","webkitRequestFullscreen","webkitRequestFullScreen","msRequestFullscreen","msRequestFullScreen","mozRequestFullScreen","mozRequestFullscreen"],b=0;b0&&"none"!==a},canPlayAudio:function(a){return"mp3"==a&&this.mp3?!0:"ogg"==a&&(this.ogg||this.opus)?!0:"m4a"==a&&this.m4a?!0:"wav"==a&&this.wav?!0:"webm"==a&&this.webm?!0:!1},isConsoleOpen:function(){return window.console&&window.console.firebug?!0:window.console&&(console.profile(),console.profileEnd(),console.clear&&console.clear(),console.profiles)?console.profiles.length>0:!1}},b.Device.prototype.constructor=b.Device,b.RequestAnimationFrame=function(a,b){"undefined"==typeof b&&(b=!1),this.game=a,this.isRunning=!1,this.forceSetTimeOut=b;for(var c=["ms","moz","webkit","o"],d=0;da},fuzzyGreaterThan:function(a,b,c){return"undefined"==typeof c&&(c=1e-4),a>b-c},fuzzyCeil:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.ceil(a-b)},fuzzyFloor:function(a,b){return"undefined"==typeof b&&(b=1e-4),Math.floor(a+b)},average:function(){for(var a=[],b=0;b0?Math.floor(a):Math.ceil(a)},shear:function(a){return a%1},snapTo:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.round(a/b),c+a)},snapToFloor:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.floor(a/b),c+a)},snapToCeil:function(a,b,c){return"undefined"==typeof c&&(c=0),0===b?a:(a-=c,a=b*Math.ceil(a/b),c+a)},snapToInArray:function(a,b,c){if("undefined"==typeof c&&(c=!0),c&&b.sort(),a=f-a?f:e},roundTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.round(a*d)/d},floorTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.floor(a*d)/d},ceilTo:function(a,b,c){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=10);var d=Math.pow(c,-b);return Math.ceil(a*d)/d},interpolateFloat:function(a,b,c){return(b-a)*c+a},angleBetween:function(a,b,c,d){return Math.atan2(d-b,c-a)},angleBetweenPoints:function(a,b){return Math.atan2(b.y-a.y,b.x-a.x)},reverseAngle:function(a){return this.normalizeAngle(a+Math.PI,!0)},normalizeAngle:function(a){return a%=2*Math.PI,a>=0?a:a+2*Math.PI},normalizeLatitude:function(a){return Math.max(-90,Math.min(90,a))},normalizeLongitude:function(a){return a%360==180?180:(a%=360,-180>a?a+360:a>180?a-360:a)},nearestAngleBetween:function(a,b,c){"undefined"==typeof c&&(c=!0);var d=c?Math.PI:180;return a=this.normalizeAngle(a,c),b=this.normalizeAngle(b,c),-d/2>a&&b>d/2&&(a+=2*d),-d/2>b&&a>d/2&&(b+=2*d),b-a},interpolateAngles:function(a,b,c,d,e){return"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=null),a=this.normalizeAngle(a,d),b=this.normalizeAngleToAnother(b,a,d),"function"==typeof e?e(c,a,b-a,1):this.interpolateFloat(a,b,c)},chanceRoll:function(a){return"undefined"==typeof a&&(a=50),0>=a?!1:a>=100?!0:100*Math.random()>=a?!1:!0},numberArray:function(a,b){for(var c=[],d=a;b>=d;d++)c.push(d);return c},maxAdd:function(a,b,c){return a+=b,a>c&&(a=c),a},minSub:function(a,b,c){return a-=b,c>a&&(a=c),a},wrap:function(a,b,c){var d=c-b;if(0>=d)return 0;var e=(a-b)%d;return 0>e&&(e+=d),e+b},wrapValue:function(a,b,c){var d;return a=Math.abs(a),b=Math.abs(b),c=Math.abs(c),d=(a+b)%c},limitValue:function(a,b,c){return b>a?b:a>c?c:a},randomSign:function(){return Math.random()>.5?1:-1},isOdd:function(a){return 1&a},isEven:function(a){return 1&a?!1:!0},min:function(){if(1===arguments.length&&"object"==typeof arguments[0])var a=arguments[0];else var a=arguments;for(var b=1,c=0,d=a.length;d>b;b++)a[b]b;b++)a[b]>a[c]&&(c=b);return a[c]},minProperty:function(a){if(2===arguments.length&&"object"==typeof arguments[1])var b=arguments[1];else var b=arguments.slice(1);for(var c=1,d=0,e=b.length;e>c;c++)b[c][a]c;c++)b[c][a]>b[d][a]&&(d=c);return b[d][a]},wrapAngle:function(a,b){var c=b?Math.PI/180:1;return this.wrap(a,-180*c,180*c)},angleLimit:function(a,b,c){var d=a;return a>c?d=c:b>a&&(d=b),d},linearInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return 0>b?this.linear(a[0],a[1],d):b>1?this.linear(a[c],a[c-1],c-d):this.linear(a[e],a[e+1>c?c:e+1],d-e)},bezierInterpolation:function(a,b){for(var c=0,d=a.length-1,e=0;d>=e;e++)c+=Math.pow(1-b,d-e)*Math.pow(b,e)*a[e]*this.bernstein(d,e);return c},catmullRomInterpolation:function(a,b){var c=a.length-1,d=c*b,e=Math.floor(d);return a[0]===a[c]?(0>b&&(e=Math.floor(d=c*(1+b))),this.catmullRom(a[(e-1+c)%c],a[e],a[(e+1)%c],a[(e+2)%c],d-e)):0>b?a[0]-(this.catmullRom(a[0],a[0],a[1],a[1],-d)-a[0]):b>1?a[c]-(this.catmullRom(a[c],a[c],a[c-1],a[c-1],d-c)-a[c]):this.catmullRom(a[e?e-1:0],a[e],a[e+1>c?c:e+1],a[e+2>c?c:e+2],d-e)},linear:function(a,b,c){return(b-a)*c+a},bernstein:function(a,b){return this.factorial(a)/this.factorial(b)/this.factorial(a-b)},catmullRom:function(a,b,c,d,e){var f=.5*(c-a),g=.5*(d-b),h=e*e,i=e*h;return(2*b-2*c+f+g)*i+(-3*b+3*c-2*f-g)*h+f*e+b},difference:function(a,b){return Math.abs(a-b)},getRandom:function(a,b,c){if("undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),null!=a){var d=c;if((0===d||d>a.length-b)&&(d=a.length-b),d>0)return a[b+Math.floor(Math.random()*d)]}return null},removeRandom:function(a,b,c){if("undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),null!=a){var d=c;if((0===d||d>a.length-b)&&(d=a.length-b),d>0){var e=b+Math.floor(Math.random()*d),f=a.splice(e,1);return f[0]}}return null},floor:function(a){var b=0|a;return a>0?b:b!=a?b-1:b},ceil:function(a){var b=0|a;return a>0&&b!=a?b+1:b},sinCosGenerator:function(a,b,c,d){"undefined"==typeof b&&(b=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1);for(var e=b,f=c,g=d*Math.PI/a,h=[],i=[],j=0;a>j;j++)f-=e*g,e+=f*g,h[j]=f,i[j]=e;return{sin:i,cos:h,length:a}},shift:function(a){var b=a.shift();return a.push(b),b},shuffleArray:function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(Math.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},distance:function(a,b,c,d){var e=a-c,f=b-d;return Math.sqrt(e*e+f*f)},distancePow:function(a,b,c,d,e){return"undefined"==typeof e&&(e=2),Math.sqrt(Math.pow(c-a,e)+Math.pow(d-b,e))},distanceRounded:function(a,c,d,e){return Math.round(b.Math.distance(a,c,d,e))},clamp:function(a,b,c){return b>a?b:a>c?c:a},clampBottom:function(a,b){return b>a?b:a},within:function(a,b,c){return Math.abs(a-b)<=c},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){return a=Math.max(0,Math.min(1,(a-b)/(c-b))),a*a*(3-2*a)},smootherstep:function(a,b,c){return a=Math.max(0,Math.min(1,(a-b)/(c-b))),a*a*a*(a*(6*a-15)+10)},sign:function(a){return 0>a?-1:a>0?1:0},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}()},b.RandomDataGenerator=function(a){"undefined"==typeof a&&(a=[]),this.c=1,this.s0=0,this.s1=0,this.s2=0,this.sow(a)},b.RandomDataGenerator.prototype={rnd:function(){var a=2091639*this.s0+2.3283064365386963e-10*this.c;return this.c=0|a,this.s0=this.s1,this.s1=this.s2,this.s2=a-this.c,this.s2},sow:function(a){"undefined"==typeof a&&(a=[]),this.s0=this.hash(" "),this.s1=this.hash(this.s0),this.s2=this.hash(this.s1),this.c=1;for(var b,c=0;b=a[c++];)this.s0-=this.hash(b),this.s0+=~~(this.s0<0),this.s1-=this.hash(b),this.s1+=~~(this.s1<0),this.s2-=this.hash(b),this.s2+=~~(this.s2<0)},hash:function(a){var b,c,d;for(d=4022871197,a=a.toString(),c=0;c>>0,b-=d,b*=d,d=b>>>0,b-=d,d+=4294967296*b;return 2.3283064365386963e-10*(d>>>0)},integer:function(){return 4294967296*this.rnd.apply(this)},frac:function(){return this.rnd.apply(this)+1.1102230246251565e-16*(2097152*this.rnd.apply(this)|0)},real:function(){return this.integer()+this.frac()},integerInRange:function(a,b){return Math.floor(this.realInRange(0,b-a+1))+a},realInRange:function(a,b){return this.frac()*(b-a)+a},normal:function(){return 1-2*this.frac()},uuid:function(){var a="",b="";for(b=a="";a++<36;b+=~a%5|3*a&4?(15^a?8^this.frac()*(20^a?16:4):4).toString(16):"-");return b},pick:function(a){return a[this.integerInRange(0,a.length-1)]},weightedPick:function(a){return a[~~(Math.pow(this.frac(),2)*(a.length-1))]},timestamp:function(a,b){return this.realInRange(a||9466848e5,b||1577862e6)},angle:function(){return this.integerInRange(-180,180)}},b.RandomDataGenerator.prototype.constructor=b.RandomDataGenerator,b.QuadTree=function(a,b,c,d,e,f,g){this.maxObjects=10,this.maxLevels=4,this.level=0,this.bounds={},this.objects=[],this.nodes=[],this._empty=[],this.reset(a,b,c,d,e,f,g)},b.QuadTree.prototype={reset:function(a,b,c,d,e,f,g){this.maxObjects=e||10,this.maxLevels=f||4,this.level=g||0,this.bounds={x:Math.round(a),y:Math.round(b),width:c,height:d,subWidth:Math.floor(c/2),subHeight:Math.floor(d/2),right:Math.round(a)+Math.floor(c/2),bottom:Math.round(b)+Math.floor(d/2)},this.objects.length=0,this.nodes.length=0},populate:function(a){a.forEach(this.populateHandler,this,!0)},populateHandler:function(a){a.body&&a.exists&&this.insert(a.body)},split:function(){this.level++,this.nodes[0]=new b.QuadTree(this.bounds.right,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[1]=new b.QuadTree(this.bounds.x,this.bounds.y,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[2]=new b.QuadTree(this.bounds.x,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level),this.nodes[3]=new b.QuadTree(this.bounds.right,this.bounds.bottom,this.bounds.subWidth,this.bounds.subHeight,this.maxObjects,this.maxLevels,this.level)},insert:function(a){var b,c=0;if(null!=this.nodes[0]&&(b=this.getIndex(a),-1!==b))return void this.nodes[b].insert(a);if(this.objects.push(a),this.objects.length>this.maxObjects&&this.levelthis.bounds.bottom&&(b=2):a.x>this.bounds.right&&(a.ythis.bounds.bottom&&(b=3)),b},retrieve:function(a){if(!a.body)return this._empty;var b=this.objects,c=this.getIndex(a.body);return this.nodes[0]&&(-1!==c?b=b.concat(this.nodes[c].retrieve(a)):(b=b.concat(this.nodes[0].retrieve(a)),b=b.concat(this.nodes[1].retrieve(a)),b=b.concat(this.nodes[2].retrieve(a)),b=b.concat(this.nodes[3].retrieve(a)))),b},clear:function(){this.objects.length=0;for(var a=this.nodes.length;a--;)this.nodes[a].clear(),this.nodes.splice(a,1);this.nodes.length=0}},b.QuadTree.prototype.constructor=b.QuadTree,b.Net=function(a){this.game=a},b.Net.prototype={getHostName:function(){return window.location&&window.location.hostname?window.location.hostname:null},checkDomainName:function(a){return-1!==window.location.hostname.indexOf(a)},updateQueryString:function(a,b,c,d){"undefined"==typeof c&&(c=!1),("undefined"==typeof d||""===d)&&(d=window.location.href);var e="",f=new RegExp("([?|&])"+a+"=.*?(&|#|$)(.*)","gi");if(f.test(d))e="undefined"!=typeof b&&null!==b?d.replace(f,"$1"+a+"="+b+"$2$3"):d.replace(f,"$1$3").replace(/(&|\?)$/,"");else if("undefined"!=typeof b&&null!==b){var g=-1!==d.indexOf("?")?"&":"?",h=d.split("#");d=h[0]+g+a+"="+b,h[1]&&(d+="#"+h[1]),e=d}else e=d;return c?void(window.location.href=e):e},getQueryString:function(a){"undefined"==typeof a&&(a="");var b={},c=location.search.substring(1).split("&");for(var d in c){var e=c[d].split("=");if(e.length>1){if(a&&a==this.decodeURI(e[0]))return this.decodeURI(e[1]);b[this.decodeURI(e[0])]=this.decodeURI(e[1])}}return b},decodeURI:function(a){return decodeURIComponent(a.replace(/\+/g," "))}},b.Net.prototype.constructor=b.Net,b.TweenManager=function(a){this.game=a,this._tweens=[],this._add=[],this.game.onPause.add(this._pauseAll,this),this.game.onResume.add(this._resumeAll,this)},b.TweenManager.prototype={getAll:function(){return this._tweens},removeAll:function(){for(var a=0;aa;)this._tweens[a].update(this.game.time.now)?a++:(this._tweens.splice(a,1),b--);return this._add.length>0&&(this._tweens=this._tweens.concat(this._add),this._add.length=0),!0},isTweening:function(a){return this._tweens.some(function(b){return b._object===a})},_pauseAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a]._pause()},_resumeAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a]._resume()},pauseAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].pause()},resumeAll:function(){for(var a=this._tweens.length-1;a>=0;a--)this._tweens[a].resume(!0)}},b.TweenManager.prototype.constructor=b.TweenManager,b.Tween=function(a,c,d){this._object=a,this.game=c,this._manager=d,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._repeat=0,this._yoyo=!1,this._reversed=!1,this._delayTime=0,this._startTime=null,this._easingFunction=b.Easing.Linear.None,this._interpolationFunction=b.Math.linearInterpolation,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onUpdateCallback=null,this._onUpdateCallbackContext=null,this._paused=!1,this._pausedTime=0,this._codePaused=!1,this.pendingDelete=!1,this.onStart=new b.Signal,this.onLoop=new b.Signal,this.onComplete=new b.Signal,this.isRunning=!1},b.Tween.prototype={to:function(a,b,c,d,e,f,g){b=b||1e3,c=c||null,d=d||!1,e=e||0,f=f||0,g=g||!1,g&&0===f&&(f=1);var h;return this._parent?(h=this._manager.create(this._object),this._lastChild.chain(h),this._lastChild=h):(h=this,this._parent=this,this._lastChild=this),h._repeat=f,h._duration=b,h._valuesEnd=a,null!==c&&(h._easingFunction=c),e>0&&(h._delayTime=e),h._yoyo=g,d?this.start():this},start:function(){if(null!==this.game&&null!==this._object){this._manager.add(this),this.isRunning=!0,this._onStartCallbackFired=!1,this._startTime=this.game.time.now+this._delayTime;for(var a in this._valuesEnd){if(Array.isArray(this._valuesEnd[a])){if(0===this._valuesEnd[a].length)continue;this._valuesEnd[a]=[this._object[a]].concat(this._valuesEnd[a])}this._valuesStart[a]=this._object[a],Array.isArray(this._valuesStart[a])||(this._valuesStart[a]*=1),this._valuesStartRepeat[a]=this._valuesStart[a]||0}return this}},generateData:function(a,b){if(null===this.game||null===this._object)return null;this._startTime=0;for(var c in this._valuesEnd){if(Array.isArray(this._valuesEnd[c])){if(0===this._valuesEnd[c].length)continue;this._valuesEnd[c]=[this._object[c]].concat(this._valuesEnd[c])}this._valuesStart[c]=this._object[c],Array.isArray(this._valuesStart[c])||(this._valuesStart[c]*=1),this._valuesStartRepeat[c]=this._valuesStart[c]||0}for(var d=0,e=Math.floor(a*(this._duration/1e3)),f=this._duration/e,g=[];e--;){var c,h=(d-this._startTime)/this._duration;h=h>1?1:h;var i=this._easingFunction(h),j={};for(c in this._valuesEnd){var k=this._valuesStart[c]||0,l=this._valuesEnd[c];l instanceof Array?j[c]=this._interpolationFunction(l,i):("string"==typeof l&&(l=k+parseFloat(l,10)),"number"==typeof l&&(j[c]=k+(l-k)*i))}g.push(j),d+=f}if(this._yoyo){var m=g.slice();m.reverse(),g=g.concat(m)}return"undefined"!=typeof b?b=b.concat(g):g},stop:function(){return this.isRunning=!1,this._onUpdateCallback=null,this._manager.remove(this),this},delay:function(a){return this._delayTime=a,this},repeat:function(a){return this._repeat=a,this},yoyo:function(a){return this._yoyo=a,a&&0===this._repeat&&(this._repeat=1),this},easing:function(a){return this._easingFunction=a,this},interpolation:function(a){return this._interpolationFunction=a,this},chain:function(){return this._chainedTweens=arguments,this},loop:function(){return this._lastChild.chain(this),this},onUpdateCallback:function(a,b){return this._onUpdateCallback=a,this._onUpdateCallbackContext=b,this},pause:function(){this._codePaused=!0,this._paused=!0,this._pausedTime=this.game.time.now},_pause:function(){this._codePaused||(this._paused=!0,this._pausedTime=this.game.time.now)},resume:function(){this._paused&&(this._paused=!1,this._codePaused=!1,this._startTime+=this.game.time.now-this._pausedTime)},_resume:function(){this._codePaused||(this._startTime+=this.game.time.pauseDuration,this._paused=!1)},update:function(a){if(this.pendingDelete)return!1;if(this._paused||a1?1:c;var d=this._easingFunction(c);for(b in this._valuesEnd){var e=this._valuesStart[b]||0,f=this._valuesEnd[b];f instanceof Array?this._object[b]=this._interpolationFunction(f,d):("string"==typeof f&&(f=e+parseFloat(f,10)),"number"==typeof f&&(this._object[b]=e+(f-e)*d))}if(null!==this._onUpdateCallback&&this._onUpdateCallback.call(this._onUpdateCallbackContext,this,d),1==c){if(this._repeat>0){isFinite(this._repeat)&&this._repeat--;for(b in this._valuesStartRepeat){if("string"==typeof this._valuesEnd[b]&&(this._valuesStartRepeat[b]=this._valuesStartRepeat[b]+parseFloat(this._valuesEnd[b],10)),this._yoyo){var g=this._valuesStartRepeat[b];this._valuesStartRepeat[b]=this._valuesEnd[b],this._valuesEnd[b]=g,this._reversed=!this._reversed}this._valuesStart[b]=this._valuesStartRepeat[b]}return this._startTime=a+this._delayTime,this.onLoop.dispatch(this._object),!0}this.isRunning=!1,this.onComplete.dispatch(this._object);for(var h=0,i=this._chainedTweens.length;i>h;h++)this._chainedTweens[h].start(a);return!1}return!0}},b.Tween.prototype.constructor=b.Tween,b.Easing={Linear:{None:function(a){return a}},Quadratic:{In:function(a){return a*a},Out:function(a){return a*(2-a)},InOut:function(a){return(a*=2)<1?.5*a*a:-.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a:.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return(a*=2)<1?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a*a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return(a*=2)<1?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:(a*=2)<1?.5*Math.pow(1024,a-1):.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1-Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return(a*=2)<1?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),-(c*Math.pow(2,10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d)))},Out:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),c*Math.pow(2,-10*a)*Math.sin(2*(a-b)*Math.PI/d)+1)},InOut:function(a){var b,c=.1,d=.4;return 0===a?0:1===a?1:(!c||1>c?(c=1,b=d/4):b=d*Math.asin(1/c)/(2*Math.PI),(a*=2)<1?-.5*c*Math.pow(2,10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d):c*Math.pow(2,-10*(a-=1))*Math.sin(2*(a-b)*Math.PI/d)*.5+1)}},Back:{In:function(a){var b=1.70158;return a*a*((b+1)*a-b)},Out:function(a){var b=1.70158;return--a*a*((b+1)*a+b)+1},InOut:function(a){var b=2.5949095;return(a*=2)<1?.5*a*a*((b+1)*a-b):.5*((a-=2)*a*((b+1)*a+b)+2)}},Bounce:{In:function(a){return 1-b.Easing.Bounce.Out(1-a)},Out:function(a){return 1/2.75>a?7.5625*a*a:2/2.75>a?7.5625*(a-=1.5/2.75)*a+.75:2.5/2.75>a?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},InOut:function(a){return.5>a?.5*b.Easing.Bounce.In(2*a):.5*b.Easing.Bounce.Out(2*a-1)+.5}}},b.Time=function(a){this.game=a,this.time=0,this.now=0,this.elapsed=0,this.pausedTime=0,this.advancedTiming=!1,this.fps=0,this.fpsMin=1e3,this.fpsMax=0,this.msMin=1e3,this.msMax=0,this.physicsElapsed=0,this.deltaCap=0,this.timeCap=1e3,this.frames=0,this.pauseDuration=0,this.timeToCall=0,this.lastTime=0,this.events=new b.Timer(this.game,!1),this._started=0,this._timeLastSecond=0,this._pauseStarted=0,this._justResumed=!1,this._timers=[],this._len=0,this._i=0},b.Time.prototype={boot:function(){this._started=Date.now(),this.events.start()},create:function(a){"undefined"==typeof a&&(a=!0);var c=new b.Timer(this.game,a);return this._timers.push(c),c},removeAll:function(){for(var a=0;athis.timeCap&&(this.elapsed=1/60),this.physicsElapsed=this.elapsed/1e3||1/60,this.deltaCap>0&&this.physicsElapsed>this.deltaCap&&(this.physicsElapsed=this.deltaCap),this.advancedTiming&&(this.msMin=this.game.math.min(this.msMin,this.elapsed),this.msMax=this.game.math.max(this.msMax,this.elapsed),this.frames++,this.now>this._timeLastSecond+1e3&&(this.fps=Math.round(1e3*this.frames/(this.now-this._timeLastSecond)),this.fpsMin=this.game.math.min(this.fpsMin,this.fps),this.fpsMax=this.game.math.max(this.fpsMax,this.fps),this._timeLastSecond=this.now,this.frames=0)),this.time=this.now,this.lastTime=a+this.timeToCall,!this.game.paused)for(this.events.update(this.now),this._i=0,this._len=this._timers.length;this._i0&&(this.events.sort(this.sortHandler),this.nextTick=this.events[0].tick)},sortHandler:function(a,b){return a.tickb.tick?1:0},clearPendingEvents:function(){for(this._i=this.events.length;this._i--;)this.events[this._i].pendingDelete&&this.events.splice(this._i,1);this._len=this.events.length,this._i=0},update:function(a){if(this.paused)return!0;if(this.elapsed=a-this._now,this._now=a,this.elapsed>this.timeCap&&this.adjustEvents(a-this.elapsed),this._marked=0,this.clearPendingEvents(),this.running&&this._now>=this.nextTick&&this._len>0){for(;this._i=this.events[this._i].tick;)this._newTick=this._now+this.events[this._i].delay-(this._now-this.events[this._i].tick),this._newTick<0&&(this._newTick=this._now+this.events[this._i].delay),this.events[this._i].loop===!0?(this.events[this._i].tick=this._newTick,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)):this.events[this._i].repeatCount>0?(this.events[this._i].repeatCount--,this.events[this._i].tick=this._newTick,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)):(this._marked++,this.events[this._i].pendingDelete=!0,this.events[this._i].callback.apply(this.events[this._i].callbackContext,this.events[this._i].args)),this._i++;this.events.length>this._marked?this.order():(this.expired=!0,this.onComplete.dispatch(this))}return this.expired&&this.autoDestroy?!1:!0},pause:function(){this.paused||(this._pauseStarted=this.game.time.now,this.paused=!0,this._codePaused=!0)},_pause:function(){this.paused||(this._pauseStarted=this.game.time.now,this.paused=!0)},adjustEvents:function(a){for(var b=0;bc&&(c=0),this.events[b].tick=this._now+c}var d=this.nextTick-a;this.nextTick=0>d?this._now:this._now+d},resume:function(){this.paused&&(this._pauseTotal+=this.game.time.pauseDuration,this._now=this.game.time.now,this.adjustEvents(this._pauseStarted),this.paused=!1,this._codePaused=!1)},_resume:function(){this._codePaused||this.resume()},removeAll:function(){this.onComplete.removeAll(),this.events.length=0,this._len=0,this._i=0},destroy:function(){this.onComplete.removeAll(),this.running=!1,this.events=[],this._len=0,this._i=0}},Object.defineProperty(b.Timer.prototype,"next",{get:function(){return this.nextTick}}),Object.defineProperty(b.Timer.prototype,"duration",{get:function(){return this.running&&this.nextTick>this._now?this.nextTick-this._now:0}}),Object.defineProperty(b.Timer.prototype,"length",{get:function(){return this.events.length}}),Object.defineProperty(b.Timer.prototype,"ms",{get:function(){return this._now-this._started-this._pauseTotal}}),Object.defineProperty(b.Timer.prototype,"seconds",{get:function(){return.001*this.ms}}),b.Timer.prototype.constructor=b.Timer,b.TimerEvent=function(a,b,c,d,e,f,g,h){this.timer=a,this.delay=b,this.tick=c,this.repeatCount=d-1,this.loop=e,this.callback=f,this.callbackContext=g,this.args=h,this.pendingDelete=!1},b.TimerEvent.prototype.constructor=b.TimerEvent,b.AnimationManager=function(a){this.sprite=a,this.game=a.game,this.currentFrame=null,this.currentAnim=null,this.updateIfVisible=!0,this.isLoaded=!1,this._frameData=null,this._anims={},this._outputFrames=[]},b.AnimationManager.prototype={loadFrameData:function(a){this._frameData=a,this.frame=0,this.isLoaded=!0},add:function(a,c,d,e,f){return null==this._frameData?void console.warn("No FrameData available for Phaser.Animation "+a):(c=c||[],d=d||60,"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=c&&"number"==typeof c[0]?!0:!1),null==this.sprite.events.onAnimationStart&&(this.sprite.events.onAnimationStart=new b.Signal,this.sprite.events.onAnimationComplete=new b.Signal,this.sprite.events.onAnimationLoop=new b.Signal),this._outputFrames.length=0,this._frameData.getFrameIndexes(c,f,this._outputFrames),this._anims[a]=new b.Animation(this.game,this.sprite,a,this._frameData,this._outputFrames,d,e),this.currentAnim=this._anims[a],this.currentFrame=this.currentAnim.currentFrame,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1),this._anims[a]) +},validateFrames:function(a,b){"undefined"==typeof b&&(b=!0);for(var c=0;cthis._frameData.total)return!1}else if(this._frameData.checkFrameName(a[c])===!1)return!1;return!0},play:function(a,b,c,d){if(this._anims[a]){if(this.currentAnim!==this._anims[a])return this.currentAnim&&this.currentAnim.isPlaying&&this.currentAnim.stop(),this.currentAnim=this._anims[a],this.currentAnim.paused=!1,this.currentAnim.play(b,c,d);if(this.currentAnim.isPlaying===!1)return this.currentAnim.paused=!1,this.currentAnim.play(b,c,d)}},stop:function(a,b){"undefined"==typeof b&&(b=!1),"string"==typeof a?this._anims[a]&&(this.currentAnim=this._anims[a],this.currentAnim.stop(b)):this.currentAnim&&this.currentAnim.stop(b)},update:function(){return this.updateIfVisible&&!this.sprite.visible?!1:this.currentAnim&&this.currentAnim.update()===!0?(this.currentFrame=this.currentAnim.currentFrame,!0):!1},getAnimation:function(a){return"string"==typeof a&&this._anims[a]?this._anims[a]:null},refreshFrame:function(){this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1)},destroy:function(){var a=null;for(var a in this._anims)this._anims.hasOwnProperty(a)&&this._anims[a].destroy();this._anims={},this._frameData=null,this._frameIndex=0,this.currentAnim=null,this.currentFrame=null}},b.AnimationManager.prototype.constructor=b.AnimationManager,Object.defineProperty(b.AnimationManager.prototype,"frameData",{get:function(){return this._frameData}}),Object.defineProperty(b.AnimationManager.prototype,"frameTotal",{get:function(){return this._frameData?this._frameData.total:-1}}),Object.defineProperty(b.AnimationManager.prototype,"paused",{get:function(){return this.currentAnim.isPaused},set:function(a){this.currentAnim.paused=a}}),Object.defineProperty(b.AnimationManager.prototype,"frame",{get:function(){return this.currentFrame?this._frameIndex:void 0},set:function(a){"number"==typeof a&&this._frameData&&null!==this._frameData.getFrame(a)&&(this.currentFrame=this._frameData.getFrame(a),this.currentFrame&&(this._frameIndex=a,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1)))}}),Object.defineProperty(b.AnimationManager.prototype,"frameName",{get:function(){return this.currentFrame?this.currentFrame.name:void 0},set:function(a){"string"==typeof a&&this._frameData&&null!==this._frameData.getFrameByName(a)?(this.currentFrame=this._frameData.getFrameByName(a),this.currentFrame&&(this._frameIndex=this.currentFrame.index,this.sprite.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this.sprite.__tilePattern&&(this.__tilePattern=!1,this.tilingTexture=!1))):console.warn("Cannot set frameName: "+a)}}),b.Animation=function(a,c,d,e,f,g,h){this.game=a,this._parent=c,this._frameData=e,this.name=d,this._frames=[],this._frames=this._frames.concat(f),this.delay=1e3/g,this.loop=h,this.loopCount=0,this.killOnComplete=!1,this.isFinished=!1,this.isPlaying=!1,this.isPaused=!1,this._pauseStartTime=0,this._frameIndex=0,this._frameDiff=0,this._frameSkip=1,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.onStart=new b.Signal,this.onComplete=new b.Signal,this.onLoop=new b.Signal,this.game.onPause.add(this.onPause,this),this.game.onResume.add(this.onResume,this)},b.Animation.prototype={play:function(a,b,c){return"number"==typeof a&&(this.delay=1e3/a),"boolean"==typeof b&&(this.loop=b),"undefined"!=typeof c&&(this.killOnComplete=c),this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this.loopCount=0,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]),this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1),this._parent.events.onAnimationStart.dispatch(this._parent,this),this.onStart.dispatch(this._parent,this),this},restart:function(){this.isPlaying=!0,this.isFinished=!1,this.paused=!1,this.loopCount=0,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]),this.onStart.dispatch(this._parent,this)},setFrame:function(a,b){var c;if("undefined"==typeof b&&(b=!1),"string"==typeof a)for(var d=0;d=this._timeNextFrame?(this._frameSkip=1,this._frameDiff=this.game.time.now-this._timeNextFrame,this._timeLastFrame=this.game.time.now,this._frameDiff>this.delay&&(this._frameSkip=Math.floor(this._frameDiff/this.delay),this._frameDiff-=this._frameSkip*this.delay),this._timeNextFrame=this.game.time.now+(this.delay-this._frameDiff),this._frameIndex+=this._frameSkip,this._frameIndex>=this._frames.length?this.loop?(this._frameIndex%=this._frames.length,this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&(this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1)),this.loopCount++,this._parent.events.onAnimationLoop.dispatch(this._parent,this),this.onLoop.dispatch(this._parent,this)):this.complete():(this.currentFrame=this._frameData.getFrame(this._frames[this._frameIndex]),this.currentFrame&&(this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]),this._parent.__tilePattern&&(this._parent.__tilePattern=!1,this._parent.tilingTexture=!1))),!0):!1},destroy:function(){this.game.onPause.remove(this.onPause,this),this.game.onResume.remove(this.onResume,this),this.game=null,this._parent=null,this._frames=null,this._frameData=null,this.currentFrame=null,this.isPlaying=!1,this.onStart.dispose(),this.onLoop.dispose(),this.onComplete.dispose()},complete:function(){this.isPlaying=!1,this.isFinished=!0,this.paused=!1,this._parent.events.onAnimationComplete.dispatch(this._parent,this),this.onComplete.dispatch(this._parent,this),this.killOnComplete&&this._parent.kill()}},b.Animation.prototype.constructor=b.Animation,Object.defineProperty(b.Animation.prototype,"paused",{get:function(){return this.isPaused},set:function(a){this.isPaused=a,a?this._pauseStartTime=this.game.time.now:this.isPlaying&&(this._timeNextFrame=this.game.time.now+this.delay)}}),Object.defineProperty(b.Animation.prototype,"frameTotal",{get:function(){return this._frames.length}}),Object.defineProperty(b.Animation.prototype,"frame",{get:function(){return null!==this.currentFrame?this.currentFrame.index:this._frameIndex},set:function(a){this.currentFrame=this._frameData.getFrame(this._frames[a]),null!==this.currentFrame&&(this._frameIndex=a,this._parent.setTexture(PIXI.TextureCache[this.currentFrame.uuid]))}}),Object.defineProperty(b.Animation.prototype,"speed",{get:function(){return Math.round(1e3/this.delay)},set:function(a){a>=1&&(this.delay=1e3/a)}}),b.Animation.generateFrameNames=function(a,c,d,e,f){"undefined"==typeof e&&(e="");var g=[],h="";if(d>c)for(var i=c;d>=i;i++)h="number"==typeof f?b.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);else for(var i=c;i>=d;i--)h="number"==typeof f?b.Utils.pad(i.toString(),f,"0",1):i.toString(),h=a+h+e,g.push(h);return g},b.Frame=function(a,c,d,e,f,g,h){this.index=a,this.x=c,this.y=d,this.width=e,this.height=f,this.name=g,this.uuid=h,this.centerX=Math.floor(e/2),this.centerY=Math.floor(f/2),this.distance=b.Math.distance(0,0,e,f),this.rotated=!1,this.rotationDirection="cw",this.trimmed=!1,this.sourceSizeW=e,this.sourceSizeH=f,this.spriteSourceSizeX=0,this.spriteSourceSizeY=0,this.spriteSourceSizeW=0,this.spriteSourceSizeH=0},b.Frame.prototype={setTrim:function(a,b,c,d,e,f,g){this.trimmed=a,a&&(this.width=b,this.height=c,this.sourceSizeW=b,this.sourceSizeH=c,this.centerX=Math.floor(b/2),this.centerY=Math.floor(c/2),this.spriteSourceSizeX=d,this.spriteSourceSizeY=e,this.spriteSourceSizeW=f,this.spriteSourceSizeH=g)},getRect:function(a){return"undefined"==typeof a?a=new b.Rectangle(this.x,this.y,this.width,this.height):a.setTo(this.x,this.y,this.width,this.height),a}},b.Frame.prototype.constructor=b.Frame,b.FrameData=function(){this._frames=[],this._frameNames=[]},b.FrameData.prototype={addFrame:function(a){return a.index=this._frames.length,this._frames.push(a),""!==a.name&&(this._frameNames[a.name]=a.index),a},getFrame:function(a){return a>this._frames.length&&(a=0),this._frames[a]},getFrameByName:function(a){return"number"==typeof this._frameNames[a]?this._frames[this._frameNames[a]]:null},checkFrameName:function(a){return null==this._frameNames[a]?!1:!0},getFrameRange:function(a,b,c){"undefined"==typeof c&&(c=[]);for(var d=a;b>=d;d++)c.push(this._frames[d]);return c},getFrames:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0;dd;d++)c.push(b?this.getFrame(a[d]):this.getFrameByName(a[d]));return c},getFrameIndexes:function(a,b,c){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=[]),"undefined"==typeof a||0===a.length)for(var d=0,e=this._frames.length;e>d;d++)c.push(this._frames[d].index);else for(var d=0,e=a.length;e>d;d++)b?c.push(a[d]):this.getFrameByName(a[d])&&c.push(this.getFrameByName(a[d]).index);return c}},b.FrameData.prototype.constructor=b.FrameData,Object.defineProperty(b.FrameData.prototype,"total",{get:function(){return this._frames.length}}),b.AnimationParser={spriteSheet:function(a,c,d,e,f,g,h){var i=a.cache.getImage(c);if(null==i)return null;var j=i.width,k=i.height;0>=d&&(d=Math.floor(-j/Math.min(-1,d))),0>=e&&(e=Math.floor(-k/Math.min(-1,e)));var l=Math.floor((j-g)/(d+h)),m=Math.floor((k-g)/(e+h)),n=l*m;if(-1!==f&&(n=f),0===j||0===k||d>j||e>k||0===n)return console.warn("Phaser.AnimationParser.spriteSheet: width/height zero or width/height < given frameWidth/frameHeight"),null;for(var o=new b.FrameData,p=g,q=g,r=0;n>r;r++){var s=a.rnd.uuid();o.addFrame(new b.Frame(r,p,q,d,e,"",s)),PIXI.TextureCache[s]=new PIXI.Texture(PIXI.BaseTextureCache[c],{x:p,y:q,width:d,height:e}),p+=d+h,p+d>j&&(p=g,q+=e+h)}return o},JSONData:function(a,c,d){if(!c.frames)return console.warn("Phaser.AnimationParser.JSONData: Invalid Texture Atlas JSON given, missing 'frames' array"),void console.log(c);for(var e,f=new b.FrameData,g=c.frames,h=0;h tag");for(var e,f,g,h,i,j,k,l,m,n,o,p,q=new b.FrameData,r=c.getElementsByTagName("SubTexture"),s=0;s0)for(var c=0;c0)for(var c=0;c0)for(var c=0;c0?(this._fileIndex=0,this._progressChunk=100/this._fileList.length,this.loadFile()):(this.progress=100,this.progressFloat=100,this.hasLoaded=!0,this.onLoadComplete.dispatch()))},loadFile:function(){if(!this._fileList[this._fileIndex])return void console.warn("Phaser.Loader loadFile invalid index "+this._fileIndex);var a=this._fileList[this._fileIndex],c=this;switch(this.onFileStart.dispatch(this.progress,a.key),a.type){case"image":case"spritesheet":case"textureatlas":case"bitmapfont":a.data=new Image,a.data.name=a.key,a.data.onload=function(){return c.fileComplete(c._fileIndex)},a.data.onerror=function(){return c.fileError(c._fileIndex)},this.crossOrigin&&(a.data.crossOrigin=this.crossOrigin),a.data.src=this.baseURL+a.url;break;case"audio":a.url=this.getAudioURL(a.url),null!==a.url?this.game.sound.usingWebAudio?(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="arraybuffer",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send()):this.game.sound.usingAudioTag&&(this.game.sound.touchLocked?(a.data=new Audio,a.data.name=a.key,a.data.preload="auto",a.data.src=this.baseURL+a.url,this.fileComplete(this._fileIndex)):(a.data=new Audio,a.data.name=a.key,a.data.onerror=function(){return c.fileError(c._fileIndex)},a.data.preload="auto",a.data.src=this.baseURL+a.url,a.data.addEventListener("canplaythrough",b.GAMES[this.game.id].load.fileComplete(this._fileIndex),!1),a.data.load())):this.fileError(this._fileIndex);break;case"json":window.XDomainRequest?(this._ajax=new window.XDomainRequest,this._ajax.timeout=3e3,this._ajax.onerror=function(){return c.dataLoadError(c._fileIndex)},this._ajax.ontimeout=function(){return c.dataLoadError(c._fileIndex)},this._ajax.onprogress=function(){},this._ajax.onload=function(){return c.jsonLoadComplete(c._fileIndex)},this._ajax.open("GET",this.baseURL+a.url,!0),this._ajax.send()):(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return c.jsonLoadComplete(c._fileIndex)},this._xhr.onerror=function(){return c.dataLoadError(c._fileIndex)},this._xhr.send());break;case"tilemap":if(this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",a.format===b.Tilemap.TILED_JSON)this._xhr.onload=function(){return c.jsonLoadComplete(c._fileIndex)};else{if(a.format!==b.Tilemap.CSV)throw new Error("Phaser.Loader. Invalid Tilemap format: "+a.format);this._xhr.onload=function(){return c.csvLoadComplete(c._fileIndex)}}this._xhr.onerror=function(){return c.dataLoadError(c._fileIndex)},this._xhr.send();break;case"text":case"script":case"physics":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="text",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send();break;case"binary":this._xhr.open("GET",this.baseURL+a.url,!0),this._xhr.responseType="arraybuffer",this._xhr.onload=function(){return c.fileComplete(c._fileIndex)},this._xhr.onerror=function(){return c.fileError(c._fileIndex)},this._xhr.send()}},getAudioURL:function(a){var b;"string"==typeof a&&(a=[a]);for(var c=0;c100&&(this.progress=100),null!==this.preloadSprite&&(0===this.preloadSprite.direction?(this.preloadSprite.rect.width=Math.floor(this.preloadSprite.width/100*this.progress),this.preloadSprite.sprite.crop(this.preloadSprite.rect)):(this.preloadSprite.rect.height=Math.floor(this.preloadSprite.height/100*this.progress),this.preloadSprite.sprite.crop(this.preloadSprite.rect))),this.onFileComplete.dispatch(this.progress,this._fileList[a].key,b,this.totalLoadedFiles(),this._fileList.length),this.totalQueuedFiles()>0?(this._fileIndex++,this.loadFile()):(this.hasLoaded=!0,this.isLoading=!1,this.removeAll(),this.onLoadComplete.dispatch())},totalLoadedFiles:function(){for(var a=0,b=0;b=this.durationMS&&(this.usingWebAudio?this.loop?(this.onLoop.dispatch(this),""===this.currentMarker?(this.currentTime=0,this.startTime=this.game.time.now):(this.onMarkerComplete.dispatch(this.currentMarker,this),this.play(this.currentMarker,0,this.volume,!0,!0))):this.stop():this.loop?(this.onLoop.dispatch(this),this.play(this.currentMarker,0,this.volume,!0,!0)):this.stop()))},play:function(a,b,c,d,e){if("undefined"==typeof a&&(a=""),"undefined"==typeof e&&(e=!0),this.isPlaying!==!0||e!==!1||this.override!==!1){if(this.isPlaying&&this.override&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.currentMarker=a,""!==a){if(!this.markers[a])return void console.warn("Phaser.Sound.play: audio marker "+a+" doesn't exist");this.position=this.markers[a].start,this.volume=this.markers[a].volume,this.loop=this.markers[a].loop,this.duration=this.markers[a].duration,this.durationMS=this.markers[a].durationMS,"undefined"!=typeof c&&(this.volume=c),"undefined"!=typeof d&&(this.loop=d),this._tempMarker=a,this._tempPosition=this.position,this._tempVolume=this.volume,this._tempLoop=this.loop}else b=b||0,"undefined"==typeof c&&(c=this._volume),"undefined"==typeof d&&(d=this.loop),this.position=b,this.volume=c,this.loop=d,this.duration=0,this.durationMS=0,this._tempMarker=a,this._tempPosition=b,this._tempVolume=c,this._tempLoop=d;this.usingWebAudio?this.game.cache.isSoundDecoded(this.key)?(null==this._buffer&&(this._buffer=this.game.cache.getSoundData(this.key)),this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this._sound.connect(this.externalNode?this.externalNode.input:this.gainNode),this.totalDuration=this._sound.buffer.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this.loop&&""===a&&(this._sound.loop=!0),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,this.position,this.duration):this._sound.start(0,this.position,this.duration),this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):(this.pendingPlayback=!0,this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).isDecoding===!1&&this.game.sound.decode(this.key,this)):this.game.cache.getSound(this.key)&&this.game.cache.getSound(this.key).locked?(this.game.cache.reloadSound(this.key),this.pendingPlayback=!0):this._sound&&(this.game.device.cocoonJS||4===this._sound.readyState)?(this._sound.play(),this.totalDuration=this._sound.duration,0===this.duration&&(this.duration=this.totalDuration,this.durationMS=1e3*this.totalDuration),this._sound.currentTime=this.position,this._sound.muted=this._muted,this._sound.volume=this._muted?0:this._volume,this.isPlaying=!0,this.startTime=this.game.time.now,this.currentTime=0,this.stopTime=this.startTime+this.durationMS,this.onPlay.dispatch(this)):this.pendingPlayback=!0}},restart:function(a,b,c,d){a=a||"",b=b||0,c=c||1,"undefined"==typeof d&&(d=!1),this.play(a,b,c,d,!0)},pause:function(){this.isPlaying&&this._sound&&(this.stop(),this.isPlaying=!1,this.paused=!0,this.pausedPosition=this.currentTime,this.pausedTime=this.game.time.now,this.onPause.dispatch(this))},resume:function(){if(this.paused&&this._sound){if(this.usingWebAudio){var a=this.position+this.pausedPosition/1e3;this._sound=this.context.createBufferSource(),this._sound.buffer=this._buffer,this._sound.connect(this.externalNode?this.externalNode.input:this.gainNode),this.loop&&(this._sound.loop=!0),"undefined"==typeof this._sound.start?this._sound.noteGrainOn(0,a,this.duration):this._sound.start(0,a,this.duration)}else this._sound.play();this.isPlaying=!0,this.paused=!1,this.startTime+=this.game.time.now-this.pausedTime,this.onResume.dispatch(this)}},stop:function(){this.isPlaying&&this._sound&&(this.usingWebAudio?"undefined"==typeof this._sound.stop?this._sound.noteOff(0):this._sound.stop(0):this.usingAudioTag&&(this._sound.pause(),this._sound.currentTime=0)),this.isPlaying=!1;var a=this.currentMarker;""!==this.currentMarker&&this.onMarkerComplete.dispatch(this.currentMarker,this),this.currentMarker="",this.onStop.dispatch(this,a)},destroy:function(a){"undefined"==typeof a&&(a=!0),this.stop(),a&&this.game.sound.remove(this),this.markers={},this.context=null,this._buffer=null,this.externalNode=null,this.onDecoded.dispose(),this.onPlay.dispose(),this.onPause.dispose(),this.onResume.dispose(),this.onLoop.dispose(),this.onStop.dispose(),this.onMute.dispose(),this.onMarkerComplete.dispose()}},b.Sound.prototype.constructor=b.Sound,Object.defineProperty(b.Sound.prototype,"isDecoding",{get:function(){return this.game.cache.getSound(this.key).isDecoding}}),Object.defineProperty(b.Sound.prototype,"isDecoded",{get:function(){return this.game.cache.isSoundDecoded(this.key)}}),Object.defineProperty(b.Sound.prototype,"mute",{get:function(){return this._muted||this.game.sound.mute},set:function(a){a=a||null,a?(this._muted=!0,this.usingWebAudio?(this._muteVolume=this.gainNode.gain.value,this.gainNode.gain.value=0):this.usingAudioTag&&this._sound&&(this._muteVolume=this._sound.volume,this._sound.volume=0)):(this._muted=!1,this.usingWebAudio?this.gainNode.gain.value=this._muteVolume:this.usingAudioTag&&this._sound&&(this._sound.volume=this._muteVolume)),this.onMute.dispatch(this)}}),Object.defineProperty(b.Sound.prototype,"volume",{get:function(){return this._volume},set:function(a){this.usingWebAudio?(this._volume=a,this.gainNode.gain.value=a):this.usingAudioTag&&this._sound&&a>=0&&1>=a&&(this._volume=a,this._sound.volume=a)}}),b.SoundManager=function(a){this.game=a,this.onSoundDecode=new b.Signal,this._codeMuted=!1,this._muted=!1,this._unlockSource=null,this._volume=1,this._sounds=[],this.context=null,this.usingWebAudio=!0,this.usingAudioTag=!1,this.noAudio=!1,this.connectToMaster=!0,this.touchLocked=!1,this.channels=32},b.SoundManager.prototype={boot:function(){if(this.game.device.iOS&&this.game.device.webAudio===!1&&(this.channels=1),this.game.device.iOS||window.PhaserGlobal&&window.PhaserGlobal.fakeiOSTouchLock?(this.game.input.touch.callbackContext=this,this.game.input.touch.touchStartCallback=this.unlock,this.game.input.mouse.callbackContext=this,this.game.input.mouse.mouseDownCallback=this.unlock,this.touchLocked=!0):this.touchLocked=!1,window.PhaserGlobal){if(window.PhaserGlobal.disableAudio===!0)return this.usingWebAudio=!1,void(this.noAudio=!0);if(window.PhaserGlobal.disableWebAudio===!0)return this.usingWebAudio=!1,this.usingAudioTag=!0,void(this.noAudio=!1)}if(window.AudioContext)try{this.context=new window.AudioContext}catch(a){this.context=null,this.usingWebAudio=!1,this.noAudio=!0}else if(window.webkitAudioContext)try{this.context=new window.webkitAudioContext}catch(a){this.context=null,this.usingWebAudio=!1,this.noAudio=!0}window.Audio&&null===this.context&&(this.usingWebAudio=!1,this.usingAudioTag=!0,this.noAudio=!1),null!==this.context&&(this.masterGain="undefined"==typeof this.context.createGain?this.context.createGainNode():this.context.createGain(),this.masterGain.gain.value=1,this.masterGain.connect(this.context.destination))},unlock:function(){if(this.touchLocked!==!1)if(this.game.device.webAudio===!1||window.PhaserGlobal&&window.PhaserGlobal.disableWebAudio===!0)this.touchLocked=!1,this._unlockSource=null,this.game.input.touch.callbackContext=null,this.game.input.touch.touchStartCallback=null,this.game.input.mouse.callbackContext=null,this.game.input.mouse.mouseDownCallback=null;else{var a=this.context.createBuffer(1,1,22050);this._unlockSource=this.context.createBufferSource(),this._unlockSource.buffer=a,this._unlockSource.connect(this.context.destination),this._unlockSource.noteOn(0)}},stopAll:function(){for(var a=0;a>>24,c.b=(16711680&a)>>>16,c.g=(65280&a)>>>8,c.r=255&a):(c.r=(4278190080&a)>>>24,c.g=(16711680&a)>>>16,c.b=(65280&a)>>>8,c.a=255&a),c.color=a,c.rgba="rgba("+c.r+","+c.g+","+c.b+","+c.a/255+")",d&&b.Color.RGBtoHSL(c.r,c.g,c.b,c),e&&b.Color.RGBtoHSV(c.r,c.g,c.b,c),c},fromRGBA:function(a,c){return c||(c=b.Color.createColor()),c.r=(4278190080&a)>>>24,c.g=(16711680&a)>>>16,c.b=(65280&a)>>>8,c.a=255&a,c.rgba="rgba("+c.r+","+c.g+","+c.b+","+c.a+")",c},toRGBA:function(a,b,c,d){return a<<24|b<<16|c<<8|d},RGBtoHSL:function(a,c,d,e){e||(e=b.Color.createColor(a,c,d,1)),a/=255,c/=255,d/=255;var f=Math.min(a,c,d),g=Math.max(a,c,d);if(e.h=0,e.s=0,e.l=(g+f)/2,g!==f){var h=g-f;e.s=e.l>.5?h/(2-g-f):h/(g+f),g===a?e.h=(c-d)/h+(d>c?6:0):g===c?e.h=(d-a)/h+2:g===d&&(e.h=(a-c)/h+4),e.h/=6}return e},HSLtoRGB:function(a,c,d,e){if(e?(e.r=d,e.g=d,e.b=d):e=b.Color.createColor(d,d,d),0!==c){var f=.5>d?d*(1+c):d+c-d*c,g=2*d-f;e.r=b.Color.hueToColor(g,f,a+1/3),e.g=b.Color.hueToColor(g,f,a),e.b=b.Color.hueToColor(g,f,a-1/3)}return e.r=Math.floor(255*e.r|0),e.g=Math.floor(255*e.g|0),e.b=Math.floor(255*e.b|0),b.Color.updateColor(e),e},RGBtoHSV:function(a,c,d,e){e||(e=b.Color.createColor(a,c,d,255)),a/=255,c/=255,d/=255;var f=Math.min(a,c,d),g=Math.max(a,c,d),h=g-f;return e.h=0,e.s=0===g?0:h/g,e.v=g,g!==f&&(g===a?e.h=(c-d)/h+(d>c?6:0):g===c?e.h=(d-a)/h+2:g===d&&(e.h=(a-c)/h+4),e.h/=6),e},HSVtoRGB:function(a,c,d,e){"undefined"==typeof e&&(e=b.Color.createColor(0,0,0,1,a,c,0,d));var f,g,h,i=Math.floor(6*a),j=6*a-i,k=d*(1-c),l=d*(1-j*c),m=d*(1-(1-j)*c);switch(i%6){case 0:f=d,g=m,h=k;break;case 1:f=l,g=d,h=k;break;case 2:f=k,g=d,h=m;break;case 3:f=k,g=l,h=d;break;case 4:f=m,g=k,h=d;break;case 5:f=d,g=k,h=l}return e.r=Math.floor(255*f),e.g=Math.floor(255*g),e.b=Math.floor(255*h),b.Color.updateColor(e),e},hueToColor:function(a,b,c){return 0>c&&(c+=1),c>1&&(c-=1),1/6>c?a+6*(b-a)*c:.5>c?b:2/3>c?a+(b-a)*(2/3-c)*6:a},createColor:function(a,b,c,d,e,f,g,h){var i={r:a||0,g:b||0,b:c||0,a:d||1,h:e||0,s:f||0,l:g||0,v:h||0,color:0};return i.rgba="rgba("+i.r+","+i.g+","+i.b+","+i.a+")",i},updateColor:function(a){return a.rgba="rgba("+a.r+","+a.g+","+a.b+","+a.a+")",a},getColor32:function(a,b,c,d){return a<<24|b<<16|c<<8|d},getColor:function(a,b,c){return a<<16|b<<8|c},RGBtoString:function(a,c,d,e,f){return"undefined"==typeof e&&(e=255),"undefined"==typeof f&&(f="#"),"#"===f?"#"+((1<<24)+(a<<16)+(c<<8)+d).toString(16).slice(1):"0x"+b.Color.componentToHex(e)+b.Color.componentToHex(a)+b.Color.componentToHex(c)+b.Color.componentToHex(d)},hexToRGB:function(a){var c=b.Color.hexToColor(a);return c?b.Color.getColor32(c.a,c.r,c.g,c.b):void 0},hexToColor:function(a,c){c||(c=b.Color.createColor());var d=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;a=a.replace(d,function(a,b,c,d){return b+b+c+c+d+d});var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a);return e&&(c.r=parseInt(e[1],16),c.g=parseInt(e[2],16),c.b=parseInt(e[3],16)),c},componentToHex:function(a){var b=a.toString(16);return 1==b.length?"0"+b:b},HSVColorWheel:function(a,c){"undefined"==typeof a&&(a=1),"undefined"==typeof c&&(c=1);for(var d=[],e=0;359>=e;e++)d.push(b.Color.HSVtoRGB(e/359,a,c));return d},HSLColorWheel:function(a,c){"undefined"==typeof a&&(a=.5),"undefined"==typeof c&&(c=.5);for(var d=[],e=0;359>=e;e++)d.push(b.Color.HSLtoRGB(e/359,a,c));return d},interpolateColor:function(a,c,d,e,f){"undefined"==typeof f&&(f=255);var g=b.Color.getRGB(a),h=b.Color.getRGB(c),i=(h.red-g.red)*e/d+g.red,j=(h.green-g.green)*e/d+g.green,k=(h.blue-g.blue)*e/d+g.blue;return b.Color.getColor32(f,i,j,k)},interpolateColorWithRGB:function(a,c,d,e,f,g){var h=b.Color.getRGB(a),i=(c-h.red)*g/f+h.red,j=(d-h.green)*g/f+h.green,k=(e-h.blue)*g/f+h.blue;return b.Color.getColor(i,j,k)},interpolateRGB:function(a,c,d,e,f,g,h,i){var j=(e-a)*i/h+a,k=(f-c)*i/h+c,l=(g-d)*i/h+d;return b.Color.getColor(j,k,l)},getRandomColor:function(a,c,d){if("undefined"==typeof a&&(a=0),"undefined"==typeof c&&(c=255),"undefined"==typeof d&&(d=255),c>255||a>c)return b.Color.getColor(255,255,255);var e=a+Math.round(Math.random()*(c-a)),f=a+Math.round(Math.random()*(c-a)),g=a+Math.round(Math.random()*(c-a));return b.Color.getColor32(d,e,f,g)},getRGB:function(a){return{alpha:a>>>24,red:a>>16&255,green:a>>8&255,blue:255&a} +},getWebRGB:function(a){var b=(a>>>24)/255,c=a>>16&255,d=a>>8&255,e=255&a;return"rgba("+c.toString()+","+d.toString()+","+e.toString()+","+b.toString()+")"},getAlpha:function(a){return a>>>24},getAlphaFloat:function(a){return(a>>>24)/255},getRed:function(a){return a>>16&255},getGreen:function(a){return a>>8&255},getBlue:function(a){return 255&a},getColorInfo:function(a){var c=b.Color.getRGB(a),d=b.Color.RGBtoHexstring(a)+"\n";return d=d.concat("Alpha: "+c.alpha+" Red: "+c.red+" Green: "+c.green+" Blue: "+c.blue)+"\n"},RGBtoHexstring:function(a){var c=b.Color.getRGB(a);return"0x"+b.Color.colorToHexstring(c.alpha)+b.Color.colorToHexstring(c.red)+b.Color.colorToHexstring(c.green)+b.Color.colorToHexstring(c.blue)},RGBtoWebstring:function(a){var c=b.Color.getRGB(a);return"#"+b.Color.colorToHexstring(c.red)+b.Color.colorToHexstring(c.green)+b.Color.colorToHexstring(c.blue)},colorToHexstring:function(a){var b="0123456789ABCDEF",c=a%16,d=(a-c)/16,e=b.charAt(d)+b.charAt(c);return e}},b.Physics=function(a,b){b=b||{},this.game=a,this.config=b,this.arcade=null,this.p2=null,this.ninja=null,this.box2d=null,this.chipmunk=null,this.parseConfig()},b.Physics.ARCADE=0,b.Physics.P2JS=1,b.Physics.NINJA=2,b.Physics.BOX2D=3,b.Physics.CHIPMUNK=5,b.Physics.prototype={parseConfig:function(){this.config.hasOwnProperty("arcade")&&this.config.arcade!==!0||!b.Physics.hasOwnProperty("Arcade")||(this.arcade=new b.Physics.Arcade(this.game),this.game.time.deltaCap=.2),this.config.hasOwnProperty("ninja")&&this.config.ninja===!0&&b.Physics.hasOwnProperty("Ninja")&&(this.ninja=new b.Physics.Ninja(this.game)),this.config.hasOwnProperty("p2")&&this.config.p2===!0&&b.Physics.hasOwnProperty("P2")&&(this.p2=new b.Physics.P2(this.game,this.config))},startSystem:function(a){if(a===b.Physics.ARCADE?this.arcade=new b.Physics.Arcade(this.game):a===b.Physics.P2JS&&(this.p2=new b.Physics.P2(this.game,this.config)),a===b.Physics.NINJA)this.ninja=new b.Physics.Ninja(this.game);else{if(a===b.Physics.BOX2D&&null===this.box2d)throw new Error("The Box2D physics system has not been implemented yet.");if(a===b.Physics.CHIPMUNK&&null===this.chipmunk)throw new Error("The Chipmunk physics system has not been implemented yet.")}},enable:function(a,c,d){"undefined"==typeof c&&(c=b.Physics.ARCADE),"undefined"==typeof d&&(d=!1),c===b.Physics.ARCADE?this.arcade.enable(a):c===b.Physics.P2JS&&this.p2?this.p2.enable(a,d):c===b.Physics.NINJA&&this.ninja&&this.ninja.enableAABB(a)},preUpdate:function(){this.p2&&this.p2.preUpdate()},update:function(){this.p2&&this.p2.update()},setBoundsToWorld:function(){this.arcade&&this.arcade.setBoundsToWorld(),this.ninja&&this.ninja.setBoundsToWorld(),this.p2&&this.p2.setBoundsToWorld()},clear:function(){this.p2&&this.p2.clear()},destroy:function(){this.p2&&this.p2.destroy(),this.arcade=null,this.ninja=null,this.p2=null}},b.Physics.prototype.constructor=b.Physics,b.Physics.Arcade=function(a){this.game=a,this.gravity=new b.Point,this.bounds=new b.Rectangle(0,0,a.world.width,a.world.height),this.checkCollision={up:!0,down:!0,left:!0,right:!0},this.maxObjects=10,this.maxLevels=4,this.OVERLAP_BIAS=4,this.TILE_BIAS=16,this.forceX=!1,this.quadTree=new b.QuadTree(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels),this._overlap=0,this._maxOverlap=0,this._velocity1=0,this._velocity2=0,this._newVelocity1=0,this._newVelocity2=0,this._average=0,this._mapData=[],this._result=!1,this._total=0,this._angle=0,this._dx=0,this._dy=0},b.Physics.Arcade.prototype.constructor=b.Physics.Arcade,b.Physics.Arcade.prototype={setBounds:function(a,b,c,d){this.bounds.setTo(a,b,c,d)},setBoundsToWorld:function(){this.bounds.setTo(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height)},enable:function(a,c){"undefined"==typeof c&&(c=!0);var d=1;if(Array.isArray(a))for(d=a.length;d--;)a[d]instanceof b.Group?this.enable(a[d].children,c):(this.enableBody(a[d]),c&&a[d].hasOwnProperty("children")&&a[d].children.length>0&&this.enable(a[d],!0));else a instanceof b.Group?this.enable(a.children,c):(this.enableBody(a),c&&a.hasOwnProperty("children")&&a.children.length>0&&this.enable(a.children,!0))},enableBody:function(a){a.hasOwnProperty("body")&&null===a.body&&(a.body=new b.Physics.Arcade.Body(a))},updateMotion:function(a){this._velocityDelta=this.computeVelocity(0,a,a.angularVelocity,a.angularAcceleration,a.angularDrag,a.maxAngular)-a.angularVelocity,a.angularVelocity+=this._velocityDelta,a.rotation+=a.angularVelocity*this.game.time.physicsElapsed,a.velocity.x=this.computeVelocity(1,a,a.velocity.x,a.acceleration.x,a.drag.x,a.maxVelocity.x),a.velocity.y=this.computeVelocity(2,a,a.velocity.y,a.acceleration.y,a.drag.y,a.maxVelocity.y)},computeVelocity:function(a,b,c,d,e,f){return f=f||1e4,1==a&&b.allowGravity?c+=(this.gravity.x+b.gravity.x)*this.game.time.physicsElapsed:2==a&&b.allowGravity&&(c+=(this.gravity.y+b.gravity.y)*this.game.time.physicsElapsed),d?c+=d*this.game.time.physicsElapsed:e&&(this._drag=e*this.game.time.physicsElapsed,c-this._drag>0?c-=this._drag:c+this._drag<0?c+=this._drag:c=0),c>f?c=f:-f>c&&(c=-f),c},overlap:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!0);else this.collideHandler(a,b,c,d,e,!0);return this._total>0},collide:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!1);else this.collideHandler(a,b,c,d,e,!1);return this._total>0},collideHandler:function(a,c,d,e,f,g){return"undefined"!=typeof c||a.type!==b.GROUP&&a.type!==b.EMITTER?void(a&&c&&a.exists&&c.exists&&(a.type==b.SPRITE||a.type==b.TILESPRITE?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsSprite(a,c,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideSpriteVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideSpriteVsTilemapLayer(a,c,d,e,f):a.type==b.GROUP?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsGroup(c,a,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideGroupVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,c,d,e,f):a.type==b.TILEMAPLAYER?c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsTilemapLayer(c,a,d,e,f):(c.type==b.GROUP||c.type==b.EMITTER)&&this.collideGroupVsTilemapLayer(c,a,d,e,f):a.type==b.EMITTER&&(c.type==b.SPRITE||c.type==b.TILESPRITE?this.collideSpriteVsGroup(c,a,d,e,f,g):c.type==b.GROUP||c.type==b.EMITTER?this.collideGroupVsGroup(a,c,d,e,f,g):c.type==b.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,c,d,e,f)))):void this.collideGroupVsSelf(a,d,e,f,g)},collideSpriteVsSprite:function(a,b,c,d,e,f){return a.body&&b.body?(this.separate(a.body,b.body,d,e,f)&&(c&&c.call(e,a,b),this._total++),!0):!1},collideSpriteVsGroup:function(a,b,c,d,e,f){if(0!==b.length&&a.body){this.quadTree.clear(),this.quadTree.reset(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,this.maxObjects,this.maxLevels),this.quadTree.populate(b),this._potentials=this.quadTree.retrieve(a);for(var g=0,h=this._potentials.length;h>g;g++)this.separate(a.body,this._potentials[g],d,e,f)&&(c&&c.call(e,a,this._potentials[g].sprite),this._total++)}},collideGroupVsSelf:function(a,b,c,d,e){if(0!==a.length)for(var f=a.children.length,g=0;f>g;g++)for(var h=g+1;f>=h;h++)a.children[g]&&a.children[h]&&a.children[g].exists&&a.children[h].exists&&this.collideSpriteVsSprite(a.children[g],a.children[h],b,c,d,e)},collideGroupVsGroup:function(a,b,c,d,e,f){if(0!==a.length&&0!==b.length)for(var g=0,h=a.children.length;h>g;g++)a.children[g].exists&&this.collideSpriteVsGroup(a.children[g],b,c,d,e,f)},collideSpriteVsTilemapLayer:function(a,b,c,d,e){if(a.body&&(this._mapData=b.getTiles(a.body.position.x-a.body.tilePadding.x,a.body.position.y-a.body.tilePadding.y,a.body.width+a.body.tilePadding.x,a.body.height+a.body.tilePadding.y,!1,!1),0!==this._mapData.length))for(var f=0;ff;f++)a.children[f].exists&&this.collideSpriteVsTilemapLayer(a.children[f],b,c,d,e)},separate:function(a,b,c,d,e){return this.intersects(a,b)?c&&c.call(d,a.sprite,b.sprite)===!1?!1:e?!0:(this._result=this.forceX||Math.abs(this.gravity.y+a.gravity.y)=b.right?!1:a.position.y>=b.bottom?!1:!0},separateX:function(a,b,c){return a.immovable&&b.immovable?!1:(this._overlap=0,this.intersects(a,b)&&(this._maxOverlap=a.deltaAbsX()+b.deltaAbsX()+this.OVERLAP_BIAS,0===a.deltaX()&&0===b.deltaX()?(a.embedded=!0,b.embedded=!0):a.deltaX()>b.deltaX()?(this._overlap=a.right-b.x,this._overlap>this._maxOverlap||a.checkCollision.right===!1||b.checkCollision.left===!1?this._overlap=0:(a.touching.none=!1,a.touching.right=!0,b.touching.none=!1,b.touching.left=!0)):a.deltaX()this._maxOverlap||a.checkCollision.left===!1||b.checkCollision.right===!1?this._overlap=0:(a.touching.none=!1,a.touching.left=!0,b.touching.none=!1,b.touching.right=!0)),0!==this._overlap)?(a.overlapX=this._overlap,b.overlapX=this._overlap,c||a.customSeparateX||b.customSeparateX?!0:(this._velocity1=a.velocity.x,this._velocity2=b.velocity.x,a.immovable||b.immovable?a.immovable?b.immovable||(b.x+=this._overlap,b.velocity.x=this._velocity1-this._velocity2*b.bounce.x):(a.x=a.x-this._overlap,a.velocity.x=this._velocity2-this._velocity1*a.bounce.x):(this._overlap*=.5,a.x=a.x-this._overlap,b.x+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.x=this._average+this._newVelocity1*a.bounce.x,b.velocity.x=this._average+this._newVelocity2*b.bounce.x),!0)):!1)},separateY:function(a,b,c){return a.immovable&&b.immovable?!1:(this._overlap=0,this.intersects(a,b)&&(this._maxOverlap=a.deltaAbsY()+b.deltaAbsY()+this.OVERLAP_BIAS,0===a.deltaY()&&0===b.deltaY()?(a.embedded=!0,b.embedded=!0):a.deltaY()>b.deltaY()?(this._overlap=a.bottom-b.y,this._overlap>this._maxOverlap||a.checkCollision.down===!1||b.checkCollision.up===!1?this._overlap=0:(a.touching.none=!1,a.touching.down=!0,b.touching.none=!1,b.touching.up=!0)):a.deltaY()this._maxOverlap||a.checkCollision.up===!1||b.checkCollision.down===!1?this._overlap=0:(a.touching.none=!1,a.touching.up=!0,b.touching.none=!1,b.touching.down=!0)),0!==this._overlap)?(a.overlapY=this._overlap,b.overlapY=this._overlap,c||a.customSeparateY||b.customSeparateY?!0:(this._velocity1=a.velocity.y,this._velocity2=b.velocity.y,a.immovable||b.immovable?a.immovable?b.immovable||(b.y+=this._overlap,b.velocity.y=this._velocity1-this._velocity2*b.bounce.y,a.moves&&(b.x+=a.x-a.prev.x)):(a.y=a.y-this._overlap,a.velocity.y=this._velocity2-this._velocity1*a.bounce.y,b.moves&&(a.x+=b.x-b.prev.x)):(this._overlap*=.5,a.y=a.y-this._overlap,b.y+=this._overlap,this._newVelocity1=Math.sqrt(this._velocity2*this._velocity2*b.mass/a.mass)*(this._velocity2>0?1:-1),this._newVelocity2=Math.sqrt(this._velocity1*this._velocity1*a.mass/b.mass)*(this._velocity1>0?1:-1),this._average=.5*(this._newVelocity1+this._newVelocity2),this._newVelocity1-=this._average,this._newVelocity2-=this._average,a.velocity.y=this._average+this._newVelocity1*a.bounce.y,b.velocity.y=this._average+this._newVelocity2*b.bounce.y),!0)):!1)},separateTile:function(a,b,c){if(!c.intersects(b.position.x,b.position.y,b.right,b.bottom))return!1;if(c.collisionCallback&&!c.collisionCallback.call(c.collisionCallbackContext,b.sprite,c))return!1;if(c.layer.callbacks[c.index]&&!c.layer.callbacks[c.index].callback.call(c.layer.callbacks[c.index].callbackContext,b.sprite,c))return!1;if(!(c.faceLeft||c.faceRight||c.faceTop||c.faceBottom))return!1;var d=0,e=0,f=0,g=1;if(b.deltaAbsX()>b.deltaAbsY()?f=-1:b.deltaAbsX()f){if((c.faceLeft||c.faceRight)&&(d=this.tileCheckX(b,c),0!==d&&!c.intersects(b.position.x,b.position.y,b.right,b.bottom)))return!0;(c.faceTop||c.faceBottom)&&(e=this.tileCheckY(b,c))}else{if((c.faceTop||c.faceBottom)&&(e=this.tileCheckY(b,c),0!==e&&!c.intersects(b.position.x,b.position.y,b.right,b.bottom)))return!0;(c.faceLeft||c.faceRight)&&(d=this.tileCheckX(b,c))}return 0!==d||0!==e},tileCheckX:function(a,b){var c=0;return a.deltaX()<0&&!a.blocked.left&&b.collideRight&&a.checkCollision.left?b.faceRight&&a.x0&&!a.blocked.right&&b.collideLeft&&a.checkCollision.right&&b.faceLeft&&a.right>b.left&&(c=a.right-b.left,c>this.TILE_BIAS&&(c=0)),0!==c&&this.processTileSeparationX(a,c),c},tileCheckY:function(a,b){var c=0;return a.deltaY()<0&&!a.blocked.up&&b.collideDown&&a.checkCollision.up?b.faceBottom&&a.y0&&!a.blocked.down&&b.collideUp&&a.checkCollision.down&&b.faceTop&&a.bottom>b.top&&(c=a.bottom-b.top,c>this.TILE_BIAS&&(c=0)),0!==c&&this.processTileSeparationY(a,c),c},processTileSeparationX:function(a,b){0>b?a.blocked.left=!0:b>0&&(a.blocked.right=!0),a.position.x-=b,a.velocity.x=0===a.bounce.x?0:-a.velocity.x*a.bounce.x},processTileSeparationY:function(a,b){0>b?a.blocked.up=!0:b>0&&(a.blocked.down=!0),a.position.y-=b,a.velocity.y=0===a.bounce.y?0:-a.velocity.y*a.bounce.y},moveToObject:function(a,b,c,d){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=0),this._angle=Math.atan2(b.y-a.y,b.x-a.x),d>0&&(c=this.distanceBetween(a,b)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*c,a.body.velocity.y=Math.sin(this._angle)*c,this._angle},moveToPointer:function(a,b,c,d){return"undefined"==typeof b&&(b=60),c=c||this.game.input.activePointer,"undefined"==typeof d&&(d=0),this._angle=this.angleToPointer(a,c),d>0&&(b=this.distanceToPointer(a,c)/(d/1e3)),a.body.velocity.x=Math.cos(this._angle)*b,a.body.velocity.y=Math.sin(this._angle)*b,this._angle},moveToXY:function(a,b,c,d,e){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=0),this._angle=Math.atan2(c-a.y,b-a.x),e>0&&(d=this.distanceToXY(a,b,c)/(e/1e3)),a.body.velocity.x=Math.cos(this._angle)*d,a.body.velocity.y=Math.sin(this._angle)*d,this._angle},velocityFromAngle:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(this.game.math.degToRad(a))*c,Math.sin(this.game.math.degToRad(a))*c)},velocityFromRotation:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(a)*c,Math.sin(a)*c)},accelerationFromRotation:function(a,c,d){return"undefined"==typeof c&&(c=60),d=d||new b.Point,d.setTo(Math.cos(a)*c,Math.sin(a)*c)},accelerateToObject:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleBetween(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle},accelerateToPointer:function(a,b,c,d,e){return"undefined"==typeof c&&(c=60),"undefined"==typeof b&&(b=this.game.input.activePointer),"undefined"==typeof d&&(d=1e3),"undefined"==typeof e&&(e=1e3),this._angle=this.angleToPointer(a,b),a.body.acceleration.setTo(Math.cos(this._angle)*c,Math.sin(this._angle)*c),a.body.maxVelocity.setTo(d,e),this._angle},accelerateToXY:function(a,b,c,d,e,f){return"undefined"==typeof d&&(d=60),"undefined"==typeof e&&(e=1e3),"undefined"==typeof f&&(f=1e3),this._angle=this.angleToXY(a,b,c),a.body.acceleration.setTo(Math.cos(this._angle)*d,Math.sin(this._angle)*d),a.body.maxVelocity.setTo(e,f),this._angle},distanceBetween:function(a,b){return this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToXY:function(a,b,c){return this._dx=a.x-b,this._dy=a.y-c,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},distanceToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=a.x-b.x,this._dy=a.y-b.y,Math.sqrt(this._dx*this._dx+this._dy*this._dy)},angleBetween:function(a,b){return this._dx=b.x-a.x,this._dy=b.y-a.y,Math.atan2(this._dy,this._dx)},angleToXY:function(a,b,c){return this._dx=b-a.x,this._dy=c-a.y,Math.atan2(this._dy,this._dx)},angleToPointer:function(a,b){return b=b||this.game.input.activePointer,this._dx=b.worldX-a.x,this._dy=b.worldY-a.y,Math.atan2(this._dy,this._dx)}},b.Physics.Arcade.Body=function(a){this.sprite=a,this.game=a.game,this.type=b.Physics.ARCADE,this.offset=new b.Point,this.position=new b.Point(a.x,a.y),this.prev=new b.Point(this.position.x,this.position.y),this.allowRotation=!0,this.rotation=a.rotation,this.preRotation=a.rotation,this.sourceWidth=a.texture.frame.width,this.sourceHeight=a.texture.frame.height,this.width=a.width,this.height=a.height,this.halfWidth=Math.abs(a.width/2),this.halfHeight=Math.abs(a.height/2),this.center=new b.Point(a.x+this.halfWidth,a.y+this.halfHeight),this.velocity=new b.Point,this.newVelocity=new b.Point(0,0),this.deltaMax=new b.Point(0,0),this.acceleration=new b.Point,this.drag=new b.Point,this.allowGravity=!0,this.gravity=new b.Point(0,0),this.bounce=new b.Point,this.maxVelocity=new b.Point(1e4,1e4),this.angularVelocity=0,this.angularAcceleration=0,this.angularDrag=0,this.maxAngular=1e3,this.mass=1,this.angle=0,this.speed=0,this.facing=b.NONE,this.immovable=!1,this.moves=!0,this.customSeparateX=!1,this.customSeparateY=!1,this.overlapX=0,this.overlapY=0,this.embedded=!1,this.collideWorldBounds=!1,this.checkCollision={none:!1,any:!0,up:!0,down:!0,left:!0,right:!0},this.touching={none:!0,up:!1,down:!1,left:!1,right:!1},this.wasTouching={none:!0,up:!1,down:!1,left:!1,right:!1},this.blocked={up:!1,down:!1,left:!1,right:!1},this.tilePadding=new b.Point,this.phase=0,this._reset=!0,this._sx=a.scale.x,this._sy=a.scale.y,this._dx=0,this._dy=0},b.Physics.Arcade.Body.prototype={updateBounds:function(){var a=Math.abs(this.sprite.scale.x),b=Math.abs(this.sprite.scale.y);(a!==this._sx||b!==this._sy)&&(this.width=this.sourceWidth*a,this.height=this.sourceHeight*b,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this._sx=a,this._sy=b,this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight),this._reset=!0)},preUpdate:function(){this.phase=1,this.wasTouching.none=this.touching.none,this.wasTouching.up=this.touching.up,this.wasTouching.down=this.touching.down,this.wasTouching.left=this.touching.left,this.wasTouching.right=this.touching.right,this.touching.none=!0,this.touching.up=!1,this.touching.down=!1,this.touching.left=!1,this.touching.right=!1,this.blocked.up=!1,this.blocked.down=!1,this.blocked.left=!1,this.blocked.right=!1,this.embedded=!1,this.updateBounds(),this.position.x=this.sprite.world.x-this.sprite.anchor.x*this.width+this.offset.x,this.position.y=this.sprite.world.y-this.sprite.anchor.y*this.height+this.offset.y,this.rotation=this.sprite.angle,this.preRotation=this.rotation,(this._reset||1===this.sprite._cache[4])&&(this.prev.x=this.position.x,this.prev.y=this.position.y),this.moves&&(this.game.physics.arcade.updateMotion(this),this.newVelocity.set(this.velocity.x*this.game.time.physicsElapsed,this.velocity.y*this.game.time.physicsElapsed),this.position.x+=this.newVelocity.x,this.position.y+=this.newVelocity.y,(this.position.x!==this.prev.x||this.position.y!==this.prev.y)&&(this.speed=Math.sqrt(this.velocity.x*this.velocity.x+this.velocity.y*this.velocity.y),this.angle=Math.atan2(this.velocity.y,this.velocity.x)),this.collideWorldBounds&&this.checkWorldBounds()),this._dx=this.deltaX(),this._dy=this.deltaY(),this._reset=!1},postUpdate:function(){2!==this.phase&&(this.phase=2,this.deltaX()<0?this.facing=b.LEFT:this.deltaX()>0&&(this.facing=b.RIGHT),this.deltaY()<0?this.facing=b.UP:this.deltaY()>0&&(this.facing=b.DOWN),this.moves&&(this._dx=this.deltaX(),this._dy=this.deltaY(),0!==this.deltaMax.x&&0!==this._dx&&(this._dx<0&&this._dx<-this.deltaMax.x?this._dx=-this.deltaMax.x:this._dx>0&&this._dx>this.deltaMax.x&&(this._dx=this.deltaMax.x)),0!==this.deltaMax.y&&0!==this._dy&&(this._dy<0&&this._dy<-this.deltaMax.y?this._dy=-this.deltaMax.y:this._dy>0&&this._dy>this.deltaMax.y&&(this._dy=this.deltaMax.y)),this.sprite.x+=this._dx,this.sprite.y+=this._dy),this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight),this.allowRotation&&(this.sprite.angle+=this.deltaZ()),this.prev.x=this.position.x,this.prev.y=this.position.y)},destroy:function(){this.sprite=null},checkWorldBounds:function(){this.position.xthis.game.physics.arcade.bounds.right&&this.game.physics.arcade.checkCollision.right&&(this.position.x=this.game.physics.arcade.bounds.right-this.width,this.velocity.x*=-this.bounce.x,this.blocked.right=!0),this.position.ythis.game.physics.arcade.bounds.bottom&&this.game.physics.arcade.checkCollision.down&&(this.position.y=this.game.physics.arcade.bounds.bottom-this.height,this.velocity.y*=-this.bounce.y,this.blocked.down=!0)},setSize:function(a,b,c,d){c=c||this.offset.x,d=d||this.offset.y,this.sourceWidth=a,this.sourceHeight=b,this.width=this.sourceWidth*this._sx,this.height=this.sourceHeight*this._sy,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this.offset.setTo(c,d),this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight)},reset:function(a,b){this.velocity.set(0),this.acceleration.set(0),this.angularVelocity=0,this.angularAcceleration=0,this.position.x=a-this.sprite.anchor.x*this.width+this.offset.x,this.position.y=b-this.sprite.anchor.y*this.height+this.offset.y,this.prev.x=this.position.x,this.prev.y=this.position.y,this.rotation=this.sprite.angle,this.preRotation=this.rotation,this._sx=this.sprite.scale.x,this._sy=this.sprite.scale.y,this.center.setTo(this.position.x+this.halfWidth,this.position.y+this.halfHeight)},hitTest:function(a,c){return b.Rectangle.contains(this,a,c)},onFloor:function(){return this.blocked.down},onWall:function(){return this.blocked.left||this.blocked.right},deltaAbsX:function(){return this.deltaX()>0?this.deltaX():-this.deltaX()},deltaAbsY:function(){return this.deltaY()>0?this.deltaY():-this.deltaY()},deltaX:function(){return this.position.x-this.prev.x},deltaY:function(){return this.position.y-this.prev.y},deltaZ:function(){return this.rotation-this.preRotation}},Object.defineProperty(b.Physics.Arcade.Body.prototype,"bottom",{get:function(){return this.position.y+this.height}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"right",{get:function(){return this.position.x+this.width}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"x",{get:function(){return this.position.x},set:function(a){this.position.x=a}}),Object.defineProperty(b.Physics.Arcade.Body.prototype,"y",{get:function(){return this.position.y},set:function(a){this.position.y=a}}),b.Physics.Arcade.Body.render=function(a,b,c,d){"undefined"==typeof c&&(c=!0),d=d||"rgba(0,255,0,0.4)",c?(a.fillStyle=d,a.fillRect(b.position.x-b.game.camera.x,b.position.y-b.game.camera.y,b.width,b.height)):(a.strokeStyle=d,a.strokeRect(b.position.x-b.game.camera.x,b.position.y-b.game.camera.y,b.width,b.height))},b.Physics.Arcade.Body.renderBodyInfo=function(a,b){a.line("x: "+b.x.toFixed(2),"y: "+b.y.toFixed(2),"width: "+b.width,"height: "+b.height),a.line("velocity x: "+b.velocity.x.toFixed(2),"y: "+b.velocity.y.toFixed(2),"deltaX: "+b._dx.toFixed(2),"deltaY: "+b._dy.toFixed(2)),a.line("acceleration x: "+b.acceleration.x.toFixed(2),"y: "+b.acceleration.y.toFixed(2),"speed: "+b.speed.toFixed(2),"angle: "+b.angle.toFixed(2)),a.line("gravity x: "+b.gravity.x,"y: "+b.gravity.y,"bounce x: "+b.bounce.x.toFixed(2),"y: "+b.bounce.y.toFixed(2)),a.line("touching left: "+b.touching.left,"right: "+b.touching.right,"up: "+b.touching.up,"down: "+b.touching.down),a.line("blocked left: "+b.blocked.left,"right: "+b.blocked.right,"up: "+b.blocked.up,"down: "+b.blocked.down)},b.Physics.Arcade.Body.prototype.constructor=b.Physics.Arcade.Body,b.Particles=function(a){this.game=a,this.emitters={},this.ID=0},b.Particles.prototype={add:function(a){return this.emitters[a.name]=a,a},remove:function(a){delete this.emitters[a.name]},update:function(){for(var a in this.emitters)this.emitters[a].exists&&this.emitters[a].update()}},b.Particles.prototype.constructor=b.Particles,b.Particles.Arcade={},b.Particles.Arcade.Emitter=function(a,c,d,e){this.maxParticles=e||50,b.Group.call(this,a),this.name="emitter"+this.game.particles.ID++,this.type=b.EMITTER,this.width=1,this.height=1,this.minParticleSpeed=new b.Point(-100,-100),this.maxParticleSpeed=new b.Point(100,100),this.minParticleScale=1,this.maxParticleScale=1,this.scaleData=null,this.minRotation=-360,this.maxRotation=360,this.minParticleAlpha=1,this.maxParticleAlpha=1,this.alphaData=null,this.gravity=100,this.particleClass=b.Particle,this.particleDrag=new b.Point,this.angularDrag=0,this.frequency=100,this.lifespan=2e3,this.bounce=new b.Point,this.on=!1,this.particleAnchor=new b.Point(.5,.5),this.blendMode=b.blendModes.NORMAL,this.emitX=c,this.emitY=d,this.autoScale=!1,this.autoAlpha=!1,this.particleBringToTop=!1,this.particleSendToBack=!1,this._minParticleScale=new b.Point(1,1),this._maxParticleScale=new b.Point(1,1),this._quantity=0,this._timer=0,this._counter=0,this._explode=!0,this._frames=null},b.Particles.Arcade.Emitter.prototype=Object.create(b.Group.prototype),b.Particles.Arcade.Emitter.prototype.constructor=b.Particles.Arcade.Emitter,b.Particles.Arcade.Emitter.prototype.update=function(){if(this.on)if(this._explode){this._counter=0;do this.emitParticle(),this._counter++;while(this._counter=this._timer&&(this.emitParticle(),this._counter++,this._quantity>0&&this._counter>=this._quantity&&(this.on=!1),this._timer=this.game.time.now+this.frequency);for(var a=this.children.length;a--;)this.children[a].exists&&this.children[a].update()},b.Particles.Arcade.Emitter.prototype.makeParticles=function(a,b,c,d,e){"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=this.maxParticles),"undefined"==typeof d&&(d=!1),"undefined"==typeof e&&(e=!1);var f,g=0,h=a,i=b;for(this._frames=b;c>g;)"object"==typeof a&&(h=this.game.rnd.pick(a)),"object"==typeof b&&(i=this.game.rnd.pick(b)),f=new this.particleClass(this.game,0,0,h,i),this.game.physics.arcade.enable(f,!1),d?(f.body.checkCollision.any=!0,f.body.checkCollision.none=!1):f.body.checkCollision.none=!0,f.body.collideWorldBounds=e,f.exists=!1,f.visible=!1,f.anchor.copyFrom(this.particleAnchor),this.add(f),g++;return this},b.Particles.Arcade.Emitter.prototype.kill=function(){this.on=!1,this.alive=!1,this.exists=!1},b.Particles.Arcade.Emitter.prototype.revive=function(){this.alive=!0,this.exists=!0},b.Particles.Arcade.Emitter.prototype.start=function(a,b,c,d){"undefined"==typeof a&&(a=!0),"undefined"==typeof b&&(b=0),("undefined"==typeof c||null===c)&&(c=250),"undefined"==typeof d&&(d=0),this.revive(),this.visible=!0,this.on=!0,this._explode=a,this.lifespan=b,this.frequency=c,a?this._quantity=d:this._quantity+=d,this._counter=0,this._timer=this.game.time.now+c},b.Particles.Arcade.Emitter.prototype.emitParticle=function(){var a=this.getFirstExists(!1);null!==a&&(this.width>1||this.height>1?a.reset(this.game.rnd.integerInRange(this.left,this.right),this.game.rnd.integerInRange(this.top,this.bottom)):a.reset(this.emitX,this.emitY),a.angle=0,a.lifespan=this.lifespan,this.particleBringToTop?this.bringToTop(a):this.particleSendToBack&&this.sendToBack(a),this.autoScale?a.setScaleData(this.scaleData):1!==this.minParticleScale||1!==this.maxParticleScale?a.scale.set(this.game.rnd.realInRange(this.minParticleScale,this.maxParticleScale)):(this._minParticleScale.x!==this._maxParticleScale.x||this._minParticleScale.y!==this._maxParticleScale.y)&&a.scale.set(this.game.rnd.realInRange(this._minParticleScale.x,this._maxParticleScale.x),this.game.rnd.realInRange(this._minParticleScale.y,this._maxParticleScale.y)),a.frame=Array.isArray("object"===this._frames)?this.game.rnd.pick(this._frames):this._frames,this.autoAlpha?a.setAlphaData(this.alphaData):a.alpha=this.game.rnd.realInRange(this.minParticleAlpha,this.maxParticleAlpha),a.blendMode=this.blendMode,a.body.updateBounds(),a.body.bounce.setTo(this.bounce.x,this.bounce.y),a.body.velocity.x=this.game.rnd.integerInRange(this.minParticleSpeed.x,this.maxParticleSpeed.x),a.body.velocity.y=this.game.rnd.integerInRange(this.minParticleSpeed.y,this.maxParticleSpeed.y),a.body.angularVelocity=this.game.rnd.integerInRange(this.minRotation,this.maxRotation),a.body.gravity.y=this.gravity,a.body.drag.x=this.particleDrag.x,a.body.drag.y=this.particleDrag.y,a.body.angularDrag=this.angularDrag,a.onEmit())},b.Particles.Arcade.Emitter.prototype.setSize=function(a,b){this.width=a,this.height=b},b.Particles.Arcade.Emitter.prototype.setXSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.x=a,this.maxParticleSpeed.x=b},b.Particles.Arcade.Emitter.prototype.setYSpeed=function(a,b){a=a||0,b=b||0,this.minParticleSpeed.y=a,this.maxParticleSpeed.y=b},b.Particles.Arcade.Emitter.prototype.setRotation=function(a,b){a=a||0,b=b||0,this.minRotation=a,this.maxRotation=b},b.Particles.Arcade.Emitter.prototype.setAlpha=function(a,c,d,e,f){if("undefined"==typeof a&&(a=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=0),"undefined"==typeof e&&(e=b.Easing.Linear.None),"undefined"==typeof f&&(f=!1),this.minParticleAlpha=a,this.maxParticleAlpha=c,this.autoAlpha=!1,d>0&&a!==c){var g={v:a},h=this.game.make.tween(g).to({v:c},d,e);h.yoyo(f),this.alphaData=h.generateData(60),this.alphaData.reverse(),this.autoAlpha=!0}},b.Particles.Arcade.Emitter.prototype.setScale=function(a,c,d,e,f,g,h){if("undefined"==typeof a&&(a=1),"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1),"undefined"==typeof e&&(e=1),"undefined"==typeof f&&(f=0),"undefined"==typeof g&&(g=b.Easing.Linear.None),"undefined"==typeof h&&(h=!1),this.minParticleScale=1,this.maxParticleScale=1,this._minParticleScale.set(a,d),this._maxParticleScale.set(c,e),this.autoScale=!1,f>0&&a!==c||d!==e){var i={x:a,y:d},j=this.game.make.tween(i).to({x:c,y:e},f,g);j.yoyo(h),this.scaleData=j.generateData(60),this.scaleData.reverse(),this.autoScale=!0}},b.Particles.Arcade.Emitter.prototype.at=function(a){a.center?(this.emitX=a.center.x,this.emitY=a.center.y):(this.emitX=a.world.x+a.anchor.x*a.width,this.emitY=a.world.y+a.anchor.y*a.height)},Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"x",{get:function(){return this.emitX},set:function(a){this.emitX=a}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"y",{get:function(){return this.emitY},set:function(a){this.emitY=a}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"left",{get:function(){return Math.floor(this.x-this.width/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"right",{get:function(){return Math.floor(this.x+this.width/2) +}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"top",{get:function(){return Math.floor(this.y-this.height/2)}}),Object.defineProperty(b.Particles.Arcade.Emitter.prototype,"bottom",{get:function(){return Math.floor(this.y+this.height/2)}}),b.Tile=function(a,b,c,d,e,f){this.layer=a,this.index=b,this.x=c,this.y=d,this.worldX=c*e,this.worldY=d*f,this.width=e,this.height=f,this.centerX=Math.abs(e/2),this.centerY=Math.abs(f/2),this.alpha=1,this.properties={},this.scanned=!1,this.faceTop=!1,this.faceBottom=!1,this.faceLeft=!1,this.faceRight=!1,this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.collisionCallback=null,this.collisionCallbackContext=this},b.Tile.prototype={containsPoint:function(a,b){return!(athis.right||b>this.bottom)},intersects:function(a,b,c,d){return c<=this.worldX?!1:d<=this.worldY?!1:a>=this.worldX+this.width?!1:b>=this.worldY+this.height?!1:!0},setCollisionCallback:function(a,b){this.collisionCallback=a,this.collisionCallbackContext=b},destroy:function(){this.collisionCallback=null,this.collisionCallbackContext=null,this.properties=null},setCollision:function(a,b,c,d){this.collideLeft=a,this.collideRight=b,this.collideUp=c,this.collideDown=d},resetCollision:function(){this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.faceTop=!1,this.faceBottom=!1,this.faceLeft=!1,this.faceRight=!1},isInteresting:function(a,b){return a&&b?this.collideLeft||this.collideRight||this.collideUp||this.collideDown||this.faceTop||this.faceBottom||this.faceLeft||this.faceRight||this.collisionCallback:a?this.collideLeft||this.collideRight||this.collideUp||this.collideDown:b?this.faceTop||this.faceBottom||this.faceLeft||this.faceRight:!1},copy:function(a){this.index=a.index,this.alpha=a.alpha,this.properties=a.properties,this.collideUp=a.collideUp,this.collideDown=a.collideDown,this.collideLeft=a.collideLeft,this.collideRight=a.collideRight,this.collisionCallback=a.collisionCallback,this.collisionCallbackContext=a.collisionCallbackContext}},b.Tile.prototype.constructor=b.Tile,Object.defineProperty(b.Tile.prototype,"collides",{get:function(){return this.collideLeft||this.collideRight||this.collideUp||this.collideDown}}),Object.defineProperty(b.Tile.prototype,"canCollide",{get:function(){return this.collideLeft||this.collideRight||this.collideUp||this.collideDown||this.collisionCallback}}),Object.defineProperty(b.Tile.prototype,"left",{get:function(){return this.worldX}}),Object.defineProperty(b.Tile.prototype,"right",{get:function(){return this.worldX+this.width}}),Object.defineProperty(b.Tile.prototype,"top",{get:function(){return this.worldY}}),Object.defineProperty(b.Tile.prototype,"bottom",{get:function(){return this.worldY+this.height}}),b.Tilemap=function(a,c,d,e,f,g){this.game=a,this.key=c;var h=b.TilemapParser.parse(this.game,c,d,e,f,g);null!==h&&(this.width=h.width,this.height=h.height,this.tileWidth=h.tileWidth,this.tileHeight=h.tileHeight,this.orientation=h.orientation,this.format=h.format,this.version=h.version,this.properties=h.properties,this.widthInPixels=h.widthInPixels,this.heightInPixels=h.heightInPixels,this.layers=h.layers,this.tilesets=h.tilesets,this.tiles=h.tiles,this.objects=h.objects,this.collideIndexes=[],this.collision=h.collision,this.images=h.images,this.currentLayer=0,this.debugMap=[],this._results=[],this._tempA=0,this._tempB=0)},b.Tilemap.CSV=0,b.Tilemap.TILED_JSON=1,b.Tilemap.prototype={create:function(a,b,c,d,e,f){return"undefined"==typeof f&&(f=this.game.world),this.width=b,this.height=c,this.setTileSize(d,e),this.layers.length=0,this.createBlankLayer(a,b,c,d,e,f)},setTileSize:function(a,b){this.tileWidth=a,this.tileHeight=b,this.widthInPixels=this.width*a,this.heightInPixels=this.height*b},addTilesetImage:function(a,c,d,e,f,g,h){if("undefined"==typeof d&&(d=this.tileWidth),"undefined"==typeof e&&(e=this.tileHeight),"undefined"==typeof f&&(f=0),"undefined"==typeof g&&(g=0),"undefined"==typeof h&&(h=0),0===d&&(d=32),0===e&&(e=32),"undefined"==typeof c){if("string"!=typeof a)return null;if(c=a,!this.game.cache.checkImageKey(c))return console.warn('Phaser.Tilemap.addTilesetImage: Invalid image key given: "'+c+'"'),null}if("string"==typeof a&&(a=this.getTilesetIndex(a),null===a&&this.format===b.Tilemap.TILED_JSON))return console.warn('Phaser.Tilemap.addTilesetImage: No data found in the JSON matching the tileset name: "'+c+'"'),null;if(this.tilesets[a])return this.tilesets[a].setImage(this.game.cache.getImage(c)),this.tilesets[a];var i=new b.Tileset(c,h,d,e,f,g,{});i.setImage(this.game.cache.getImage(c)),this.tilesets.push(i);for(var j=this.tilesets.length-1,k=f,l=f,m=0,n=0,o=0,p=h;pl;l++)if(this.objects[a][l].gid===c){k=new i(this.game,this.objects[a][l].x,this.objects[a][l].y,d,e),k.name=this.objects[a][l].name,k.visible=this.objects[a][l].visible,k.autoCull=g,k.exists=f,j&&(k.y-=k.height),h.add(k);for(var n in this.objects[a][l].properties)h.set(k,n,this.objects[a][l].properties[n],!1,!1,0)}},createLayer:function(a,c,d,e){"undefined"==typeof c&&(c=this.game.width),"undefined"==typeof d&&(d=this.game.height),"undefined"==typeof e&&(e=this.game.world);var f=a;return"string"==typeof a&&(f=this.getLayerIndex(a)),null===f||f>this.layers.length?void console.warn("Tilemap.createLayer: Invalid layer ID given: "+f):e.add(new b.TilemapLayer(this.game,this,f,c,d))},createBlankLayer:function(a,c,d,e,f,g){if("undefined"==typeof g&&(g=this.game.world),null!==this.getLayerIndex(a))return void console.warn("Tilemap.createBlankLayer: Layer with matching name already exists");for(var h,i={name:a,x:0,y:0,width:c,height:d,widthInPixels:c*e,heightInPixels:d*f,alpha:1,visible:!0,properties:{},indexes:[],callbacks:[],bodies:[],data:null},j=[],k=0;d>k;k++){h=[];for(var l=0;c>l;l++)h.push(new b.Tile(i,-1,l,k,e,f));j.push(h)}i.data=j,this.layers.push(i),this.currentLayer=this.layers.length-1;var m=i.widthInPixels,n=i.heightInPixels;m>this.game.width&&(m=this.game.width),n>this.game.height&&(n=this.game.height);var j=new b.TilemapLayer(this.game,this,this.layers.length-1,m,n);return j.name=a,g.add(j)},getIndex:function(a,b){for(var c=0;ce;e++)this.layers[d].callbacks[a[e]]={callback:b,callbackContext:c}},setTileLocationCallback:function(a,b,c,d,e,f,g){if(g=this.getLayer(g),this.copy(a,b,c,d,g),!(this._results.length<2))for(var h=1;hd;d++)this.setCollisionByIndex(a[d],b,c,!1);this.calculateFaces(c)},setCollisionBetween:function(a,b,c,d){if("undefined"==typeof c&&(c=!0),d=this.getLayer(d),!(a>b)){for(var e=a;b>=e;e++)this.setCollisionByIndex(e,c,d,!1);this.calculateFaces(d)}},setCollisionByExclusion:function(a,b,c){"undefined"==typeof b&&(b=!0),c=this.getLayer(c);for(var d=0,e=this.tiles.length;e>d;d++)-1===a.indexOf(d)&&this.setCollisionByIndex(d,b,c,!1);this.calculateFaces(c)},setCollisionByIndex:function(a,b,c,d){if("undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=this.currentLayer),"undefined"==typeof d&&(d=!0),b)this.collideIndexes.push(a);else{var e=this.collideIndexes.indexOf(a);e>-1&&this.collideIndexes.splice(e,1)}for(var f=0;ff;f++)for(var h=0,i=this.layers[a].width;i>h;h++){var j=this.layers[a].data[f][h];j&&(b=this.getTileAbove(a,h,f),c=this.getTileBelow(a,h,f),d=this.getTileLeft(a,h,f),e=this.getTileRight(a,h,f),j.collides&&(j.faceTop=!0,j.faceBottom=!0,j.faceLeft=!0,j.faceRight=!0),b&&b.collides&&(j.faceTop=!1),c&&c.collides&&(j.faceBottom=!1),d&&d.collides&&(j.faceLeft=!1),e&&e.collides&&(j.faceRight=!1))}},getTileAbove:function(a,b,c){return c>0?this.layers[a].data[c-1][b]:null},getTileBelow:function(a,b,c){return c0?this.layers[a].data[c][b-1]:null},getTileRight:function(a,b,c){return b=0&&a=0&&b=0&&c=0&&d-1?this.layers[e].data[d][c].setCollision(!0,!0,!0,!0):this.layers[e].data[d][c].resetCollision(),this.layers[e].dirty=!0,this.calculateFaces(e),this.layers[e].data[d][c]}return null},putTileWorldXY:function(a,b,c,d,e,f){return f=this.getLayer(f),b=this.game.math.snapToFloor(b,d)/d,c=this.game.math.snapToFloor(c,e)/e,this.putTile(a,b,c,f)},getTile:function(a,b,c){return c=this.getLayer(c),a>=0&&a=0&&ba&&(a=0),0>b&&(b=0),c>this.layers[e].width&&(c=this.layers[e].width),d>this.layers[e].height&&(d=this.layers[e].height),this._results.length=0,this._results.push({x:a,y:b,width:c,height:d,layer:e});for(var f=b;b+d>f;f++)for(var g=a;a+c>g;g++)this._results.push(this.layers[e].data[f][g]);return this._results},paste:function(a,b,c,d){if("undefined"==typeof a&&(a=0),"undefined"==typeof b&&(b=0),d=this.getLayer(d),c&&!(c.length<2)){for(var e=c[1].x-a,f=c[1].y-b,g=1;g1?this.debugMap[this.layers[this.currentLayer].data[c][d]]?"background: "+this.debugMap[this.layers[this.currentLayer].data[c][d]]:"background: #ffffff":"background: rgb(0, 0, 0)");a+="\n"}b[0]=a,console.log.apply(console,b)},destroy:function(){this.removeAllLayers(),this.data=[],this.game=null}},b.Tilemap.prototype.constructor=b.Tilemap,b.TilemapLayer=function(a,c,d,e,f){this.game=a,this.map=c,this.index=d,this.layer=c.layers[d],this.canvas=b.Canvas.create(e,f,"",!0),this.context=this.canvas.getContext("2d"),this.baseTexture=new PIXI.BaseTexture(this.canvas),this.texture=new PIXI.Texture(this.baseTexture),this.textureFrame=new b.Frame(0,0,0,e,f,"tilemapLayer",a.rnd.uuid()),b.Image.call(this,this.game,0,0,this.texture,this.textureFrame),this.name="",this.type=b.TILEMAPLAYER,this.fixedToCamera=!0,this.cameraOffset=new b.Point(0,0),this.tileColor="rgb(255, 255, 255)",this.debug=!1,this.debugAlpha=.5,this.debugColor="rgba(0, 255, 0, 1)",this.debugFill=!1,this.debugFillColor="rgba(0, 255, 0, 0.2)",this.debugCallbackColor="rgba(255, 0, 0, 1)",this.scrollFactorX=1,this.scrollFactorY=1,this.dirty=!0,this.rayStepRate=4,this._mc={cw:c.tileWidth,ch:c.tileHeight,ga:1,dx:0,dy:0,dw:0,dh:0,tx:0,ty:0,tw:0,th:0,tl:0,maxX:0,maxY:0,startX:0,startY:0,x:0,y:0,prevX:0,prevY:0},this._results=[],this.updateMax()},b.TilemapLayer.prototype=Object.create(b.Image.prototype),b.TilemapLayer.prototype.constructor=b.TilemapLayer,b.TilemapLayer.prototype.postUpdate=function(){b.Image.prototype.postUpdate.call(this),this.scrollX=this.game.camera.x*this.scrollFactorX,this.scrollY=this.game.camera.y*this.scrollFactorY,this.render(),1===this._cache[7]&&(this.position.x=(this.game.camera.view.x+this.cameraOffset.x)/this.game.camera.scale.x,this.position.y=(this.game.camera.view.y+this.cameraOffset.y)/this.game.camera.scale.y)},b.TilemapLayer.prototype.resizeWorld=function(){this.game.world.setBounds(0,0,this.layer.widthInPixels,this.layer.heightInPixels)},b.TilemapLayer.prototype._fixX=function(a){return 0>a&&(a=0),1===this.scrollFactorX?a:this._mc.x+(a-this._mc.x/this.scrollFactorX)},b.TilemapLayer.prototype._unfixX=function(a){return 1===this.scrollFactorX?a:this._mc.x/this.scrollFactorX+(a-this._mc.x)},b.TilemapLayer.prototype._fixY=function(a){return 0>a&&(a=0),1===this.scrollFactorY?a:this._mc.y+(a-this._mc.y/this.scrollFactorY)},b.TilemapLayer.prototype._unfixY=function(a){return 1===this.scrollFactorY?a:this._mc.y/this.scrollFactorY+(a-this._mc.y)},b.TilemapLayer.prototype.getTileX=function(a){return this.game.math.snapToFloor(this._fixX(a),this.map.tileWidth)/this.map.tileWidth},b.TilemapLayer.prototype.getTileY=function(a){return this.game.math.snapToFloor(this._fixY(a),this.map.tileHeight)/this.map.tileHeight},b.TilemapLayer.prototype.getTileXY=function(a,b,c){return c.x=this.getTileX(a),c.y=this.getTileY(b),c},b.TilemapLayer.prototype.getRayCastTiles=function(a,b,c,d){("undefined"==typeof b||null===b)&&(b=this.rayStepRate),"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1);var e=this.getTiles(a.x,a.y,a.width,a.height,c,d);if(0===e.length)return[];for(var f=a.coordinatesOnLine(b),g=f.length,h=[],i=0;ij;j++)if(e[i].containsPoint(f[j][0],f[j][1])){h.push(e[i]);break}return h},b.TilemapLayer.prototype.getTiles=function(a,b,c,d,e,f){"undefined"==typeof e&&(e=!1),"undefined"==typeof f&&(f=!1),a=this._fixX(a),b=this._fixY(b),c>this.layer.widthInPixels&&(c=this.layer.widthInPixels),d>this.layer.heightInPixels&&(d=this.layer.heightInPixels),this._mc.tx=this.game.math.snapToFloor(a,this._mc.cw)/this._mc.cw,this._mc.ty=this.game.math.snapToFloor(b,this._mc.ch)/this._mc.ch,this._mc.tw=(this.game.math.snapToCeil(c,this._mc.cw)+this._mc.cw)/this._mc.cw,this._mc.th=(this.game.math.snapToCeil(d,this._mc.ch)+this._mc.ch)/this._mc.ch,this._results.length=0;for(var g=this._mc.ty;gthis.layer.width&&(this._mc.maxX=this.layer.width),this._mc.maxY>this.layer.height&&(this._mc.maxY=this.layer.height)),this.dirty=!0},b.TilemapLayer.prototype.render=function(){if(this.layer.dirty&&(this.dirty=!0),this.dirty&&this.visible){this._mc.prevX=this._mc.dx,this._mc.prevY=this._mc.dy,this._mc.dx=-(this._mc.x-this._mc.startX*this.map.tileWidth),this._mc.dy=-(this._mc.y-this._mc.startY*this.map.tileHeight),this._mc.tx=this._mc.dx,this._mc.ty=this._mc.dy,this.context.clearRect(0,0,this.canvas.width,this.canvas.height),this.context.fillStyle=this.tileColor;var a,c;this.debug&&(this.context.globalAlpha=this.debugAlpha);for(var d=this._mc.startY,e=this._mc.startY+this._mc.maxY;e>d;d++){this._column=this.layer.data[d];for(var f=this._mc.startX,g=this._mc.startX+this._mc.maxX;g>f;f++)this._column[f]&&(a=this._column[f],a.index>-1&&(c=this.map.tilesets[this.map.tiles[a.index][2]],this.debug===!1&&a.alpha!==this.context.globalAlpha&&(this.context.globalAlpha=a.alpha),c.draw(this.context,Math.floor(this._mc.tx),Math.floor(this._mc.ty),a.index),a.debug&&(this.context.fillStyle="rgba(0, 255, 0, 0.4)",this.context.fillRect(Math.floor(this._mc.tx),Math.floor(this._mc.ty),this.map.tileWidth,this.map.tileHeight)))),this._mc.tx+=this.map.tileWidth;this._mc.tx=this._mc.dx,this._mc.ty+=this.map.tileHeight}return this.debug&&(this.context.globalAlpha=1,this.renderDebug()),this.game.renderType===b.WEBGL&&PIXI.updateWebGLTexture(this.baseTexture,this.game.renderer.gl),this.dirty=!1,this.layer.dirty=!1,!0}},b.TilemapLayer.prototype.renderDebug=function(){this._mc.tx=this._mc.dx,this._mc.ty=this._mc.dy,this.context.strokeStyle=this.debugColor,this.context.fillStyle=this.debugFillColor;for(var a=this._mc.startY,b=this._mc.startY+this._mc.maxY;b>a;a++){this._column=this.layer.data[a];for(var c=this._mc.startX,d=this._mc.startX+this._mc.maxX;d>c;c++){var e=this._column[c];e&&(e.faceTop||e.faceBottom||e.faceLeft||e.faceRight)&&(this._mc.tx=Math.floor(this._mc.tx),this.debugFill&&this.context.fillRect(this._mc.tx,this._mc.ty,this._mc.cw,this._mc.ch),this.context.beginPath(),e.faceTop&&(this.context.moveTo(this._mc.tx,this._mc.ty),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty)),e.faceBottom&&(this.context.moveTo(this._mc.tx,this._mc.ty+this._mc.ch),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty+this._mc.ch)),e.faceLeft&&(this.context.moveTo(this._mc.tx,this._mc.ty),this.context.lineTo(this._mc.tx,this._mc.ty+this._mc.ch)),e.faceRight&&(this.context.moveTo(this._mc.tx+this._mc.cw,this._mc.ty),this.context.lineTo(this._mc.tx+this._mc.cw,this._mc.ty+this._mc.ch)),this.context.stroke()),this._mc.tx+=this.map.tileWidth}this._mc.tx=this._mc.dx,this._mc.ty+=this.map.tileHeight}},Object.defineProperty(b.TilemapLayer.prototype,"scrollX",{get:function(){return this._mc.x},set:function(a){a!==this._mc.x&&a>=0&&this.layer.widthInPixels>this.width&&(this._mc.x=a,this._mc.x>this.layer.widthInPixels-this.width&&(this._mc.x=this.layer.widthInPixels-this.width),this._mc.startX=this.game.math.floor(this._mc.x/this.map.tileWidth),this._mc.startX<0&&(this._mc.startX=0),this._mc.startX+this._mc.maxX>this.layer.width&&(this._mc.startX=this.layer.width-this._mc.maxX),this.dirty=!0)}}),Object.defineProperty(b.TilemapLayer.prototype,"scrollY",{get:function(){return this._mc.y},set:function(a){a!==this._mc.y&&a>=0&&this.layer.heightInPixels>this.height&&(this._mc.y=a,this._mc.y>this.layer.heightInPixels-this.height&&(this._mc.y=this.layer.heightInPixels-this.height),this._mc.startY=this.game.math.floor(this._mc.y/this.map.tileHeight),this._mc.startY<0&&(this._mc.startY=0),this._mc.startY+this._mc.maxY>this.layer.height&&(this._mc.startY=this.layer.height-this._mc.maxY),this.dirty=!0)}}),Object.defineProperty(b.TilemapLayer.prototype,"collisionWidth",{get:function(){return this._mc.cw},set:function(a){this._mc.cw=a,this.dirty=!0}}),Object.defineProperty(b.TilemapLayer.prototype,"collisionHeight",{get:function(){return this._mc.ch},set:function(a){this._mc.ch=a,this.dirty=!0}}),b.TilemapParser={parse:function(a,c,d,e,f,g){if("undefined"==typeof d&&(d=32),"undefined"==typeof e&&(e=32),"undefined"==typeof f&&(f=10),"undefined"==typeof g&&(g=10),"undefined"==typeof c)return this.getEmptyData();if(null===c)return this.getEmptyData(d,e,f,g);var h=a.cache.getTilemapData(c);if(h){if(h.format===b.Tilemap.CSV)return this.parseCSV(c,h.data,d,e);if(!h.format||h.format===b.Tilemap.TILED_JSON)return this.parseTiledJSON(h.data)}else console.warn("Phaser.TilemapParser.parse - No map data found for key "+c)},parseCSV:function(a,c,d,e){var f=this.getEmptyData();c=c.trim();for(var g=[],h=c.split("\n"),i=h.length,j=0,k=0;kj;j++)h.push(a.layers[e].data[j]>0?new b.Tile(f,a.layers[e].data[j],g,i.length,a.tilewidth,a.tileheight):new b.Tile(f,-1,g,i.length,a.tilewidth,a.tileheight)),g++,g===a.layers[e].width&&(i.push(h),g=0,h=[]);f.data=i,d.push(f)}c.layers=d;for(var l=[],e=0;es;s++)if(a.layers[e].objects[s].gid){var t={gid:a.layers[e].objects[s].gid,name:a.layers[e].objects[s].name,x:a.layers[e].objects[s].x,y:a.layers[e].objects[s].y,visible:a.layers[e].objects[s].visible,properties:a.layers[e].objects[s].properties};q[a.layers[e].name].push(t)}else if(a.layers[e].objects[s].polyline){var t={name:a.layers[e].objects[s].name,x:a.layers[e].objects[s].x,y:a.layers[e].objects[s].y,width:a.layers[e].objects[s].width,height:a.layers[e].objects[s].height,visible:a.layers[e].objects[s].visible,properties:a.layers[e].objects[s].properties};t.polyline=[];for(var u=0;u=c)&&(c=32),("undefined"==typeof d||0>=d)&&(d=32),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=0),this.name=a,this.firstgid=b,this.tileWidth=c,this.tileHeight=d,this.tileMargin=e,this.tileSpacing=f,this.properties=g,this.image=null,this.rows=0,this.columns=0,this.total=0,this.drawCoords=[]},b.Tileset.prototype={draw:function(a,b,c,d){this.image&&this.drawCoords[d]&&a.drawImage(this.image,this.drawCoords[d][0],this.drawCoords[d][1],this.tileWidth,this.tileHeight,b,c,this.tileWidth,this.tileHeight)},setImage:function(a){this.image=a,this.rows=Math.round((a.height-this.tileMargin)/(this.tileHeight+this.tileSpacing)),this.columns=Math.round((a.width-this.tileMargin)/(this.tileWidth+this.tileSpacing)),this.total=this.rows*this.columns,this.drawCoords.length=0;for(var b=this.tileMargin,c=this.tileMargin,d=this.firstgid,e=0;e0&&this.enable(a[f],b,c,d,!0));else a instanceof Phaser.Group?this.enable(a.children,b,c,d,e):(this.enableBody(a,b,c,d),e&&a.hasOwnProperty("children")&&a.children.length>0&&this.enable(a.children,b,c,d,!0))},enableBody:function(a,b,c,d){a.hasOwnProperty("body")&&null===a.body&&(a.body=new Phaser.Physics.Ninja.Body(this,a,b,c,d),a.anchor.set(.5))},setBounds:function(a,b,c,d){this.bounds.setTo(a,b,c,d)},setBoundsToWorld:function(){this.bounds.setTo(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height)},clearTilemapLayerBodies:function(a,b){b=a.getLayer(b);for(var c=a.layers[b].bodies.length;c--;)a.layers[b].bodies[c].destroy();a.layers[b].bodies.length=[]},convertTilemap:function(a,b,c){b=a.getLayer(b),this.clearTilemapLayerBodies(a,b);for(var d=0,e=a.layers[b].height;e>d;d++)for(var f=0,g=a.layers[b].width;g>f;f++){var h=a.layers[b].data[d][f];if(h&&c.hasOwnProperty(h.index)){var i=new Phaser.Physics.Ninja.Body(this,null,3,c[h.index],0,h.worldX+h.centerX,h.worldY+h.centerY,h.width,h.height);a.layers[b].bodies.push(i)}}return a.layers[b].bodies},overlap:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!0);else this.collideHandler(a,b,c,d,e,!0);return this._total>0},collide:function(a,b,c,d,e){if(c=c||null,d=d||null,e=e||c,this._result=!1,this._total=0,Array.isArray(b))for(var f=0,g=b.length;g>f;f++)this.collideHandler(a,b[f],c,d,e,!1);else this.collideHandler(a,b,c,d,e,!1);return this._total>0},collideHandler:function(a,b,c,d,e,f){return"undefined"!=typeof b||a.type!==Phaser.GROUP&&a.type!==Phaser.EMITTER?void(a&&b&&a.exists&&b.exists&&(a.type==Phaser.SPRITE||a.type==Phaser.TILESPRITE?b.type==Phaser.SPRITE||b.type==Phaser.TILESPRITE?this.collideSpriteVsSprite(a,b,c,d,e,f):b.type==Phaser.GROUP||b.type==Phaser.EMITTER?this.collideSpriteVsGroup(a,b,c,d,e,f):b.type==Phaser.TILEMAPLAYER&&this.collideSpriteVsTilemapLayer(a,b,c,d,e):a.type==Phaser.GROUP?b.type==Phaser.SPRITE||b.type==Phaser.TILESPRITE?this.collideSpriteVsGroup(b,a,c,d,e,f):b.type==Phaser.GROUP||b.type==Phaser.EMITTER?this.collideGroupVsGroup(a,b,c,d,e,f):b.type==Phaser.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,b,c,d,e):a.type==Phaser.TILEMAPLAYER?b.type==Phaser.SPRITE||b.type==Phaser.TILESPRITE?this.collideSpriteVsTilemapLayer(b,a,c,d,e):(b.type==Phaser.GROUP||b.type==Phaser.EMITTER)&&this.collideGroupVsTilemapLayer(b,a,c,d,e):a.type==Phaser.EMITTER&&(b.type==Phaser.SPRITE||b.type==Phaser.TILESPRITE?this.collideSpriteVsGroup(b,a,c,d,e,f):b.type==Phaser.GROUP||b.type==Phaser.EMITTER?this.collideGroupVsGroup(a,b,c,d,e,f):b.type==Phaser.TILEMAPLAYER&&this.collideGroupVsTilemapLayer(a,b,c,d,e)))):void this.collideGroupVsSelf(a,c,d,e,f) +},collideSpriteVsSprite:function(a,b,c,d,e,f){this.separate(a.body,b.body,d,e,f)&&(c&&c.call(e,a,b),this._total++)},collideSpriteVsGroup:function(a,b,c,d,e,f){if(0!==b.length)for(var g=0,h=b.children.length;h>g;g++)b.children[g].exists&&b.children[g].body&&this.separate(a.body,b.children[g].body,d,e,f)&&(c&&c.call(e,a,b.children[g]),this._total++)},collideGroupVsSelf:function(a,b,c,d,e){if(0!==a.length)for(var f=a.children.length,g=0;f>g;g++)for(var h=g+1;f>=h;h++)a.children[g]&&a.children[h]&&a.children[g].exists&&a.children[h].exists&&this.collideSpriteVsSprite(a.children[g],a.children[h],b,c,d,e)},collideGroupVsGroup:function(a,b,c,d,e,f){if(0!==a.length&&0!==b.length)for(var g=0,h=a.children.length;h>g;g++)a.children[g].exists&&this.collideSpriteVsGroup(a.children[g],b,c,d,e,f)},separate:function(a,b){return a.type!==Phaser.Physics.NINJA||b.type!==Phaser.Physics.NINJA?!1:a.aabb&&b.aabb?a.aabb.collideAABBVsAABB(b.aabb):a.aabb&&b.tile?a.aabb.collideAABBVsTile(b.tile):a.tile&&b.aabb?b.aabb.collideAABBVsTile(a.tile):a.circle&&b.tile?a.circle.collideCircleVsTile(b.tile):a.tile&&b.circle?b.circle.collideCircleVsTile(a.tile):void 0}},Phaser.Physics.Ninja.Body=function(a,b,c,d,e,f,g,h,i){b=b||null,"undefined"==typeof c&&(c=1),"undefined"==typeof d&&(d=1),"undefined"==typeof e&&(e=16),this.sprite=b,this.game=a.game,this.type=Phaser.Physics.NINJA,this.system=a,this.aabb=null,this.tile=null,this.circle=null,this.shape=null,this.drag=1,this.friction=.05,this.gravityScale=1,this.bounce=.3,this.velocity=new Phaser.Point,this.facing=Phaser.NONE,this.immovable=!1,this.collideWorldBounds=!0,this.checkCollision={none:!1,any:!0,up:!0,down:!0,left:!0,right:!0},this.touching={none:!0,up:!1,down:!1,left:!1,right:!1},this.wasTouching={none:!0,up:!1,down:!1,left:!1,right:!1},this.maxSpeed=8,b&&(f=b.x,g=b.y,h=b.width,i=b.height,0===b.anchor.x&&(f+=.5*b.width),0===b.anchor.y&&(g+=.5*b.height)),1===c?(this.aabb=new Phaser.Physics.Ninja.AABB(this,f,g,h,i),this.shape=this.aabb):2===c?(this.circle=new Phaser.Physics.Ninja.Circle(this,f,g,e),this.shape=this.circle):3===c&&(this.tile=new Phaser.Physics.Ninja.Tile(this,f,g,h,i,d),this.shape=this.tile)},Phaser.Physics.Ninja.Body.prototype={preUpdate:function(){this.wasTouching.none=this.touching.none,this.wasTouching.up=this.touching.up,this.wasTouching.down=this.touching.down,this.wasTouching.left=this.touching.left,this.wasTouching.right=this.touching.right,this.touching.none=!0,this.touching.up=!1,this.touching.down=!1,this.touching.left=!1,this.touching.right=!1,this.shape.integrate(),this.collideWorldBounds&&this.shape.collideWorldBounds()},postUpdate:function(){this.sprite&&(this.sprite.type===Phaser.TILESPRITE?(this.sprite.x=this.shape.pos.x-this.shape.xw,this.sprite.y=this.shape.pos.y-this.shape.yw):(this.sprite.x=this.shape.pos.x,this.sprite.y=this.shape.pos.y)),this.velocity.x<0?this.facing=Phaser.LEFT:this.velocity.x>0&&(this.facing=Phaser.RIGHT),this.velocity.y<0?this.facing=Phaser.UP:this.velocity.y>0&&(this.facing=Phaser.DOWN)},setZeroVelocity:function(){this.shape.oldpos.x=this.shape.pos.x,this.shape.oldpos.y=this.shape.pos.y},moveTo:function(a,b){var c=a*this.game.time.physicsElapsed,b=this.game.math.degToRad(b);this.shape.pos.x=this.shape.oldpos.x+c*Math.cos(b),this.shape.pos.y=this.shape.oldpos.y+c*Math.sin(b)},moveFrom:function(a,b){var c=-a*this.game.time.physicsElapsed,b=this.game.math.degToRad(b);this.shape.pos.x=this.shape.oldpos.x+c*Math.cos(b),this.shape.pos.y=this.shape.oldpos.y+c*Math.sin(b)},moveLeft:function(a){var b=-a*this.game.time.physicsElapsed;this.shape.pos.x=this.shape.oldpos.x+Math.min(this.maxSpeed,Math.max(-this.maxSpeed,this.shape.pos.x-this.shape.oldpos.x+b))},moveRight:function(a){var b=a*this.game.time.physicsElapsed;this.shape.pos.x=this.shape.oldpos.x+Math.min(this.maxSpeed,Math.max(-this.maxSpeed,this.shape.pos.x-this.shape.oldpos.x+b))},moveUp:function(a){var b=-a*this.game.time.physicsElapsed;this.shape.pos.y=this.shape.oldpos.y+Math.min(this.maxSpeed,Math.max(-this.maxSpeed,this.shape.pos.y-this.shape.oldpos.y+b))},moveDown:function(a){var b=a*this.game.time.physicsElapsed;this.shape.pos.y=this.shape.oldpos.y+Math.min(this.maxSpeed,Math.max(-this.maxSpeed,this.shape.pos.y-this.shape.oldpos.y+b))},reset:function(){this.velocity.set(0),this.shape.pos.x=this.sprite.x,this.shape.pos.y=this.sprite.y,this.shape.oldpos.copyFrom(this.shape.pos)},deltaAbsX:function(){return this.deltaX()>0?this.deltaX():-this.deltaX()},deltaAbsY:function(){return this.deltaY()>0?this.deltaY():-this.deltaY()},deltaX:function(){return this.shape.pos.x-this.shape.oldpos.x},deltaY:function(){return this.shape.pos.y-this.shape.oldpos.y},destroy:function(){this.sprite=null,this.system=null,this.aabb=null,this.tile=null,this.circle=null,this.shape.destroy(),this.shape=null}},Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"x",{get:function(){return this.shape.pos.x},set:function(a){this.shape.pos.x=a}}),Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"y",{get:function(){return this.shape.pos.y},set:function(a){this.shape.pos.y=a}}),Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"width",{get:function(){return this.shape.width}}),Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"height",{get:function(){return this.shape.height}}),Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"bottom",{get:function(){return this.shape.pos.y+this.shape.yw}}),Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"right",{get:function(){return this.shape.pos.x+this.shape.xw}}),Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"speed",{get:function(){return Math.sqrt(this.shape.velocity.x*this.shape.velocity.x+this.shape.velocity.y*this.shape.velocity.y)}}),Object.defineProperty(Phaser.Physics.Ninja.Body.prototype,"angle",{get:function(){return Math.atan2(this.shape.velocity.y,this.shape.velocity.x)}}),Phaser.Physics.Ninja.AABB=function(a,b,c,d,e){this.body=a,this.system=a.system,this.pos=new Phaser.Point(b,c),this.oldpos=new Phaser.Point(b,c),this.xw=Math.abs(d/2),this.yw=Math.abs(e/2),this.width=d,this.height=e,this.oH=0,this.oV=0,this.velocity=new Phaser.Point,this.aabbTileProjections={},this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_FULL]=this.projAABB_Full,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_45DEG]=this.projAABB_45Deg,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_CONCAVE]=this.projAABB_Concave,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_CONVEX]=this.projAABB_Convex,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_22DEGs]=this.projAABB_22DegS,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_22DEGb]=this.projAABB_22DegB,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_67DEGs]=this.projAABB_67DegS,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_67DEGb]=this.projAABB_67DegB,this.aabbTileProjections[Phaser.Physics.Ninja.Tile.TYPE_HALF]=this.projAABB_Half},Phaser.Physics.Ninja.AABB.prototype.constructor=Phaser.Physics.Ninja.AABB,Phaser.Physics.Ninja.AABB.COL_NONE=0,Phaser.Physics.Ninja.AABB.COL_AXIS=1,Phaser.Physics.Ninja.AABB.COL_OTHER=2,Phaser.Physics.Ninja.AABB.prototype={integrate:function(){var a=this.pos.x,b=this.pos.y;this.pos.x+=this.body.drag*this.pos.x-this.body.drag*this.oldpos.x,this.pos.y+=this.body.drag*this.pos.y-this.body.drag*this.oldpos.y+this.system.gravity*this.body.gravityScale,this.velocity.set(this.pos.x-a,this.pos.y-b),this.oldpos.set(a,b)},reportCollisionVsWorld:function(a,b,c,d){var e,f,g,h,i,j=this.pos,k=this.oldpos,l=j.x-k.x,m=j.y-k.y,n=l*c+m*d,o=n*c,p=n*d,q=l-o,r=m-p;0>n?(h=q*this.body.friction,i=r*this.body.friction,e=1+this.body.bounce,f=o*e,g=p*e,1===c?this.body.touching.left=!0:-1===c&&(this.body.touching.right=!0),1===d?this.body.touching.up=!0:-1===d&&(this.body.touching.down=!0)):f=g=h=i=0,j.x+=a,j.y+=b,k.x+=a+f+h,k.y+=b+g+i},reverse:function(){var a=this.pos.x-this.oldpos.x,b=this.pos.y-this.oldpos.y;this.oldpos.xthis.pos.x&&(this.oldpos.x=this.pos.x-a),this.oldpos.ythis.pos.y&&(this.oldpos.y=this.pos.y-b)},reportCollisionVsBody:function(a,b,c,d,e){var f=this.pos.x-this.oldpos.x,g=this.pos.y-this.oldpos.y,h=f*c+g*d;return this.body.immovable&&e.body.immovable?(a*=.5,b*=.5,this.pos.add(a,b),this.oldpos.set(this.pos.x,this.pos.y),e.pos.subtract(a,b),void e.oldpos.set(e.pos.x,e.pos.y)):void(this.body.immovable||e.body.immovable?this.body.immovable?e.body.immovable||(e.pos.subtract(a,b),0>h&&e.reverse()):(this.pos.subtract(a,b),0>h&&this.reverse()):(a*=.5,b*=.5,this.pos.add(a,b),e.pos.subtract(a,b),0>h&&(this.reverse(),e.reverse())))},collideWorldBounds:function(){var a=this.system.bounds.x-(this.pos.x-this.xw);a>0?this.reportCollisionVsWorld(a,0,1,0,null):(a=this.pos.x+this.xw-this.system.bounds.right,a>0&&this.reportCollisionVsWorld(-a,0,-1,0,null));var b=this.system.bounds.y-(this.pos.y-this.yw);b>0?this.reportCollisionVsWorld(0,b,0,1,null):(b=this.pos.y+this.yw-this.system.bounds.bottom,b>0&&this.reportCollisionVsWorld(0,-b,0,-1,null))},collideAABBVsAABB:function(a){var b=this.pos,c=a,d=c.pos.x,e=c.pos.y,f=c.xw,g=c.yw,h=b.x-d,i=f+this.xw-Math.abs(h);if(i>0){var j=b.y-e,k=g+this.yw-Math.abs(j);if(k>0){k>i?0>h?(i*=-1,k=0):k=0:0>j?(i=0,k*=-1):i=0;var l=Math.sqrt(i*i+k*k);return this.reportCollisionVsBody(i,k,i/l,k/l,c),Phaser.Physics.Ninja.AABB.COL_AXIS}}return!1},collideAABBVsTile:function(a){var b=this.pos.x-a.pos.x,c=a.xw+this.xw-Math.abs(b);if(c>0){var d=this.pos.y-a.pos.y,e=a.yw+this.yw-Math.abs(d);if(e>0)return e>c?0>b?(c*=-1,e=0):e=0:0>d?(c=0,e*=-1):c=0,this.resolveTile(c,e,this,a)}return!1},resolveTile:function(a,b,c,d){return 0i){e*=-i,f*=-i;var j=Math.sqrt(e*e+f*f),k=Math.sqrt(a*a+b*b);return j>k?(c.reportCollisionVsWorld(a,b,a/k,b/k,d),Phaser.Physics.Ninja.AABB.COL_AXIS):(c.reportCollisionVsWorld(e,f,d.signx,d.signy,d),Phaser.Physics.Ninja.AABB.COL_OTHER)}return Phaser.Physics.Ninja.AABB.COL_NONE},projAABB_45Deg:function(a,b,c,d){var e=d.signx,f=d.signy,g=c.pos.x-e*c.xw-d.pos.x,h=c.pos.y-f*c.yw-d.pos.y,i=d.sx,j=d.sy,k=g*i+h*j;if(0>k){i*=-k,j*=-k;var l=Math.sqrt(i*i+j*j),m=Math.sqrt(a*a+b*b);return l>m?(c.reportCollisionVsWorld(a,b,a/m,b/m,d),Phaser.Physics.Ninja.AABB.COL_AXIS):(c.reportCollisionVsWorld(i,j,d.sx,d.sy),Phaser.Physics.Ninja.AABB.COL_OTHER)}return Phaser.Physics.Ninja.AABB.COL_NONE},projAABB_22DegS:function(a,b,c,d){var e=d.signx,f=d.signy,g=c.pos.y-f*c.yw,h=d.pos.y-g;if(h*f>0){var i=c.pos.x-e*c.xw-(d.pos.x+e*d.xw),j=c.pos.y-f*c.yw-(d.pos.y-f*d.yw),k=d.sx,l=d.sy,m=i*k+j*l;if(0>m){k*=-m,l*=-m;var n=Math.sqrt(k*k+l*l),o=Math.sqrt(a*a+b*b),p=Math.abs(h);return n>o?o>p?(c.reportCollisionVsWorld(0,h,0,h/p,d),Phaser.Physics.Ninja.AABB.COL_OTHER):(c.reportCollisionVsWorld(a,b,a/o,b/o,d),Phaser.Physics.Ninja.AABB.COL_AXIS):n>p?(c.reportCollisionVsWorld(0,h,0,h/p,d),Phaser.Physics.Ninja.AABB.COL_OTHER):(c.reportCollisionVsWorld(k,l,d.sx,d.sy,d),Phaser.Physics.Ninja.AABB.COL_OTHER)}}return Phaser.Physics.Ninja.AABB.COL_NONE},projAABB_22DegB:function(a,b,c,d){var e=d.signx,f=d.signy,g=c.pos.x-e*c.xw-(d.pos.x-e*d.xw),h=c.pos.y-f*c.yw-(d.pos.y+f*d.yw),i=d.sx,j=d.sy,k=g*i+h*j;if(0>k){i*=-k,j*=-k;var l=Math.sqrt(i*i+j*j),m=Math.sqrt(a*a+b*b);return l>m?(c.reportCollisionVsWorld(a,b,a/m,b/m,d),Phaser.Physics.Ninja.AABB.COL_AXIS):(c.reportCollisionVsWorld(i,j,d.sx,d.sy,d),Phaser.Physics.Ninja.AABB.COL_OTHER)}return Phaser.Physics.Ninja.AABB.COL_NONE},projAABB_67DegS:function(a,b,c,d){var e=d.signx,f=d.signy,g=c.pos.x-e*c.xw,h=d.pos.x-g;if(h*e>0){var i=c.pos.x-e*c.xw-(d.pos.x-e*d.xw),j=c.pos.y-f*c.yw-(d.pos.y+f*d.yw),k=d.sx,l=d.sy,m=i*k+j*l;if(0>m){k*=-m,l*=-m;var n=Math.sqrt(k*k+l*l),o=Math.sqrt(a*a+b*b),p=Math.abs(h);return n>o?o>p?(c.reportCollisionVsWorld(h,0,h/p,0,d),Phaser.Physics.Ninja.AABB.COL_OTHER):(c.reportCollisionVsWorld(a,b,a/o,b/o,d),Phaser.Physics.Ninja.AABB.COL_AXIS):n>p?(c.reportCollisionVsWorld(h,0,h/p,0,d),Phaser.Physics.Ninja.AABB.COL_OTHER):(c.reportCollisionVsWorld(k,l,d.sx,d.sy,d),Phaser.Physics.Ninja.AABB.COL_OTHER)}}return Phaser.Physics.Ninja.AABB.COL_NONE},projAABB_67DegB:function(a,b,c,d){var e=d.signx,f=d.signy,g=c.pos.x-e*c.xw-(d.pos.x+e*d.xw),h=c.pos.y-f*c.yw-(d.pos.y-f*d.yw),i=d.sx,j=d.sy,k=g*i+h*j;if(0>k){i*=-k,j*=-k;var l=Math.sqrt(i*i+j*j),m=Math.sqrt(a*a+b*b);return l>m?(c.reportCollisionVsWorld(a,b,a/m,b/m,d),Phaser.Physics.Ninja.AABB.COL_AXIS):(c.reportCollisionVsWorld(i,j,d.sx,d.sy,d),Phaser.Physics.Ninja.AABB.COL_OTHER)}return Phaser.Physics.Ninja.AABB.COL_NONE},projAABB_Convex:function(a,b,c,d){var e=d.signx,f=d.signy,g=c.pos.x-e*c.xw-(d.pos.x-e*d.xw),h=c.pos.y-f*c.yw-(d.pos.y-f*d.yw),i=Math.sqrt(g*g+h*h),j=2*d.xw,k=Math.sqrt(j*j+0),l=k-i;if(0>e*g||0>f*h){var m=Math.sqrt(a*a+b*b);return c.reportCollisionVsWorld(a,b,a/m,b/m,d),Phaser.Physics.Ninja.AABB.COL_AXIS}return l>0?(g/=i,h/=i,c.reportCollisionVsWorld(g*l,h*l,g,h,d),Phaser.Physics.Ninja.AABB.COL_OTHER):Phaser.Physics.Ninja.AABB.COL_NONE},projAABB_Concave:function(a,b,c,d){var e=d.signx,f=d.signy,g=d.pos.x+e*d.xw-(c.pos.x-e*c.xw),h=d.pos.y+f*d.yw-(c.pos.y-f*c.yw),i=2*d.xw,j=Math.sqrt(i*i+0),k=Math.sqrt(g*g+h*h),l=k-j;if(l>0){var m=Math.sqrt(a*a+b*b);return l>m?(c.reportCollisionVsWorld(a,b,a/m,b/m,d),Phaser.Physics.Ninja.AABB.COL_AXIS):(g/=k,h/=k,c.reportCollisionVsWorld(g*l,h*l,g,h,d),Phaser.Physics.Ninja.AABB.COL_OTHER)}return Phaser.Physics.Ninja.AABB.COL_NONE},destroy:function(){this.body=null,this.system=null}},Phaser.Physics.Ninja.Tile=function(a,b,c,d,e,f){"undefined"==typeof f&&(f=Phaser.Physics.Ninja.Tile.EMPTY),this.body=a,this.system=a.system,this.id=f,this.type=Phaser.Physics.Ninja.Tile.TYPE_EMPTY,this.pos=new Phaser.Point(b,c),this.oldpos=new Phaser.Point(b,c),this.id>1&&this.id<30&&(e=d),this.xw=Math.abs(d/2),this.yw=Math.abs(e/2),this.width=d,this.height=e,this.velocity=new Phaser.Point,this.signx=0,this.signy=0,this.sx=0,this.sy=0,this.body.gravityScale=0,this.body.collideWorldBounds=!1,this.id>0&&this.setType(this.id)},Phaser.Physics.Ninja.Tile.prototype.constructor=Phaser.Physics.Ninja.Tile,Phaser.Physics.Ninja.Tile.prototype={integrate:function(){var a=this.pos.x,b=this.pos.y;this.pos.x+=this.body.drag*this.pos.x-this.body.drag*this.oldpos.x,this.pos.y+=this.body.drag*this.pos.y-this.body.drag*this.oldpos.y+this.system.gravity*this.body.gravityScale,this.velocity.set(this.pos.x-a,this.pos.y-b),this.oldpos.set(a,b)},collideWorldBounds:function(){var a=this.system.bounds.x-(this.pos.x-this.xw);a>0?this.reportCollisionVsWorld(a,0,1,0,null):(a=this.pos.x+this.xw-this.system.bounds.right,a>0&&this.reportCollisionVsWorld(-a,0,-1,0,null));var b=this.system.bounds.y-(this.pos.y-this.yw);b>0?this.reportCollisionVsWorld(0,b,0,1,null):(b=this.pos.y+this.yw-this.system.bounds.bottom,b>0&&this.reportCollisionVsWorld(0,-b,0,-1,null))},reportCollisionVsWorld:function(a,b,c,d){var e,f,g,h,i,j=this.pos,k=this.oldpos,l=j.x-k.x,m=j.y-k.y,n=l*c+m*d,o=n*c,p=n*d,q=l-o,r=m-p;0>n?(h=q*this.body.friction,i=r*this.body.friction,e=1+this.body.bounce,f=o*e,g=p*e,1===c?this.body.touching.left=!0:-1===c&&(this.body.touching.right=!0),1===d?this.body.touching.up=!0:-1===d&&(this.body.touching.down=!0)):f=g=h=i=0,j.x+=a,j.y+=b,k.x+=a+f+h,k.y+=b+g+i},setType:function(a){return a===Phaser.Physics.Ninja.Tile.EMPTY?this.clear():(this.id=a,this.updateType()),this},clear:function(){this.id=Phaser.Physics.Ninja.Tile.EMPTY,this.updateType()},destroy:function(){this.body=null,this.system=null},updateType:function(){if(0===this.id)return this.type=Phaser.Physics.Ninja.Tile.TYPE_EMPTY,this.signx=0,this.signy=0,this.sx=0,this.sy=0,!0;if(this.idn?(h=q*this.body.friction,i=r*this.body.friction,e=1+this.body.bounce,f=o*e,g=p*e,1===c?this.body.touching.left=!0:-1===c&&(this.body.touching.right=!0),1===d?this.body.touching.up=!0:-1===d&&(this.body.touching.down=!0)):f=g=h=i=0,j.x+=a,j.y+=b,k.x+=a+f+h,k.y+=b+g+i},collideWorldBounds:function(){var a=this.system.bounds.x-(this.pos.x-this.radius);a>0?this.reportCollisionVsWorld(a,0,1,0,null):(a=this.pos.x+this.radius-this.system.bounds.right,a>0&&this.reportCollisionVsWorld(-a,0,-1,0,null));var b=this.system.bounds.y-(this.pos.y-this.radius);b>0?this.reportCollisionVsWorld(0,b,0,1,null):(b=this.pos.y+this.radius-this.system.bounds.bottom,b>0&&this.reportCollisionVsWorld(0,-b,0,-1,null))},collideCircleVsTile:function(a){var b=this.pos,c=this.radius,d=a,e=d.pos.x,f=d.pos.y,g=d.xw,h=d.yw,i=b.x-e,j=g+c-Math.abs(i);if(j>0){var k=b.y-f,l=h+c-Math.abs(k);if(l>0)return this.oH=0,this.oV=0,-g>i?this.oH=-1:i>g&&(this.oH=1),-h>k?this.oV=-1:k>h&&(this.oV=1),this.resolveCircleTile(j,l,this.oH,this.oV,this,d)}},resolveCircleTile:function(a,b,c,d,e,f){return 0a){var g=e.pos.x-f.pos.x;return 0>g?(e.reportCollisionVsWorld(-a,0,-1,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(a,0,1,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS)}var h=e.pos.y-f.pos.y;return 0>h?(e.reportCollisionVsWorld(0,-b,0,-1,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(0,b,0,1,f),Phaser.Physics.Ninja.Circle.COL_AXIS)}return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS}if(0===d)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var i=f.pos.x+c*f.xw,j=f.pos.y+d*f.yw,g=e.pos.x-i,h=e.pos.y-j,k=Math.sqrt(g*g+h*h),l=e.radius-k;return l>0?(0===k?(g=c/Math.SQRT2,h=d/Math.SQRT2):(g/=k,h/=k),e.reportCollisionVsWorld(g*l,h*l,g,h,f),Phaser.Physics.Ninja.Circle.COL_OTHER):Phaser.Physics.Ninja.Circle.COL_NONE},projCircle_45Deg:function(a,b,c,d,e,f){var g,h=f.signx,i=f.signy;if(0===c)if(0===d){var j=f.sx,k=f.sy,l=e.pos.x-j*e.radius-f.pos.x,m=e.pos.y-k*e.radius-f.pos.y,n=l*j+m*k;if(0>n){j*=-n,k*=-n,b>a?(g=a,b=0,e.pos.x-f.pos.x<0&&(a*=-1)):(g=b,a=0,e.pos.y-f.pos.y<0&&(b*=-1));var o=Math.sqrt(j*j+k*k);return o>g?(e.reportCollisionVsWorld(a,b,a/g,b/g,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(j,k,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER)}}else{if(0>i*d)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=f.sx,k=f.sy,l=e.pos.x-(f.pos.x-h*f.xw),m=e.pos.y-(f.pos.y+d*f.yw),p=l*-k+m*j;if(p*h*i>0){var q=Math.sqrt(l*l+m*m),r=e.radius-q;if(r>0)return l/=q,m/=q,e.reportCollisionVsWorld(l*r,m*r,l,m,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var n=l*j+m*k,r=e.radius-Math.abs(n);if(r>0)return e.reportCollisionVsWorld(j*r,k*r,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else if(0===d){if(0>h*c)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=f.sx,k=f.sy,l=e.pos.x-(f.pos.x+c*f.xw),m=e.pos.y-(f.pos.y-i*f.yw),p=l*-k+m*j;if(0>p*h*i){var q=Math.sqrt(l*l+m*m),r=e.radius-q;if(r>0)return l/=q,m/=q,e.reportCollisionVsWorld(l*r,m*r,l,m,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var n=l*j+m*k,r=e.radius-Math.abs(n);if(r>0)return e.reportCollisionVsWorld(j*r,k*r,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else{if(h*c+i*d>0)return Phaser.Physics.Ninja.Circle.COL_NONE;var s=f.pos.x+c*f.xw,t=f.pos.y+d*f.yw,u=e.pos.x-s,v=e.pos.y-t,q=Math.sqrt(u*u+v*v),r=e.radius-q;if(r>0)return 0===q?(u=c/Math.SQRT2,v=d/Math.SQRT2):(u/=q,v/=q),e.reportCollisionVsWorld(u*r,v*r,u,v,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE},projCircle_Concave:function(a,b,c,d,e,f){var g,h=f.signx,i=f.signy;if(0===c){if(0===d){var j=f.pos.x+h*f.xw-e.pos.x,k=f.pos.y+i*f.yw-e.pos.y,l=2*f.xw,m=Math.sqrt(l*l+0),n=Math.sqrt(j*j+k*k),o=n+e.radius-m;return o>0?(b>a?(g=a,b=0,e.pos.x-f.pos.x<0&&(a*=-1)):(g=b,a=0,e.pos.y-f.pos.y<0&&(b*=-1)),o>g?(e.reportCollisionVsWorld(a,b,a/g,b/g,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(j/=n,k/=n,e.reportCollisionVsWorld(j*o,k*o,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER)):Phaser.Physics.Ninja.Circle.COL_NONE}if(0>i*d)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var p=f.pos.x-h*f.xw,q=f.pos.y+d*f.yw,r=e.pos.x-p,s=e.pos.y-q,n=Math.sqrt(r*r+s*s),o=e.radius-n;if(o>0)return 0===n?(r=0,s=d):(r/=n,s/=n),e.reportCollisionVsWorld(r*o,s*o,r,s,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else if(0===d){if(0>h*c)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var p=f.pos.x+c*f.xw,q=f.pos.y-i*f.yw,r=e.pos.x-p,s=e.pos.y-q,n=Math.sqrt(r*r+s*s),o=e.radius-n;if(o>0)return 0===n?(r=c,s=0):(r/=n,s/=n),e.reportCollisionVsWorld(r*o,s*o,r,s,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{if(h*c+i*d>0)return Phaser.Physics.Ninja.Circle.COL_NONE;var p=f.pos.x+c*f.xw,q=f.pos.y+d*f.yw,r=e.pos.x-p,s=e.pos.y-q,n=Math.sqrt(r*r+s*s),o=e.radius-n;if(o>0)return 0===n?(r=c/Math.SQRT2,s=d/Math.SQRT2):(r/=n,s/=n),e.reportCollisionVsWorld(r*o,s*o,r,s,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE},projCircle_Convex:function(a,b,c,d,e,f){var g,h=f.signx,i=f.signy;if(0===c)if(0===d){var j=e.pos.x-(f.pos.x-h*f.xw),k=e.pos.y-(f.pos.y-i*f.yw),l=2*f.xw,m=Math.sqrt(l*l+0),n=Math.sqrt(j*j+k*k),o=m+e.radius-n;if(o>0)return b>a?(g=a,b=0,e.pos.x-f.pos.x<0&&(a*=-1)):(g=b,a=0,e.pos.y-f.pos.y<0&&(b*=-1)),o>g?(e.reportCollisionVsWorld(a,b,a/g,b/g,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(j/=n,k/=n,e.reportCollisionVsWorld(j*o,k*o,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER)}else{if(0>i*d)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=e.pos.x-(f.pos.x-h*f.xw),k=e.pos.y-(f.pos.y-i*f.yw),l=2*f.xw,m=Math.sqrt(l*l+0),n=Math.sqrt(j*j+k*k),o=m+e.radius-n;if(o>0)return j/=n,k/=n,e.reportCollisionVsWorld(j*o,k*o,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else if(0===d){if(0>h*c)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=e.pos.x-(f.pos.x-h*f.xw),k=e.pos.y-(f.pos.y-i*f.yw),l=2*f.xw,m=Math.sqrt(l*l+0),n=Math.sqrt(j*j+k*k),o=m+e.radius-n;if(o>0)return j/=n,k/=n,e.reportCollisionVsWorld(j*o,k*o,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else if(h*c+i*d>0){var j=e.pos.x-(f.pos.x-h*f.xw),k=e.pos.y-(f.pos.y-i*f.yw),l=2*f.xw,m=Math.sqrt(l*l+0),n=Math.sqrt(j*j+k*k),o=m+e.radius-n;if(o>0)return j/=n,k/=n,e.reportCollisionVsWorld(j*o,k*o,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var p=f.pos.x+c*f.xw,q=f.pos.y+d*f.yw,r=e.pos.x-p,s=e.pos.y-q,n=Math.sqrt(r*r+s*s),o=e.radius-n;if(o>0)return 0===n?(r=c/Math.SQRT2,s=d/Math.SQRT2):(r/=n,s/=n),e.reportCollisionVsWorld(r*o,s*o,r,s,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE +},projCircle_Half:function(a,b,c,d,e,f){var g=f.signx,h=f.signy,i=c*g+d*h;if(i>0)return Phaser.Physics.Ninja.Circle.COL_NONE;if(0===c)if(0===d){var j=e.radius,k=e.pos.x-g*j-f.pos.x,l=e.pos.y-h*j-f.pos.y,m=g,n=h,o=k*m+l*n;if(0>o){m*=-o,n*=-o;var p=Math.sqrt(m*m+n*n),q=Math.sqrt(a*a+b*b);return p>q?(e.reportCollisionVsWorld(a,b,a/q,b/q,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(m,n,f.signx,f.signy),Phaser.Physics.Ninja.Circle.COL_OTHER)}}else{if(0!==i)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var r=e.pos.x-f.pos.x;if(0>r*g)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var s=e.pos.y-(f.pos.y+d*f.yw),t=Math.sqrt(r*r+s*s),u=e.radius-t;if(u>0)return 0===t?(r=g/Math.SQRT2,s=d/Math.SQRT2):(r/=t,s/=t),e.reportCollisionVsWorld(r*u,s*u,r,s,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else if(0===d){if(0!==i)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var s=e.pos.y-f.pos.y;if(0>s*h)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var r=e.pos.x-(f.pos.x+c*f.xw),t=Math.sqrt(r*r+s*s),u=e.radius-t;if(u>0)return 0===t?(r=g/Math.SQRT2,s=d/Math.SQRT2):(r/=t,s/=t),e.reportCollisionVsWorld(r*u,s*u,r,s,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var v=f.pos.x+c*f.xw,w=f.pos.y+d*f.yw,r=e.pos.x-v,s=e.pos.y-w,t=Math.sqrt(r*r+s*s),u=e.radius-t;if(u>0)return 0===t?(r=c/Math.SQRT2,s=d/Math.SQRT2):(r/=t,s/=t),e.reportCollisionVsWorld(r*u,s*u,r,s,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE},projCircle_22DegS:function(a,b,c,d,e,f){var g,h=f.signx,i=f.signy;if(i*d>0)return Phaser.Physics.Ninja.Circle.COL_NONE;if(0===c){if(0!==d)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=f.sx,k=f.sy,l=e.radius,m=e.pos.x-(f.pos.x-h*f.xw),n=e.pos.y-f.pos.y,o=m*-k+n*j;if(o*h*i>0){var p=Math.sqrt(m*m+n*n),q=l-p;if(q>0)return m/=p,n/=p,e.reportCollisionVsWorld(m*q,n*q,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{m-=l*j,n-=l*k;var r=m*j+n*k;if(0>r){j*=-r,k*=-r;var s=Math.sqrt(j*j+k*k);return b>a?(g=a,b=0,e.pos.x-f.pos.x<0&&(a*=-1)):(g=b,a=0,e.pos.y-f.pos.y<0&&(b*=-1)),s>g?(e.reportCollisionVsWorld(a,b,a/g,b/g,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(j,k,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER)}}}else if(0===d)if(0>h*c){var t=f.pos.x-h*f.xw,u=f.pos.y,v=e.pos.x-t,w=e.pos.y-u;if(0>w*i)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var p=Math.sqrt(v*v+w*w),q=e.radius-p;if(q>0)return 0===p?(v=c/Math.SQRT2,w=d/Math.SQRT2):(v/=p,w/=p),e.reportCollisionVsWorld(v*q,w*q,v,w,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var j=f.sx,k=f.sy,m=e.pos.x-(f.pos.x+c*f.xw),n=e.pos.y-(f.pos.y-i*f.yw),o=m*-k+n*j;if(0>o*h*i){var p=Math.sqrt(m*m+n*n),q=e.radius-p;if(q>0)return m/=p,n/=p,e.reportCollisionVsWorld(m*q,n*q,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var r=m*j+n*k,q=e.radius-Math.abs(r);if(q>0)return e.reportCollisionVsWorld(j*q,k*q,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else{var t=f.pos.x+c*f.xw,u=f.pos.y+d*f.yw,v=e.pos.x-t,w=e.pos.y-u,p=Math.sqrt(v*v+w*w),q=e.radius-p;if(q>0)return 0===p?(v=c/Math.SQRT2,w=d/Math.SQRT2):(v/=p,w/=p),e.reportCollisionVsWorld(v*q,w*q,v,w,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE},projCircle_22DegB:function(a,b,c,d,e,f){var g,h=f.signx,i=f.signy;if(0===c)if(0===d){var j=f.sx,k=f.sy,l=e.radius,m=e.pos.x-j*l-(f.pos.x-h*f.xw),n=e.pos.y-k*l-(f.pos.y+i*f.yw),o=m*j+n*k;if(0>o){j*=-o,k*=-o;var p=Math.sqrt(j*j+k*k);return b>a?(g=a,b=0,e.pos.x-f.pos.x<0&&(a*=-1)):(g=b,a=0,e.pos.y-f.pos.y<0&&(b*=-1)),p>g?(e.reportCollisionVsWorld(a,b,a/g,b/g,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(j,k,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER)}}else{if(0>i*d)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=f.sx,k=f.sy,m=e.pos.x-(f.pos.x-h*f.xw),n=e.pos.y-(f.pos.y+i*f.yw),q=m*-k+n*j;if(q*h*i>0){var r=Math.sqrt(m*m+n*n),s=e.radius-r;if(s>0)return m/=r,n/=r,e.reportCollisionVsWorld(m*s,n*s,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var o=m*j+n*k,s=e.radius-Math.abs(o);if(s>0)return e.reportCollisionVsWorld(j*s,k*s,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else if(0===d){if(0>h*c)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var m=e.pos.x-(f.pos.x+h*f.xw),n=e.pos.y-f.pos.y;if(0>n*i)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=f.sx,k=f.sy,q=m*-k+n*j;if(0>q*h*i){var r=Math.sqrt(m*m+n*n),s=e.radius-r;if(s>0)return m/=r,n/=r,e.reportCollisionVsWorld(m*s,n*s,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var o=m*j+n*k,s=e.radius-Math.abs(o);if(s>0)return e.reportCollisionVsWorld(j*s,k*s,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else{if(h*c+i*d>0){var t=Math.sqrt(5),j=1*h/t,k=2*i/t,l=e.radius,m=e.pos.x-j*l-(f.pos.x-h*f.xw),n=e.pos.y-k*l-(f.pos.y+i*f.yw),o=m*j+n*k;return 0>o?(e.reportCollisionVsWorld(-j*o,-k*o,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER):Phaser.Physics.Ninja.Circle.COL_NONE}var u=f.pos.x+c*f.xw,v=f.pos.y+d*f.yw,w=e.pos.x-u,x=e.pos.y-v,r=Math.sqrt(w*w+x*x),s=e.radius-r;if(s>0)return 0===r?(w=c/Math.SQRT2,x=d/Math.SQRT2):(w/=r,x/=r),e.reportCollisionVsWorld(w*s,x*s,w,x,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE},projCircle_67DegS:function(a,b,c,d,e,f){var g=f.signx,h=f.signy;if(g*c>0)return Phaser.Physics.Ninja.Circle.COL_NONE;if(0===c)if(0===d){var i,j=f.sx,k=f.sy,l=e.radius,m=e.pos.x-f.pos.x,n=e.pos.y-(f.pos.y-h*f.yw),o=m*-k+n*j;if(0>o*g*h){var p=Math.sqrt(m*m+n*n),q=l-p;if(q>0)return m/=p,n/=p,e.reportCollisionVsWorld(m*q,n*q,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{m-=l*j,n-=l*k;var r=m*j+n*k;if(0>r){j*=-r,k*=-r;var s=Math.sqrt(j*j+k*k);return b>a?(i=a,b=0,e.pos.x-f.pos.x<0&&(a*=-1)):(i=b,a=0,e.pos.y-f.pos.y<0&&(b*=-1)),s>i?(e.reportCollisionVsWorld(a,b,a/i,b/i,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(j,k,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER)}}}else if(0>h*d){var t=f.pos.x,u=f.pos.y-h*f.yw,v=e.pos.x-t,w=e.pos.y-u;if(0>v*g)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var p=Math.sqrt(v*v+w*w),q=e.radius-p;if(q>0)return 0===p?(v=c/Math.SQRT2,w=d/Math.SQRT2):(v/=p,w/=p),e.reportCollisionVsWorld(v*q,w*q,v,w,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var j=f.sx,k=f.sy,m=e.pos.x-(f.pos.x-g*f.xw),n=e.pos.y-(f.pos.y+d*f.yw),o=m*-k+n*j;if(o*g*h>0){var p=Math.sqrt(m*m+n*n),q=e.radius-p;if(q>0)return m/=p,n/=p,e.reportCollisionVsWorld(m*q,n*q,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var r=m*j+n*k,q=e.radius-Math.abs(r);if(q>0)return e.reportCollisionVsWorld(j*q,k*q,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else{if(0===d)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var t=f.pos.x+c*f.xw,u=f.pos.y+d*f.yw,v=e.pos.x-t,w=e.pos.y-u,p=Math.sqrt(v*v+w*w),q=e.radius-p;if(q>0)return 0===p?(v=c/Math.SQRT2,w=d/Math.SQRT2):(v/=p,w/=p),e.reportCollisionVsWorld(v*q,w*q,v,w,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE},projCircle_67DegB:function(a,b,c,d,e,f){var g=f.signx,h=f.signy;if(0===c)if(0===d){var i,j=f.sx,k=f.sy,l=e.radius,m=e.pos.x-j*l-(f.pos.x+g*f.xw),n=e.pos.y-k*l-(f.pos.y-h*f.yw),o=m*j+n*k;if(0>o){j*=-o,k*=-o;var p=Math.sqrt(j*j+k*k);return b>a?(i=a,b=0,e.pos.x-f.pos.x<0&&(a*=-1)):(i=b,a=0,e.pos.y-f.pos.y<0&&(b*=-1)),p>i?(e.reportCollisionVsWorld(a,b,a/i,b/i,f),Phaser.Physics.Ninja.Circle.COL_AXIS):(e.reportCollisionVsWorld(j,k,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER)}}else{if(0>h*d)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var m=e.pos.x-f.pos.x,n=e.pos.y-(f.pos.y+h*f.yw);if(0>m*g)return e.reportCollisionVsWorld(0,b*d,0,d,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var j=f.sx,k=f.sy,q=m*-k+n*j;if(q*g*h>0){var r=Math.sqrt(m*m+n*n),s=e.radius-r;if(s>0)return m/=r,n/=r,e.reportCollisionVsWorld(m*s,n*s,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var o=m*j+n*k,s=e.radius-Math.abs(o);if(s>0)return e.reportCollisionVsWorld(j*s,k*s,j,k,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else if(0===d){if(0>g*c)return e.reportCollisionVsWorld(a*c,0,c,0,f),Phaser.Physics.Ninja.Circle.COL_AXIS;var t=Math.sqrt(5),j=2*g/t,k=1*h/t,m=e.pos.x-(f.pos.x+g*f.xw),n=e.pos.y-(f.pos.y-h*f.yw),q=m*-k+n*j;if(0>q*g*h){var r=Math.sqrt(m*m+n*n),s=e.radius-r;if(s>0)return m/=r,n/=r,e.reportCollisionVsWorld(m*s,n*s,m,n,f),Phaser.Physics.Ninja.Circle.COL_OTHER}else{var o=m*j+n*k,s=e.radius-Math.abs(o);if(s>0)return e.reportCollisionVsWorld(j*s,k*s,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER}}else{if(g*c+h*d>0){var j=f.sx,k=f.sy,l=e.radius,m=e.pos.x-j*l-(f.pos.x+g*f.xw),n=e.pos.y-k*l-(f.pos.y-h*f.yw),o=m*j+n*k;return 0>o?(e.reportCollisionVsWorld(-j*o,-k*o,f.sx,f.sy,f),Phaser.Physics.Ninja.Circle.COL_OTHER):Phaser.Physics.Ninja.Circle.COL_NONE}var u=f.pos.x+c*f.xw,v=f.pos.y+d*f.yw,w=e.pos.x-u,x=e.pos.y-v,r=Math.sqrt(w*w+x*x),s=e.radius-r;if(s>0)return 0===r?(w=c/Math.SQRT2,x=d/Math.SQRT2):(w/=r,x/=r),e.reportCollisionVsWorld(w*s,x*s,w,x,f),Phaser.Physics.Ninja.Circle.COL_OTHER}return Phaser.Physics.Ninja.Circle.COL_NONE},destroy:function(){this.body=null,this.system=null}},!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define("p2",function(){return this.p2=a()}()):"undefined"!=typeof window?window.p2=a():"undefined"!=typeof global?self.p2=a():"undefined"!=typeof self&&(self.p2=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g0&&(e=1/Math.sqrt(e),a[0]=b[0]*e,a[1]=b[1]*e),a},g.dot=function(a,b){return a[0]*b[0]+a[1]*b[1]},g.cross=function(a,b,c){var d=b[0]*c[1]-b[1]*c[0];return a[0]=a[1]=0,a[2]=d,a},g.lerp=function(a,b,c,d){var e=b[0],f=b[1];return a[0]=e+d*(c[0]-e),a[1]=f+d*(c[1]-f),a},g.transformMat2=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[2]*e,a[1]=c[1]*d+c[3]*e,a},g.transformMat2d=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[2]*e+c[4],a[1]=c[1]*d+c[3]*e+c[5],a},g.transformMat3=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[3]*e+c[6],a[1]=c[1]*d+c[4]*e+c[7],a},g.transformMat4=function(a,b,c){var d=b[0],e=b[1];return a[0]=c[0]*d+c[4]*e+c[12],a[1]=c[1]*d+c[5]*e+c[13],a},g.forEach=function(){var a=g.create();return function(b,c,d,e,f,g){var h,i;for(c||(c=2),d||(d=0),i=e?Math.min(e*c+d,b.length):b.length,h=d;i>h;h+=c)a[0]=b[h],a[1]=b[h+1],f(a,a,g),b[h]=a[0],b[h+1]=a[1];return b}}(),g.str=function(a){return"vec2("+a[0]+", "+a[1]+")"},"undefined"!=typeof c&&(c.vec2=g)},{}],2:[function(a,b){function c(){}var d=a("./Scalar");b.exports=c,c.lineInt=function(a,b,c){c=c||0;var e,f,g,h,i,j,k,l=[0,0];return e=a[1][1]-a[0][1],f=a[0][0]-a[1][0],g=e*a[0][0]+f*a[0][1],h=b[1][1]-b[0][1],i=b[0][0]-b[1][0],j=h*b[0][0]+i*b[0][1],k=e*i-h*f,d.eq(k,0,c)||(l[0]=(i*g-f*j)/k,l[1]=(e*j-h*g)/k),l},c.segmentsIntersect=function(a,b,c,d){var e=b[0]-a[0],f=b[1]-a[1],g=d[0]-c[0],h=d[1]-c[1];if(g*f-h*e==0)return!1;var i=(e*(c[1]-a[1])+f*(a[0]-c[0]))/(g*f-h*e),j=(g*(a[1]-c[1])+h*(c[0]-a[0]))/(h*e-g*f);return i>=0&&1>=i&&j>=0&&1>=j}},{"./Scalar":5}],3:[function(a,b){function c(){}b.exports=c,c.area=function(a,b,c){return(b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1])},c.left=function(a,b,d){return c.area(a,b,d)>0},c.leftOn=function(a,b,d){return c.area(a,b,d)>=0},c.right=function(a,b,d){return c.area(a,b,d)<0},c.rightOn=function(a,b,d){return c.area(a,b,d)<=0};var d=[],e=[];c.collinear=function(a,b,f,g){if(g){var h=d,i=e;h[0]=b[0]-a[0],h[1]=b[1]-a[1],i[0]=f[0]-b[0],i[1]=f[1]-b[1];var j=h[0]*i[0]+h[1]*i[1],k=Math.sqrt(h[0]*h[0]+h[1]*h[1]),l=Math.sqrt(i[0]*i[0]+i[1]*i[1]),m=Math.acos(j/(k*l));return g>m}return 0==c.area(a,b,f)},c.sqdist=function(a,b){var c=b[0]-a[0],d=b[1]-a[1];return c*c+d*d}},{}],4:[function(a,b){function c(){this.vertices=[]}function d(a,b,c,d,e){e=e||0;var f=b[1]-a[1],h=a[0]-b[0],i=f*a[0]+h*a[1],j=d[1]-c[1],k=c[0]-d[0],l=j*c[0]+k*c[1],m=f*k-j*h;return g.eq(m,0,e)?[0,0]:[(k*i-h*l)/m,(f*l-j*i)/m]}var e=a("./Line"),f=a("./Point"),g=a("./Scalar");b.exports=c,c.prototype.at=function(a){var b=this.vertices,c=b.length;return b[0>a?a%c+c:a%c]},c.prototype.first=function(){return this.vertices[0]},c.prototype.last=function(){return this.vertices[this.vertices.length-1]},c.prototype.clear=function(){this.vertices.length=0},c.prototype.append=function(a,b,c){if("undefined"==typeof b)throw new Error("From is not given!");if("undefined"==typeof c)throw new Error("To is not given!");if(b>c-1)throw new Error("lol1");if(c>a.vertices.length)throw new Error("lol2");if(0>b)throw new Error("lol3");for(var d=b;c>d;d++)this.vertices.push(a.vertices[d])},c.prototype.makeCCW=function(){for(var a=0,b=this.vertices,c=1;cb[a][0])&&(a=c);f.left(this.at(a-1),this.at(a),this.at(a+1))||this.reverse()},c.prototype.reverse=function(){for(var a=[],b=0,c=this.vertices.length;b!==c;b++)a.push(this.vertices.pop());this.vertices=a},c.prototype.isReflex=function(a){return f.right(this.at(a-1),this.at(a),this.at(a+1))};var h=[],i=[];c.prototype.canSee=function(a,b){var c,d,g=h,j=i;if(f.leftOn(this.at(a+1),this.at(a),this.at(b))&&f.rightOn(this.at(a-1),this.at(a),this.at(b)))return!1;d=f.sqdist(this.at(a),this.at(b));for(var k=0;k!==this.vertices.length;++k)if((k+1)%this.vertices.length!==a&&k!==a&&f.leftOn(this.at(a),this.at(b),this.at(k+1))&&f.rightOn(this.at(a),this.at(b),this.at(k))&&(g[0]=this.at(a),g[1]=this.at(b),j[0]=this.at(k),j[1]=this.at(k+1),c=e.lineInt(g,j),f.sqdist(this.at(a),c)a)for(var f=a;b>=f;f++)e.vertices.push(this.vertices[f]);else{for(var f=0;b>=f;f++)e.vertices.push(this.vertices[f]);for(var f=a;f0?this.slice(a):[this]},c.prototype.slice=function(a){if(0==a.length)return[this];if(a instanceof Array&&a.length&&a[0]instanceof Array&&2==a[0].length&&a[0][0]instanceof Array){for(var b=[this],c=0;cc;c++)if(e.segmentsIntersect(a[b],a[b+1],a[c],a[c+1]))return!1;for(var b=1;bh)return console.warn("quickDecomp: max level ("+h+") reached."),a;for(var x=0;xo&&(n=o,k=l,r=y))),f.left(v.at(x+1),v.at(x),v.at(y+1))&&f.rightOn(v.at(x+1),v.at(x),v.at(y))&&(l=d(v.at(x+1),v.at(x),v.at(y),v.at(y+1)),f.left(v.at(x-1),v.at(x),l)&&(o=f.sqdist(v.vertices[x],l),m>o&&(m=o,j=l,q=y)));if(r==(q+1)%this.vertices.length)l[0]=(k[0]+j[0])/2,l[1]=(k[1]+j[1])/2,e.push(l),q>x?(t.append(v,x,q+1),t.vertices.push(l),u.vertices.push(l),0!=r&&u.append(v,r,v.vertices.length),u.append(v,0,x+1)):(0!=x&&t.append(v,x,v.vertices.length),t.append(v,0,q+1),t.vertices.push(l),u.vertices.push(l),u.append(v,r,x+1));else{if(r>q&&(q+=this.vertices.length),p=Number.MAX_VALUE,r>q)return a;for(var y=r;q>=y;++y)f.leftOn(v.at(x-1),v.at(x),v.at(y))&&f.rightOn(v.at(x+1),v.at(x),v.at(y))&&(o=f.sqdist(v.at(x),v.at(y)),p>o&&(p=o,s=y%this.vertices.length));s>x?(t.append(v,x,s+1),0!=s&&u.append(v,s,w.length),u.append(v,0,x+1)):(0!=x&&t.append(v,x,w.length),t.append(v,0,s+1),u.append(v,s,x+1))}return t.vertices.length3&&c>=0;--c)f.collinear(this.at(c-1),this.at(c),this.at(c+1),a)&&(this.vertices.splice(c%this.vertices.length,1),c--,b++);return b}},{"./Line":2,"./Point":3,"./Scalar":5}],5:[function(a,b){function c(){}b.exports=c,c.eq=function(a,b,c){return c=c||0,Math.abs(a-b) (http://steffe.se)",keywords:["p2.js","p2","physics","engine","2d"],main:"./src/p2.js",engines:{node:"*"},repository:{type:"git",url:"https://github.com/schteppe/p2.js.git"},bugs:{url:"https://github.com/schteppe/p2.js/issues"},licenses:[{type:"MIT"}],devDependencies:{grunt:"~0.4.0","grunt-contrib-jshint":"~0.9.2","grunt-contrib-nodeunit":"~0.1.2","grunt-contrib-uglify":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-browserify":"~2.0.1","z-schema":"~2.4.6"},dependencies:{"poly-decomp":"0.1.0","gl-matrix":"2.1.0"}}},{}],8:[function(a,b){function c(a){this.lowerBound=d.create(),a&&a.lowerBound&&d.copy(this.lowerBound,a.lowerBound),this.upperBound=d.create(),a&&a.upperBound&&d.copy(this.upperBound,a.upperBound)}{var d=a("../math/vec2");a("../utils/Utils")}b.exports=c;var e=d.create();c.prototype.setFromPoints=function(a,b,c){var f=this.lowerBound,g=this.upperBound;d.set(f,Number.MAX_VALUE,Number.MAX_VALUE),d.set(g,-Number.MAX_VALUE,-Number.MAX_VALUE);for(var h=0;hj;j++)i[j]>g[j]&&(g[j]=i[j]),i[j]b;b++)a.lowerBound[b]this.upperBound[b]&&(this.upperBound[b]=a.upperBound[b])},c.prototype.overlaps=function(a){var b=this.lowerBound,c=this.upperBound,d=a.lowerBound,e=a.upperBound;return(d[0]<=c[0]&&c[0]<=e[0]||b[0]<=e[0]&&e[0]<=c[0])&&(d[1]<=c[1]&&c[1]<=e[1]||b[1]<=e[1]&&e[1]<=c[1])}},{"../math/vec2":30,"../utils/Utils":47}],9:[function(a,b){function c(a){this.type=a,this.result=[],this.world=null,this.boundingVolumeType=c.AABB}var d=a("../math/vec2"),e=a("../objects/Body");b.exports=c,c.AABB=1,c.BOUNDING_CIRCLE=2,c.prototype.setWorld=function(a){this.world=a},c.prototype.getCollisionPairs=function(){throw new Error("getCollisionPairs must be implemented in a subclass!")};var f=d.create();c.boundingRadiusCheck=function(a,b){d.sub(f,a.position,b.position);var c=d.squaredLength(f),e=a.boundingRadius+b.boundingRadius;return e*e>=c},c.aabbCheck=function(a,b){return a.aabbNeedsUpdate&&a.updateAABB(),b.aabbNeedsUpdate&&b.updateAABB(),a.aabb.overlaps(b.aabb)},c.prototype.boundingVolumeCheck=function(a,b){var d;switch(this.boundingVolumeType){case c.BOUNDING_CIRCLE:d=c.boundingRadiusCheck(a,b);break;case c.AABB:d=c.aabbCheck(a,b);break;default:throw new Error("Bounding volume type not recognized: "+this.boundingVolumeType)}return d},c.canCollide=function(a,b){return a.motionState===e.STATIC&&b.motionState===e.STATIC?!1:a.motionState===e.KINEMATIC&&b.motionState===e.STATIC||a.motionState===e.STATIC&&b.motionState===e.KINEMATIC?!1:a.motionState===e.KINEMATIC&&b.motionState===e.KINEMATIC?!1:a.sleepState===e.SLEEPING&&b.sleepState===e.SLEEPING?!1:a.sleepState===e.SLEEPING&&b.motionState===e.STATIC||b.sleepState===e.SLEEPING&&a.motionState===e.STATIC?!1:!0},c.NAIVE=1,c.SAP=2},{"../math/vec2":30,"../objects/Body":31}],10:[function(a,b){function c(a){d.apply(this),a=e.defaults(a,{xmin:-100,xmax:100,ymin:-100,ymax:100,nx:10,ny:10}),this.xmin=a.xmin,this.ymin=a.ymin,this.xmax=a.xmax,this.ymax=a.ymax,this.nx=a.nx,this.ny=a.ny,this.binsizeX=(this.xmax-this.xmin)/this.nx,this.binsizeY=(this.ymax-this.ymin)/this.ny}var d=(a("../shapes/Circle"),a("../shapes/Plane"),a("../shapes/Particle"),a("../collision/Broadphase")),e=(a("../math/vec2"),a("../utils/Utils"));b.exports=c,c.prototype=new d,c.prototype.getCollisionPairs=function(a){for(var b=[],c=a.bodies,e=c.length,f=(this.binsizeX,this.binsizeY,this.nx),g=this.ny,h=this.xmin,i=this.ymin,j=this.xmax,k=this.ymax,l=[],m=f*g,n=0;m>n;n++)l.push([]);for(var o=f/(j-h),p=g/(k-i),n=0;n!==e;n++)for(var q=c[n],r=q.aabb,s=Math.max(r.lowerBound[0],h),t=Math.max(r.lowerBound[1],i),u=Math.min(r.upperBound[0],j),v=Math.min(r.upperBound[1],k),w=Math.floor(o*(s-h)),x=Math.floor(p*(t-i)),y=Math.floor(o*(u-h)),z=Math.floor(p*(v-i)),A=w;y>=A;A++)for(var B=x;z>=B;B++){var C=A,D=B,E=C*(g-1)+D;E>=0&&m>E&&l[E].push(q)}for(var n=0;n!==m;n++)for(var F=l[n],A=0,G=F.length;A!==G;A++)for(var q=F[A],B=0;B!==A;B++){var H=F[B];d.canCollide(q,H)&&this.boundingVolumeCheck(q,H)&&b.push(q,H)}return b}},{"../collision/Broadphase":9,"../math/vec2":30,"../shapes/Circle":35,"../shapes/Particle":39,"../shapes/Plane":40,"../utils/Utils":47}],11:[function(a,b){function c(){d.call(this,d.NAIVE)}{var d=(a("../shapes/Circle"),a("../shapes/Plane"),a("../shapes/Shape"),a("../shapes/Particle"),a("../collision/Broadphase"));a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.getCollisionPairs=function(a){var b=a.bodies,c=this.result;c.length=0;for(var e=0,f=b.length;e!==f;e++)for(var g=b[e],h=0;e>h;h++){var i=b[h];d.canCollide(g,i)&&this.boundingVolumeCheck(g,i)&&c.push(g,i)}return c}},{"../collision/Broadphase":9,"../math/vec2":30,"../shapes/Circle":35,"../shapes/Particle":39,"../shapes/Plane":40,"../shapes/Shape":42}],12:[function(a,b){function c(){this.contactEquations=[],this.frictionEquations=[],this.enableFriction=!0,this.slipForce=10,this.frictionCoefficient=.3,this.surfaceVelocity=0,this.reuseObjects=!0,this.reusableContactEquations=[],this.reusableFrictionEquations=[],this.restitution=0,this.stiffness=l.DEFAULT_STIFFNESS,this.relaxation=l.DEFAULT_RELAXATION,this.frictionStiffness=l.DEFAULT_STIFFNESS,this.frictionRelaxation=l.DEFAULT_RELAXATION,this.collidingBodiesLastStep=new k}function d(a,b){f.set(a.vertices[0],.5*-b.length,-b.radius),f.set(a.vertices[1],.5*b.length,-b.radius),f.set(a.vertices[2],.5*b.length,b.radius),f.set(a.vertices[3],.5*-b.length,b.radius)}function e(a,b,c,d){for(var e=R,i=S,j=T,k=U,l=a,m=b.vertices,n=null,o=0;o!==m.length+1;o++){var p=m[o%m.length],q=m[(o+1)%m.length];f.rotate(e,p,d),f.rotate(i,q,d),h(e,e,c),h(i,i,c),g(j,e,l),g(k,i,l);var r=f.crossLength(j,k);if(null===n&&(n=r),0>=r*n)return!1;n=r}return!0}var f=a("../math/vec2"),g=f.sub,h=f.add,i=f.dot,j=a("../utils/Utils"),k=a("../utils/TupleDictionary"),l=a("../equations/Equation"),m=a("../equations/ContactEquation"),n=a("../equations/FrictionEquation"),o=a("../shapes/Circle"),p=a("../shapes/Convex"),q=a("../shapes/Shape"),r=(a("../objects/Body"),a("../shapes/Rectangle"));b.exports=c;var s=f.fromValues(0,1),t=f.fromValues(0,0),u=f.fromValues(0,0),v=f.fromValues(0,0),w=f.fromValues(0,0),x=f.fromValues(0,0),y=f.fromValues(0,0),z=f.fromValues(0,0),A=f.fromValues(0,0),B=f.fromValues(0,0),C=f.fromValues(0,0),D=f.fromValues(0,0),E=f.fromValues(0,0),F=f.fromValues(0,0),G=f.fromValues(0,0),H=f.fromValues(0,0),I=f.fromValues(0,0),J=f.fromValues(0,0),K=f.fromValues(0,0),L=[];c.prototype.collidedLastStep=function(a,b){var c=0|a.id,d=0|b.id;return!!this.collidingBodiesLastStep.get(c,d)},c.prototype.reset=function(){this.collidingBodiesLastStep.reset();for(var a=0;a!==this.contactEquations.length;a++){var b=this.contactEquations[a],c=0|b.bodyA.id,d=0|b.bodyB.id;this.collidingBodiesLastStep.set(c,d,!0)}if(this.reuseObjects){var e=this.contactEquations,f=this.frictionEquations,g=this.reusableFrictionEquations,h=this.reusableContactEquations;j.appendArray(h,e),j.appendArray(g,f)}this.contactEquations.length=this.frictionEquations.length=0},c.prototype.createContactEquation=function(a,b,c,d){var e=this.reusableContactEquations.length?this.reusableContactEquations.pop():new m(a,b);return e.bodyA=a,e.bodyB=b,e.shapeA=c,e.shapeB=d,e.restitution=this.restitution,e.firstImpact=!this.collidedLastStep(a,b),e.stiffness=this.stiffness,e.relaxation=this.relaxation,e.needsUpdate=!0,e.enabled=!0,e},c.prototype.createFrictionEquation=function(a,b,c,d){var e=this.reusableFrictionEquations.length?this.reusableFrictionEquations.pop():new n(a,b);return e.bodyA=a,e.bodyB=b,e.shapeA=c,e.shapeB=d,e.setSlipForce(this.slipForce),e.frictionCoefficient=this.frictionCoefficient,e.relativeVelocity=this.surfaceVelocity,e.enabled=!0,e.needsUpdate=!0,e.stiffness=this.frictionStiffness,e.relaxation=this.frictionRelaxation,e},c.prototype.createFrictionFromContact=function(a){var b=this.createFrictionEquation(a.bodyA,a.bodyB,a.shapeA,a.shapeB);return f.copy(b.contactPointA,a.contactPointA),f.copy(b.contactPointB,a.contactPointB),f.rotate90cw(b.t,a.normalA),b.contactEquation=a,b},c.prototype[q.LINE|q.CONVEX]=c.prototype.convexLine=function(a,b,c,d,e,f,g,h,i){return i?!1:0},c.prototype[q.LINE|q.RECTANGLE]=c.prototype.lineRectangle=function(a,b,c,d,e,f,g,h,i){return i?!1:0};var M=new r(1,1),N=f.create();c.prototype[q.CAPSULE|q.CONVEX]=c.prototype[q.CAPSULE|q.RECTANGLE]=c.prototype.convexCapsule=function(a,b,c,e,g,h,i,j,k){var l=N;f.set(l,h.length/2,0),f.rotate(l,l,j),f.add(l,l,i);var m=this.circleConvex(g,h,l,j,a,b,c,e,k,h.radius);f.set(l,-h.length/2,0),f.rotate(l,l,j),f.add(l,l,i);var n=this.circleConvex(g,h,l,j,a,b,c,e,k,h.radius);if(k&&(m||n))return!0;var o=M;d(o,h);var p=this.convexConvex(a,b,c,e,g,o,i,j,k);return p+m+n},c.prototype[q.CAPSULE|q.LINE]=c.prototype.lineCapsule=function(a,b,c,d,e,f,g,h,i){return i?!1:0};var O=f.create(),P=f.create(),Q=new r(1,1);c.prototype[q.CAPSULE|q.CAPSULE]=c.prototype.capsuleCapsule=function(a,b,c,e,g,h,i,j,k){for(var l=O,m=P,n=0,o=0;2>o;o++){f.set(l,(0==o?-1:1)*b.length/2,0),f.rotate(l,l,e),f.add(l,l,c);for(var p=0;2>p;p++){f.set(m,(0==p?-1:1)*h.length/2,0),f.rotate(m,m,j),f.add(m,m,i);var q=this.circleCircle(a,b,l,e,g,h,m,j,k,b.radius,h.radius);if(k&&q)return!0;n+=q}}var r=Q;d(r,b);var s=this.convexCapsule(a,r,c,e,g,h,i,j,k);if(k&&s)return!0;n+=s,d(r,h);var t=this.convexCapsule(g,r,i,j,a,b,c,e,k);return k&&t?!0:n+=t},c.prototype[q.LINE|q.LINE]=c.prototype.lineLine=function(a,b,c,d,e,f,g,h,i){return i?!1:0},c.prototype[q.PLANE|q.LINE]=c.prototype.planeLine=function(a,b,c,d,e,j,k,l,m){var n=t,o=u,p=v,q=w,r=x,C=y,D=z,E=A,F=B,G=L;numContacts=0,f.set(n,-j.length/2,0),f.set(o,j.length/2,0),f.rotate(p,n,l),f.rotate(q,o,l),h(p,p,k),h(q,q,k),f.copy(n,p),f.copy(o,q),g(r,o,n),f.normalize(C,r),f.rotate90cw(F,C),f.rotate(E,s,d),G[0]=n,G[1]=o;for(var H=0;HJ){if(m)return!0;var K=this.createContactEquation(a,e,b,j);numContacts++,f.copy(K.normalA,E),f.normalize(K.normalA,K.normalA),f.scale(D,E,J),g(K.contactPointA,I,D),g(K.contactPointA,K.contactPointA,a.position),g(K.contactPointB,I,k),h(K.contactPointB,K.contactPointB,k),g(K.contactPointB,K.contactPointB,e.position),this.contactEquations.push(K),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(K))}}return numContacts},c.prototype[q.PARTICLE|q.CAPSULE]=c.prototype.particleCapsule=function(a,b,c,d,e,f,g,h,i){return this.circleLine(a,b,c,d,e,f,g,h,i,f.radius,0)},c.prototype[q.CIRCLE|q.LINE]=c.prototype.circleLine=function(a,b,c,d,e,j,k,l,m,n,o){var p=j,q=l,r=e,s=k,H=c,I=a,J=b,n=n||0,o="undefined"!=typeof o?o:J.radius,K=t,M=u,N=v,O=w,P=x,Q=y,R=z,S=A,T=B,U=C,V=D,W=E,X=F,Y=G,Z=L;f.set(S,-p.length/2,0),f.set(T,p.length/2,0),f.rotate(U,S,q),f.rotate(V,T,q),h(U,U,s),h(V,V,s),f.copy(S,U),f.copy(T,V),g(Q,T,S),f.normalize(R,Q),f.rotate90cw(P,R),g(W,H,S);var $=i(W,P);if(g(O,S,s),g(X,H,s),Math.abs($)ab&&bb>_){if(m)return!0;var cb=this.createContactEquation(I,r,b,j);return f.scale(cb.normalA,K,-1),f.normalize(cb.normalA,cb.normalA),f.scale(cb.contactPointA,cb.normalA,o),h(cb.contactPointA,cb.contactPointA,H),g(cb.contactPointA,cb.contactPointA,I.position),g(cb.contactPointB,N,s),h(cb.contactPointB,cb.contactPointB,s),g(cb.contactPointB,cb.contactPointB,r.position),this.contactEquations.push(cb),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(cb)),1}}Z[0]=S,Z[1]=T;for(var db=0;dbW&&(f.copy(Q,O),S=W,f.scale(N,K,W),f.add(N,N,O),R=!0)}}if(R){if(m)return!0;var X=this.createContactEquation(y,q,b,j);return f.sub(X.normalA,Q,s),f.normalize(X.normalA,X.normalA),f.scale(X.contactPointA,X.normalA,n),h(X.contactPointA,X.contactPointA,s),g(X.contactPointA,X.contactPointA,y.position),g(X.contactPointB,N,r),h(X.contactPointB,X.contactPointB,r),g(X.contactPointB,X.contactPointB,q.position),this.contactEquations.push(X),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(X)),1}if(n>0)for(var T=0;TW&&(Q=W,f.scale(N,H,W),f.add(N,N,s),f.copy(P,H),R=!0)}if(R){var X=this.createContactEquation(A,q,b,k);return f.scale(X.normalA,P,-1),f.normalize(X.normalA,X.normalA),f.set(X.contactPointA,0,0),h(X.contactPointA,X.contactPointA,s),g(X.contactPointA,X.contactPointA,A.position),g(X.contactPointB,N,r),h(X.contactPointB,X.contactPointB,r),g(X.contactPointB,X.contactPointB,q.position),this.contactEquations.push(X),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(X)),1}return 0},c.prototype[q.CIRCLE]=c.prototype.circleCircle=function(a,b,c,d,e,i,j,k,l,m,n){var o=a,p=b,q=c,r=e,s=i,u=j,v=t,m=m||p.radius,n=n||s.radius;g(v,c,j);var w=m+n;if(f.squaredLength(v)>w*w)return 0;if(l)return!0;var x=this.createContactEquation(o,r,b,i);return g(x.normalA,u,q),f.normalize(x.normalA,x.normalA),f.scale(x.contactPointA,x.normalA,m),f.scale(x.contactPointB,x.normalA,-n),h(x.contactPointA,x.contactPointA,q),g(x.contactPointA,x.contactPointA,o.position),h(x.contactPointB,x.contactPointB,u),g(x.contactPointB,x.contactPointB,r.position),this.contactEquations.push(x),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(x)),1},c.prototype[q.PLANE|q.CONVEX]=c.prototype[q.PLANE|q.RECTANGLE]=c.prototype.planeConvex=function(a,b,d,e,j,k,l,m,n){var o=j,p=l,q=k,r=m,w=a,x=b,y=d,z=e,A=t,B=u,C=v,D=0;f.rotate(B,s,z);for(var E=0;E0)return 0;if(l)return!0;var x=this.createContactEquation(o,m,h,b);return f.copy(x.normalA,v),f.scale(r,x.normalA,w),g(x.contactPointA,n,r),g(x.contactPointA,x.contactPointA,o.position),g(x.contactPointB,n,m.position),this.contactEquations.push(x),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(x)),1},c.prototype[q.CIRCLE|q.PARTICLE]=c.prototype.circleParticle=function(a,b,c,d,e,i,j,k,l){var m=a,n=b,o=c,p=e,q=j,r=t;if(g(r,q,o),f.squaredLength(r)>n.radius*n.radius)return 0;if(l)return!0;var s=this.createContactEquation(m,p,b,i);return f.copy(s.normalA,r),f.normalize(s.normalA,s.normalA),f.scale(s.contactPointA,s.normalA,n.radius),h(s.contactPointA,s.contactPointA,o),g(s.contactPointA,s.contactPointA,m.position),g(s.contactPointB,q,p.position),this.contactEquations.push(s),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(s)),1};{var V=new o(1),W=f.create(),X=f.create();f.create()}c.prototype[q.PLANE|q.CAPSULE]=c.prototype.planeCapsule=function(a,b,c,d,e,g,i,j,k){var l=W,m=X,n=V;f.set(l,-g.length/2,0),f.rotate(l,l,j),h(l,l,i),f.set(m,g.length/2,0),f.rotate(m,m,j),h(m,m,i),n.radius=g.radius;var o=this.circlePlane(e,n,l,0,a,b,c,d,k),p=this.circlePlane(e,n,m,0,a,b,c,d,k);return k?o||p:o+p},c.prototype.capsulePlane=function(a,b,c,d,e,f,g,h,i){return console.warn("Narrowphase.prototype.capsulePlane() is deprecated. Use .planeCapsule() instead!"),this.planeCapsule(e,f,g,h,a,b,c,d,i)},c.prototype[q.CIRCLE|q.PLANE]=c.prototype.circlePlane=function(a,b,c,d,e,j,k,l,m){var n=a,o=b,p=c,q=e,r=k,w=l;w=w||0;var x=t,y=u,z=v;g(x,p,r),f.rotate(y,s,w);var A=i(y,x);if(A>o.radius)return 0;if(m)return!0;var B=this.createContactEquation(q,n,j,b);return f.copy(B.normalA,y),f.scale(B.contactPointB,B.normalA,-o.radius),h(B.contactPointB,B.contactPointB,p),g(B.contactPointB,B.contactPointB,n.position),f.scale(z,B.normalA,A),g(B.contactPointA,x,z),h(B.contactPointA,B.contactPointA,r),g(B.contactPointA,B.contactPointA,q.position),this.contactEquations.push(B),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(B)),1},c.convexPrecision=1e-7,c.prototype[q.CONVEX]=c.prototype[q.CONVEX|q.RECTANGLE]=c.prototype[q.RECTANGLE]=c.prototype.convexConvex=function(a,b,d,e,j,k,l,m,n,o){var p=t,q=u,r=v,s=w,y=x,C=z,D=A,E=B,F=0,o=o||c.convexPrecision,G=c.findSeparatingAxis(b,d,e,k,l,m,p);if(!G)return 0;g(D,l,d),i(p,D)>0&&f.scale(p,p,-1);var H=c.getClosestEdge(b,e,p,!0),I=c.getClosestEdge(k,m,p);if(-1===H||-1===I)return 0;for(var J=0;2>J;J++){var K=H,L=I,M=b,N=k,O=d,P=l,Q=e,R=m,S=a,T=j;if(0===J){var U;U=K,K=L,L=U,U=M,M=N,N=U,U=O,O=P,P=U,U=Q,Q=R,R=U,U=S,S=T,T=U}for(var V=L;L+2>V;V++){var W=N.vertices[(V+N.vertices.length)%N.vertices.length];f.rotate(q,W,R),h(q,q,P);for(var X=0,Y=K-1;K+2>Y;Y++){var Z=M.vertices[(Y+M.vertices.length)%M.vertices.length],$=M.vertices[(Y+1+M.vertices.length)%M.vertices.length];f.rotate(r,Z,Q),f.rotate(s,$,Q),h(r,r,O),h(s,s,O),g(y,s,r),f.rotate90cw(E,y),f.normalize(E,E),g(D,q,r);var _=i(E,D);o>=_&&X++}if(X>=3){if(n)return!0;var ab=this.createContactEquation(S,T,M,N);F++;var Z=M.vertices[K%M.vertices.length],$=M.vertices[(K+1)%M.vertices.length];f.rotate(r,Z,Q),f.rotate(s,$,Q),h(r,r,O),h(s,s,O),g(y,s,r),f.rotate90cw(ab.normalA,y),f.normalize(ab.normalA,ab.normalA),g(D,q,r);var _=i(ab.normalA,D);f.scale(C,ab.normalA,_),g(ab.contactPointA,q,O),g(ab.contactPointA,ab.contactPointA,C),h(ab.contactPointA,ab.contactPointA,O),g(ab.contactPointA,ab.contactPointA,S.position),g(ab.contactPointB,q,P),h(ab.contactPointB,ab.contactPointB,P),g(ab.contactPointB,ab.contactPointB,T.position),this.contactEquations.push(ab),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(ab))}}}return F};var Y=f.fromValues(0,0);c.projectConvexOntoAxis=function(a,b,c,d,e){var g,h,j=null,k=null,l=Y;f.rotate(l,d,-c);for(var m=0;mj)&&(j=h),(null===k||k>h)&&(k=h);if(k>j){var n=k;k=j,j=n}var o=i(b,d);f.set(e,k+o,j+o)};var Z=f.fromValues(0,0),$=f.fromValues(0,0),_=f.fromValues(0,0),ab=f.fromValues(0,0),bb=f.fromValues(0,0),cb=f.fromValues(0,0);c.findSeparatingAxis=function(a,b,d,e,h,i,j){for(var k=null,l=!1,m=!1,n=Z,o=$,p=_,q=ab,r=bb,s=cb,t=0;2!==t;t++){var u=a,v=d;1===t&&(u=e,v=i);for(var w=0;w!==u.vertices.length;w++){f.rotate(o,u.vertices[w],v),f.rotate(p,u.vertices[(w+1)%u.vertices.length],v),g(n,p,o),f.rotate90cw(q,n),f.normalize(q,q),c.projectConvexOntoAxis(a,b,d,q,r),c.projectConvexOntoAxis(e,h,i,q,s);var x=r,y=s,z=!1;r[0]>s[0]&&(y=r,x=s,z=!0);var A=y[0]-x[1];l=A<=c.convexPrecision,(null===k||A>k)&&(f.copy(j,q),k=A,m=l)}}return m};var db=f.fromValues(0,0),eb=f.fromValues(0,0),fb=f.fromValues(0,0);c.getClosestEdge=function(a,b,c,d){var e=db,h=eb,j=fb;f.rotate(e,c,-b),d&&f.scale(e,e,-1);for(var k=-1,l=a.vertices.length,m=0;m!==l;m++){g(h,a.vertices[(m+1)%l],a.vertices[m%l]),f.rotate90cw(j,h),f.normalize(j,j);var n=i(j,e);(-1==k||n>maxDot)&&(k=m%l,maxDot=n)}return k};var gb=f.create(),hb=f.create(),ib=f.create(),jb=f.create(),kb=f.create(),lb=f.create(),mb=f.create();c.prototype[q.CIRCLE|q.HEIGHTFIELD]=c.prototype.circleHeightfield=function(a,b,c,d,e,i,j,k,l,m){var n=i.data,m=m||b.radius,o=i.elementWidth,p=hb,q=gb,r=kb,s=mb,t=lb,u=ib,v=jb,w=Math.floor((c[0]-m-j[0])/o),x=Math.ceil((c[0]+m-j[0])/o);0>w&&(w=0),x>=n.length&&(x=n.length-1);for(var y=n[w],z=n[x],A=w;x>A;A++)n[A]y&&(y=n[A]);if(c[1]-m>y)return l?!1:0;c[1]+mA;A++){f.set(u,A*o,n[A]),f.set(v,(A+1)*o,n[A+1]),f.add(u,u,j),f.add(v,v,j),f.sub(t,v,u),f.rotate(t,t,Math.PI/2),f.normalize(t,t),f.scale(q,t,-m),f.add(q,q,c),f.sub(p,q,u);var C=f.dot(p,t);if(q[0]>=u[0]&&q[0]=C){if(l)return!0;B=!0,f.scale(p,t,-C),f.add(r,q,p),f.copy(s,t);var D=this.createContactEquation(e,a,i,b);f.copy(D.normalA,s),f.scale(D.contactPointB,D.normalA,-m),h(D.contactPointB,D.contactPointB,c),g(D.contactPointB,D.contactPointB,a.position),f.copy(D.contactPointA,r),f.sub(D.contactPointA,D.contactPointA,e.position),this.contactEquations.push(D),this.enableFriction&&this.frictionEquations.push(this.createFrictionFromContact(D))}}if(B=!1,m>0)for(var A=w;x>=A;A++)if(f.set(u,A*o,n[A]),f.add(u,u,j),f.sub(p,c,u),f.squaredLength(p)q&&(q=0),r>=k.length&&(r=k.length-1);for(var s=k[q],t=k[r],u=q;r>u;u++)k[u]s&&(s=k[u]);if(a.aabb.lowerBound[1]>s)return j?!1:0;for(var v=0,u=q;r>u;u++){f.set(m,u*l,k[u]),f.set(n,(u+1)*l,k[u+1]),f.add(m,m,h),f.add(n,n,h);var w=100;f.set(o,.5*(n[0]+m[0]),.5*(n[1]+m[1]-w)),f.sub(p.vertices[0],n,o),f.sub(p.vertices[1],m,o),f.copy(p.vertices[2],p.vertices[1]),f.copy(p.vertices[3],p.vertices[0]),p.vertices[2][1]-=w,p.vertices[3][1]-=w,v+=this.convexConvex(a,b,c,d,e,p,o,0,j)}return v}},{"../equations/ContactEquation":21,"../equations/Equation":22,"../equations/FrictionEquation":23,"../math/vec2":30,"../objects/Body":31,"../shapes/Circle":35,"../shapes/Convex":36,"../shapes/Rectangle":41,"../shapes/Shape":42,"../utils/TupleDictionary":46,"../utils/Utils":47}],13:[function(a,b){function c(){e.call(this,e.SAP),this.axisList=[],this.world=null,this.axisIndex=0;var a=this.axisList;this._addBodyHandler=function(b){a.push(b.body)},this._removeBodyHandler=function(b){var c=a.indexOf(b.body);-1!==c&&a.splice(c,1)}}var d=a("../utils/Utils"),e=a("../collision/Broadphase");b.exports=c,c.prototype=new e,c.prototype.setWorld=function(a){this.axisList.length=0,d.appendArray(this.axisList,a.bodies),a.off("addBody",this._addBodyHandler).off("removeBody",this._removeBodyHandler),a.on("addBody",this._addBodyHandler).on("removeBody",this._removeBodyHandler),this.world=a},c.sortAxisList=function(a,b){b=0|b;for(var c=1,d=a.length;d>c;c++){for(var e=a[c],f=c-1;f>=0&&!(a[f].aabb.lowerBound[b]<=e.aabb.lowerBound[b]);f--)a[f+1]=a[f];a[f+1]=e}return a},c.prototype.getCollisionPairs=function(){var a=this.axisList,b=this.result,d=this.axisIndex;b.length=0;for(var f=a.length;f--;){var g=a[f];g.aabbNeedsUpdate&&g.updateAABB()}c.sortAxisList(a,d);for(var h=0,i=0|a.length;h!==i;h++)for(var j=a[h],k=h+1;i>k;k++){var l=a[k],m=l.aabb.lowerBound[d]<=j.aabb.upperBound[d];if(!m)break;e.canCollide(j,l)&&this.boundingVolumeCheck(j,l)&&b.push(j,l)}return b}},{"../collision/Broadphase":9,"../utils/Utils":47}],14:[function(a,b){function c(a,b,c,e){this.type=c,e=d.defaults(e,{collideConnected:!0,wakeUpBodies:!0}),this.equations=[],this.bodyA=a,this.bodyB=b,this.collideConnected=e.collideConnected,e.wakeUpBodies&&(a&&a.wakeUp(),b&&b.wakeUp())}b.exports=c;var d=a("../utils/Utils");c.prototype.update=function(){throw new Error("method update() not implmemented in this Constraint subclass!")},c.DISTANCE=1,c.GEAR=2,c.LOCK=3,c.PRISMATIC=4,c.REVOLUTE=5,c.prototype.setStiffness=function(a){for(var b=this.equations,c=0;c!==b.length;c++){var d=b[c];d.stiffness=a,d.needsUpdate=!0}},c.prototype.setRelaxation=function(a){for(var b=this.equations,c=0;c!==b.length;c++){var d=b[c];d.relaxation=a,d.needsUpdate=!0}}},{"../utils/Utils":47}],15:[function(a,b){function c(a,b,c,g){g=g||{},d.call(this,a,b,d.DISTANCE,g),this.distance=c,this.localAnchorA=f.create(),this.localAnchorB=f.create();var h,i=this.localAnchorA,j=this.localAnchorB;h="undefined"==typeof g.maxForce?Number.MAX_VALUE:g.maxForce;var k=new e(a,b,-h,h);this.equations=[k];var l=f.create(),m=f.create(),n=f.create(),o=this;k.computeGq=function(){{var a=this.bodyA,b=this.bodyB,c=a.position;b.position}return f.rotate(m,i,a.angle),f.rotate(n,j,b.angle),f.add(l,c,n),f.sub(l,l,m),f.sub(l,l,c),f.sub(l,b.position,a.position),f.length(l)-o.distance},this.setMaxForce(h)}var d=a("./Constraint"),e=a("../equations/Equation"),f=a("../math/vec2");b.exports=c,c.prototype=new d;var g=f.create(),h=f.create(),i=f.create();c.prototype.update=function(){var a=this.equations[0],b=this.bodyA,c=this.bodyB,d=(this.distance,b.position,c.position,a.G);f.rotate(h,this.localAnchorA,b.angle),f.rotate(i,this.localAnchorB,c.angle);f.crossLength(h,g),f.crossLength(i,g);f.sub(g,c.position,b.position),f.normalize(g,g),d[0]=-g[0],d[1]=-g[1],d[3]=g[0],d[4]=g[1]},c.prototype.setMaxForce=function(a){var b=this.equations[0];b.minForce=-a,b.maxForce=a},c.prototype.getMaxForce=function(){var a=this.equations[0];return a.maxForce}},{"../equations/Equation":22,"../math/vec2":30,"./Constraint":14}],16:[function(a,b){function c(a,b,c){c=c||{},d.call(this,a,b,d.GEAR,c),this.equations=[new e(a,b,c)],this.angle="number"==typeof c.angle?c.angle:0,this.ratio="number"==typeof c.ratio?c.ratio:1,"number"==typeof c.maxTorque&&this.setMaxTorque(c.maxTorque)}{var d=a("./Constraint"),e=(a("../equations/Equation"),a("../equations/AngleLockEquation"));a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.update=function(){var a=this.equations[0];a.ratio!==this.ratio&&a.setRatio(this.ratio),a.angle=this.angle},c.prototype.setMaxTorque=function(a){this.equations[0].setMaxTorque(a)},c.prototype.getMaxTorque=function(){return this.equations[0].maxForce}},{"../equations/AngleLockEquation":20,"../equations/Equation":22,"../math/vec2":30,"./Constraint":14}],17:[function(a,b){function c(a,b,c){c=c||{},d.call(this,a,b,d.LOCK,c);var g="undefined"==typeof c.maxForce?Number.MAX_VALUE:c.maxForce,h=c.localOffsetB||e.fromValues(0,0);h=e.fromValues(h[0],h[1]);var i=c.localAngleB||0,j=new f(a,b,-g,g),k=new f(a,b,-g,g),l=new f(a,b,-g,g),m=e.create(),n=e.create(),o=this;j.computeGq=function(){return e.rotate(m,o.localOffsetB,a.angle),e.sub(n,b.position,a.position),e.sub(n,n,m),n[0]},k.computeGq=function(){return e.rotate(m,o.localOffsetB,a.angle),e.sub(n,b.position,a.position),e.sub(n,n,m),n[1]};var p=e.create(),q=e.create();l.computeGq=function(){return e.rotate(p,o.localOffsetB,b.angle-o.localAngleB),e.scale(p,p,-1),e.sub(n,a.position,b.position),e.add(n,n,p),e.rotate(q,p,-Math.PI/2),e.normalize(q,q),e.dot(n,q)},this.localOffsetB=h,this.localAngleB=i,this.equations.push(j,k,l),this.setMaxForce(g)}var d=a("./Constraint"),e=a("../math/vec2"),f=a("../equations/Equation");b.exports=c,c.prototype=new d,c.prototype.setMaxForce=function(a){for(var b=this.equations,c=0;cc)g.scale(e.normalA,i,-1),g.sub(e.contactPointA,j,h.position),g.sub(e.contactPointB,k,o.position),g.scale(n,i,c),g.add(e.contactPointA,e.contactPointA,n),-1==a.indexOf(e)&&a.push(e);else{var u=a.indexOf(e);-1!=u&&a.splice(u,1)}if(this.lowerLimitEnabled&&d>s)g.scale(f.normalA,i,1),g.sub(f.contactPointA,j,h.position),g.sub(f.contactPointB,k,o.position),g.scale(n,i,d),g.sub(f.contactPointB,f.contactPointB,n),-1==a.indexOf(f)&&a.push(f);else{var u=a.indexOf(f);-1!=u&&a.splice(u,1)}},c.prototype.enableMotor=function(){this.motorEnabled||(this.equations.push(this.motorEquation),this.motorEnabled=!0)},c.prototype.disableMotor=function(){if(this.motorEnabled){var a=this.equations.indexOf(this.motorEquation);this.equations.splice(a,1),this.motorEnabled=!1}}},{"../equations/ContactEquation":21,"../equations/Equation":22,"../equations/RotationalLockEquation":24,"../math/vec2":30,"./Constraint":14}],19:[function(a,b){function c(a,b,c,n,o){o=o||{},d.call(this,a,c,d.REVOLUTE,o);var p=this.maxForce="undefined"!=typeof o.maxForce?o.maxForce:Number.MAX_VALUE;this.pivotA=h.fromValues(b[0],b[1]),this.pivotB=h.fromValues(n[0],n[1]);var q=this.equations=[new e(a,c,-p,p),new e(a,c,-p,p)],r=q[0],s=q[1],t=this;r.computeGq=function(){return h.rotate(i,t.pivotA,a.angle),h.rotate(j,t.pivotB,c.angle),h.add(m,c.position,j),h.sub(m,m,a.position),h.sub(m,m,i),h.dot(m,k)},s.computeGq=function(){return h.rotate(i,t.pivotA,a.angle),h.rotate(j,t.pivotB,c.angle),h.add(m,c.position,j),h.sub(m,m,a.position),h.sub(m,m,i),h.dot(m,l)},s.minForce=r.minForce=-p,s.maxForce=r.maxForce=p,this.motorEquation=new f(a,c),this.motorEnabled=!1,this.angle=0,this.lowerLimitEnabled=!1,this.upperLimitEnabled=!1,this.lowerLimit=0,this.upperLimit=0,this.upperLimitEquation=new g(a,c),this.lowerLimitEquation=new g(a,c),this.upperLimitEquation.minForce=0,this.lowerLimitEquation.maxForce=0}var d=a("./Constraint"),e=a("../equations/Equation"),f=a("../equations/RotationalVelocityEquation"),g=a("../equations/RotationalLockEquation"),h=a("../math/vec2");b.exports=c;var i=h.create(),j=h.create(),k=h.fromValues(1,0),l=h.fromValues(0,1),m=h.create();c.prototype=new d,c.prototype.update=function(){var a=this.bodyA,b=this.bodyB,c=this.pivotA,d=this.pivotB,e=this.equations,f=(e[0],e[1],e[0]),g=e[1],m=this.upperLimit,n=this.lowerLimit,o=this.upperLimitEquation,p=this.lowerLimitEquation,q=this.angle=b.angle-a.angle;if(this.upperLimitEnabled&&q>m)o.angle=m,-1==e.indexOf(o)&&e.push(o);else{var r=e.indexOf(o);-1!=r&&e.splice(r,1)}if(this.lowerLimitEnabled&&n>q)p.angle=n,-1==e.indexOf(p)&&e.push(p);else{var r=e.indexOf(p);-1!=r&&e.splice(r,1)}h.rotate(i,c,a.angle),h.rotate(j,d,b.angle),f.G[0]=-1,f.G[1]=0,f.G[2]=-h.crossLength(i,k),f.G[3]=1,f.G[4]=0,f.G[5]=h.crossLength(j,k),g.G[0]=0,g.G[1]=-1,g.G[2]=-h.crossLength(i,l),g.G[3]=0,g.G[4]=1,g.G[5]=h.crossLength(j,l)},c.prototype.enableMotor=function(){this.motorEnabled||(this.equations.push(this.motorEquation),this.motorEnabled=!0)},c.prototype.disableMotor=function(){if(this.motorEnabled){var a=this.equations.indexOf(this.motorEquation);this.equations.splice(a,1),this.motorEnabled=!1}},c.prototype.motorIsEnabled=function(){return!!this.motorEnabled},c.prototype.setMotorSpeed=function(a){if(this.motorEnabled){var b=this.equations.indexOf(this.motorEquation);this.equations[b].relativeVelocity=a}},c.prototype.getMotorSpeed=function(){return this.motorEnabled?this.motorEquation.relativeVelocity:!1}},{"../equations/Equation":22,"../equations/RotationalLockEquation":24,"../equations/RotationalVelocityEquation":25,"../math/vec2":30,"./Constraint":14}],20:[function(a,b){function c(a,b,c){c=c||{},d.call(this,a,b,-Number.MAX_VALUE,Number.MAX_VALUE),this.angle=c.angle||0,this.ratio="number"==typeof c.ratio?c.ratio:1,this.setRatio(this.ratio)}{var d=a("./Equation");a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.constructor=c,c.prototype.computeGq=function(){return this.ratio*this.bodyA.angle-this.bodyB.angle+this.angle},c.prototype.setRatio=function(a){var b=this.G;b[2]=a,b[5]=-1,this.ratio=a},c.prototype.setMaxTorque=function(a){this.maxForce=a,this.minForce=-a}},{"../math/vec2":30,"./Equation":22}],21:[function(a,b){function c(a,b){d.call(this,a,b,0,Number.MAX_VALUE),this.contactPointA=e.create(),this.penetrationVec=e.create(),this.contactPointB=e.create(),this.normalA=e.create(),this.restitution=0,this.firstImpact=!1,this.shapeA=null,this.shapeB=null}var d=a("./Equation"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.constructor=c,c.prototype.computeB=function(a,b,c){var d=this.bodyA,f=this.bodyB,g=this.contactPointA,h=this.contactPointB,i=d.position,j=f.position,k=this.penetrationVec,l=this.normalA,m=this.G,n=e.crossLength(g,l),o=e.crossLength(h,l);m[0]=-l[0],m[1]=-l[1],m[2]=-n,m[3]=l[0],m[4]=l[1],m[5]=o,e.add(k,j,h),e.sub(k,k,i),e.sub(k,k,g);var p,q;this.firstImpact&&0!==this.restitution?(q=0,p=1/b*(1+this.restitution)*this.computeGW()):(q=e.dot(l,k),p=this.computeGW());var r=this.computeGiMf(),s=-q*a-p*b-c*r;return s}},{"../math/vec2":30,"./Equation":22}],22:[function(a,b){function c(a,b,d,e){this.minForce="undefined"==typeof d?-Number.MAX_VALUE:d,this.maxForce="undefined"==typeof e?Number.MAX_VALUE:e,this.bodyA=a,this.bodyB=b,this.stiffness=c.DEFAULT_STIFFNESS,this.relaxation=c.DEFAULT_RELAXATION,this.G=new h.ARRAY_TYPE(6);for(var f=0;6>f;f++)this.G[f]=0;this.offset=0,this.a=0,this.b=0,this.epsilon=0,this.timeStep=1/60,this.needsUpdate=!0,this.multiplier=0,this.relativeVelocity=0,this.enabled=!0}function d(a,b,c,d,e){return a[0]*b[0]+a[1]*b[1]+a[2]*c+a[3]*d[0]+a[4]*d[1]+a[5]*e}function e(a){return a.sleepState===i.SLEEPING?0:a.invMass}function f(a){return a.sleepState===i.SLEEPING?0:a.invInertia}b.exports=c;var g=a("../math/vec2"),h=a("../utils/Utils"),i=a("../objects/Body");c.prototype.constructor=c,c.DEFAULT_STIFFNESS=1e6,c.DEFAULT_RELAXATION=4,c.prototype.update=function(){var a=this.stiffness,b=this.relaxation,c=this.timeStep;this.a=4/(c*(1+4*b)),this.b=4*b/(1+4*b),this.epsilon=4/(c*c*a*(1+4*b)),this.needsUpdate=!1},c.prototype.computeB=function(a,b,c){var d=this.computeGW(),e=this.computeGq(),f=this.computeGiMf();return-e*a-d*b-f*c};var j=g.create(),k=g.create();c.prototype.computeGq=function(){var a=this.G,b=this.bodyA,c=this.bodyB,e=(b.position,c.position,b.angle),f=c.angle;return d(a,j,e,k,f)+this.offset},c.prototype.computeGW=function(){var a=this.G,b=this.bodyA,c=this.bodyB,e=b.velocity,f=c.velocity,g=b.angularVelocity,h=c.angularVelocity;return d(a,e,g,f,h)+this.relativeVelocity},c.prototype.computeGWlambda=function(){var a=this.G,b=this.bodyA,c=this.bodyB,e=b.vlambda,f=c.vlambda,g=b.wlambda,h=c.wlambda;return d(a,e,g,f,h)};var l=g.create(),m=g.create();c.prototype.computeGiMf=function(){var a=this.bodyA,b=this.bodyB,c=a.force,h=a.angularForce,i=b.force,j=b.angularForce,k=e(a),n=e(b),o=f(a),p=f(b),q=this.G;return g.scale(l,c,k),g.scale(m,i,n),d(q,l,h*o,m,j*p)},c.prototype.computeGiMGt=function(){var a=this.bodyA,b=this.bodyB,c=e(a),d=e(b),g=f(a),h=f(b),i=this.G;return i[0]*i[0]*c+i[1]*i[1]*c+i[2]*i[2]*g+i[3]*i[3]*d+i[4]*i[4]*d+i[5]*i[5]*h};{var n=g.create(),o=g.create(),p=g.create();g.create(),g.create(),g.create()}c.prototype.addToWlambda=function(a){var b=this.bodyA,c=this.bodyB,d=n,h=o,i=p,j=e(b),k=e(c),l=f(b),m=f(c),q=this.G;h[0]=q[0],h[1]=q[1],i[0]=q[3],i[1]=q[4],g.scale(d,h,j*a),g.add(b.vlambda,b.vlambda,d),b.wlambda+=l*q[2]*a,g.scale(d,i,k*a),g.add(c.vlambda,c.vlambda,d),c.wlambda+=m*q[5]*a},c.prototype.computeInvC=function(a){return 1/(this.computeGiMGt()+a)}},{"../math/vec2":30,"../objects/Body":31,"../utils/Utils":47}],23:[function(a,b){function c(a,b,c){e.call(this,a,b,-c,c),this.contactPointA=d.create(),this.contactPointB=d.create(),this.t=d.create(),this.contactEquation=null,this.shapeA=null,this.shapeB=null,this.frictionCoefficient=.3}{var d=a("../math/vec2"),e=a("./Equation");a("../utils/Utils")}b.exports=c,c.prototype=new e,c.prototype.constructor=c,c.prototype.setSlipForce=function(a){this.maxForce=a,this.minForce=-a},c.prototype.getSlipForce=function(){return this.maxForce},c.prototype.computeB=function(a,b,c){var e=(this.bodyA,this.bodyB,this.contactPointA),f=this.contactPointB,g=this.t,h=this.G;h[0]=-g[0],h[1]=-g[1],h[2]=-d.crossLength(e,g),h[3]=g[0],h[4]=g[1],h[5]=d.crossLength(f,g);var i=this.computeGW(),j=this.computeGiMf(),k=-i*b-c*j;return k}},{"../math/vec2":30,"../utils/Utils":47,"./Equation":22}],24:[function(a,b){function c(a,b,c){c=c||{},d.call(this,a,b,-Number.MAX_VALUE,Number.MAX_VALUE),this.angle=c.angle||0;var e=this.G;e[2]=1,e[5]=-1}var d=a("./Equation"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.constructor=c;var f=e.create(),g=e.create(),h=e.fromValues(1,0),i=e.fromValues(0,1);c.prototype.computeGq=function(){return e.rotate(f,h,this.bodyA.angle+this.angle),e.rotate(g,i,this.bodyB.angle),e.dot(f,g)}},{"../math/vec2":30,"./Equation":22}],25:[function(a,b){function c(a,b){d.call(this,a,b,-Number.MAX_VALUE,Number.MAX_VALUE),this.relativeVelocity=1,this.ratio=1}{var d=a("./Equation");a("../math/vec2")}b.exports=c,c.prototype=new d,c.prototype.constructor=c,c.prototype.computeB=function(a,b,c){var d=this.G;d[2]=-1,d[5]=this.ratio;var e=this.computeGiMf(),f=this.computeGW(),g=-f*b-c*e;return g}},{"../math/vec2":30,"./Equation":22}],26:[function(a,b){var c=function(){};b.exports=c,c.prototype={constructor:c,on:function(a,b,c){b.context=c||this,void 0===this._listeners&&(this._listeners={});var d=this._listeners;return void 0===d[a]&&(d[a]=[]),-1===d[a].indexOf(b)&&d[a].push(b),this},has:function(a,b){if(void 0===this._listeners)return!1;var c=this._listeners;if(b){if(void 0!==c[a]&&-1!==c[a].indexOf(b))return!0}else if(void 0!==c[a])return!0;return!1},off:function(a,b){if(void 0===this._listeners)return this;var c=this._listeners,d=c[a].indexOf(b);return-1!==d&&c[a].splice(d,1),this},emit:function(a){if(void 0===this._listeners)return this;var b=this._listeners,c=b[a.type];if(void 0!==c){a.target=this;for(var d=0,e=c.length;e>d;d++){var f=c[d];f.call(f.context,a)}}return this}}},{}],27:[function(a,b){function c(a,b,f){if(f=f||{},!(a instanceof d&&b instanceof d))throw new Error("First two arguments must be Material instances.");this.id=c.idCounter++,this.materialA=a,this.materialB=b,this.friction="undefined"!=typeof f.friction?Number(f.friction):.3,this.restitution="undefined"!=typeof f.restitution?Number(f.restitution):0,this.stiffness="undefined"!=typeof f.stiffness?Number(f.stiffness):e.DEFAULT_STIFFNESS,this.relaxation="undefined"!=typeof f.relaxation?Number(f.relaxation):e.DEFAULT_RELAXATION,this.frictionStiffness="undefined"!=typeof f.frictionStiffness?Number(f.frictionStiffness):e.DEFAULT_STIFFNESS,this.frictionRelaxation="undefined"!=typeof f.frictionRelaxation?Number(f.frictionRelaxation):e.DEFAULT_RELAXATION,this.surfaceVelocity="undefined"!=typeof f.surfaceVelocity?Number(f.surfaceVelocity):0}var d=a("./Material"),e=a("../equations/Equation");b.exports=c,c.idCounter=0},{"../equations/Equation":22,"./Material":28}],28:[function(a,b){function c(){this.id=c.idCounter++}b.exports=c,c.idCounter=0},{}],29:[function(a,b){var c={};c.GetArea=function(a){if(a.length<6)return 0;for(var b=a.length-2,c=0,d=0;b>d;d+=2)c+=(a[d+2]-a[d])*(a[d+1]+a[d+3]);return c+=(a[0]-a[b])*(a[b+1]+a[1]),.5*-c},c.Triangulate=function(a){var b=a.length>>1;if(3>b)return[];for(var d=[],e=[],f=0;b>f;f++)e.push(f);for(var f=0,g=b;g>3;){var h=e[(f+0)%g],i=e[(f+1)%g],j=e[(f+2)%g],k=a[2*h],l=a[2*h+1],m=a[2*i],n=a[2*i+1],o=a[2*j],p=a[2*j+1],q=!1;if(c._convex(k,l,m,n,o,p)){q=!0;for(var r=0;g>r;r++){var s=e[r];if(s!=h&&s!=i&&s!=j&&c._PointInTriangle(a[2*s],a[2*s+1],k,l,m,n,o,p)){q=!1;break}}}if(q)d.push(h,i,j),e.splice((f+1)%g,1),g--,f=0; +else if(f++>3*g)break}return d.push(e[0],e[1],e[2]),d},c._PointInTriangle=function(a,b,c,d,e,f,g,h){var i=g-c,j=h-d,k=e-c,l=f-d,m=a-c,n=b-d,o=i*i+j*j,p=i*k+j*l,q=i*m+j*n,r=k*k+l*l,s=k*m+l*n,t=1/(o*r-p*p),u=(r*q-p*s)*t,v=(o*s-p*q)*t;return u>=0&&v>=0&&1>u+v},c._convex=function(a,b,c,d,e,f){return(b-d)*(e-c)+(c-a)*(f-d)>=0},b.exports=c},{}],30:[function(a,b){var c=a("../../build/vec2").vec2;c.crossLength=function(a,b){return a[0]*b[1]-a[1]*b[0]},c.crossVZ=function(a,b,d){return c.rotate(a,b,-Math.PI/2),c.scale(a,a,d),a},c.crossZV=function(a,b,d){return c.rotate(a,d,Math.PI/2),c.scale(a,a,b),a},c.rotate=function(a,b,c){var d=Math.cos(c),e=Math.sin(c),f=b[0],g=b[1];a[0]=d*f-e*g,a[1]=e*f+d*g},c.rotate90cw=function(a,b){a[0]=b[1],a[1]=-b[0]},c.toLocalFrame=function(a,b,d,e){c.copy(a,b),c.sub(a,a,d),c.rotate(a,a,-e)},c.toGlobalFrame=function(a,b,d,e){c.copy(a,b),c.rotate(a,a,e),c.add(a,a,d)},c.centroid=function(a,b,d,e){return c.add(a,b,d),c.add(a,a,e),c.scale(a,a,1/3),a},b.exports=c},{"../../build/vec2":1}],31:[function(a,b){function c(a){a=a||{},h.call(this),this.id=++c._idCounter,this.world=null,this.shapes=[],this.shapeOffsets=[],this.shapeAngles=[],this.mass=a.mass||0,this.invMass=0,this.inertia=0,this.invInertia=0,this.fixedRotation=!!a.fixedRotation||!1,this.position=d.fromValues(0,0),a.position&&d.copy(this.position,a.position),this.interpolatedPosition=d.fromValues(0,0),this.interpolatedAngle=0,this.previousPosition=d.fromValues(0,0),this.previousAngle=0,this.velocity=d.fromValues(0,0),a.velocity&&d.copy(this.velocity,a.velocity),this.vlambda=d.fromValues(0,0),this.wlambda=0,this.angle=a.angle||0,this.angularVelocity=a.angularVelocity||0,this.force=d.create(),a.force&&d.copy(this.force,a.force),this.angularForce=a.angularForce||0,this.damping="number"==typeof a.damping?a.damping:.1,this.angularDamping="number"==typeof a.angularDamping?a.angularDamping:.1,this.motionState=0===this.mass?c.STATIC:c.DYNAMIC,this.boundingRadius=0,this.aabb=new g,this.aabbNeedsUpdate=!0,this.allowSleep=!0,this.wantsToSleep=!1,this.sleepState=c.AWAKE,this.sleepSpeedLimit=.2,this.sleepTimeLimit=1,this.gravityScale=1,this.timeLastSleepy=0,this.concavePath=null,this.lastDampingScale=1,this.lastAngularDampingScale=1,this.lastDampingTimeStep=-1,this._wakeUpAfterNarrowphase=!1,this.updateMassProperties()}var d=a("../math/vec2"),e=a("poly-decomp"),f=a("../shapes/Convex"),g=a("../collision/AABB"),h=a("../events/EventEmitter");b.exports=c,c.prototype=new h,c._idCounter=0,c.prototype.setDensity=function(a){var b=this.getArea();this.mass=b*a,this.updateMassProperties()},c.prototype.getArea=function(){for(var a=0,b=0;be&&(e=h+i)}this.boundingRadius=e},c.prototype.addShape=function(a,b,c){c=c||0,b=b?d.fromValues(b[0],b[1]):d.fromValues(0,0),this.shapes.push(a),this.shapeOffsets.push(b),this.shapeAngles.push(c),this.updateMassProperties(),this.updateBoundingRadius(),this.aabbNeedsUpdate=!0},c.prototype.removeShape=function(a){var b=this.shapes.indexOf(a);return-1!==b?(this.shapes.splice(b,1),this.shapeOffsets.splice(b,1),this.shapeAngles.splice(b,1),this.aabbNeedsUpdate=!0,!0):!1},c.prototype.updateMassProperties=function(){if(this.motionState===c.STATIC||this.motionState===c.KINEMATIC)this.mass=Number.MAX_VALUE,this.invMass=0,this.inertia=Number.MAX_VALUE,this.invInertia=0;else{var a=this.shapes,b=a.length,e=this.mass/b,f=0;if(this.fixedRotation)this.inertia=Number.MAX_VALUE,this.invInertia=0;else{for(var g=0;b>g;g++){var h=a[g],i=d.squaredLength(this.shapeOffsets[g]),j=h.computeMomentOfInertia(e);f+=j+e*i}this.inertia=f,this.invInertia=f>0?1/f:0}this.invMass=1/this.mass}};var k=d.create();c.prototype.applyForce=function(a,b){var c=k;d.sub(c,b,this.position),d.add(this.force,this.force,a);var e=d.crossLength(c,a);this.angularForce+=e},c.prototype.toLocalFrame=function(a,b){d.toLocalFrame(a,b,this.position,this.angle)},c.prototype.toWorldFrame=function(a,b){d.toGlobalFrame(a,b,this.position,this.angle)},c.prototype.fromPolygon=function(a,b){b=b||{};for(var c=this.shapes.length;c>=0;--c)this.removeShape(this.shapes[c]);var g=new e.Polygon;if(g.vertices=a,g.makeCCW(),"number"==typeof b.removeCollinearPoints&&g.removeCollinearPoints(b.removeCollinearPoints),"undefined"==typeof b.skipSimpleCheck&&!g.isSimple())return!1;this.concavePath=g.vertices.slice(0);for(var c=0;c=g?(this.idleTime=0,this.sleepState=c.AWAKE):(this.idleTime+=e,this.sleepState=c.SLEEPY),this.idleTime>this.sleepTimeLimit&&(b?this.wantsToSleep=!0:this.sleep())}},c.prototype.getVelocityFromPosition=function(a,b){return a=a||d.create(),d.sub(a,this.position,this.previousPosition),d.scale(a,a,1/b),a},c.prototype.getAngularVelocityFromPosition=function(a){return(this.angle-this.previousAngle)/a},c.sleepyEvent={type:"sleepy"},c.sleepEvent={type:"sleep"},c.wakeUpEvent={type:"wakeup"},c.DYNAMIC=1,c.STATIC=2,c.KINEMATIC=4,c.AWAKE=0,c.SLEEPY=1,c.SLEEPING=2},{"../collision/AABB":8,"../events/EventEmitter":26,"../math/vec2":30,"../shapes/Convex":36,"poly-decomp":6}],32:[function(a,b){function c(a,b,c){c=e.defaults(c,{restLength:1,stiffness:100,damping:1,localAnchorA:[0,0],localAnchorB:[0,0]}),this.restLength=c.restLength,this.stiffness=c.stiffness,this.damping=c.damping,this.bodyA=a,this.bodyB=b,this.localAnchorA=d.create(),d.copy(this.localAnchorA,c.localAnchorA),this.localAnchorB=d.create(),d.copy(this.localAnchorB,c.localAnchorB),c.worldAnchorA&&this.setWorldAnchorA(c.worldAnchorA),c.worldAnchorB&&this.setWorldAnchorB(c.worldAnchorB)}var d=a("../math/vec2"),e=a("../utils/Utils");b.exports=c,c.prototype.setWorldAnchorA=function(a){this.bodyA.toLocalFrame(this.localAnchorA,a)},c.prototype.setWorldAnchorB=function(a){this.bodyB.toLocalFrame(this.localAnchorB,a)},c.prototype.getWorldAnchorA=function(a){this.bodyA.toWorldFrame(a,this.localAnchorA)},c.prototype.getWorldAnchorB=function(a){this.bodyB.toWorldFrame(a,this.localAnchorB)};var f=d.create(),g=d.create(),h=d.create(),i=d.create(),j=d.create(),k=d.create(),l=d.create(),m=d.create(),n=d.create();c.prototype.applyForce=function(){var a=this.stiffness,b=this.damping,c=this.restLength,e=this.bodyA,o=this.bodyB,p=f,q=g,r=h,s=i,t=n,u=j,v=k,w=l,x=m;this.getWorldAnchorA(u),this.getWorldAnchorB(v),d.sub(w,u,e.position),d.sub(x,v,o.position),d.sub(p,v,u);var y=d.len(p);d.normalize(q,p),d.sub(r,o.velocity,e.velocity),d.crossZV(t,o.angularVelocity,x),d.add(r,r,t),d.crossZV(t,e.angularVelocity,w),d.sub(r,r,t),d.scale(s,q,-a*(y-c)-b*d.dot(r,q)),d.sub(e.force,e.force,s),d.add(o.force,o.force,s);var z=d.crossLength(w,s),A=d.crossLength(x,s);e.angularForce-=z,o.angularForce+=A}},{"../math/vec2":30,"../utils/Utils":47}],33:[function(a,b){b.exports={AABB:a("./collision/AABB"),AngleLockEquation:a("./equations/AngleLockEquation"),Body:a("./objects/Body"),Broadphase:a("./collision/Broadphase"),Capsule:a("./shapes/Capsule"),Circle:a("./shapes/Circle"),Constraint:a("./constraints/Constraint"),ContactEquation:a("./equations/ContactEquation"),ContactMaterial:a("./material/ContactMaterial"),Convex:a("./shapes/Convex"),DistanceConstraint:a("./constraints/DistanceConstraint"),Equation:a("./equations/Equation"),EventEmitter:a("./events/EventEmitter"),FrictionEquation:a("./equations/FrictionEquation"),GearConstraint:a("./constraints/GearConstraint"),GridBroadphase:a("./collision/GridBroadphase"),GSSolver:a("./solver/GSSolver"),Heightfield:a("./shapes/Heightfield"),Line:a("./shapes/Line"),LockConstraint:a("./constraints/LockConstraint"),Material:a("./material/Material"),Narrowphase:a("./collision/Narrowphase"),NaiveBroadphase:a("./collision/NaiveBroadphase"),Particle:a("./shapes/Particle"),Plane:a("./shapes/Plane"),RevoluteConstraint:a("./constraints/RevoluteConstraint"),PrismaticConstraint:a("./constraints/PrismaticConstraint"),Rectangle:a("./shapes/Rectangle"),RotationalVelocityEquation:a("./equations/RotationalVelocityEquation"),SAPBroadphase:a("./collision/SAPBroadphase"),Shape:a("./shapes/Shape"),Solver:a("./solver/Solver"),Spring:a("./objects/Spring"),Utils:a("./utils/Utils"),World:a("./world/World"),vec2:a("./math/vec2"),version:a("../package.json").version}},{"../package.json":7,"./collision/AABB":8,"./collision/Broadphase":9,"./collision/GridBroadphase":10,"./collision/NaiveBroadphase":11,"./collision/Narrowphase":12,"./collision/SAPBroadphase":13,"./constraints/Constraint":14,"./constraints/DistanceConstraint":15,"./constraints/GearConstraint":16,"./constraints/LockConstraint":17,"./constraints/PrismaticConstraint":18,"./constraints/RevoluteConstraint":19,"./equations/AngleLockEquation":20,"./equations/ContactEquation":21,"./equations/Equation":22,"./equations/FrictionEquation":23,"./equations/RotationalVelocityEquation":25,"./events/EventEmitter":26,"./material/ContactMaterial":27,"./material/Material":28,"./math/vec2":30,"./objects/Body":31,"./objects/Spring":32,"./shapes/Capsule":34,"./shapes/Circle":35,"./shapes/Convex":36,"./shapes/Heightfield":37,"./shapes/Line":38,"./shapes/Particle":39,"./shapes/Plane":40,"./shapes/Rectangle":41,"./shapes/Shape":42,"./solver/GSSolver":43,"./solver/Solver":44,"./utils/Utils":47,"./world/World":51}],34:[function(a,b){function c(a,b){this.length=a||1,this.radius=b||1,d.call(this,d.CAPSULE)}var d=a("./Shape"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.computeMomentOfInertia=function(a){var b=this.radius,c=this.length+b,d=2*b;return a*(d*d+c*c)/12},c.prototype.updateBoundingRadius=function(){this.boundingRadius=this.radius+this.length/2},c.prototype.updateArea=function(){this.area=Math.PI*this.radius*this.radius+2*this.radius*this.length};var f=e.create();c.prototype.computeAABB=function(a,b,c){var d=this.radius;e.set(f,this.length,0),e.rotate(f,f,c),e.set(a.upperBound,Math.max(f[0]+d,-f[0]+d),Math.max(f[1]+d,-f[1]+d)),e.set(a.lowerBound,Math.min(f[0]-d,-f[0]-d),Math.min(f[1]-d,-f[1]-d)),e.add(a.lowerBound,a.lowerBound,b),e.add(a.upperBound,a.upperBound,b)}},{"../math/vec2":30,"./Shape":42}],35:[function(a,b){function c(a){this.radius=a||1,d.call(this,d.CIRCLE)}var d=a("./Shape"),e=a("../math/vec2");b.exports=c,c.prototype=new d,c.prototype.computeMomentOfInertia=function(a){var b=this.radius;return a*b*b/2},c.prototype.updateBoundingRadius=function(){this.boundingRadius=this.radius},c.prototype.updateArea=function(){this.area=Math.PI*this.radius*this.radius},c.prototype.computeAABB=function(a,b){var c=this.radius;e.set(a.upperBound,c,c),e.set(a.lowerBound,-c,-c),b&&(e.add(a.lowerBound,a.lowerBound,b),e.add(a.upperBound,a.upperBound,b))}},{"../math/vec2":30,"./Shape":42}],36:[function(a,b){function c(a){this.vertices=[];for(var b=0;bg;f=g,g++){var h=this.vertices[f],i=this.vertices[g],j=Math.abs(e.crossLength(h,i)),k=e.dot(i,i)+e.dot(i,h)+e.dot(h,h);b+=j*k,c+=j}return a/6*(b/c)},c.prototype.updateBoundingRadius=function(){for(var a=this.vertices,b=0,c=0;c!==a.length;c++){var d=e.squaredLength(a[c]);d>b&&(b=d)}this.boundingRadius=Math.sqrt(b)},c.triangleArea=function(a,b,c){return.5*((b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1]))},c.prototype.updateArea=function(){this.updateTriangles(),this.area=0;for(var a=this.triangles,b=this.vertices,d=0;d!==a.length;d++){var e=a[d],f=b[e[0]],g=b[e[1]],h=b[e[2]],i=c.triangleArea(f,g,h);this.area+=i}},c.prototype.computeAABB=function(a,b,c){a.setFromPoints(this.vertices,b,c)}},{"../math/polyk":29,"../math/vec2":30,"./Shape":42,"poly-decomp":6}],37:[function(a,b){function c(a,b){if(b=e.defaults(b,{maxValue:null,minValue:null,elementWidth:.1}),null===b.minValue||null===b.maxValue){b.maxValue=a[0],b.minValue=a[0];for(var c=0;c!==a.length;c++){var f=a[c];f>b.maxValue&&(b.maxValue=f),f=v*v)break}for(c.updateMultipliers(k,q,1/a),w=0;w!==l;w++){var y=k[w];if(y instanceof h){var z=y.contactEquation.multiplier*y.frictionCoefficient;y.maxForce=z,y.minForce=-z}}}for(f=0;f!==i;f++){for(v=0,w=0;w!==l;w++){u=k[w];var x=c.iterateEquation(w,u,u.epsilon,s,r,q,p,a,f);v+=Math.abs(x)}if(this.usedIterations++,m>=v*v)break}for(t=0;t!==o;t++)n[t].addConstraintVelocity();c.updateMultipliers(k,q,1/a)}},c.updateMultipliers=function(a,b,c){for(var d=a.length;d--;)a[d].multiplier=b[d]*c},c.iterateEquation=function(a,b,c,d,e,f,g,h){var i=d[a],j=e[a],k=f[a],l=b.computeGWlambda(),m=b.maxForce,n=b.minForce;g&&(i=0);var o=j*(i-l-c*k),p=k+o;return n*h>p?o=n*h-k:p>m*h&&(o=m*h-k),f[a]+=o,b.addToWlambda(o),o}},{"../equations/FrictionEquation":23,"../math/vec2":30,"../utils/Utils":47,"./Solver":44}],44:[function(a,b){function c(a,b){a=a||{},d.call(this),this.type=b,this.equations=[],this.equationSortFunction=a.equationSortFunction||!1}var d=(a("../utils/Utils"),a("../events/EventEmitter"));b.exports=c,c.prototype=new d,c.prototype.solve=function(){throw new Error("Solver.solve should be implemented by subclasses!")};var e={bodies:[]};c.prototype.solveIsland=function(a,b){this.removeAllEquations(),b.equations.length&&(this.addEquations(b.equations),e.bodies.length=0,b.getBodies(e.bodies),e.bodies.length&&this.solve(a,e))},c.prototype.sortEquations=function(){this.equationSortFunction&&this.equations.sort(this.equationSortFunction)},c.prototype.addEquation=function(a){a.enabled&&this.equations.push(a)},c.prototype.addEquations=function(a){for(var b=0,c=a.length;b!==c;b++){var d=a[b];d.enabled&&this.equations.push(d)}},c.prototype.removeEquation=function(a){var b=this.equations.indexOf(a);-1!==b&&this.equations.splice(b,1)},c.prototype.removeAllEquations=function(){this.equations.length=0},c.GS=1,c.ISLAND=2},{"../events/EventEmitter":26,"../utils/Utils":47}],45:[function(a,b){function c(){this.overlappingLastState=new e,this.overlappingCurrentState=new e,this.recordPool=[],this.tmpDict=new e,this.tmpArray1=[]}function d(a,b,c,d){this.shapeA=b,this.shapeB=d,this.bodyA=a,this.bodyB=c}{var e=a("./TupleDictionary");a("./Utils")}b.exports=c,c.prototype.tick=function(){for(var a=this.overlappingLastState,b=this.overlappingCurrentState,c=b.keys.length;c--;){var d=b.keys[c];this.recordPool.push(b.getByKey(d))}a.reset(),a.copy(b),b.reset()},c.prototype.setOverlapping=function(a,b,c,e){var f=(this.overlappingLastState,this.overlappingCurrentState);if(!f.get(b.id,e.id)){var g;g=this.recordPool.length?this.recordPool.pop():new d(a,b,c,e),f.set(b.id,e.id,g)}},c.prototype.getNewOverlaps=function(a){return this.getDiff(this.overlappingLastState,this.overlappingCurrentState,a)},c.prototype.getEndOverlaps=function(a){return this.getDiff(this.overlappingCurrentState,this.overlappingLastState,a)},c.prototype.getDiff=function(a,b,c){var c=c||[],d=a,e=b;c.length=0;for(var f=e.keys.length;f--;){var g=e.keys[f],h=e.data[g];if(!h)throw new Error("Key "+g+" had no data!");var i=d.data[g];i||c.push(h)}return c},c.prototype.isNewOverlap=function(a,b){var c=0|a.id,d=0|b.id;return!this.overlappingLastState.get(c,d)&&!!this.overlappingCurrentState.get(c,d)},c.prototype.getNewBodyOverlaps=function(a){this.tmpArray1.length=0;var b=this.getNewOverlaps(this.tmpArray1);return this.getBodyDiff(b,a)},c.prototype.getEndBodyOverlaps=function(a){this.tmpArray1.length=0;var b=this.getEndOverlaps(this.tmpArray1);return this.getBodyDiff(b,a)},c.prototype.getBodyDiff=function(a,b){b=b||[];for(var c=this.tmpDict,d=a.length;d--;){var e=a[d];c.set(0|e.bodyA.id,0|e.bodyB.id,e)}for(d=c.keys.length;d--;){var e=c.keys[d];b.push(e.bodyA,e.bodyB)}return c.reset(),b},d.prototype.set=function(a,b,c,e){d.call(this,a,b,c,e)}},{"./TupleDictionary":46,"./Utils":47}],46:[function(a,b){function c(){this.data=[],this.keys=[]}var d=a("./Utils");b.exports=c,c.prototype.getKey=function(a,b){return a=0|a,b=0|b,(0|a)===(0|b)?-1:0|((0|a)>(0|b)?a<<16|65535&b:b<<16|65535&a)},c.prototype.getByKey=function(a){return a=0|a,this.data[a]},c.prototype.get=function(a,b){a=0|a,b=0|b;var c=0|this.getKey(a,b);return this.data[c]},c.prototype.set=function(a,b,c){if(!c)throw new Error("No data!");a=0|a,b=0|b;var d=0|this.getKey(a,b);return this.get(a,b)||this.keys.push(d),this.data[d]=c,d},c.prototype.reset=function(){for(var a=this.data,b=this.keys,c=0|b.length;c--;){var d=0|b[c];a[d]=void 0}b.length=0},c.prototype.copy=function(a){this.reset(),d.appendArray(this.keys,a.keys);for(var b=0|a.keys.length;b--;){var c=0|a.keys[b];this.data[c]=a.data[c]}}},{"./Utils":47}],47:[function(a,b){function c(){}b.exports=c,c.appendArray=function(a,b){if(b.length<15e4)a.push.apply(a,b);else for(var c=0,d=b.length;c!==d;++c)a.push(b[c])},c.splice=function(a,b,c){c=c||1;for(var d=b,e=a.length-c;e>d;d++)a[d]=a[d+c];a.length=e},c.ARRAY_TYPE=window.Float32Array||Array,c.extend=function(a,b){for(var c in b)a[c]=b[c]},c.defaults=function(a,b){a=a||{};for(var c in b)c in a||(a[c]=b[c]);return a}},{}],48:[function(a,b){function c(){this.equations=[],this.bodies=[]}var d=a("../objects/Body");b.exports=c,c.prototype.reset=function(){this.equations.length=this.bodies.length=0};var e=[];c.prototype.getBodies=function(a){var b=a||[],c=this.equations;e.length=0;for(var d=0;d!==c.length;d++){var f=c[d];-1===e.indexOf(f.bodyA.id)&&(b.push(f.bodyA),e.push(f.bodyA.id)),-1===e.indexOf(f.bodyB.id)&&(b.push(f.bodyB),e.push(f.bodyB.id))}return b},c.prototype.wantsToSleep=function(){for(var a=0;a=0;v-=2)for(var B=z.length-2;B>=0;B-=2)(A[v]===z[B]&&A[v+1]===z[B+1]||A[v+1]===z[B]&&A[v]===z[B+1])&&z.splice(B,2);var C=p.length;for(v=0;v!==C;v++){var D=p[v];if(!D.collideConnected)for(var B=z.length-2;B>=0;B-=2)(D.bodyA===z[B]&&D.bodyB===z[B+1]||D.bodyB===z[B]&&D.bodyA===z[B+1])&&z.splice(B,2)}this.postBroadphaseEvent.pairs=z,this.emit(this.postBroadphaseEvent),o.reset(this);for(var v=0,E=z.length;v!==E;v+=2)for(var F=z[v],G=z[v+1],I=0,J=F.shapes.length;I!==J;I++)for(var K=F.shapes[I],M=F.shapeOffsets[I],N=F.shapeAngles[I],O=0,Q=G.shapes.length;O!==Q;O++){var R=G.shapes[O],S=G.shapeOffsets[O],T=G.shapeAngles[O],U=this.defaultContactMaterial;if(K.material&&R.material){var V=this.getContactMaterial(K.material,R.material);V&&(U=V)}this.runNarrowphase(o,F,K,M,N,G,R,S,T,U,this.frictionGravity)}for(var v=0;v!==m;v++){var W=i[v];W._wakeUpAfterNarrowphase&&(W.wakeUp(),W._wakeUpAfterNarrowphase=!1)}if(this.has("endContact")){this.overlapKeeper.getEndOverlaps(P);for(var X=this.endContactEvent,O=P.length;O--;){var Y=P[O];X.shapeA=Y.shapeA,X.shapeB=Y.shapeB,X.bodyA=Y.bodyA,X.bodyB=Y.bodyA,this.emit(X)}}this.overlapKeeper.tick();var Z=this.preSolveEvent;Z.contactEquations=o.contactEquations,Z.frictionEquations=o.frictionEquations,this.emit(Z);var C=p.length;for(v=0;v!==C;v++)p[v].update();if(o.contactEquations.length||o.frictionEquations.length||p.length)if(this.islandSplit){for(t.equations.length=0,H.appendArray(t.equations,o.contactEquations),H.appendArray(t.equations,o.frictionEquations),v=0;v!==C;v++)H.appendArray(t.equations,p[v].equations);t.split(this);for(var v=0;v!==t.islands.length;v++){var $=t.islands[v];$.equations.length&&l.solveIsland(a,$)}}else{for(l.addEquations(o.contactEquations),l.addEquations(o.frictionEquations),v=0;v!==C;v++)l.addEquations(p[v].equations);this.solveConstraints&&l.solve(a,this),l.removeAllEquations()}for(var v=0;v!==m;v++){var W=i[v];W.sleepState!==s.SLEEPING&&W.motionState!==s.STATIC&&c.integrateBody(W,a)}for(var v=0;v!==m;v++)i[v].setZeroForce();if(f&&(d=performance.now(),e.lastStepTime=d-b),this.emitImpactEvent&&this.has("impact"))for(var _=this.impactEvent,v=0;v!==o.contactEquations.length;v++){var ab=o.contactEquations[v];ab.firstImpact&&(_.bodyA=ab.bodyA,_.bodyB=ab.bodyB,_.shapeA=ab.shapeA,_.shapeB=ab.shapeB,_.contactEquation=ab,this.emit(_))}if(this.enableBodySleeping)for(v=0;v!==m;v++)i[v].sleepTick(this.time,!1,a);else if(this.enableIslandSleeping&&this.islandSplit){for(v=0;v!==m;v++)i[v].sleepTick(this.time,!0,a);for(var v=0;v0,a.frictionCoefficient=k.friction;var o;o=b.motionState===s.STATIC||b.motionState===s.KINEMATIC?f.mass:f.motionState===s.STATIC||f.motionState===s.KINEMATIC?b.mass:b.mass*f.mass/(b.mass+f.mass),a.slipForce=k.friction*l*o,a.restitution=k.restitution,a.surfaceVelocity=k.surfaceVelocity,a.frictionStiffness=k.frictionStiffness,a.frictionRelaxation=k.frictionRelaxation,a.stiffness=k.stiffness,a.relaxation=k.relaxation;var p=a[c.type|g.type],q=0;if(p){var r=c.sensor||g.sensor,t=a.frictionEquations.length;q=c.type=2*w&&(b._wakeUpAfterNarrowphase=!0)}if(f.allowSleep&&f.motionState===s.DYNAMIC&&f.sleepState===s.SLEEPING&&b.sleepState===s.AWAKE&&b.motionState!==s.STATIC){var x=j.squaredLength(b.velocity)+Math.pow(b.angularVelocity,2),y=Math.pow(b.sleepSpeedLimit,2);x>=2*y&&(f._wakeUpAfterNarrowphase=!0)}if(this.overlapKeeper.setOverlapping(b,c,f,g),this.has("beginContact")&&this.overlapKeeper.isNewOverlap(c,g)){var z=this.beginContactEvent;if(z.shapeA=c,z.shapeB=g,z.bodyA=b,z.bodyB=f,z.contactEquations.length=0,"number"==typeof q)for(var A=a.contactEquations.length-q;A1)for(var A=a.frictionEquations.length-u;A=0;b--)this.removeConstraint(a[b]);for(var d=this.bodies,b=d.length-1;b>=0;b--)this.removeBody(d[b]);for(var e=this.springs,b=e.length-1;b>=0;b--)this.removeSpring(e[b]);for(var f=this.contactMaterials,b=f.length-1;b>=0;b--)this.removeContactMaterial(f[b]);c.apply(this)},c.prototype.clone=function(){var a=new c;return a.fromJSON(this.toJSON()),a};var S=j.create(),T=j.fromValues(0,0),U=j.fromValues(0,0);c.prototype.hitTest=function(a,b,c){c=c||0;var d=new s({position:a}),e=new q,f=a,g=0,h=S,i=T,l=U;d.addShape(e);for(var n=this.narrowphase,r=[],t=0,u=b.length;t!==u;t++)for(var v=b[t],w=0,x=v.shapes.length;w!==x;w++){var y=v.shapes[w],z=v.shapeOffsets[w]||i,A=v.shapeAngles[w]||0;j.rotate(h,z,v.angle),j.add(h,h,v.position);var B=A+v.angle;(y instanceof k&&n.circleParticle(v,y,h,B,d,e,f,g,!0)||y instanceof m&&n.particleConvex(d,e,f,g,v,y,h,B,!0)||y instanceof o&&n.particlePlane(d,e,f,g,v,y,h,B,!0)||y instanceof p&&n.particleCapsule(d,e,f,g,v,y,h,B,!0)||y instanceof q&&j.squaredLength(j.sub(l,h,a))0&&this.enable(a[d],b,!0));else a instanceof Phaser.Group?this.enable(a.children,b,c):(this.enableBody(a,b),c&&a.hasOwnProperty("children")&&a.children.length>0&&this.enable(a.children,b,!0))},enableBody:function(a,b){a.hasOwnProperty("body")&&null===a.body&&(a.body=new Phaser.Physics.P2.Body(this.game,a,a.x,a.y,1),a.body.debug=b,a.anchor.set(.5))},setImpactEvents:function(a){a?this.world.on("impact",this.impactHandler,this):this.world.off("impact",this.impactHandler,this)},setPostBroadphaseCallback:function(a,b){this.postBroadphaseCallback=a,this.callbackContext=b,null!==a?this.world.on("postBroadphase",this.postBroadphaseHandler,this):this.world.off("postBroadphase",this.postBroadphaseHandler,this)},postBroadphaseHandler:function(a){if(this.postBroadphaseCallback)for(var b=a.pairs.length;b-=2;)a.pairs[b].parent&&a.pairs[b+1].parent&&!this.postBroadphaseCallback.call(this.callbackContext,a.pairs[b].parent,a.pairs[b+1].parent)&&a.pairs.splice(b,2)},impactHandler:function(a){if(a.bodyA.parent&&a.bodyB.parent){var b=a.bodyA.parent,c=a.bodyB.parent;b._bodyCallbacks[a.bodyB.id]&&b._bodyCallbacks[a.bodyB.id].call(b._bodyCallbackContext[a.bodyB.id],b,c,a.shapeA,a.shapeB),c._bodyCallbacks[a.bodyA.id]&&c._bodyCallbacks[a.bodyA.id].call(c._bodyCallbackContext[a.bodyA.id],c,b,a.shapeB,a.shapeA),b._groupCallbacks[a.shapeB.collisionGroup]&&b._groupCallbacks[a.shapeB.collisionGroup].call(b._groupCallbackContext[a.shapeB.collisionGroup],b,c,a.shapeA,a.shapeB),c._groupCallbacks[a.shapeA.collisionGroup]&&c._groupCallbacks[a.shapeA.collisionGroup].call(c._groupCallbackContext[a.shapeA.collisionGroup],c,b,a.shapeB,a.shapeA)}},beginContactHandler:function(a){this.onBeginContact.dispatch(a.bodyA,a.bodyB,a.shapeA,a.shapeB,a.contactEquations),a.bodyA.parent&&a.bodyA.parent.onBeginContact.dispatch(a.bodyB.parent,a.shapeA,a.shapeB,a.contactEquations),a.bodyB.parent&&a.bodyB.parent.onBeginContact.dispatch(a.bodyA.parent,a.shapeB,a.shapeA,a.contactEquations)},endContactHandler:function(a){this.onEndContact.dispatch(a.bodyA,a.bodyB,a.shapeA,a.shapeB),a.bodyA.parent&&a.bodyA.parent.onEndContact.dispatch(a.bodyB.parent,a.shapeA,a.shapeB),a.bodyB.parent&&a.bodyB.parent.onEndContact.dispatch(a.bodyA.parent,a.shapeB,a.shapeA)},setBoundsToWorld:function(a,b,c,d,e){this.setBounds(this.game.world.bounds.x,this.game.world.bounds.y,this.game.world.bounds.width,this.game.world.bounds.height,a,b,c,d,e)},setWorldMaterial:function(a,b,c,d,e){"undefined"==typeof b&&(b=!0),"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=!0),b&&this.walls.left&&(this.walls.left.shapes[0].material=a),c&&this.walls.right&&(this.walls.right.shapes[0].material=a),d&&this.walls.top&&(this.walls.top.shapes[0].material=a),e&&this.walls.bottom&&(this.walls.bottom.shapes[0].material=a)},updateBoundsCollisionGroup:function(a){var b=this.everythingCollisionGroup.mask;"undefined"==typeof a&&(b=this.boundsCollisionGroup.mask),this.walls.left&&(this.walls.left.shapes[0].collisionGroup=b),this.walls.right&&(this.walls.right.shapes[0].collisionGroup=b),this.walls.top&&(this.walls.top.shapes[0].collisionGroup=b),this.walls.bottom&&(this.walls.bottom.shapes[0].collisionGroup=b)},setBounds:function(a,b,c,d,e,f,g,h,i){"undefined"==typeof e&&(e=!0),"undefined"==typeof f&&(f=!0),"undefined"==typeof g&&(g=!0),"undefined"==typeof h&&(h=!0),"undefined"==typeof i&&(i=!0),this.walls.left&&this.world.removeBody(this.walls.left),this.walls.right&&this.world.removeBody(this.walls.right),this.walls.top&&this.world.removeBody(this.walls.top),this.walls.bottom&&this.world.removeBody(this.walls.bottom),e&&(this.walls.left=new p2.Body({mass:0,position:[this.pxmi(a),this.pxmi(b)],angle:1.5707963267948966}),this.walls.left.addShape(new p2.Plane),i&&(this.walls.left.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.left)),f&&(this.walls.right=new p2.Body({mass:0,position:[this.pxmi(a+c),this.pxmi(b)],angle:-1.5707963267948966}),this.walls.right.addShape(new p2.Plane),i&&(this.walls.right.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.right)),g&&(this.walls.top=new p2.Body({mass:0,position:[this.pxmi(a),this.pxmi(b)],angle:-3.141592653589793}),this.walls.top.addShape(new p2.Plane),i&&(this.walls.top.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.top)),h&&(this.walls.bottom=new p2.Body({mass:0,position:[this.pxmi(a),this.pxmi(d)]}),this.walls.bottom.addShape(new p2.Plane),i&&(this.walls.bottom.shapes[0].collisionGroup=this.boundsCollisionGroup.mask),this.world.addBody(this.walls.bottom))},pause:function(){this.paused=!0},resume:function(){this.paused=!1},update:function(){this.paused||this.world.step(this.useElapsedTime?this.game.time.physicsElapsed:this.frameRate)},clear:function(){this.world.clear(),this.world.off("beginContact",this.beginContactHandler,this),this.world.off("endContact",this.endContactHandler,this),this.postBroadphaseCallback=null,this.callbackContext=null,this.impactCallback=null,this.collisionGroups=[],this._toRemove=[],this._collisionGroupID=2,this.boundsCollidesWith=[]},destroy:function(){this.clear(),this.game=null},addBody:function(a){return a.data.world?!1:(this.world.addBody(a.data),this.onBodyAdded.dispatch(a),!0)},removeBody:function(a){return a.data.world==this.world&&(this.world.removeBody(a.data),this.onBodyRemoved.dispatch(a)),a},addSpring:function(a){return this.world.addSpring(a),this.onSpringAdded.dispatch(a),a},removeSpring:function(a){return this.world.removeSpring(a),this.onSpringRemoved.dispatch(a),a},createDistanceConstraint:function(a,b,c,d){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.DistanceConstraint(this,a,b,c,d)):void console.warn("Cannot create Constraint, invalid body objects given")},createGearConstraint:function(a,b,c,d){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.GearConstraint(this,a,b,c,d)):void console.warn("Cannot create Constraint, invalid body objects given")},createRevoluteConstraint:function(a,b,c,d,e){return a=this.getBody(a),c=this.getBody(c),a&&c?this.addConstraint(new Phaser.Physics.P2.RevoluteConstraint(this,a,b,c,d,e)):void console.warn("Cannot create Constraint, invalid body objects given")},createLockConstraint:function(a,b,c,d,e){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.LockConstraint(this,a,b,c,d,e)):void console.warn("Cannot create Constraint, invalid body objects given")},createPrismaticConstraint:function(a,b,c,d,e,f,g){return a=this.getBody(a),b=this.getBody(b),a&&b?this.addConstraint(new Phaser.Physics.P2.PrismaticConstraint(this,a,b,c,d,e,f,g)):void console.warn("Cannot create Constraint, invalid body objects given")},addConstraint:function(a){return this.world.addConstraint(a),this.onConstraintAdded.dispatch(a),a},removeConstraint:function(a){return this.world.removeConstraint(a),this.onConstraintRemoved.dispatch(a),a},addContactMaterial:function(a){return this.world.addContactMaterial(a),this.onContactMaterialAdded.dispatch(a),a},removeContactMaterial:function(a){return this.world.removeContactMaterial(a),this.onContactMaterialRemoved.dispatch(a),a},getContactMaterial:function(a,b){return this.world.getContactMaterial(a,b)},setMaterial:function(a,b){for(var c=b.length;c--;)b[c].setMaterial(a)},createMaterial:function(a,b){a=a||"";var c=new Phaser.Physics.P2.Material(a);return this.materials.push(c),"undefined"!=typeof b&&b.setMaterial(c),c},createContactMaterial:function(a,b,c){"undefined"==typeof a&&(a=this.createMaterial()),"undefined"==typeof b&&(b=this.createMaterial());var d=new Phaser.Physics.P2.ContactMaterial(a,b,c);return this.addContactMaterial(d)},getBodies:function(){for(var a=[],b=this.world.bodies.length;b--;)a.push(this.world.bodies[b].parent);return a},getBody:function(a){return a instanceof p2.Body?a:a instanceof Phaser.Physics.P2.Body?a.data:a.body&&a.body.type===Phaser.Physics.P2JS?a.body.data:null},getSprings:function(){for(var a=[],b=this.world.springs.length;b--;)a.push(this.world.springs[b].parent);return a},getConstraints:function(){for(var a=[],b=this.world.constraints.length;b--;)a.push(this.world.constraints[b].parent);return a},hitTest:function(a,b,c,d){"undefined"==typeof b&&(b=this.world.bodies),"undefined"==typeof c&&(c=5),"undefined"==typeof d&&(d=!1);for(var e=[this.pxmi(a.x),this.pxmi(a.y)],f=[],g=b.length;g--;)b[g]instanceof Phaser.Physics.P2.Body&&(!d||b[g].data.motionState!==p2.Body.STATIC)?f.push(b[g].data):b[g]instanceof p2.Body&&b[g].parent&&(!d||b[g].motionState!==p2.Body.STATIC)?f.push(b[g]):b[g]instanceof Phaser.Sprite&&b[g].hasOwnProperty("body")&&(!d||b[g].body.data.motionState!==p2.Body.STATIC)&&f.push(b[g].body.data);return this.world.hitTest(e,f,c)},toJSON:function(){return this.world.toJSON()},createCollisionGroup:function(a){var b=Math.pow(2,this._collisionGroupID);this.walls.left&&(this.walls.left.shapes[0].collisionMask=this.walls.left.shapes[0].collisionMask|b),this.walls.right&&(this.walls.right.shapes[0].collisionMask=this.walls.right.shapes[0].collisionMask|b),this.walls.top&&(this.walls.top.shapes[0].collisionMask=this.walls.top.shapes[0].collisionMask|b),this.walls.bottom&&(this.walls.bottom.shapes[0].collisionMask=this.walls.bottom.shapes[0].collisionMask|b),this._collisionGroupID++;var c=new Phaser.Physics.P2.CollisionGroup(b);return this.collisionGroups.push(c),a&&this.setCollisionGroup(a,c),c},setCollisionGroup:function(a,b){if(a instanceof Phaser.Group)for(var c=0;ce;e++){var g=a.collision[b][e],h=this.createBody(g.x,g.y,0,c,{},g.polyline);h&&d.push(h)}return d},clearTilemapLayerBodies:function(a,b){b=a.getLayer(b);for(var c=a.layers[b].bodies.length;c--;)a.layers[b].bodies[c].destroy(); +a.layers[b].bodies.length=[]},convertTilemap:function(a,b,c,d){b=a.getLayer(b),"undefined"==typeof c&&(c=!0),"undefined"==typeof d&&(d=!0),this.clearTilemapLayerBodies(a,b);for(var e=0,f=0,g=0,h=0,i=a.layers[b].height;i>h;h++){e=0;for(var j=0,k=a.layers[b].width;k>j;j++){var l=a.layers[b].data[h][j];if(l&&l.collides)if(d){var m=a.getTileRight(b,j,h);if(0===e&&(f=l.x*l.width,g=l.y*l.height,e=l.width),m&&m.collides)e+=l.width;else{var n=this.createBody(f,g,0,!1);n.addRectangle(e,l.height,e/2,l.height/2,0),c&&this.addBody(n),a.layers[b].bodies.push(n),e=0}}else{var n=this.createBody(l.x*l.width,l.y*l.height,0,!1);n.addRectangle(l.width,l.height,l.width/2,l.height/2,0),c&&this.addBody(n),a.layers[b].bodies.push(n)}}}return a.layers[b].bodies},mpx:function(a){return a*=20},pxm:function(a){return.05*a},mpxi:function(a){return a*=-20},pxmi:function(a){return a*-.05}},Object.defineProperty(Phaser.Physics.P2.prototype,"friction",{get:function(){return this.world.defaultContactMaterial.friction},set:function(a){this.world.defaultContactMaterial.friction=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"defaultFriction",{get:function(){return this.world.defaultContactMaterial.friction},set:function(a){this.world.defaultContactMaterial.friction=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"restitution",{get:function(){return this.world.defaultContactMaterial.restitution},set:function(a){this.world.defaultContactMaterial.restitution=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"defaultRestitution",{get:function(){return this.world.defaultContactMaterial.restitution},set:function(a){this.world.defaultContactMaterial.restitution=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"contactMaterial",{get:function(){return this.world.defaultContactMaterial},set:function(a){this.world.defaultContactMaterial=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"applySpringForces",{get:function(){return this.world.applySpringForces},set:function(a){this.world.applySpringForces=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"applyDamping",{get:function(){return this.world.applyDamping},set:function(a){this.world.applyDamping=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"applyGravity",{get:function(){return this.world.applyGravity},set:function(a){this.world.applyGravity=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"solveConstraints",{get:function(){return this.world.solveConstraints},set:function(a){this.world.solveConstraints=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"time",{get:function(){return this.world.time}}),Object.defineProperty(Phaser.Physics.P2.prototype,"emitImpactEvent",{get:function(){return this.world.emitImpactEvent},set:function(a){this.world.emitImpactEvent=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"enableBodySleeping",{get:function(){return this.world.enableBodySleeping},set:function(a){this.world.enableBodySleeping=a}}),Object.defineProperty(Phaser.Physics.P2.prototype,"total",{get:function(){return this.world.bodies.length}}),Phaser.Physics.P2.FixtureList=function(a){Array.isArray(a)||(a=[a]),this.rawList=a,this.init(),this.parse(this.rawList)},Phaser.Physics.P2.FixtureList.prototype={init:function(){this.namedFixtures={},this.groupedFixtures=[],this.allFixtures=[]},setCategory:function(a,b){var c=function(b){b.collisionGroup=a};this.getFixtures(b).forEach(c)},setMask:function(a,b){var c=function(b){b.collisionMask=a};this.getFixtures(b).forEach(c)},setSensor:function(a,b){var c=function(b){b.sensor=a};this.getFixtures(b).forEach(c)},setMaterial:function(a,b){var c=function(b){b.material=a};this.getFixtures(b).forEach(c)},getFixtures:function(a){var b=[];if(a){a instanceof Array||(a=[a]);var c=this;return a.forEach(function(a){c.namedFixtures[a]&&b.push(c.namedFixtures[a])}),this.flatten(b)}return this.allFixtures},getFixtureByKey:function(a){return this.namedFixtures[a]},getGroup:function(a){return this.groupedFixtures[a]},parse:function(){var a,b,c,d;c=this.rawList,d=[];for(a in c)b=c[a],isNaN(a-0)?this.namedFixtures[a]=this.flatten(b):(this.groupedFixtures[a]=this.groupedFixtures[a]||[],this.groupedFixtures[a]=this.groupedFixtures[a].concat(b)),d.push(this.allFixtures=this.flatten(this.groupedFixtures))},flatten:function(a){var b,c;return b=[],c=arguments.callee,a.forEach(function(a){return Array.prototype.push.apply(b,Array.isArray(a)?c(a):[a])}),b}},Phaser.Physics.P2.PointProxy=function(a,b){this.world=a,this.destination=b},Phaser.Physics.P2.PointProxy.prototype.constructor=Phaser.Physics.P2.PointProxy,Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype,"x",{get:function(){return this.destination[0]},set:function(a){this.destination[0]=this.world.pxm(a)}}),Object.defineProperty(Phaser.Physics.P2.PointProxy.prototype,"y",{get:function(){return this.destination[1]},set:function(a){this.destination[1]=this.world.pxm(a)}}),Phaser.Physics.P2.InversePointProxy=function(a,b){this.world=a,this.destination=b},Phaser.Physics.P2.InversePointProxy.prototype.constructor=Phaser.Physics.P2.InversePointProxy,Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype,"x",{get:function(){return this.destination[0]},set:function(a){this.destination[0]=this.world.pxm(-a)}}),Object.defineProperty(Phaser.Physics.P2.InversePointProxy.prototype,"y",{get:function(){return this.destination[1]},set:function(a){this.destination[1]=this.world.pxm(-a)}}),Phaser.Physics.P2.Body=function(a,b,c,d,e){b=b||null,c=c||0,d=d||0,"undefined"==typeof e&&(e=1),this.game=a,this.world=a.physics.p2,this.sprite=b,this.type=Phaser.Physics.P2JS,this.offset=new Phaser.Point,this.data=new p2.Body({position:[this.world.pxmi(c),this.world.pxmi(d)],mass:e}),this.data.parent=this,this.velocity=new Phaser.Physics.P2.InversePointProxy(this.world,this.data.velocity),this.force=new Phaser.Physics.P2.InversePointProxy(this.world,this.data.force),this.gravity=new Phaser.Point,this.onBeginContact=new Phaser.Signal,this.onEndContact=new Phaser.Signal,this.collidesWith=[],this.removeNextStep=!1,this.debugBody=null,this._collideWorldBounds=!0,this._bodyCallbacks={},this._bodyCallbackContext={},this._groupCallbacks={},this._groupCallbackContext={},b&&(this.setRectangleFromSprite(b),b.exists&&this.game.physics.p2.addBody(this))},Phaser.Physics.P2.Body.prototype={createBodyCallback:function(a,b,c){var d=-1;a.id?d=a.id:a.body&&(d=a.body.id),d>-1&&(null===b?(delete this._bodyCallbacks[d],delete this._bodyCallbackContext[d]):(this._bodyCallbacks[d]=b,this._bodyCallbackContext[d]=c))},createGroupCallback:function(a,b,c){null===b?(delete this._groupCallbacks[a.mask],delete this._groupCallbacksContext[a.mask]):(this._groupCallbacks[a.mask]=b,this._groupCallbackContext[a.mask]=c)},getCollisionMask:function(){var a=0;this._collideWorldBounds&&(a=this.game.physics.p2.boundsCollisionGroup.mask);for(var b=0;b=0;c--)this.data.shapes[c].collisionMask=b;else a.collisionMask=b},setCollisionGroup:function(a,b){var c=this.getCollisionMask();if("undefined"==typeof b)for(var d=this.data.shapes.length-1;d>=0;d--)this.data.shapes[d].collisionGroup=a.mask,this.data.shapes[d].collisionMask=c;else b.collisionGroup=a.mask,b.collisionMask=c},clearCollision:function(a,b,c){if("undefined"==typeof c)for(var d=this.data.shapes.length-1;d>=0;d--)a&&(this.data.shapes[d].collisionGroup=null),b&&(this.data.shapes[d].collisionMask=null);else a&&(c.collisionGroup=null),b&&(c.collisionMask=null);a&&(this.collidesWith.length=0)},collides:function(a,b,c,d){if(Array.isArray(a))for(var e=0;e=0;e--)this.data.shapes[e].collisionMask=f;else d.collisionMask=f},adjustCenterOfMass:function(){this.data.adjustCenterOfMass()},applyDamping:function(a){this.data.applyDamping(a)},applyForce:function(a,b,c){this.data.applyForce(a,[this.world.pxm(b),this.world.pxm(c)])},setZeroForce:function(){this.data.setZeroForce()},setZeroRotation:function(){this.data.angularVelocity=0},setZeroVelocity:function(){this.data.velocity[0]=0,this.data.velocity[1]=0},setZeroDamping:function(){this.data.damping=0,this.data.angularDamping=0},toLocalFrame:function(a,b){return this.data.toLocalFrame(a,b)},toWorldFrame:function(a,b){return this.data.toWorldFrame(a,b)},rotateLeft:function(a){this.data.angularVelocity=this.world.pxm(-a)},rotateRight:function(a){this.data.angularVelocity=this.world.pxm(a)},moveForward:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.velocity[0]=b*Math.cos(c),this.data.velocity[1]=b*Math.sin(c)},moveBackward:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.velocity[0]=-(b*Math.cos(c)),this.data.velocity[1]=-(b*Math.sin(c))},thrust:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.force[0]+=b*Math.cos(c),this.data.force[1]+=b*Math.sin(c)},reverse:function(a){var b=this.world.pxmi(-a),c=this.data.angle+Math.PI/2;this.data.force[0]-=b*Math.cos(c),this.data.force[1]-=b*Math.sin(c)},moveLeft:function(a){this.data.velocity[0]=this.world.pxmi(-a)},moveRight:function(a){this.data.velocity[0]=this.world.pxmi(a)},moveUp:function(a){this.data.velocity[1]=this.world.pxmi(-a)},moveDown:function(a){this.data.velocity[1]=this.world.pxmi(a)},preUpdate:function(){this.removeNextStep&&(this.removeFromWorld(),this.removeNextStep=!1)},postUpdate:function(){this.sprite.x=this.world.mpxi(this.data.position[0]),this.sprite.y=this.world.mpxi(this.data.position[1]),this.fixedRotation||(this.sprite.rotation=this.data.angle)},reset:function(a,b,c,d){"undefined"==typeof c&&(c=!1),"undefined"==typeof d&&(d=!1),this.setZeroForce(),this.setZeroVelocity(),this.setZeroRotation(),c&&this.setZeroDamping(),d&&(this.mass=1),this.x=a,this.y=b},addToWorld:function(){this.data.world!==this.game.physics.p2.world&&this.game.physics.p2.addBody(this)},removeFromWorld:function(){this.data.world===this.game.physics.p2.world&&this.game.physics.p2.removeBodyNextStep(this)},destroy:function(){this.removeFromWorld(),this.clearShapes(),this._bodyCallbacks={},this._bodyCallbackContext={},this._groupCallbacks={},this._groupCallbackContext={},this.debugBody&&this.debugBody.destroy(),this.debugBody=null,this.sprite=null},clearShapes:function(){for(var a=this.data.shapes.length;a--;)this.data.removeShape(this.data.shapes[a]);this.shapeChanged()},addShape:function(a,b,c,d){return"undefined"==typeof b&&(b=0),"undefined"==typeof c&&(c=0),"undefined"==typeof d&&(d=0),this.data.addShape(a,[this.world.pxmi(b),this.world.pxmi(c)],d),this.shapeChanged(),a},addCircle:function(a,b,c,d){var e=new p2.Circle(this.world.pxm(a));return this.addShape(e,b,c,d)},addRectangle:function(a,b,c,d,e){var f=new p2.Rectangle(this.world.pxm(a),this.world.pxm(b));return this.addShape(f,c,d,e)},addPlane:function(a,b,c){var d=new p2.Plane;return this.addShape(d,a,b,c)},addParticle:function(a,b,c){var d=new p2.Particle;return this.addShape(d,a,b,c)},addLine:function(a,b,c,d){var e=new p2.Line(this.world.pxm(a));return this.addShape(e,b,c,d)},addCapsule:function(a,b,c,d,e){var f=new p2.Capsule(this.world.pxm(a),b);return this.addShape(f,c,d,e)},addPolygon:function(a,b){a=a||{},b=Array.prototype.slice.call(arguments,1);var c=[];if(1===b.length&&Array.isArray(b[0]))c=b[0].slice(0);else if(Array.isArray(b[0]))c=b[0].slice(0);else if("number"==typeof b[0])for(var d=0,e=b.length;e>d;d+=2)c.push([b[d],b[d+1]]);var f=c.length-1;c[f][0]===c[0][0]&&c[f][1]===c[0][1]&&c.pop();for(var g=0;g=0;c--)this.data.shapes[c].material=a;else b.material=a},shapeChanged:function(){this.debugBody&&this.debugBody.draw()},addPhaserPolygon:function(a,b){for(var c=this.game.cache.getPhysicsData(a,b),d=[],e=0;e=0?o>n:n>o;e=o>=0?++n:--n)k=b.vertices[e],p2.vec2.rotate(m,k,a),l.push([(m[0]+i[0])*this.ppu,-(m[1]+i[1])*this.ppu]);this.drawConvex(j,l,b.triangles,f,c,g,this.settings.debugPolygons,[i[0]*this.ppu,-i[1]*this.ppu])}else b instanceof p2.Plane?this.drawPlane(j,i[0]*this.ppu,-i[1]*this.ppu,c,f,5*g,10*g,10*g,100*this.ppu,a):b instanceof p2.Line?this.drawLine(j,b.length*this.ppu,f,g):b instanceof p2.Rectangle&&this.drawRectangle(j,i[0]*this.ppu,-i[1]*this.ppu,a,b.width*this.ppu,b.height*this.ppu,f,c,g);d++}}},drawRectangle:function(a,b,c,d,e,f,g,h,i){"undefined"==typeof i&&(i=1),"undefined"==typeof g&&(g=0),a.lineStyle(i,g,1),a.beginFill(h),a.drawRect(b-e/2,c-f/2,e,f)},drawCircle:function(a,b,c,d,e,f,g){"undefined"==typeof g&&(g=1),"undefined"==typeof f&&(f=16777215),a.lineStyle(g,0,1),a.beginFill(f,1),a.drawCircle(b,c,-e),a.endFill(),a.moveTo(b,c),a.lineTo(b+e*Math.cos(-d),c+e*Math.sin(-d))},drawLine:function(a,b,c,d){"undefined"==typeof d&&(d=1),"undefined"==typeof c&&(c=0),a.lineStyle(5*d,c,1),a.moveTo(-b/2,0),a.lineTo(b/2,0)},drawConvex:function(a,b,c,d,e,f,g,h){var i,j,k,l,m,n,o,p,q,r,s;if("undefined"==typeof f&&(f=1),"undefined"==typeof d&&(d=0),g){for(i=[16711680,65280,255],j=0;j!==b.length+1;)l=b[j%b.length],m=b[(j+1)%b.length],o=l[0],r=l[1],p=m[0],s=m[1],a.lineStyle(f,i[j%i.length],1),a.moveTo(o,-r),a.lineTo(p,-s),a.drawCircle(o,-r,2*f),j++;return a.lineStyle(f,0,1),a.drawCircle(h[0],h[1],2*f)}for(a.lineStyle(f,d,1),a.beginFill(e),j=0;j!==b.length;)k=b[j],n=k[0],q=k[1],0===j?a.moveTo(n,-q):a.lineTo(n,-q),j++;return a.endFill(),b.length>2?(a.moveTo(b[b.length-1][0],-b[b.length-1][1]),a.lineTo(b[0][0],-b[0][1])):void 0},drawPath:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;for("undefined"==typeof e&&(e=1),"undefined"==typeof c&&(c=0),a.lineStyle(e,c,1),"number"==typeof d&&a.beginFill(d),h=null,i=null,g=0;g2&&"number"==typeof d&&(a.moveTo(b[b.length-1][0],b[b.length-1][1]),a.lineTo(b[0][0],b[0][1]))},drawPlane:function(a,b,c,d,e,f,g,h,i,j){var k,l,m;"undefined"==typeof f&&(f=1),"undefined"==typeof d&&(d=16777215),a.lineStyle(f,e,11),a.beginFill(d),k=i,a.moveTo(b,-c),l=b+Math.cos(j)*this.game.width,m=c+Math.sin(j)*this.game.height,a.lineTo(l,-m),a.moveTo(b,-c),l=b+Math.cos(j)*-this.game.width,m=c+Math.sin(j)*-this.game.height,a.lineTo(l,-m)},randomPastelHex:function(){var a,b,c,d;return c=[255,255,255],d=Math.floor(256*Math.random()),b=Math.floor(256*Math.random()),a=Math.floor(256*Math.random()),d=Math.floor((d+3*c[0])/4),b=Math.floor((b+3*c[1])/4),a=Math.floor((a+3*c[2])/4),this.rgbToHex(d,b,a)},rgbToHex:function(a,b,c){return this.componentToHex(a)+this.componentToHex(b)+this.componentToHex(c)},componentToHex:function(a){var b;return b=a.toString(16),2===b.len?b:b+"0"}}),Phaser.Physics.P2.Spring=function(a,b,c,d,e,f,g,h,i,j){this.game=a.game,this.world=a,"undefined"==typeof d&&(d=1),"undefined"==typeof e&&(e=100),"undefined"==typeof f&&(f=1),d=a.pxm(d);var k={restLength:d,stiffness:e,damping:f};"undefined"!=typeof g&&null!==g&&(k.worldAnchorA=[a.pxm(g[0]),a.pxm(g[1])]),"undefined"!=typeof h&&null!==h&&(k.worldAnchorB=[a.pxm(h[0]),a.pxm(h[1])]),"undefined"!=typeof i&&null!==i&&(k.localAnchorA=[a.pxm(i[0]),a.pxm(i[1])]),"undefined"!=typeof j&&null!==j&&(k.localAnchorB=[a.pxm(j[0]),a.pxm(j[1])]),p2.Spring.call(this,b,c,k)},Phaser.Physics.P2.Spring.prototype=Object.create(p2.Spring.prototype),Phaser.Physics.P2.Spring.prototype.constructor=Phaser.Physics.P2.Spring,Phaser.Physics.P2.Material=function(a){this.name=a,p2.Material.call(this)},Phaser.Physics.P2.Material.prototype=Object.create(p2.Material.prototype),Phaser.Physics.P2.Material.prototype.constructor=Phaser.Physics.P2.Material,Phaser.Physics.P2.ContactMaterial=function(a,b,c){p2.ContactMaterial.call(this,a,b,c)},Phaser.Physics.P2.ContactMaterial.prototype=Object.create(p2.ContactMaterial.prototype),Phaser.Physics.P2.ContactMaterial.prototype.constructor=Phaser.Physics.P2.ContactMaterial,Phaser.Physics.P2.CollisionGroup=function(a){this.mask=a},Phaser.Physics.P2.DistanceConstraint=function(a,b,c,d,e){"undefined"==typeof d&&(d=100),this.game=a.game,this.world=a,d=a.pxm(d),p2.DistanceConstraint.call(this,b,c,d,e)},Phaser.Physics.P2.DistanceConstraint.prototype=Object.create(p2.DistanceConstraint.prototype),Phaser.Physics.P2.DistanceConstraint.prototype.constructor=Phaser.Physics.P2.DistanceConstraint,Phaser.Physics.P2.GearConstraint=function(a,b,c,d,e){"undefined"==typeof d&&(d=0),"undefined"==typeof e&&(e=1),this.game=a.game,this.world=a;var f={angle:d,ratio:e};p2.GearConstraint.call(this,b,c,f)},Phaser.Physics.P2.GearConstraint.prototype=Object.create(p2.GearConstraint.prototype),Phaser.Physics.P2.GearConstraint.prototype.constructor=Phaser.Physics.P2.GearConstraint,Phaser.Physics.P2.LockConstraint=function(a,b,c,d,e,f){"undefined"==typeof d&&(d=[0,0]),"undefined"==typeof e&&(e=0),"undefined"==typeof f&&(f=Number.MAX_VALUE),this.game=a.game,this.world=a,d=[a.pxm(d[0]),a.pxm(d[1])];var g={localOffsetB:d,localAngleB:e,maxForce:f};p2.LockConstraint.call(this,b,c,g)},Phaser.Physics.P2.LockConstraint.prototype=Object.create(p2.LockConstraint.prototype),Phaser.Physics.P2.LockConstraint.prototype.constructor=Phaser.Physics.P2.LockConstraint,Phaser.Physics.P2.PrismaticConstraint=function(a,b,c,d,e,f,g,h){"undefined"==typeof d&&(d=!0),"undefined"==typeof e&&(e=[0,0]),"undefined"==typeof f&&(f=[0,0]),"undefined"==typeof g&&(g=[0,0]),"undefined"==typeof h&&(h=Number.MAX_VALUE),this.game=a.game,this.world=a,e=[a.pxmi(e[0]),a.pxmi(e[1])],f=[a.pxmi(f[0]),a.pxmi(f[1])];var i={localAnchorA:e,localAnchorB:f,localAxisA:g,maxForce:h,disableRotationalLock:!d};p2.PrismaticConstraint.call(this,b,c,i)},Phaser.Physics.P2.PrismaticConstraint.prototype=Object.create(p2.PrismaticConstraint.prototype),Phaser.Physics.P2.PrismaticConstraint.prototype.constructor=Phaser.Physics.P2.PrismaticConstraint,Phaser.Physics.P2.RevoluteConstraint=function(a,b,c,d,e,f){"undefined"==typeof f&&(f=Number.MAX_VALUE),this.game=a.game,this.world=a,c=[a.pxmi(c[0]),a.pxmi(c[1])],e=[a.pxmi(e[0]),a.pxmi(e[1])],p2.RevoluteConstraint.call(this,b,c,d,e,f)},Phaser.Physics.P2.RevoluteConstraint.prototype=Object.create(p2.RevoluteConstraint.prototype),Phaser.Physics.P2.RevoluteConstraint.prototype.constructor=Phaser.Physics.P2.RevoluteConstraint; //# sourceMappingURL=phaser.map \ No newline at end of file