diff --git a/build/matter.js b/build/matter.js index 4864601..9f2d51e 100644 --- a/build/matter.js +++ b/build/matter.js @@ -1,5 +1,5 @@ /** -* matter.js edge-master 2015-08-13 +* matter.js edge-master 2015-08-17 * http://brm.io/matter-js/ * License: MIT */ @@ -28,18 +28,8 @@ * THE SOFTWARE. */ -(function() { - -var Matter = {}; - -// Begin Matter namespace closure - -// All Matter modules are included below during build -// Outro.js then closes at the end of the file - - -// Begin src/body/Body.js +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Matter = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o0&&z.rotateAbout(e.position,c,a.position,e.position)}},b.setVelocity=function(a,b){a.positionPrev.x=a.position.x-b.x,a.positionPrev.y=a.position.y-b.y,a.velocity.x=b.x,a.velocity.y=b.y,a.speed=z.magnitude(a.velocity)},b.setAngularVelocity=function(a,b){a.anglePrev=a.angle-b,a.angularVelocity=b,a.angularSpeed=Math.abs(a.angularVelocity)},b.translate=function(a,c){b.setPosition(a,z.add(a.position,c))},b.rotate=function(a,c){b.setAngle(a,a.angle+c)},b.scale=function(a,c,d){for(var e=0;e0&&(j.position.x+=a.velocity.x,j.position.y+=a.velocity.y),0!==a.angularVelocity&&(A.rotate(j.vertices,a.angularVelocity,a.position),w.rotate(j.axes,a.angularVelocity),i>0&&z.rotateAbout(j.position,a.angularVelocity,a.position,j.position)),x.update(j.bounds,j.vertices,a.velocity)}},b.applyForce=function(a,b,c){a.force.x+=c.x,a.force.y+=c.y;var d={x:b.x-a.position.x,y:b.y-a.position.y};a.torque+=(d.x*c.y-d.y*c.x)*a.inverseInertia};var f=function(a){for(var b={mass:0,area:0,inertia:0,centre:{x:0,y:0}},c=1===a.parts.length?0:1;c1?1:0;j1?1:0;m0:0!==(a.mask&b.category)&&0!==(b.mask&a.category)}}();var g={};!function(){g.create=function(a){var b={controller:g,detector:f.collisions,buckets:{},pairs:{},pairsList:[],bucketWidth:48,bucketHeight:48};return o.extend(b,a)},g.update=function(c,f,g,h){var l,m,n,o,p,q=g.world,r=c.buckets,s=!1;for(l=0;lq.bounds.width||t.bounds.max.y<0||t.bounds.min.y>q.bounds.height)){var u=b(c,t);if(!t.region||u.id!==t.region.id||h){(!t.region||h)&&(t.region=u);var v=a(u,t.region);for(m=v.startCol;m<=v.endCol;m++)for(n=v.startRow;n<=v.endRow;n++){p=d(m,n),o=r[p];var w=m>=u.startCol&&m<=u.endCol&&n>=u.startRow&&n<=u.endRow,x=m>=t.region.startCol&&m<=t.region.endCol&&n>=t.region.startRow&&n<=t.region.endRow;!w&&x&&x&&o&&j(c,o,t),(t.region===u||w&&!x||h)&&(o||(o=e(r,p)),i(c,o,t))}t.region=u,s=!0}}}s&&(c.pairsList=k(c))},g.clear=function(a){a.buckets={},a.pairs={},a.pairsList=[]};var a=function(a,b){var d=Math.min(a.startCol,b.startCol),e=Math.max(a.endCol,b.endCol),f=Math.min(a.startRow,b.startRow),g=Math.max(a.endRow,b.endRow);return c(d,e,f,g)},b=function(a,b){var d=b.bounds,e=Math.floor(d.min.x/a.bucketWidth),f=Math.floor(d.max.x/a.bucketWidth),g=Math.floor(d.min.y/a.bucketHeight),h=Math.floor(d.max.y/a.bucketHeight);return c(e,f,g,h)},c=function(a,b,c,d){return{id:a+","+b+","+c+","+d,startCol:a,endCol:b,startRow:c,endRow:d}},d=function(a,b){return a+","+b},e=function(a,b){var c=a[b]=[];return c},i=function(a,b,c){for(var d=0;d0?d.push(c):delete a.pairs[b[e]];return d}}();var h={};!function(){h.create=function(a,b){var c=a.bodyA,d=a.bodyB,e=a.parentA,f=a.parentB,g={id:h.id(c,d),bodyA:c,bodyB:d,contacts:{},activeContacts:[],separation:0,isActive:!0,timeCreated:b,timeUpdated:b,inverseMass:e.inverseMass+f.inverseMass,friction:Math.min(e.friction,f.friction),frictionStatic:Math.max(e.frictionStatic,f.frictionStatic),restitution:Math.max(e.restitution,f.restitution),slop:Math.max(e.slop,f.slop)};return h.update(g,a,b),g},h.update=function(a,b,c){var d=a.contacts,f=b.supports,g=a.activeContacts,i=b.parentA,j=b.parentB;if(a.collision=b,a.inverseMass=i.inverseMass+j.inverseMass,a.friction=Math.min(i.friction,j.friction),a.frictionStatic=Math.max(i.frictionStatic,j.frictionStatic),a.restitution=Math.max(i.restitution,j.restitution),a.slop=Math.max(i.slop,j.slop),g.length=0,b.collided){for(var k=0;ka&&j.push(g);for(g=0;gl.friction*l.frictionStatic*I*c&&(J=l.friction*G*c,K=F);var L=z.cross(x,q),M=z.cross(y,q),N=n.inverseMass+p.inverseMass+n.inverseInertia*L*L+p.inverseInertia*M*M;if(H*=t/N,J*=t/(1+N),0>D&&D*D>k._restingThresh*c)v.normalImpulse=0,v.tangentImpulse=0;else{var O=v.normalImpulse;v.normalImpulse=Math.min(v.normalImpulse+H,0),H=v.normalImpulse-O;var P=v.tangentImpulse;v.tangentImpulse=o.clamp(v.tangentImpulse+J,-K,K),J=v.tangentImpulse-P}d.x=q.x*H+r.x*J,d.y=q.y*H+r.y*J,n.isStatic||n.isSleeping||(n.positionPrev.x+=d.x*n.inverseMass,n.positionPrev.y+=d.y*n.inverseMass,n.anglePrev+=z.cross(x,d)*n.inverseInertia),p.isStatic||p.isSleeping||(p.positionPrev.x-=d.x*p.inverseMass,p.positionPrev.y-=d.y*p.inverseMass,p.anglePrev-=z.cross(y,d)*p.inverseInertia)}}}}}();var l={};!function(){l.collides=function(b,d,e){var f,g,h,i,j=e,k=!1;if(j){var l=b.parent,m=d.parent,n=l.speed*l.speed+l.angularSpeed*l.angularSpeed+m.speed*m.speed+m.angularSpeed*m.angularSpeed;k=j&&j.collided&&.2>n,i=j}else i={collided:!1,bodyA:b,bodyB:d};if(j&&k){var o=i.axisBody,p=o===b?d:b,q=[o.axes[j.axisNumber]];if(h=a(o.vertices,p.vertices,q),i.reused=!0,h.overlap<=0)return i.collided=!1,i}else{if(f=a(b.vertices,d.vertices,b.axes),f.overlap<=0)return i.collided=!1,i;if(g=a(d.vertices,b.vertices,d.axes),g.overlap<=0)return i.collided=!1,i;f.overlap0&&(i.normal=z.neg(i.normal)),i.tangent=z.perp(i.normal),i.penetration={x:i.normal.x*i.depth,y:i.normal.y*i.depth};var r=c(b,d,i.normal),s=i.supports||[];if(s.length=0,A.contains(b.vertices,r[0])&&s.push(r[0]),A.contains(b.vertices,r[1])&&s.push(r[1]),s.length<2){var t=c(d,b,z.neg(i.normal));A.contains(d.vertices,t[0])&&s.push(t[0]),s.length<2&&A.contains(d.vertices,t[1])&&s.push(t[1])}return s.length<1&&(s=[r[0]]),i.supports=s,i};var a=function(a,c,d){for(var e,f,g=z._temp[0],h=z._temp[1],i={overlap:Number.MAX_VALUE},j=0;j=e)return i.overlap=e,i;ee?e=g:d>g&&(d=g)}a.min=d,a.max=e},c=function(a,b,c){for(var d,e,f,g,h=Number.MAX_VALUE,i=z._temp[0],j=b.vertices,k=a.position,l=0;ld&&(h=d,f=e);var m=f.index-1>=0?f.index-1:j.length-1;e=j[m],i.x=e.x-k.x,i.y=e.y-k.y,h=-z.dot(c,i),g=e;var n=(f.index+1)%j.length;return e=j[n],i.x=e.x-k.x,i.y=e.y-k.y,d=-z.dot(c,i),h>d&&(g=e),[f,g]}}();var m={};!function(){var a=1e-6,b=.001;m.create=function(b){var c=b;c.bodyA&&!c.pointA&&(c.pointA={x:0,y:0}),c.bodyB&&!c.pointB&&(c.pointB={x:0,y:0});var d=c.bodyA?z.add(c.bodyA.position,c.pointA):c.pointA,e=c.bodyB?z.add(c.bodyB.position,c.pointB):c.pointB,f=z.magnitude(z.sub(d,e));c.length=c.length||f||a;var g={visible:!0,lineWidth:2,strokeStyle:"#666"};return c.render=o.extend(g,c.render),c.id=c.id||o.nextId(),c.label=c.label||"Constraint",c.type="constraint",c.stiffness=c.stiffness||1,c.angularStiffness=c.angularStiffness||0,c.angleA=c.bodyA?c.bodyA.angle:c.angleA,c.angleB=c.bodyB?c.bodyB.angle:c.angleB,c},m.solveAll=function(a,b){for(var c=0;c0&&(B=0);var C,D={x:n.x*B,y:n.y*B};e&&!e.isStatic&&(C=z.cross(s,D)*e.inverseInertia*(1-c.angularStiffness),t.set(e,!1),C=o.clamp(C,-.01,.01),e.constraintImpulse.x-=p.x,e.constraintImpulse.y-=p.y,e.constraintImpulse.angle+=C,e.position.x-=p.x,e.position.y-=p.y,e.angle+=C),f&&!f.isStatic&&(C=z.cross(u,D)*f.inverseInertia*(1-c.angularStiffness),t.set(f,!1),C=o.clamp(C,-.01,.01),f.constraintImpulse.x+=p.x,f.constraintImpulse.y+=p.y,f.constraintImpulse.angle-=C,f.position.x+=p.x,f.position.y+=p.y,f.angle-=C)}}},m.postSolveAll=function(a){for(var b=0;b0&&(f.position.x+=d.x,f.position.y+=d.y),0!==d.angle&&(A.rotate(f.vertices,d.angle,c.position),w.rotate(f.axes,d.angle),e>0&&z.rotateAbout(f.position,d.angle,c.position,f.position)),x.update(f.bounds,f.vertices)}d.angle=0,d.x=0,d.y=0}}}();var n={};!function(){n.create=function(b,d){var e=(b?b.mouse:null)||(d?d.mouse:null);!e&&b&&b.render&&b.render.canvas?e=r.create(b.render.canvas):(e=r.create(),o.log("MouseConstraint.create: options.mouse was undefined, engine.render.canvas was undefined, may not function as expected","warn"));var f=m.create({label:"Mouse Constraint",pointA:e.position,pointB:{x:0,y:0},length:.01,stiffness:.1,angularStiffness:1,render:{strokeStyle:"#90EE90",lineWidth:3}}),g={type:"mouseConstraint",mouse:e,body:null,constraint:f,collisionFilter:{category:1,mask:4294967295,group:0}},h=o.extend(g,d);return q.on(b,"tick",function(){var d=c.allBodies(b.world);n.update(h,d),a(h)}),h},n.update=function(a,b){var c=a.mouse,d=a.constraint,e=a.body;if(0===c.button){if(d.bodyB)t.set(d.bodyB,!1),d.pointA=c.position;else for(var g=0;g1?1:0;h>16)+d,f=(c>>8&255)+d,g=(255&c)+d;return"#"+(16777216+65536*(255>e?1>e?0:e:255)+256*(255>f?1>f?0:f:255)+(255>g?1>g?0:g:255)).toString(16).slice(1)},o.shuffle=function(a){for(var b=a.length-1;b>0;b--){var c=Math.floor(o.random()*(b+1)),d=a[b];a[b]=a[c],a[c]=d}return a},o.choose=function(a){return a[Math.floor(o.random()*a.length)]},o.isElement=function(a){try{return a instanceof HTMLElement}catch(b){return"object"==typeof a&&1===a.nodeType&&"object"==typeof a.style&&"object"==typeof a.ownerDocument}},o.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)},o.clamp=function(a,b,c){return b>a?b:a>c?c:a},o.sign=function(a){return 0>a?-1:1},o.now=function(){var a=window.performance||{};return a.now=function(){return a.now||a.webkitNow||a.msNow||a.oNow||a.mozNow||function(){return+new Date}}(),a.now()},o.random=function(b,c){return b="undefined"!=typeof b?b:0,c="undefined"!=typeof c?c:1,b+a()*(c-b)},o.colorToNumber=function(a){return a=a.replace("#",""),3==a.length&&(a=a.charAt(0)+a.charAt(0)+a.charAt(1)+a.charAt(1)+a.charAt(2)+a.charAt(2)),parseInt(a,16)},o.log=function(a,b){if(console&&console.log&&console.warn)switch(b){case"warn":console.warn("Matter.js:",a);break;case"error":console.log("Matter.js:",a)}},o.nextId=function(){return o._nextId++},o.indexOf=function(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0;c0&&q.trigger(b,"collisionStart",{pairs:v.collisionStart}),k.preSolvePosition(v.list),h=0;h0&&q.trigger(b,"collisionActive",{pairs:v.collisionActive}),v.collisionEnd.length>0&&q.trigger(b,"collisionEnd",{pairs:v.collisionEnd}),a(r),j.isModified&&c.setModified(j,!1,!1,!0),q.trigger(b,"afterUpdate",p),b},p.merge=function(a,b){if(o.extend(a,b),b.world){a.world=b.world,p.clear(a);for(var d=c.allBodies(a.world),e=0;ea.deltaMax?a.deltaMax:d,f=d/a.delta,a.delta=d),0!==a.timeScalePrev&&(f*=e.timeScale/a.timeScalePrev),0===e.timeScale&&(f=0),a.timeScalePrev=e.timeScale,a.correction=f,a.frameCounter+=1,c-a.counterTimestamp>=1e3&&(a.fps=a.frameCounter*((c-a.counterTimestamp)/1e3),a.counterTimestamp=c,a.frameCounter=0),q.trigger(a,"tick",g),q.trigger(b,"tick",g),b.world.isModified&&b.render&&b.render.controller&&b.render.controller.clear&&b.render.controller.clear(b.render),q.trigger(a,"beforeUpdate",g),p.update(b,d,f),q.trigger(a,"afterUpdate",g),b.render&&(q.trigger(a,"beforeRender",g),q.trigger(b,"beforeRender",g),b.render.controller.world(b),q.trigger(a,"afterRender",g),q.trigger(b,"afterRender",g)),q.trigger(a,"afterTick",g),q.trigger(b,"afterTick",g)},s.stop=function(a){b(a.frameRequestId)}}}();var t={};!function(){t._motionWakeThreshold=.18,t._motionSleepThreshold=.08,t._minBias=.9,t.update=function(a,b){for(var c=b*b*b,d=0;d0&&e.motion=e.sleepThreshold&&t.set(e,!0)):e.sleepCounter>0&&(e.sleepCounter-=1)}else t.set(e,!1)}},t.afterCollisions=function(a,b){for(var c=b*b*b,d=0;dt._motionWakeThreshold*c&&t.set(i,!1)}}}},t.set=function(a,b){var c=a.isSleeping;b?(a.isSleeping=!0,a.sleepCounter=a.sleepThreshold,a.positionImpulse.x=0,a.positionImpulse.y=0,a.positionPrev.x=a.position.x,a.positionPrev.y=a.position.y,a.anglePrev=a.angle,a.speed=0,a.angularSpeed=0,a.motion=0,c||q.trigger(a,"sleepStart")):(a.isSleeping=!1,a.sleepCounter=0,c&&q.trigger(a,"sleepEnd"))}}();var u={};!function(){u.rectangle=function(a,c,d,e,f){f=f||{};var g={label:"Rectangle Body",position:{x:a,y:c},vertices:A.fromPath("L 0 0 L "+d+" 0 L "+d+" "+e+" L 0 "+e)};if(f.chamfer){var h=f.chamfer;g.vertices=A.chamfer(g.vertices,h.radius,h.quality,h.qualityMin,h.qualityMax),delete f.chamfer}return b.create(o.extend({},g,f))},u.trapezoid=function(a,c,d,e,f,g){g=g||{},f*=.5;var h=(1-2*f)*d,i=d*f,j=i+h,k=j+i,l={label:"Trapezoid Body",position:{x:a,y:c},vertices:A.fromPath("L 0 0 L "+i+" "+-e+" L "+j+" "+-e+" L "+k+" 0")};if(g.chamfer){var m=g.chamfer;l.vertices=A.chamfer(l.vertices,m.radius,m.quality,m.qualityMin,m.qualityMax),delete g.chamfer}return b.create(o.extend({},l,g))},u.circle=function(a,b,c,d,e){d=d||{},d.label="Circle Body",e=e||25;var f=Math.ceil(Math.max(10,Math.min(e,c)));return f%2===1&&(f+=1),d.circleRadius=c,u.polygon(a,b,f,c,d)},u.polygon=function(a,c,d,e,f){if(f=f||{},3>d)return u.circle(a,c,e,f);for(var g=2*Math.PI/d,h="",i=.5*g,j=0;d>j;j+=1){var k=i+j*g,l=Math.cos(k)*e,m=Math.sin(k)*e;h+="L "+l.toFixed(3)+" "+m.toFixed(3)+" "}var n={label:"Polygon Body",position:{x:a,y:c},vertices:A.fromPath(h)};if(f.chamfer){var p=f.chamfer;n.vertices=A.chamfer(n.vertices,p.radius,p.quality,p.qualityMin,p.qualityMax),delete f.chamfer}return b.create(o.extend({},n,f))},u.fromVertices=function(a,c,d,e,f,g,h){var i,j,k,l,m,n,p,q,r;for(e=e||{},j=[],f="undefined"!=typeof f?f:!1,g="undefined"!=typeof g?g:.01,h="undefined"!=typeof h?h:10,window.decomp||o.log("Bodies.fromVertices: poly-decomp.js required. Could not decompose vertices. Fallback to convex hull.","warn"),o.isArray(d[0])||(d=[d]),q=0;q0&&A.area(v)E&&w>F&&(C[p].isInternal=!0,D[r].isInternal=!0)}}}}}return j.length>1?(i=b.create(o.extend({parts:j.slice(0)},e)),b.setPosition(i,{x:a,y:c}),i):j[0]}}();var v={};!function(){v.stack=function(a,d,e,f,g,h,i){for(var j,k=c.create({label:"Stack"}),l=a,m=d,n=0,o=0;f>o;o++){for(var p=0,q=0;e>q;q++){var r=i(l,m,q,o,j,n);if(r){var s=r.bounds.max.y-r.bounds.min.y,t=r.bounds.max.x-r.bounds.min.x;s>p&&(p=s),b.translate(r,{x:.5*t,y:.5*s}),l=r.bounds.max.x+g,c.addBody(k,r),j=r,n+=1}else l+=g}m+=p+h,l=a}return k},v.chain=function(a,b,d,e,f,g){for(var h=a.bodies,i=1;ig;g++){for(h=1;b>h;h++)i=l[h-1+g*b],j=l[h+g*b],c.addConstraint(a,m.create(o.extend({bodyA:i,bodyB:j},f)));if(g>0)for(h=0;b>h;h++)i=l[h+(g-1)*b],j=l[h+g*b],c.addConstraint(a,m.create(o.extend({bodyA:i,bodyB:j},f))),e&&h>0&&(k=l[h-1+(g-1)*b],c.addConstraint(a,m.create(o.extend({bodyA:k,bodyB:j},f)))),e&&b-1>h&&(k=l[h+1+(g-1)*b],c.addConstraint(a,m.create(o.extend({bodyA:k,bodyB:j},f))))}return a.label+=" Mesh",a},v.pyramid=function(a,c,d,e,f,g,h){return v.stack(a,c,d,e,f,g,function(c,g,i,j,k,l){var m=Math.min(e,Math.ceil(d/2)),n=k?k.bounds.max.x-k.bounds.min.x:0;if(!(j>m)){j=m-j;var o=j,p=d-1-j;if(!(o>i||i>p)){1===l&&b.translate(k,{x:(i+(d%2===1?1:-1))*n,y:0});var q=k?i*n:0;return h(a+q+i*f,g,i,j,k,l)}}})},v.newtonsCradle=function(a,b,d,e,f){for(var g=c.create({label:"Newtons Cradle"}),h=0;d>h;h++){var i=1.9,j=u.circle(a+h*e*i,b+f,e,{inertia:99999,restitution:1,friction:0,frictionAir:1e-4,slop:.01}),k=m.create({pointA:{x:a+h*e*i,y:b},bodyB:j});c.addBody(g,j),c.addConstraint(g,k)}return g},v.car=function(a,d,e,f,g){var h=b.nextGroup(!0),i=-20,j=.5*-e+i,k=.5*e-i,l=0,n=c.create({label:"Car"}),o=u.trapezoid(a,d,e,f,.3,{collisionFilter:{group:h},friction:.01,chamfer:{radius:10}}),p=u.circle(a+j,d+l,g,{collisionFilter:{group:h},restitution:.5,friction:.9,frictionStatic:10,slop:.5,density:.01}),q=u.circle(a+k,d+l,g,{collisionFilter:{group:h},restitution:.5,friction:.9,frictionStatic:10,slop:.5,density:.01}),r=m.create({bodyA:o,pointA:{x:j,y:l},bodyB:p,stiffness:.5}),s=m.create({bodyA:o,pointA:{x:k,y:l},bodyB:q,stiffness:.5});return c.addBody(n,o),c.addBody(n,p),c.addBody(n,q),c.addConstraint(n,r),c.addConstraint(n,s),n},v.softBody=function(a,b,c,d,e,f,g,h,i,j){i=o.extend({inertia:1/0},i),j=o.extend({stiffness:.4},j);var k=v.stack(a,b,c,d,e,f,function(a,b){return u.circle(a,b,h,i)});return v.mesh(k,c,d,g,j),k.label="Soft Body",k}}();var w={};!function(){w.fromVertices=function(a){for(var b={},c=0;ca.max.x&&(a.max.x=e.x),e.xa.max.y&&(a.max.y=e.y),e.y0?a.max.x+=c.x:a.min.x+=c.x,c.y>0?a.max.y+=c.y:a.min.y+=c.y)},x.contains=function(a,b){return b.x>=a.min.x&&b.x<=a.max.x&&b.y>=a.min.y&&b.y<=a.max.y},x.overlaps=function(a,b){return a.min.x<=b.max.x&&a.max.x>=b.min.x&&a.max.y>=b.min.y&&a.min.y<=b.max.y},x.translate=function(a,b){a.min.x+=b.x,a.max.x+=b.x,a.min.y+=b.y,a.max.y+=b.y},x.shift=function(a,b){var c=a.max.x-a.min.x,d=a.max.y-a.min.y;a.min.x=b.x,a.max.x=b.x+c,a.min.y=b.y,a.max.y=b.y+d}}();var y={};!function(){y.pathToVertices=function(b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p=[],q=0,r=0,s=0;c=c||15;var t=function(a,b,c){var d=c%2===1&&c>1;if(!l||a!=l.x||b!=l.y){l&&d?(n=l.x,o=l.y):(n=0,o=0);var e={x:n+a,y:o+b};(d||!l)&&(l=e),p.push(e),r=n+a,s=o+b}},u=function(a){var b=a.pathSegTypeAsLetter.toUpperCase();if("Z"!==b){switch(b){case"M":case"L":case"T":case"C":case"S":case"Q":r=a.x,s=a.y;break;case"H":r=a.x;break;case"V":s=a.y}t(r,s,a.pathSegType)}};for(a(b),f=b.getTotalLength(),i=[],d=0;dq;){if(m=b.getPathSegAtLength(q),h=i[m],h!=k){for(;j.length&&j[0]!=h;)u(j.shift());k=h}switch(h.pathSegTypeAsLetter.toUpperCase()){case"C":case"T":case"S":case"Q":case"A":g=b.getPointAtLength(q),t(g.x,g.y,0)}q+=c}for(d=0,e=j.length;e>d;++d)u(j[d]);return p};var a=function(a){for(var b,c,d,e,f,g,h=a.pathSegList,i=0,j=0,k=h.numberOfItems,l=0;k>l;++l){var m=h.getItem(l),n=m.pathSegTypeAsLetter;if(/[MLHVCSQTA]/.test(n))"x"in m&&(i=m.x),"y"in m&&(j=m.y);else switch("x1"in m&&(d=i+m.x1),"x2"in m&&(f=i+m.x2),"y1"in m&&(e=j+m.y1),"y2"in m&&(g=j+m.y2),"x"in m&&(i+=m.x),"y"in m&&(j+=m.y),n){case"m":h.replaceItem(a.createSVGPathSegMovetoAbs(i,j),l);break;case"l":h.replaceItem(a.createSVGPathSegLinetoAbs(i,j),l);break;case"h":h.replaceItem(a.createSVGPathSegLinetoHorizontalAbs(i),l);break;case"v":h.replaceItem(a.createSVGPathSegLinetoVerticalAbs(j),l);break;case"c":h.replaceItem(a.createSVGPathSegCurvetoCubicAbs(i,j,d,e,f,g),l);break;case"s":h.replaceItem(a.createSVGPathSegCurvetoCubicSmoothAbs(i,j,f,g),l);break;case"q":h.replaceItem(a.createSVGPathSegCurvetoQuadraticAbs(i,j,d,e),l);break;case"t":h.replaceItem(a.createSVGPathSegCurvetoQuadraticSmoothAbs(i,j),l);break;case"a":h.replaceItem(a.createSVGPathSegArcAbs(i,j,m.r1,m.r2,m.angle,m.largeArcFlag,m.sweepFlag),l);break;case"z":case"Z":i=b,j=c}("M"==n||"m"==n)&&(b=i,c=j)}}}();var z={};!function(){z.create=function(a,b){return{x:a||0,y:b||0}},z.clone=function(a){return{x:a.x,y:a.y}},z.magnitude=function(a){return Math.sqrt(a.x*a.x+a.y*a.y)},z.magnitudeSquared=function(a){return a.x*a.x+a.y*a.y},z.rotate=function(a,b){var c=Math.cos(b),d=Math.sin(b);return{x:a.x*c-a.y*d,y:a.x*d+a.y*c}},z.rotateAbout=function(a,b,c,d){var e=Math.cos(b),f=Math.sin(b);d||(d={});var g=c.x+((a.x-c.x)*e-(a.y-c.y)*f);return d.y=c.y+((a.x-c.x)*f+(a.y-c.y)*e),d.x=g,d},z.normalise=function(a){var b=z.magnitude(a);return 0===b?{x:0,y:0}:{x:a.x/b,y:a.y/b}},z.dot=function(a,b){return a.x*b.x+a.y*b.y},z.cross=function(a,b){return a.x*b.y-a.y*b.x},z.cross3=function(a,b,c){return(b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x)},z.add=function(a,b,c){return c||(c={}),c.x=a.x+b.x,c.y=a.y+b.y,c},z.sub=function(a,b,c){return c||(c={}),c.x=a.x-b.x,c.y=a.y-b.y,c},z.mult=function(a,b){return{x:a.x*b,y:a.y*b}},z.div=function(a,b){return{x:a.x/b,y:a.y/b}},z.perp=function(a,b){return b=b===!0?-1:1,{x:b*-a.y,y:b*a.x}},z.neg=function(a){return{x:-a.x,y:-a.y}},z.angle=function(a,b){return Math.atan2(b.y-a.y,b.x-a.x)},z._temp=[z.create(),z.create(),z.create(),z.create(),z.create(),z.create()]}();var A={};!function(){A.create=function(a,b){for(var c=[],d=0;d0)return!1}return!0},A.scale=function(a,b,c,d){if(1===b&&1===c)return a;d=d||A.centre(a);for(var e,f,g=0;g=0?g-1:a.length-1],i=a[g],j=a[(g+1)%a.length],k=b[gv;v++)f.push(z.add(z.rotate(p,u*v),r))}else f.push(i)}return f},A.clockwiseSort=function(a){var b=A.mean(a);return a.sort(function(a,c){return z.angle(b,a)-z.angle(b,c)}),a},A.isConvex=function(a){var b,c,d,e,f=0,g=a.length;if(3>g)return null;for(b=0;g>b;b++)if(c=(b+1)%g,d=(b+2)%g,e=(a[c].x-a[b].x)*(a[d].y-a[c].y),e-=(a[c].y-a[b].y)*(a[d].x-a[c].x),0>e?f|=1:e>0&&(f|=2),3===f)return!1;return 0!==f?!0:null},A.hull=function(a){var b,c,d=[],e=[];for(a=a.slice(0),a.sort(function(a,b){var c=a.x-b.x;return 0!==c?c:a.y-b.y}),c=0;c=2&&z.cross3(e[e.length-2],e[e.length-1],b)<=0;)e.pop();e.push(b)}for(c=a.length-1;c>=0;c--){for(b=a[c];d.length>=2&&z.cross3(d[d.length-2],d[d.length-1],b)<=0;)d.pop();d.push(b)}return d.pop(),e.pop(),d.concat(e)}}();var B={};!function(){B.create=function(b){var c={controller:B,element:null,canvas:null,options:{width:800,height:600,pixelRatio:1,background:"#fafafa",wireframeBackground:"#222",hasBounds:!1,enabled:!0,wireframes:!0,showSleeping:!0,showDebug:!1,showBroadphase:!1,showBounds:!1,showVelocity:!1,showCollisions:!1,showSeparations:!1,showAxes:!1,showPositions:!1,showAngleIndicator:!1,showIds:!1,showShadows:!1,showVertexNumbers:!1,showConvexHulls:!1,showInternalEdges:!1}},d=o.extend(c,b);return d.canvas=d.canvas||a(d.options.width,d.options.height),d.context=d.canvas.getContext("2d"),d.textures={},d.bounds=d.bounds||{min:{x:0,y:0},max:{x:d.options.width,y:d.options.height}},1!==d.options.pixelRatio&&B.setPixelRatio(d,d.options.pixelRatio),o.isElement(d.element)?d.element.appendChild(d.canvas):o.log("Render.create: options.element was undefined, render.canvas was created but not appended","warn"),d},B.setPixelRatio=function(a,c){var d=a.options,e=a.canvas;"auto"===c&&(c=b(e)),d.pixelRatio=c,e.setAttribute("data-pixel-ratio",c),e.width=d.width*c,e.height=d.height*c,e.style.width=d.width+"px",e.style.height=d.height+"px",a.context.scale(c,c)},B.world=function(a){var b,d=a.render,f=a.world,h=d.canvas,i=d.context,j=d.options,k=c.allBodies(f),l=c.allConstraints(f),m=j.wireframes?j.wireframeBackground:j.background,n=[],o=[],p={timestamp:a.timing.timestamp};if(q.trigger(d,"beforeRender",p),d.currentBackground!==m&&e(d,m),i.globalCompositeOperation="source-in",i.fillStyle="transparent",i.fillRect(0,0,h.width,h.height),i.globalCompositeOperation="source-over",j.hasBounds){var r=d.bounds.max.x-d.bounds.min.x,s=d.bounds.max.y-d.bounds.min.y,t=r/j.width,u=s/j.height;for(b=0;b=500){var i="";i+="fps: "+Math.round(a.timing.fps)+h,f.debugString=i,f.debugTimestamp=a.timing.timestamp}if(f.debugString){d.font="12px Arial",d.fillStyle=g.wireframes?"rgba(255,255,255,0.5)":"rgba(0,0,0,0.5)";for(var j=f.debugString.split("\n"),k=0;k1?1:0;h1?1:0;h1?1:0;f1?1:0;j1?1:0;f1?1:0;f1?1:0;e0)){var l=d.activeContacts[0].vertex.x,m=d.activeContacts[0].vertex.y;2===d.activeContacts.length&&(l=(d.activeContacts[0].vertex.x+d.activeContacts[1].vertex.x)/2,m=(d.activeContacts[0].vertex.y+d.activeContacts[1].vertex.y)/2),e.bodyB===e.supports[0].body||e.bodyA.isStatic===!0?h.moveTo(l-8*e.normal.x,m-8*e.normal.y):h.moveTo(l+8*e.normal.x,m+8*e.normal.y),h.lineTo(l,m)}h.strokeStyle=i.wireframes?"rgba(255,165,0,0.7)":"orange",h.lineWidth=1,h.stroke()},B.separations=function(a,b,c){var d,e,f,g,h,i=c,j=a.render.options;for(i.beginPath(),h=0;h1?1:0;l0&&e.rotateAbout(g.position,c,a.position,g.position)}},c.setVelocity=function(a,b){a.positionPrev.x=a.position.x-b.x,a.positionPrev.y=a.position.y-b.y,a.velocity.x=b.x,a.velocity.y=b.y,a.speed=e.magnitude(a.velocity)},c.setAngularVelocity=function(a,b){a.anglePrev=a.angle-b,a.angularVelocity=b,a.angularSpeed=Math.abs(a.angularVelocity)},c.translate=function(a,b){c.setPosition(a,e.add(a.position,b))},c.rotate=function(a,b){c.setAngle(a,a.angle+b)},c.scale=function(a,b,e){for(var f=0;f0&&(n.position.x+=a.velocity.x,n.position.y+=a.velocity.y),0!==a.angularVelocity&&(d.rotate(n.vertices,a.angularVelocity,a.position),i.rotate(n.axes,a.angularVelocity),m>0&&e.rotateAbout(n.position,a.angularVelocity,a.position,n.position)),h.update(n.bounds,n.vertices,a.velocity)}},c.applyForce=function(a,b,c){a.force.x+=c.x,a.force.y+=c.y;var d={x:b.x-a.position.x,y:b.y-a.position.y};a.torque+=(d.x*c.y-d.y*c.x)*a.inverseInertia};var l=function(a){for(var b={mass:0,area:0,inertia:0,centre:{x:0,y:0}},c=1===a.parts.length?0:1;c1?1:0;l1?1:0;n0:0!==(a.mask&b.category)&&0!==(b.mask&a.category)}}()},{"../geometry/Bounds":24,"./Pair":7,"./SAT":11}],6:[function(a,b){var c={};b.exports=c;var d=a("./Pair"),e=a("./Detector"),f=a("../core/Common");!function(){c.create=function(a){var b={controller:c,detector:e.collisions,buckets:{},pairs:{},pairsList:[],bucketWidth:48,bucketHeight:48};return f.extend(b,a)},c.update=function(c,d,e,f){var g,m,n,o,p,q=e.world,r=c.buckets,s=!1;for(g=0;gq.bounds.width||t.bounds.max.y<0||t.bounds.min.y>q.bounds.height)){var u=b(c,t);if(!t.region||u.id!==t.region.id||f){(!t.region||f)&&(t.region=u);var v=a(u,t.region);for(m=v.startCol;m<=v.endCol;m++)for(n=v.startRow;n<=v.endRow;n++){p=h(m,n),o=r[p];var w=m>=u.startCol&&m<=u.endCol&&n>=u.startRow&&n<=u.endRow,x=m>=t.region.startCol&&m<=t.region.endCol&&n>=t.region.startRow&&n<=t.region.endRow;!w&&x&&x&&o&&k(c,o,t),(t.region===u||w&&!x||f)&&(o||(o=i(r,p)),j(c,o,t))}t.region=u,s=!0}}}s&&(c.pairsList=l(c))},c.clear=function(a){a.buckets={},a.pairs={},a.pairsList=[]};var a=function(a,b){var c=Math.min(a.startCol,b.startCol),d=Math.max(a.endCol,b.endCol),e=Math.min(a.startRow,b.startRow),f=Math.max(a.endRow,b.endRow);return g(c,d,e,f)},b=function(a,b){var c=b.bounds,d=Math.floor(c.min.x/a.bucketWidth),e=Math.floor(c.max.x/a.bucketWidth),f=Math.floor(c.min.y/a.bucketHeight),h=Math.floor(c.max.y/a.bucketHeight);return g(d,e,f,h)},g=function(a,b,c,d){return{id:a+","+b+","+c+","+d,startCol:a,endCol:b,startRow:c,endRow:d}},h=function(a,b){return a+","+b},i=function(a,b){var c=a[b]=[];return c},j=function(a,b,c){for(var e=0;e0?d.push(c):delete a.pairs[b[e]];return d}}()},{"../core/Common":14,"./Detector":5,"./Pair":7}],7:[function(a,b){var c={};b.exports=c;var d=a("./Contact");!function(){c.create=function(a,b){var d=a.bodyA,e=a.bodyB,f=a.parentA,g=a.parentB,h={id:c.id(d,e),bodyA:d,bodyB:e,contacts:{},activeContacts:[],separation:0,isActive:!0,timeCreated:b,timeUpdated:b,inverseMass:f.inverseMass+g.inverseMass,friction:Math.min(f.friction,g.friction),frictionStatic:Math.max(f.frictionStatic,g.frictionStatic),restitution:Math.max(f.restitution,g.restitution),slop:Math.max(f.slop,g.slop)};return c.update(h,a,b),h},c.update=function(a,b,e){var f=a.contacts,g=b.supports,h=a.activeContacts,i=b.parentA,j=b.parentB;if(a.collision=b,a.inverseMass=i.inverseMass+j.inverseMass,a.friction=Math.min(i.friction,j.friction),a.frictionStatic=Math.max(i.frictionStatic,j.frictionStatic),a.restitution=Math.max(i.restitution,j.restitution),a.slop=Math.max(i.slop,j.slop),h.length=0,b.collided){for(var k=0;ka&&j.push(g);for(g=0;gn.friction*n.frictionStatic*I*d&&(J=n.friction*G*d,K=F);var L=e.cross(y,r),M=e.cross(z,r),N=p.inverseMass+q.inverseMass+p.inverseInertia*L*L+q.inverseInertia*M*M;if(H*=u/N,J*=u/(1+N),0>D&&D*D>c._restingThresh*d)w.normalImpulse=0,w.tangentImpulse=0;else{var O=w.normalImpulse;w.normalImpulse=Math.min(w.normalImpulse+H,0),H=w.normalImpulse-O;var P=w.tangentImpulse;w.tangentImpulse=f.clamp(w.tangentImpulse+J,-K,K),J=w.tangentImpulse-P}g.x=r.x*H+s.x*J,g.y=r.y*H+s.y*J,p.isStatic||p.isSleeping||(p.positionPrev.x+=g.x*p.inverseMass,p.positionPrev.y+=g.y*p.inverseMass,p.anglePrev+=e.cross(y,g)*p.inverseInertia),q.isStatic||q.isSleeping||(q.positionPrev.x-=g.x*q.inverseMass,q.positionPrev.y-=g.y*q.inverseMass,q.anglePrev-=e.cross(z,g)*q.inverseInertia)}}}}}()},{"../core/Common":14,"../geometry/Bounds":24,"../geometry/Vector":26,"../geometry/Vertices":27}],11:[function(a,b){var c={};b.exports=c;var d=a("../geometry/Vertices"),e=a("../geometry/Vector");!function(){c.collides=function(b,c,g){var h,i,j,k,l=g,m=!1;if(l){var n=b.parent,o=c.parent,p=n.speed*n.speed+n.angularSpeed*n.angularSpeed+o.speed*o.speed+o.angularSpeed*o.angularSpeed;m=l&&l.collided&&.2>p,k=l}else k={collided:!1,bodyA:b,bodyB:c};if(l&&m){var q=k.axisBody,r=q===b?c:b,s=[q.axes[l.axisNumber]];if(j=a(q.vertices,r.vertices,s),k.reused=!0,j.overlap<=0)return k.collided=!1,k}else{if(h=a(b.vertices,c.vertices,b.axes),h.overlap<=0)return k.collided=!1,k;if(i=a(c.vertices,b.vertices,c.axes),i.overlap<=0)return k.collided=!1,k;h.overlap0&&(k.normal=e.neg(k.normal)),k.tangent=e.perp(k.normal),k.penetration={x:k.normal.x*k.depth,y:k.normal.y*k.depth};var t=f(b,c,k.normal),u=k.supports||[];if(u.length=0,d.contains(b.vertices,t[0])&&u.push(t[0]),d.contains(b.vertices,t[1])&&u.push(t[1]),u.length<2){var v=f(c,b,e.neg(k.normal));d.contains(c.vertices,v[0])&&u.push(v[0]),u.length<2&&d.contains(c.vertices,v[1])&&u.push(v[1])}return u.length<1&&(u=[t[0]]),k.supports=u,k};var a=function(a,c,d){for(var f,g,h=e._temp[0],i=e._temp[1],j={overlap:Number.MAX_VALUE},k=0;k=f)return j.overlap=f,j;ff?f=h:d>h&&(d=h)}a.min=d,a.max=f},f=function(a,b,c){for(var d,f,g,h,i=Number.MAX_VALUE,j=e._temp[0],k=b.vertices,l=a.position,m=0;md&&(i=d,g=f);var n=g.index-1>=0?g.index-1:k.length-1;f=k[n],j.x=f.x-l.x,j.y=f.y-l.y,i=-e.dot(c,j),h=f;var o=(g.index+1)%k.length;return f=k[o],j.x=f.x-l.x,j.y=f.y-l.y,d=-e.dot(c,j),i>d&&(h=f),[g,h]}}()},{"../geometry/Vector":26,"../geometry/Vertices":27}],12:[function(a,b){var c={};b.exports=c;var d=a("../geometry/Vertices"),e=a("../geometry/Vector"),f=a("../core/Sleeping"),g=a("../geometry/Bounds"),h=a("../geometry/Axes"),i=a("../core/Common");!function(){var a=1e-6,b=.001;c.create=function(b){var c=b;c.bodyA&&!c.pointA&&(c.pointA={x:0,y:0}),c.bodyB&&!c.pointB&&(c.pointB={x:0,y:0});var d=c.bodyA?e.add(c.bodyA.position,c.pointA):c.pointA,f=c.bodyB?e.add(c.bodyB.position,c.pointB):c.pointB,g=e.magnitude(e.sub(d,f));c.length=c.length||g||a;var h={visible:!0,lineWidth:2,strokeStyle:"#666"};return c.render=i.extend(h,c.render),c.id=c.id||i.nextId(),c.label=c.label||"Constraint",c.type="constraint",c.stiffness=c.stiffness||1,c.angularStiffness=c.angularStiffness||0,c.angleA=c.bodyA?c.bodyA.angle:c.angleA,c.angleB=c.bodyB?c.bodyB.angle:c.angleB,c},c.solveAll=function(a,b){for(var d=0;d0&&(B=0);var C,D={x:q.x*B,y:q.y*B};g&&!g.isStatic&&(C=e.cross(u,D)*g.inverseInertia*(1-c.angularStiffness),f.set(g,!1),C=i.clamp(C,-.01,.01),g.constraintImpulse.x-=r.x,g.constraintImpulse.y-=r.y,g.constraintImpulse.angle+=C,g.position.x-=r.x,g.position.y-=r.y,g.angle+=C),h&&!h.isStatic&&(C=e.cross(v,D)*h.inverseInertia*(1-c.angularStiffness),f.set(h,!1),C=i.clamp(C,-.01,.01),h.constraintImpulse.x+=r.x,h.constraintImpulse.y+=r.y,h.constraintImpulse.angle-=C,h.position.x+=r.x,h.position.y+=r.y,h.angle-=C)}}},c.postSolveAll=function(a){for(var b=0;b0&&(j.position.x+=f.x,j.position.y+=f.y),0!==f.angle&&(d.rotate(j.vertices,f.angle,c.position),h.rotate(j.axes,f.angle),i>0&&e.rotateAbout(j.position,f.angle,c.position,j.position)),g.update(j.bounds,j.vertices)}f.angle=0,f.x=0,f.y=0}}}()},{"../core/Common":14,"../core/Sleeping":20,"../geometry/Axes":23,"../geometry/Bounds":24,"../geometry/Vector":26,"../geometry/Vertices":27}],13:[function(a,b){var c={};b.exports=c;var d=a("../geometry/Vertices"),e=a("../core/Sleeping"),f=a("../core/Mouse"),g=a("../core/Events"),h=a("../collision/Detector"),i=a("./Constraint"),j=a("../body/Composite"),k=a("../core/Common"),l=a("../geometry/Bounds");!function(){c.create=function(b,d){var e=(b?b.mouse:null)||(d?d.mouse:null);!e&&b&&b.render&&b.render.canvas?e=f.create(b.render.canvas):(e=f.create(),k.log("MouseConstraint.create: options.mouse was undefined, engine.render.canvas was undefined, may not function as expected","warn"));var h=i.create({label:"Mouse Constraint",pointA:e.position,pointB:{x:0,y:0},length:.01,stiffness:.1,angularStiffness:1,render:{strokeStyle:"#90EE90",lineWidth:3}}),l={type:"mouseConstraint",mouse:e,body:null,constraint:h,collisionFilter:{category:1,mask:4294967295,group:0}},m=k.extend(l,d);return g.on(b,"tick",function(){var d=j.allBodies(b.world);c.update(m,d),a(m)}),m},c.update=function(a,b){var c=a.mouse,f=a.constraint,i=a.body;if(0===c.button){if(f.bodyB)e.set(f.bodyB,!1),f.pointA=c.position;else for(var j=0;j1?1:0;k>16)+d,f=(c>>8&255)+d,g=(255&c)+d;return"#"+(16777216+65536*(255>e?1>e?0:e:255)+256*(255>f?1>f?0:f:255)+(255>g?1>g?0:g:255)).toString(16).slice(1)},c.shuffle=function(a){for(var b=a.length-1;b>0;b--){var d=Math.floor(c.random()*(b+1)),e=a[b];a[b]=a[d],a[d]=e}return a},c.choose=function(a){return a[Math.floor(c.random()*a.length)]},c.isElement=function(a){try{return a instanceof HTMLElement}catch(b){return"object"==typeof a&&1===a.nodeType&&"object"==typeof a.style&&"object"==typeof a.ownerDocument}},c.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)},c.clamp=function(a,b,c){return b>a?b:a>c?c:a},c.sign=function(a){return 0>a?-1:1},c.now=function(){var a=window.performance||{};return a.now=function(){return a.now||a.webkitNow||a.msNow||a.oNow||a.mozNow||function(){return+new Date}}(),a.now()},c.random=function(b,c){return b="undefined"!=typeof b?b:0,c="undefined"!=typeof c?c:1,b+a()*(c-b)},c.colorToNumber=function(a){return a=a.replace("#",""),3==a.length&&(a=a.charAt(0)+a.charAt(0)+a.charAt(1)+a.charAt(1)+a.charAt(2)+a.charAt(2)),parseInt(a,16) +},c.log=function(a,b){if(console&&console.log&&console.warn)switch(b){case"warn":console.warn("Matter.js:",a);break;case"error":console.log("Matter.js:",a)}},c.nextId=function(){return c._nextId++},c.indexOf=function(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0;c0&&j.trigger(c,"collisionStart",{pairs:v.collisionStart}),f.preSolvePosition(v.list),i=0;i0&&j.trigger(c,"collisionActive",{pairs:v.collisionActive}),v.collisionEnd.length>0&&j.trigger(c,"collisionEnd",{pairs:v.collisionEnd}),a(s),m.isModified&&k.setModified(m,!1,!1,!0),j.trigger(c,"afterUpdate",r),c},c.merge=function(a,b){if(m.extend(a,b),b.world){a.world=b.world,c.clear(a);for(var d=k.allBodies(a.world),f=0;fa.deltaMax?a.deltaMax:f,h=f/a.delta,a.delta=f),0!==a.timeScalePrev&&(h*=g.timeScale/a.timeScalePrev),0===g.timeScale&&(h=0),a.timeScalePrev=g.timeScale,a.correction=h,a.frameCounter+=1,c-a.counterTimestamp>=1e3&&(a.fps=a.frameCounter*((c-a.counterTimestamp)/1e3),a.counterTimestamp=c,a.frameCounter=0),d.trigger(a,"tick",i),d.trigger(b,"tick",i),b.world.isModified&&b.render&&b.render.controller&&b.render.controller.clear&&b.render.controller.clear(b.render),d.trigger(a,"beforeUpdate",i),e.update(b,f,h),d.trigger(a,"afterUpdate",i),b.render&&b.render.controller&&(d.trigger(a,"beforeRender",i),d.trigger(b,"beforeRender",i),b.render.controller.world(b),d.trigger(a,"afterRender",i),d.trigger(b,"afterRender",i)),d.trigger(a,"afterTick",i),d.trigger(b,"afterTick",i)},c.stop=function(a){b(a.frameRequestId)}}()},{"./Common":14,"./Engine":15,"./Events":16}],20:[function(a,b){var c={};b.exports=c;var d=a("./Events");!function(){c._motionWakeThreshold=.18,c._motionSleepThreshold=.08,c._minBias=.9,c.update=function(a,b){for(var d=b*b*b,e=0;e0&&f.motion=f.sleepThreshold&&c.set(f,!0)):f.sleepCounter>0&&(f.sleepCounter-=1)}else c.set(f,!1)}},c.afterCollisions=function(a,b){for(var d=b*b*b,e=0;ec._motionWakeThreshold*d&&c.set(j,!1)}}}},c.set=function(a,b){var c=a.isSleeping;b?(a.isSleeping=!0,a.sleepCounter=a.sleepThreshold,a.positionImpulse.x=0,a.positionImpulse.y=0,a.positionPrev.x=a.position.x,a.positionPrev.y=a.position.y,a.anglePrev=a.angle,a.speed=0,a.angularSpeed=0,a.motion=0,c||d.trigger(a,"sleepStart")):(a.isSleeping=!1,a.sleepCounter=0,c&&d.trigger(a,"sleepEnd"))}}()},{"./Events":16}],21:[function(a,b){var c={};b.exports=c;var d=a("../geometry/Vertices"),e=a("../core/Common"),f=a("../body/Body"),g=a("../geometry/Bounds"),h=a("../geometry/Vector");!function(){c.rectangle=function(a,b,c,g,h){h=h||{};var i={label:"Rectangle Body",position:{x:a,y:b},vertices:d.fromPath("L 0 0 L "+c+" 0 L "+c+" "+g+" L 0 "+g)};if(h.chamfer){var j=h.chamfer;i.vertices=d.chamfer(i.vertices,j.radius,j.quality,j.qualityMin,j.qualityMax),delete h.chamfer}return f.create(e.extend({},i,h))},c.trapezoid=function(a,b,c,g,h,i){i=i||{},h*=.5;var j=(1-2*h)*c,k=c*h,l=k+j,m=l+k,n={label:"Trapezoid Body",position:{x:a,y:b},vertices:d.fromPath("L 0 0 L "+k+" "+-g+" L "+l+" "+-g+" L "+m+" 0")};if(i.chamfer){var o=i.chamfer;n.vertices=d.chamfer(n.vertices,o.radius,o.quality,o.qualityMin,o.qualityMax),delete i.chamfer}return f.create(e.extend({},n,i))},c.circle=function(a,b,d,e,f){e=e||{},e.label="Circle Body",f=f||25;var g=Math.ceil(Math.max(10,Math.min(f,d)));return g%2===1&&(g+=1),e.circleRadius=d,c.polygon(a,b,g,d,e)},c.polygon=function(a,b,g,h,i){if(i=i||{},3>g)return c.circle(a,b,h,i);for(var j=2*Math.PI/g,k="",l=.5*j,m=0;g>m;m+=1){var n=l+m*j,o=Math.cos(n)*h,p=Math.sin(n)*h;k+="L "+o.toFixed(3)+" "+p.toFixed(3)+" "}var q={label:"Polygon Body",position:{x:a,y:b},vertices:d.fromPath(k)};if(i.chamfer){var r=i.chamfer;q.vertices=d.chamfer(q.vertices,r.radius,r.quality,r.qualityMin,r.qualityMax),delete i.chamfer}return f.create(e.extend({},q,i))},c.fromVertices=function(a,b,c,i,j,k,l){var m,n,o,p,q,r,s,t,u;for(i=i||{},n=[],j="undefined"!=typeof j?j:!1,k="undefined"!=typeof k?k:.01,l="undefined"!=typeof l?l:10,window.decomp||e.log("Bodies.fromVertices: poly-decomp.js required. Could not decompose vertices. Fallback to convex hull.","warn"),e.isArray(c[0])||(c=[c]),t=0;t0&&d.area(y)E&&z>F&&(C[s].isInternal=!0,D[u].isInternal=!0)}}}}}return n.length>1?(m=f.create(e.extend({parts:n.slice(0)},i)),f.setPosition(m,{x:a,y:b}),m):n[0]}}()},{"../body/Body":1,"../core/Common":14,"../geometry/Bounds":24,"../geometry/Vector":26,"../geometry/Vertices":27}],22:[function(a,b){var c={};b.exports=c;var d=a("../body/Composite"),e=a("../constraint/Constraint"),f=a("../core/Common"),g=a("../body/Body"),h=a("./Bodies");!function(){c.stack=function(a,b,c,e,f,h,i){for(var j,k=d.create({label:"Stack"}),l=a,m=b,n=0,o=0;e>o;o++){for(var p=0,q=0;c>q;q++){var r=i(l,m,q,o,j,n);if(r){var s=r.bounds.max.y-r.bounds.min.y,t=r.bounds.max.x-r.bounds.min.x;s>p&&(p=s),g.translate(r,{x:.5*t,y:.5*s}),l=r.bounds.max.x+f,d.addBody(k,r),j=r,n+=1}else l+=f}m+=p+h,l=a}return k},c.chain=function(a,b,c,g,h,i){for(var j=a.bodies,k=1;ki;i++){for(j=1;b>j;j++)k=n[j-1+i*b],l=n[j+i*b],d.addConstraint(a,e.create(f.extend({bodyA:k,bodyB:l},h)));if(i>0)for(j=0;b>j;j++)k=n[j+(i-1)*b],l=n[j+i*b],d.addConstraint(a,e.create(f.extend({bodyA:k,bodyB:l},h))),g&&j>0&&(m=n[j-1+(i-1)*b],d.addConstraint(a,e.create(f.extend({bodyA:m,bodyB:l},h)))),g&&b-1>j&&(m=n[j+1+(i-1)*b],d.addConstraint(a,e.create(f.extend({bodyA:m,bodyB:l},h))))}return a.label+=" Mesh",a},c.pyramid=function(a,b,d,e,f,h,i){return c.stack(a,b,d,e,f,h,function(b,c,h,j,k,l){var m=Math.min(e,Math.ceil(d/2)),n=k?k.bounds.max.x-k.bounds.min.x:0;if(!(j>m)){j=m-j;var o=j,p=d-1-j;if(!(o>h||h>p)){1===l&&g.translate(k,{x:(h+(d%2===1?1:-1))*n,y:0});var q=k?h*n:0;return i(a+q+h*f,c,h,j,k,l)}}})},c.newtonsCradle=function(a,b,c,f,g){for(var i=d.create({label:"Newtons Cradle"}),j=0;c>j;j++){var k=1.9,l=h.circle(a+j*f*k,b+g,f,{inertia:99999,restitution:1,friction:0,frictionAir:1e-4,slop:.01}),m=e.create({pointA:{x:a+j*f*k,y:b},bodyB:l});d.addBody(i,l),d.addConstraint(i,m)}return i},c.car=function(a,b,c,f,i){var j=g.nextGroup(!0),k=-20,l=.5*-c+k,m=.5*c-k,n=0,o=d.create({label:"Car"}),p=h.trapezoid(a,b,c,f,.3,{collisionFilter:{group:j},friction:.01,chamfer:{radius:10}}),q=h.circle(a+l,b+n,i,{collisionFilter:{group:j},restitution:.5,friction:.9,frictionStatic:10,slop:.5,density:.01}),r=h.circle(a+m,b+n,i,{collisionFilter:{group:j},restitution:.5,friction:.9,frictionStatic:10,slop:.5,density:.01}),s=e.create({bodyA:p,pointA:{x:l,y:n},bodyB:q,stiffness:.5}),t=e.create({bodyA:p,pointA:{x:m,y:n},bodyB:r,stiffness:.5});return d.addBody(o,p),d.addBody(o,q),d.addBody(o,r),d.addConstraint(o,s),d.addConstraint(o,t),o},c.softBody=function(a,b,d,e,g,i,j,k,l,m){l=f.extend({inertia:1/0},l),m=f.extend({stiffness:.4},m);var n=c.stack(a,b,d,e,g,i,function(a,b){return h.circle(a,b,k,l)});return c.mesh(n,d,e,j,m),n.label="Soft Body",n}}()},{"../body/Body":1,"../body/Composite":2,"../constraint/Constraint":12,"../core/Common":14,"./Bodies":21}],23:[function(a,b){var c={};b.exports=c;var d=a("../geometry/Vector"),e=a("../core/Common");!function(){c.fromVertices=function(a){for(var b={},c=0;ca.max.x&&(a.max.x=e.x),e.xa.max.y&&(a.max.y=e.y),e.y0?a.max.x+=c.x:a.min.x+=c.x,c.y>0?a.max.y+=c.y:a.min.y+=c.y)},c.contains=function(a,b){return b.x>=a.min.x&&b.x<=a.max.x&&b.y>=a.min.y&&b.y<=a.max.y},c.overlaps=function(a,b){return a.min.x<=b.max.x&&a.max.x>=b.min.x&&a.max.y>=b.min.y&&a.min.y<=b.max.y},c.translate=function(a,b){a.min.x+=b.x,a.max.x+=b.x,a.min.y+=b.y,a.max.y+=b.y},c.shift=function(a,b){var c=a.max.x-a.min.x,d=a.max.y-a.min.y;a.min.x=b.x,a.max.x=b.x+c,a.min.y=b.y,a.max.y=b.y+d}}()},{}],25:[function(a,b){var c={};b.exports=c;a("../geometry/Bounds");!function(){c.pathToVertices=function(b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p=[],q=0,r=0,s=0;c=c||15;var t=function(a,b,c){var d=c%2===1&&c>1;if(!l||a!=l.x||b!=l.y){l&&d?(n=l.x,o=l.y):(n=0,o=0);var e={x:n+a,y:o+b};(d||!l)&&(l=e),p.push(e),r=n+a,s=o+b}},u=function(a){var b=a.pathSegTypeAsLetter.toUpperCase();if("Z"!==b){switch(b){case"M":case"L":case"T":case"C":case"S":case"Q":r=a.x,s=a.y;break;case"H":r=a.x;break;case"V":s=a.y}t(r,s,a.pathSegType)}};for(a(b),f=b.getTotalLength(),i=[],d=0;dq;){if(m=b.getPathSegAtLength(q),h=i[m],h!=k){for(;j.length&&j[0]!=h;)u(j.shift());k=h}switch(h.pathSegTypeAsLetter.toUpperCase()){case"C":case"T":case"S":case"Q":case"A":g=b.getPointAtLength(q),t(g.x,g.y,0)}q+=c}for(d=0,e=j.length;e>d;++d)u(j[d]);return p};var a=function(a){for(var b,c,d,e,f,g,h=a.pathSegList,i=0,j=0,k=h.numberOfItems,l=0;k>l;++l){var m=h.getItem(l),n=m.pathSegTypeAsLetter;if(/[MLHVCSQTA]/.test(n))"x"in m&&(i=m.x),"y"in m&&(j=m.y);else switch("x1"in m&&(d=i+m.x1),"x2"in m&&(f=i+m.x2),"y1"in m&&(e=j+m.y1),"y2"in m&&(g=j+m.y2),"x"in m&&(i+=m.x),"y"in m&&(j+=m.y),n){case"m":h.replaceItem(a.createSVGPathSegMovetoAbs(i,j),l);break;case"l":h.replaceItem(a.createSVGPathSegLinetoAbs(i,j),l);break;case"h":h.replaceItem(a.createSVGPathSegLinetoHorizontalAbs(i),l);break;case"v":h.replaceItem(a.createSVGPathSegLinetoVerticalAbs(j),l);break;case"c":h.replaceItem(a.createSVGPathSegCurvetoCubicAbs(i,j,d,e,f,g),l);break;case"s":h.replaceItem(a.createSVGPathSegCurvetoCubicSmoothAbs(i,j,f,g),l);break;case"q":h.replaceItem(a.createSVGPathSegCurvetoQuadraticAbs(i,j,d,e),l);break;case"t":h.replaceItem(a.createSVGPathSegCurvetoQuadraticSmoothAbs(i,j),l);break;case"a":h.replaceItem(a.createSVGPathSegArcAbs(i,j,m.r1,m.r2,m.angle,m.largeArcFlag,m.sweepFlag),l);break;case"z":case"Z":i=b,j=c}("M"==n||"m"==n)&&(b=i,c=j)}}}()},{"../geometry/Bounds":24}],26:[function(a,b){var c={};b.exports=c,function(){c.create=function(a,b){return{x:a||0,y:b||0}},c.clone=function(a){return{x:a.x,y:a.y}},c.magnitude=function(a){return Math.sqrt(a.x*a.x+a.y*a.y)},c.magnitudeSquared=function(a){return a.x*a.x+a.y*a.y},c.rotate=function(a,b){var c=Math.cos(b),d=Math.sin(b);return{x:a.x*c-a.y*d,y:a.x*d+a.y*c}},c.rotateAbout=function(a,b,c,d){var e=Math.cos(b),f=Math.sin(b);d||(d={});var g=c.x+((a.x-c.x)*e-(a.y-c.y)*f);return d.y=c.y+((a.x-c.x)*f+(a.y-c.y)*e),d.x=g,d},c.normalise=function(a){var b=c.magnitude(a);return 0===b?{x:0,y:0}:{x:a.x/b,y:a.y/b}},c.dot=function(a,b){return a.x*b.x+a.y*b.y},c.cross=function(a,b){return a.x*b.y-a.y*b.x},c.cross3=function(a,b,c){return(b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x)},c.add=function(a,b,c){return c||(c={}),c.x=a.x+b.x,c.y=a.y+b.y,c},c.sub=function(a,b,c){return c||(c={}),c.x=a.x-b.x,c.y=a.y-b.y,c},c.mult=function(a,b){return{x:a.x*b,y:a.y*b}},c.div=function(a,b){return{x:a.x/b,y:a.y/b}},c.perp=function(a,b){return b=b===!0?-1:1,{x:b*-a.y,y:b*a.x}},c.neg=function(a){return{x:-a.x,y:-a.y}},c.angle=function(a,b){return Math.atan2(b.y-a.y,b.x-a.x)},c._temp=[c.create(),c.create(),c.create(),c.create(),c.create(),c.create()]}()},{}],27:[function(a,b){var c={};b.exports=c;var d=a("../geometry/Vector"),e=a("../core/Common");!function(){c.create=function(a,b){for(var c=[],d=0;d0)return!1}return!0},c.scale=function(a,b,e,f){if(1===b&&1===e)return a;f=f||c.centre(a);for(var g,h,i=0;i=0?i-1:a.length-1],k=a[i],l=a[(i+1)%a.length],m=b[iw;w++)h.push(d.add(d.rotate(q,v*w),s))}else h.push(k)}return h},c.clockwiseSort=function(a){var b=c.mean(a);return a.sort(function(a,c){return d.angle(b,a)-d.angle(b,c)}),a},c.isConvex=function(a){var b,c,d,e,f=0,g=a.length;if(3>g)return null;for(b=0;g>b;b++)if(c=(b+1)%g,d=(b+2)%g,e=(a[c].x-a[b].x)*(a[d].y-a[c].y),e-=(a[c].y-a[b].y)*(a[d].x-a[c].x),0>e?f|=1:e>0&&(f|=2),3===f)return!1;return 0!==f?!0:null},c.hull=function(a){var b,c,e=[],f=[];for(a=a.slice(0),a.sort(function(a,b){var c=a.x-b.x;return 0!==c?c:a.y-b.y}),c=0;c=2&&d.cross3(f[f.length-2],f[f.length-1],b)<=0;)f.pop();f.push(b)}for(c=a.length-1;c>=0;c--){for(b=a[c];e.length>=2&&d.cross3(e[e.length-2],e[e.length-1],b)<=0;)e.pop();e.push(b)}return e.pop(),f.pop(),e.concat(f)}}()},{"../core/Common":14,"../geometry/Vector":26}],28:[function(a,b){var c=b.exports={};c.Body=a("../body/Body"),c.Composite=a("../body/Composite"),c.World=a("../body/World"),c.Contact=a("../collision/Contact"),c.Detector=a("../collision/Detector"),c.Grid=a("../collision/Grid"),c.Pairs=a("../collision/Pairs"),c.Pair=a("../collision/Pair"),c.Query=a("../collision/Query"),c.Resolver=a("../collision/Resolver"),c.SAT=a("../collision/SAT"),c.Constraint=a("../constraint/Constraint"),c.MouseConstraint=a("../constraint/MouseConstraint"),c.Common=a("../core/Common"),c.Engine=a("../core/Engine"),c.Events=a("../core/Events"),c.Mouse=a("../core/Mouse"),c.Runner=a("../core/Runner"),c.Sleeping=a("../core/Sleeping"),c.Bodies=a("../factory/Bodies"),c.Composites=a("../factory/Composites"),c.Axes=a("../geometry/Axes"),c.Bounds=a("../geometry/Bounds"),c.Svg=a("../geometry/Svg"),c.Vector=a("../geometry/Vector"),c.Vertices=a("../geometry/Vertices"),c.Render=a("../render/Render"),c.RenderPixi=a("../render/RenderPixi"),c.World.add=c.Composite.add,c.World.remove=c.Composite.remove,c.World.addComposite=c.Composite.addComposite,c.World.addBody=c.Composite.addBody,c.World.addConstraint=c.Composite.addConstraint,c.World.clear=c.Composite.clear,c.Engine.run=c.Runner.run},{"../body/Body":1,"../body/Composite":2,"../body/World":3,"../collision/Contact":4,"../collision/Detector":5,"../collision/Grid":6,"../collision/Pair":7,"../collision/Pairs":8,"../collision/Query":9,"../collision/Resolver":10,"../collision/SAT":11,"../constraint/Constraint":12,"../constraint/MouseConstraint":13,"../core/Common":14,"../core/Engine":15,"../core/Events":16,"../core/Metrics":17,"../core/Mouse":18,"../core/Runner":19,"../core/Sleeping":20,"../factory/Bodies":21,"../factory/Composites":22,"../geometry/Axes":23,"../geometry/Bounds":24,"../geometry/Svg":25,"../geometry/Vector":26,"../geometry/Vertices":27,"../render/Render":29,"../render/RenderPixi":30}],29:[function(a,b){var c={};b.exports=c;var d=a("../core/Common"),e=a("../body/Composite"),f=a("../geometry/Bounds"),g=a("../core/Events"),h=a("../collision/Grid");!function(){c.create=function(b){var e={controller:c,element:null,canvas:null,options:{width:800,height:600,pixelRatio:1,background:"#fafafa",wireframeBackground:"#222",hasBounds:!1,enabled:!0,wireframes:!0,showSleeping:!0,showDebug:!1,showBroadphase:!1,showBounds:!1,showVelocity:!1,showCollisions:!1,showSeparations:!1,showAxes:!1,showPositions:!1,showAngleIndicator:!1,showIds:!1,showShadows:!1,showVertexNumbers:!1,showConvexHulls:!1,showInternalEdges:!1}},f=d.extend(e,b);return f.canvas=f.canvas||a(f.options.width,f.options.height),f.context=f.canvas.getContext("2d"),f.textures={},f.bounds=f.bounds||{min:{x:0,y:0},max:{x:f.options.width,y:f.options.height}},1!==f.options.pixelRatio&&c.setPixelRatio(f,f.options.pixelRatio),d.isElement(f.element)?f.element.appendChild(f.canvas):d.log("Render.create: options.element was undefined, render.canvas was created but not appended","warn"),f},c.setPixelRatio=function(a,c){var d=a.options,e=a.canvas;"auto"===c&&(c=b(e)),d.pixelRatio=c,e.setAttribute("data-pixel-ratio",c),e.width=d.width*c,e.height=d.height*c,e.style.width=d.width+"px",e.style.height=d.height+"px",a.context.scale(c,c)},c.world=function(a){var b,d=a.render,i=a.world,k=d.canvas,l=d.context,m=d.options,n=e.allBodies(i),o=e.allConstraints(i),p=m.wireframes?m.wireframeBackground:m.background,q=[],r=[],s={timestamp:a.timing.timestamp};if(g.trigger(d,"beforeRender",s),d.currentBackground!==p&&j(d,p),l.globalCompositeOperation="source-in",l.fillStyle="transparent",l.fillRect(0,0,k.width,k.height),l.globalCompositeOperation="source-over",m.hasBounds){var t=d.bounds.max.x-d.bounds.min.x,u=d.bounds.max.y-d.bounds.min.y,v=t/m.width,w=u/m.height;for(b=0;b=500){var i="";i+="fps: "+Math.round(a.timing.fps)+h,f.debugString=i,f.debugTimestamp=a.timing.timestamp}if(f.debugString){c.font="12px Arial",c.fillStyle=g.wireframes?"rgba(255,255,255,0.5)":"rgba(0,0,0,0.5)";for(var j=f.debugString.split("\n"),k=0;k1?1:0;h1?1:0;h1?1:0;f1?1:0;j1?1:0;f1?1:0;f1?1:0;e0)){var l=d.activeContacts[0].vertex.x,m=d.activeContacts[0].vertex.y;2===d.activeContacts.length&&(l=(d.activeContacts[0].vertex.x+d.activeContacts[1].vertex.x)/2,m=(d.activeContacts[0].vertex.y+d.activeContacts[1].vertex.y)/2),e.bodyB===e.supports[0].body||e.bodyA.isStatic===!0?h.moveTo(l-8*e.normal.x,m-8*e.normal.y):h.moveTo(l+8*e.normal.x,m+8*e.normal.y),h.lineTo(l,m)}h.strokeStyle=i.wireframes?"rgba(255,165,0,0.7)":"orange",h.lineWidth=1,h.stroke()},c.separations=function(a,b,c){var d,e,f,g,h,i=c,j=a.render.options;for(i.beginPath(),h=0;h1?1:0;l