Difference between revisions of "User:Tark/Sandbox/Page.js"

From Team Fortress Wiki
Jump to: navigation, search
m
m (Replaced content with "// The heck")
(Tag: Replaced)
 
Line 1: Line 1:
if (mw.config.get("wgUserName")) {(function(){const F=document.createElement("link").relList;if(F&&F.supports&&F.supports("modulepreload"))return;for(const m of document.querySelectorAll('link[rel="modulepreload"]'))E(m);new MutationObserver(m=>{for(const e of m)if(e.type==="childList")for(const l of e.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&E(l)}).observe(document,{childList:!0,subtree:!0});function I(m){const e={};return m.integrity&&(e.integrity=m.integrity),m.referrerPolicy&&(e.referrerPolicy=m.referrerPolicy),m.crossOrigin==="use-credentials"?e.credentials="include":m.crossOrigin==="anonymous"?e.credentials="omit":e.credentials="same-origin",e}function E(m){if(m.ep)return;m.ep=!0;const e=I(m);fetch(m.href,e)}})();var _=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},oe={exports:{}};/*!
+
// The heck
* matter-js 0.19.0 by @liabru
 
* http://brm.io/matter-js/
 
* License MIT
 
*
 
* The MIT License (MIT)
 
*
 
* Copyright (c) Liam Brummitt and contributors.
 
*
 
* Permission is hereby granted, free of charge, to any person obtaining a copy
 
* of this software and associated documentation files (the "Software"), to deal
 
* in the Software without restriction, including without limitation the rights
 
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 
* copies of the Software, and to permit persons to whom the Software is
 
* furnished to do so, subject to the following conditions:
 
*
 
* The above copyright notice and this permission notice shall be included in
 
* all copies or substantial portions of the Software.
 
*
 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 
* THE SOFTWARE.
 
*/(function(X,F){(function(E,m){X.exports=m()})(_,function(){return function(I){var E={};function m(e){if(E[e])return E[e].exports;var l=E[e]={i:e,l:!1,exports:{}};return I[e].call(l.exports,l,l.exports,m),l.l=!0,l.exports}return m.m=I,m.c=E,m.d=function(e,l,r){m.o(e,l)||Object.defineProperty(e,l,{enumerable:!0,get:r})},m.r=function(e){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},m.t=function(e,l){if(l&1&&(e=m(e)),l&8||l&4&&typeof e=="object"&&e&&e.__esModule)return e;var r=Object.create(null);if(m.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),l&2&&typeof e!="string")for(var a in e)m.d(r,a,(function(c){return e[c]}).bind(null,a));return r},m.n=function(e){var l=e&&e.__esModule?function(){return e.default}:function(){return e};return m.d(l,"a",l),l},m.o=function(e,l){return Object.prototype.hasOwnProperty.call(e,l)},m.p="",m(m.s=20)}([function(I,E){var m={};I.exports=m,function(){m._baseDelta=1e3/60,m._nextId=0,m._seed=0,m._nowStartTime=+new Date,m._warnedOnce={},m._decomp=null,m.extend=function(l,r){var a,c;typeof r=="boolean"?(a=2,c=r):(a=1,c=!0);for(var o=a;o<arguments.length;o++){var u=arguments[o];if(u)for(var s in u)c&&u[s]&&u[s].constructor===Object&&(!l[s]||l[s].constructor===Object)?(l[s]=l[s]||{},m.extend(l[s],c,u[s])):l[s]=u[s]}return l},m.clone=function(l,r){return m.extend({},r,l)},m.keys=function(l){if(Object.keys)return Object.keys(l);var r=[];for(var a in l)r.push(a);return r},m.values=function(l){var r=[];if(Object.keys){for(var a=Object.keys(l),c=0;c<a.length;c++)r.push(l[a[c]]);return r}for(var o in l)r.push(l[o]);return r},m.get=function(l,r,a,c){r=r.split(".").slice(a,c);for(var o=0;o<r.length;o+=1)l=l[r[o]];return l},m.set=function(l,r,a,c,o){var u=r.split(".").slice(c,o);return m.get(l,r,0,-1)[u[u.length-1]]=a,a},m.shuffle=function(l){for(var r=l.length-1;r>0;r--){var a=Math.floor(m.random()*(r+1)),c=l[r];l[r]=l[a],l[a]=c}return l},m.choose=function(l){return l[Math.floor(m.random()*l.length)]},m.isElement=function(l){return typeof HTMLElement<"u"?l instanceof HTMLElement:!!(l&&l.nodeType&&l.nodeName)},m.isArray=function(l){return Object.prototype.toString.call(l)==="[object Array]"},m.isFunction=function(l){return typeof l=="function"},m.isPlainObject=function(l){return typeof l=="object"&&l.constructor===Object},m.isString=function(l){return toString.call(l)==="[object String]"},m.clamp=function(l,r,a){return l<r?r:l>a?a:l},m.sign=function(l){return l<0?-1:1},m.now=function(){if(typeof window<"u"&&window.performance){if(window.performance.now)return window.performance.now();if(window.performance.webkitNow)return window.performance.webkitNow()}return Date.now?Date.now():new Date-m._nowStartTime},m.random=function(l,r){return l=typeof l<"u"?l:0,r=typeof r<"u"?r:1,l+e()*(r-l)};var e=function(){return m._seed=(m._seed*9301+49297)%233280,m._seed/233280};m.colorToNumber=function(l){return l=l.replace("#",""),l.length==3&&(l=l.charAt(0)+l.charAt(0)+l.charAt(1)+l.charAt(1)+l.charAt(2)+l.charAt(2)),parseInt(l,16)},m.logLevel=1,m.log=function(){console&&m.logLevel>0&&m.logLevel<=3&&console.log.apply(console,["matter-js:"].concat(Array.prototype.slice.call(arguments)))},m.info=function(){console&&m.logLevel>0&&m.logLevel<=2&&console.info.apply(console,["matter-js:"].concat(Array.prototype.slice.call(arguments)))},m.warn=function(){console&&m.logLevel>0&&m.logLevel<=3&&console.warn.apply(console,["matter-js:"].concat(Array.prototype.slice.call(arguments)))},m.warnOnce=function(){var l=Array.prototype.slice.call(arguments).join(" ");m._warnedOnce[l]||(m.warn(l),m._warnedOnce[l]=!0)},m.deprecated=function(l,r,a){l[r]=m.chain(function(){m.warnOnce("🔅 deprecated 🔅",a)},l[r])},m.nextId=function(){return m._nextId++},m.indexOf=function(l,r){if(l.indexOf)return l.indexOf(r);for(var a=0;a<l.length;a++)if(l[a]===r)return a;return-1},m.map=function(l,r){if(l.map)return l.map(r);for(var a=[],c=0;c<l.length;c+=1)a.push(r(l[c]));return a},m.topologicalSort=function(l){var r=[],a=[],c=[];for(var o in l)!a[o]&&!c[o]&&m._topologicalSort(o,a,c,l,r);return r},m._topologicalSort=function(l,r,a,c,o){var u=c[l]||[];a[l]=!0;for(var s=0;s<u.length;s+=1){var t=u[s];a[t]||r[t]||m._topologicalSort(t,r,a,c,o)}a[l]=!1,r[l]=!0,o.push(l)},m.chain=function(){for(var l=[],r=0;r<arguments.length;r+=1){var a=arguments[r];a._chained?l.push.apply(l,a._chained):l.push(a)}var c=function(){for(var o,u=new Array(arguments.length),s=0,t=arguments.length;s<t;s++)u[s]=arguments[s];for(s=0;s<l.length;s+=1){var i=l[s].apply(o,u);typeof i<"u"&&(o=i)}return o};return c._chained=l,c},m.chainPathBefore=function(l,r,a){return m.set(l,r,m.chain(a,m.get(l,r)))},m.chainPathAfter=function(l,r,a){return m.set(l,r,m.chain(m.get(l,r),a))},m.setDecomp=function(l){m._decomp=l},m.getDecomp=function(){var l=m._decomp;try{!l&&typeof window<"u"&&(l=window.decomp),!l&&typeof _<"u"&&(l=_.decomp)}catch{l=null}return l}}()},function(I,E){var m={};I.exports=m,function(){m.create=function(e){var l={min:{x:0,y:0},max:{x:0,y:0}};return e&&m.update(l,e),l},m.update=function(e,l,r){e.min.x=1/0,e.max.x=-1/0,e.min.y=1/0,e.max.y=-1/0;for(var a=0;a<l.length;a++){var c=l[a];c.x>e.max.x&&(e.max.x=c.x),c.x<e.min.x&&(e.min.x=c.x),c.y>e.max.y&&(e.max.y=c.y),c.y<e.min.y&&(e.min.y=c.y)}r&&(r.x>0?e.max.x+=r.x:e.min.x+=r.x,r.y>0?e.max.y+=r.y:e.min.y+=r.y)},m.contains=function(e,l){return l.x>=e.min.x&&l.x<=e.max.x&&l.y>=e.min.y&&l.y<=e.max.y},m.overlaps=function(e,l){return e.min.x<=l.max.x&&e.max.x>=l.min.x&&e.max.y>=l.min.y&&e.min.y<=l.max.y},m.translate=function(e,l){e.min.x+=l.x,e.max.x+=l.x,e.min.y+=l.y,e.max.y+=l.y},m.shift=function(e,l){var r=e.max.x-e.min.x,a=e.max.y-e.min.y;e.min.x=l.x,e.max.x=l.x+r,e.min.y=l.y,e.max.y=l.y+a}}()},function(I,E){var m={};I.exports=m,function(){m.create=function(e,l){return{x:e||0,y:l||0}},m.clone=function(e){return{x:e.x,y:e.y}},m.magnitude=function(e){return Math.sqrt(e.x*e.x+e.y*e.y)},m.magnitudeSquared=function(e){return e.x*e.x+e.y*e.y},m.rotate=function(e,l,r){var a=Math.cos(l),c=Math.sin(l);r||(r={});var o=e.x*a-e.y*c;return r.y=e.x*c+e.y*a,r.x=o,r},m.rotateAbout=function(e,l,r,a){var c=Math.cos(l),o=Math.sin(l);a||(a={});var u=r.x+((e.x-r.x)*c-(e.y-r.y)*o);return a.y=r.y+((e.x-r.x)*o+(e.y-r.y)*c),a.x=u,a},m.normalise=function(e){var l=m.magnitude(e);return l===0?{x:0,y:0}:{x:e.x/l,y:e.y/l}},m.dot=function(e,l){return e.x*l.x+e.y*l.y},m.cross=function(e,l){return e.x*l.y-e.y*l.x},m.cross3=function(e,l,r){return(l.x-e.x)*(r.y-e.y)-(l.y-e.y)*(r.x-e.x)},m.add=function(e,l,r){return r||(r={}),r.x=e.x+l.x,r.y=e.y+l.y,r},m.sub=function(e,l,r){return r||(r={}),r.x=e.x-l.x,r.y=e.y-l.y,r},m.mult=function(e,l){return{x:e.x*l,y:e.y*l}},m.div=function(e,l){return{x:e.x/l,y:e.y/l}},m.perp=function(e,l){return l=l===!0?-1:1,{x:l*-e.y,y:l*e.x}},m.neg=function(e){return{x:-e.x,y:-e.y}},m.angle=function(e,l){return Math.atan2(l.y-e.y,l.x-e.x)},m._temp=[m.create(),m.create(),m.create(),m.create(),m.create(),m.create()]}()},function(I,E,m){var e={};I.exports=e;var l=m(2),r=m(0);(function(){e.create=function(a,c){for(var o=[],u=0;u<a.length;u++){var s=a[u],t={x:s.x,y:s.y,index:u,body:c,isInternal:!1};o.push(t)}return o},e.fromPath=function(a,c){var o=/L?\s*([-\d.e]+)[\s,]*([-\d.e]+)*/ig,u=[];return a.replace(o,function(s,t,i){u.push({x:parseFloat(t),y:parseFloat(i)})}),e.create(u,c)},e.centre=function(a){for(var c=e.area(a,!0),o={x:0,y:0},u,s,t,i=0;i<a.length;i++)t=(i+1)%a.length,u=l.cross(a[i],a[t]),s=l.mult(l.add(a[i],a[t]),u),o=l.add(o,s);return l.div(o,6*c)},e.mean=function(a){for(var c={x:0,y:0},o=0;o<a.length;o++)c.x+=a[o].x,c.y+=a[o].y;return l.div(c,a.length)},e.area=function(a,c){for(var o=0,u=a.length-1,s=0;s<a.length;s++)o+=(a[u].x-a[s].x)*(a[u].y+a[s].y),u=s;return c?o/2:Math.abs(o)/2},e.inertia=function(a,c){for(var o=0,u=0,s=a,t,i,n=0;n<s.length;n++)i=(n+1)%s.length,t=Math.abs(l.cross(s[i],s[n])),o+=t*(l.dot(s[i],s[i])+l.dot(s[i],s[n])+l.dot(s[n],s[n])),u+=t;return c/6*(o/u)},e.translate=function(a,c,o){o=typeof o<"u"?o:1;var u=a.length,s=c.x*o,t=c.y*o,i;for(i=0;i<u;i++)a[i].x+=s,a[i].y+=t;return a},e.rotate=function(a,c,o){if(c!==0){var u=Math.cos(c),s=Math.sin(c),t=o.x,i=o.y,n=a.length,f,g,y,w;for(w=0;w<n;w++)f=a[w],g=f.x-t,y=f.y-i,f.x=t+(g*u-y*s),f.y=i+(g*s+y*u);return a}},e.contains=function(a,c){for(var o=c.x,u=c.y,s=a.length,t=a[s-1],i,n=0;n<s;n++){if(i=a[n],(o-t.x)*(i.y-t.y)+(u-t.y)*(t.x-i.x)>0)return!1;t=i}return!0},e.scale=function(a,c,o,u){if(c===1&&o===1)return a;u=u||e.centre(a);for(var s,t,i=0;i<a.length;i++)s=a[i],t=l.sub(s,u),a[i].x=u.x+t.x*c,a[i].y=u.y+t.y*o;return a},e.chamfer=function(a,c,o,u,s){typeof c=="number"?c=[c]:c=c||[8],o=typeof o<"u"?o:-1,u=u||2,s=s||14;for(var t=[],i=0;i<a.length;i++){var n=a[i-1>=0?i-1:a.length-1],f=a[i],g=a[(i+1)%a.length],y=c[i<c.length?i:c.length-1];if(y===0){t.push(f);continue}var w=l.normalise({x:f.y-n.y,y:n.x-f.x}),C=l.normalise({x:g.y-f.y,y:f.x-g.x}),v=Math.sqrt(2*Math.pow(y,2)),h=l.mult(r.clone(w),y),p=l.normalise(l.mult(l.add(w,C),.5)),d=l.sub(f,l.mult(p,v)),S=o;o===-1&&(S=Math.pow(y,.32)*1.75),S=r.clamp(S,u,s),S%2===1&&(S+=1);for(var x=Math.acos(l.dot(w,C)),M=x/S,P=0;P<S;P++)t.push(l.add(l.rotate(h,M*P),d))}return t},e.clockwiseSort=function(a){var c=e.mean(a);return a.sort(function(o,u){return l.angle(c,o)-l.angle(c,u)}),a},e.isConvex=function(a){var c=0,o=a.length,u,s,t,i;if(o<3)return null;for(u=0;u<o;u++)if(s=(u+1)%o,t=(u+2)%o,i=(a[s].x-a[u].x)*(a[t].y-a[s].y),i-=(a[s].y-a[u].y)*(a[t].x-a[s].x),i<0?c|=1:i>0&&(c|=2),c===3)return!1;return c!==0?!0:null},e.hull=function(a){var c=[],o=[],u,s;for(a=a.slice(0),a.sort(function(t,i){var n=t.x-i.x;return n!==0?n:t.y-i.y}),s=0;s<a.length;s+=1){for(u=a[s];o.length>=2&&l.cross3(o[o.length-2],o[o.length-1],u)<=0;)o.pop();o.push(u)}for(s=a.length-1;s>=0;s-=1){for(u=a[s];c.length>=2&&l.cross3(c[c.length-2],c[c.length-1],u)<=0;)c.pop();c.push(u)}return c.pop(),o.pop(),c.concat(o)}})()},function(I,E,m){var e={};I.exports=e;var l=m(3),r=m(2),a=m(7),c=m(0),o=m(1),u=m(11);(function(){e._timeCorrection=!0,e._inertiaScale=4,e._nextCollidingGroupId=1,e._nextNonCollidingGroupId=-1,e._nextCategory=1,e._baseDelta=1e3/60,e.create=function(t){var i={id:c.nextId(),type:"body",label:"Body",parts:[],plugin:{},angle:0,vertices:l.fromPath("L 0 0 L 40 0 L 40 40 L 0 40"),position:{x:0,y:0},force:{x:0,y:0},torque:0,positionImpulse:{x:0,y:0},constraintImpulse:{x:0,y:0,angle:0},totalContacts:0,speed:0,angularSpeed:0,velocity:{x:0,y:0},angularVelocity:0,isSensor:!1,isStatic:!1,isSleeping:!1,motion:0,sleepThreshold:60,density:.001,restitution:0,friction:.1,frictionStatic:.5,frictionAir:.01,collisionFilter:{category:1,mask:4294967295,group:0},slop:.05,timeScale:1,render:{visible:!0,opacity:1,strokeStyle:null,fillStyle:null,lineWidth:null,sprite:{xScale:1,yScale:1,xOffset:0,yOffset:0}},events:null,bounds:null,chamfer:null,circleRadius:0,positionPrev:null,anglePrev:0,parent:null,axes:null,area:0,mass:0,inertia:0,deltaTime:16.666666666666668,_original:null},n=c.extend(i,t);return s(n,t),n},e.nextGroup=function(t){return t?e._nextNonCollidingGroupId--:e._nextCollidingGroupId++},e.nextCategory=function(){return e._nextCategory=e._nextCategory<<1,e._nextCategory};var s=function(t,i){i=i||{},e.set(t,{bounds:t.bounds||o.create(t.vertices),positionPrev:t.positionPrev||r.clone(t.position),anglePrev:t.anglePrev||t.angle,vertices:t.vertices,parts:t.parts||[t],isStatic:t.isStatic,isSleeping:t.isSleeping,parent:t.parent||t}),l.rotate(t.vertices,t.angle,t.position),u.rotate(t.axes,t.angle),o.update(t.bounds,t.vertices,t.velocity),e.set(t,{axes:i.axes||t.axes,area:i.area||t.area,mass:i.mass||t.mass,inertia:i.inertia||t.inertia});var n=t.isStatic?"#14151f":c.choose(["#f19648","#f5d259","#f55a3c","#063e7b","#ececd1"]),f=t.isStatic?"#555":"#ccc",g=t.isStatic&&t.render.fillStyle===null?1:0;t.render.fillStyle=t.render.fillStyle||n,t.render.strokeStyle=t.render.strokeStyle||f,t.render.lineWidth=t.render.lineWidth||g,t.render.sprite.xOffset+=-(t.bounds.min.x-t.position.x)/(t.bounds.max.x-t.bounds.min.x),t.render.sprite.yOffset+=-(t.bounds.min.y-t.position.y)/(t.bounds.max.y-t.bounds.min.y)};e.set=function(t,i,n){var f;typeof i=="string"&&(f=i,i={},i[f]=n);for(f in i)if(Object.prototype.hasOwnProperty.call(i,f))switch(n=i[f],f){case"isStatic":e.setStatic(t,n);break;case"isSleeping":a.set(t,n);break;case"mass":e.setMass(t,n);break;case"density":e.setDensity(t,n);break;case"inertia":e.setInertia(t,n);break;case"vertices":e.setVertices(t,n);break;case"position":e.setPosition(t,n);break;case"angle":e.setAngle(t,n);break;case"velocity":e.setVelocity(t,n);break;case"angularVelocity":e.setAngularVelocity(t,n);break;case"speed":e.setSpeed(t,n);break;case"angularSpeed":e.setAngularSpeed(t,n);break;case"parts":e.setParts(t,n);break;case"centre":e.setCentre(t,n);break;default:t[f]=n}},e.setStatic=function(t,i){for(var n=0;n<t.parts.length;n++){var f=t.parts[n];f.isStatic=i,i?(f._original={restitution:f.restitution,friction:f.friction,mass:f.mass,inertia:f.inertia,density:f.density,inverseMass:f.inverseMass,inverseInertia:f.inverseInertia},f.restitution=0,f.friction=1,f.mass=f.inertia=f.density=1/0,f.inverseMass=f.inverseInertia=0,f.positionPrev.x=f.position.x,f.positionPrev.y=f.position.y,f.anglePrev=f.angle,f.angularVelocity=0,f.speed=0,f.angularSpeed=0,f.motion=0):f._original&&(f.restitution=f._original.restitution,f.friction=f._original.friction,f.mass=f._original.mass,f.inertia=f._original.inertia,f.density=f._original.density,f.inverseMass=f._original.inverseMass,f.inverseInertia=f._original.inverseInertia,f._original=null)}},e.setMass=function(t,i){var n=t.inertia/(t.mass/6);t.inertia=n*(i/6),t.inverseInertia=1/t.inertia,t.mass=i,t.inverseMass=1/t.mass,t.density=t.mass/t.area},e.setDensity=function(t,i){e.setMass(t,i*t.area),t.density=i},e.setInertia=function(t,i){t.inertia=i,t.inverseInertia=1/t.inertia},e.setVertices=function(t,i){i[0].body===t?t.vertices=i:t.vertices=l.create(i,t),t.axes=u.fromVertices(t.vertices),t.area=l.area(t.vertices),e.setMass(t,t.density*t.area);var n=l.centre(t.vertices);l.translate(t.vertices,n,-1),e.setInertia(t,e._inertiaScale*l.inertia(t.vertices,t.mass)),l.translate(t.vertices,t.position),o.update(t.bounds,t.vertices,t.velocity)},e.setParts=function(t,i,n){var f;for(i=i.slice(0),t.parts.length=0,t.parts.push(t),t.parent=t,f=0;f<i.length;f++){var g=i[f];g!==t&&(g.parent=t,t.parts.push(g))}if(t.parts.length!==1){if(n=typeof n<"u"?n:!0,n){var y=[];for(f=0;f<i.length;f++)y=y.concat(i[f].vertices);l.clockwiseSort(y);var w=l.hull(y),C=l.centre(w);e.setVertices(t,w),l.translate(t.vertices,C)}var v=e._totalProperties(t);t.area=v.area,t.parent=t,t.position.x=v.centre.x,t.position.y=v.centre.y,t.positionPrev.x=v.centre.x,t.positionPrev.y=v.centre.y,e.setMass(t,v.mass),e.setInertia(t,v.inertia),e.setPosition(t,v.centre)}},e.setCentre=function(t,i,n){n?(t.positionPrev.x+=i.x,t.positionPrev.y+=i.y,t.position.x+=i.x,t.position.y+=i.y):(t.positionPrev.x=i.x-(t.position.x-t.positionPrev.x),t.positionPrev.y=i.y-(t.position.y-t.positionPrev.y),t.position.x=i.x,t.position.y=i.y)},e.setPosition=function(t,i,n){var f=r.sub(i,t.position);n?(t.positionPrev.x=t.position.x,t.positionPrev.y=t.position.y,t.velocity.x=f.x,t.velocity.y=f.y,t.speed=r.magnitude(f)):(t.positionPrev.x+=f.x,t.positionPrev.y+=f.y);for(var g=0;g<t.parts.length;g++){var y=t.parts[g];y.position.x+=f.x,y.position.y+=f.y,l.translate(y.vertices,f),o.update(y.bounds,y.vertices,t.velocity)}},e.setAngle=function(t,i,n){var f=i-t.angle;n?(t.anglePrev=t.angle,t.angularVelocity=f,t.angularSpeed=Math.abs(f)):t.anglePrev+=f;for(var g=0;g<t.parts.length;g++){var y=t.parts[g];y.angle+=f,l.rotate(y.vertices,f,t.position),u.rotate(y.axes,f),o.update(y.bounds,y.vertices,t.velocity),g>0&&r.rotateAbout(y.position,f,t.position,y.position)}},e.setVelocity=function(t,i){var n=t.deltaTime/e._baseDelta;t.positionPrev.x=t.position.x-i.x*n,t.positionPrev.y=t.position.y-i.y*n,t.velocity.x=(t.position.x-t.positionPrev.x)/n,t.velocity.y=(t.position.y-t.positionPrev.y)/n,t.speed=r.magnitude(t.velocity)},e.getVelocity=function(t){var i=e._baseDelta/t.deltaTime;return{x:(t.position.x-t.positionPrev.x)*i,y:(t.position.y-t.positionPrev.y)*i}},e.getSpeed=function(t){return r.magnitude(e.getVelocity(t))},e.setSpeed=function(t,i){e.setVelocity(t,r.mult(r.normalise(e.getVelocity(t)),i))},e.setAngularVelocity=function(t,i){var n=t.deltaTime/e._baseDelta;t.anglePrev=t.angle-i*n,t.angularVelocity=(t.angle-t.anglePrev)/n,t.angularSpeed=Math.abs(t.angularVelocity)},e.getAngularVelocity=function(t){return(t.angle-t.anglePrev)*e._baseDelta/t.deltaTime},e.getAngularSpeed=function(t){return Math.abs(e.getAngularVelocity(t))},e.setAngularSpeed=function(t,i){e.setAngularVelocity(t,c.sign(e.getAngularVelocity(t))*i)},e.translate=function(t,i,n){e.setPosition(t,r.add(t.position,i),n)},e.rotate=function(t,i,n,f){if(!n)e.setAngle(t,t.angle+i,f);else{var g=Math.cos(i),y=Math.sin(i),w=t.position.x-n.x,C=t.position.y-n.y;e.setPosition(t,{x:n.x+(w*g-C*y),y:n.y+(w*y+C*g)},f),e.setAngle(t,t.angle+i,f)}},e.scale=function(t,i,n,f){var g=0,y=0;f=f||t.position;for(var w=0;w<t.parts.length;w++){var C=t.parts[w];l.scale(C.vertices,i,n,f),C.axes=u.fromVertices(C.vertices),C.area=l.area(C.vertices),e.setMass(C,t.density*C.area),l.translate(C.vertices,{x:-C.position.x,y:-C.position.y}),e.setInertia(C,e._inertiaScale*l.inertia(C.vertices,C.mass)),l.translate(C.vertices,{x:C.position.x,y:C.position.y}),w>0&&(g+=C.area,y+=C.inertia),C.position.x=f.x+(C.position.x-f.x)*i,C.position.y=f.y+(C.position.y-f.y)*n,o.update(C.bounds,C.vertices,t.velocity)}t.parts.length>1&&(t.area=g,t.isStatic||(e.setMass(t,t.density*g),e.setInertia(t,y))),t.circleRadius&&(i===n?t.circleRadius*=i:t.circleRadius=null)},e.update=function(t,i){i=(typeof i<"u"?i:1e3/60)*t.timeScale;var n=i*i,f=e._timeCorrection?i/(t.deltaTime||i):1,g=1-t.frictionAir*(i/c._baseDelta),y=(t.position.x-t.positionPrev.x)*f,w=(t.position.y-t.positionPrev.y)*f;t.velocity.x=y*g+t.force.x/t.mass*n,t.velocity.y=w*g+t.force.y/t.mass*n,t.positionPrev.x=t.position.x,t.positionPrev.y=t.position.y,t.position.x+=t.velocity.x,t.position.y+=t.velocity.y,t.deltaTime=i,t.angularVelocity=(t.angle-t.anglePrev)*g*f+t.torque/t.inertia*n,t.anglePrev=t.angle,t.angle+=t.angularVelocity;for(var C=0;C<t.parts.length;C++){var v=t.parts[C];l.translate(v.vertices,t.velocity),C>0&&(v.position.x+=t.velocity.x,v.position.y+=t.velocity.y),t.angularVelocity!==0&&(l.rotate(v.vertices,t.angularVelocity,t.position),u.rotate(v.axes,t.angularVelocity),C>0&&r.rotateAbout(v.position,t.angularVelocity,t.position,v.position)),o.update(v.bounds,v.vertices,t.velocity)}},e.updateVelocities=function(t){var i=e._baseDelta/t.deltaTime,n=t.velocity;n.x=(t.position.x-t.positionPrev.x)*i,n.y=(t.position.y-t.positionPrev.y)*i,t.speed=Math.sqrt(n.x*n.x+n.y*n.y),t.angularVelocity=(t.angle-t.anglePrev)*i,t.angularSpeed=Math.abs(t.angularVelocity)},e.applyForce=function(t,i,n){var f={x:i.x-t.position.x,y:i.y-t.position.y};t.force.x+=n.x,t.force.y+=n.y,t.torque+=f.x*n.y-f.y*n.x},e._totalProperties=function(t){for(var i={mass:0,area:0,inertia:0,centre:{x:0,y:0}},n=t.parts.length===1?0:1;n<t.parts.length;n++){var f=t.parts[n],g=f.mass!==1/0?f.mass:1;i.mass+=g,i.area+=f.area,i.inertia+=f.inertia,i.centre=r.add(i.centre,r.mult(f.position,g))}return i.centre=r.div(i.centre,i.mass),i}})()},function(I,E,m){var e={};I.exports=e;var l=m(0);(function(){e.on=function(r,a,c){for(var o=a.split(" "),u,s=0;s<o.length;s++)u=o[s],r.events=r.events||{},r.events[u]=r.events[u]||[],r.events[u].push(c);return c},e.off=function(r,a,c){if(!a){r.events={};return}typeof a=="function"&&(c=a,a=l.keys(r.events).join(" "));for(var o=a.split(" "),u=0;u<o.length;u++){var s=r.events[o[u]],t=[];if(c&&s)for(var i=0;i<s.length;i++)s[i]!==c&&t.push(s[i]);r.events[o[u]]=t}},e.trigger=function(r,a,c){var o,u,s,t,i=r.events;if(i&&l.keys(i).length>0){c||(c={}),o=a.split(" ");for(var n=0;n<o.length;n++)if(u=o[n],s=i[u],s){t=l.clone(c,!1),t.name=u,t.source=r;for(var f=0;f<s.length;f++)s[f].apply(r,[t])}}}})()},function(I,E,m){var e={};I.exports=e;var l=m(5),r=m(0),a=m(1),c=m(4);(function(){e.create=function(o){return r.extend({id:r.nextId(),type:"composite",parent:null,isModified:!1,bodies:[],constraints:[],composites:[],label:"Composite",plugin:{},cache:{allBodies:null,allConstraints:null,allComposites:null}},o)},e.setModified=function(o,u,s,t){if(o.isModified=u,u&&o.cache&&(o.cache.allBodies=null,o.cache.allConstraints=null,o.cache.allComposites=null),s&&o.parent&&e.setModified(o.parent,u,s,t),t)for(var i=0;i<o.composites.length;i++){var n=o.composites[i];e.setModified(n,u,s,t)}},e.add=function(o,u){var s=[].concat(u);l.trigger(o,"beforeAdd",{object:u});for(var t=0;t<s.length;t++){var i=s[t];switch(i.type){case"body":if(i.parent!==i){r.warn("Composite.add: skipped adding a compound body part (you must add its parent instead)");break}e.addBody(o,i);break;case"constraint":e.addConstraint(o,i);break;case"composite":e.addComposite(o,i);break;case"mouseConstraint":e.addConstraint(o,i.constraint);break}}return l.trigger(o,"afterAdd",{object:u}),o},e.remove=function(o,u,s){var t=[].concat(u);l.trigger(o,"beforeRemove",{object:u});for(var i=0;i<t.length;i++){var n=t[i];switch(n.type){case"body":e.removeBody(o,n,s);break;case"constraint":e.removeConstraint(o,n,s);break;case"composite":e.removeComposite(o,n,s);break;case"mouseConstraint":e.removeConstraint(o,n.constraint);break}}return l.trigger(o,"afterRemove",{object:u}),o},e.addComposite=function(o,u){return o.composites.push(u),u.parent=o,e.setModified(o,!0,!0,!1),o},e.removeComposite=function(o,u,s){var t=r.indexOf(o.composites,u);if(t!==-1&&e.removeCompositeAt(o,t),s)for(var i=0;i<o.composites.length;i++)e.removeComposite(o.composites[i],u,!0);return o},e.removeCompositeAt=function(o,u){return o.composites.splice(u,1),e.setModified(o,!0,!0,!1),o},e.addBody=function(o,u){return o.bodies.push(u),e.setModified(o,!0,!0,!1),o},e.removeBody=function(o,u,s){var t=r.indexOf(o.bodies,u);if(t!==-1&&e.removeBodyAt(o,t),s)for(var i=0;i<o.composites.length;i++)e.removeBody(o.composites[i],u,!0);return o},e.removeBodyAt=function(o,u){return o.bodies.splice(u,1),e.setModified(o,!0,!0,!1),o},e.addConstraint=function(o,u){return o.constraints.push(u),e.setModified(o,!0,!0,!1),o},e.removeConstraint=function(o,u,s){var t=r.indexOf(o.constraints,u);if(t!==-1&&e.removeConstraintAt(o,t),s)for(var i=0;i<o.composites.length;i++)e.removeConstraint(o.composites[i],u,!0);return o},e.removeConstraintAt=function(o,u){return o.constraints.splice(u,1),e.setModified(o,!0,!0,!1),o},e.clear=function(o,u,s){if(s)for(var t=0;t<o.composites.length;t++)e.clear(o.composites[t],u,!0);return u?o.bodies=o.bodies.filter(function(i){return i.isStatic}):o.bodies.length=0,o.constraints.length=0,o.composites.length=0,e.setModified(o,!0,!0,!1),o},e.allBodies=function(o){if(o.cache&&o.cache.allBodies)return o.cache.allBodies;for(var u=[].concat(o.bodies),s=0;s<o.composites.length;s++)u=u.concat(e.allBodies(o.composites[s]));return o.cache&&(o.cache.allBodies=u),u},e.allConstraints=function(o){if(o.cache&&o.cache.allConstraints)return o.cache.allConstraints;for(var u=[].concat(o.constraints),s=0;s<o.composites.length;s++)u=u.concat(e.allConstraints(o.composites[s]));return o.cache&&(o.cache.allConstraints=u),u},e.allComposites=function(o){if(o.cache&&o.cache.allComposites)return o.cache.allComposites;for(var u=[].concat(o.composites),s=0;s<o.composites.length;s++)u=u.concat(e.allComposites(o.composites[s]));return o.cache&&(o.cache.allComposites=u),u},e.get=function(o,u,s){var t,i;switch(s){case"body":t=e.allBodies(o);break;case"constraint":t=e.allConstraints(o);break;case"composite":t=e.allComposites(o).concat(o);break}return t?(i=t.filter(function(n){return n.id.toString()===u.toString()}),i.length===0?null:i[0]):null},e.move=function(o,u,s){return e.remove(o,u),e.add(s,u),o},e.rebase=function(o){for(var u=e.allBodies(o).concat(e.allConstraints(o)).concat(e.allComposites(o)),s=0;s<u.length;s++)u[s].id=r.nextId();return o},e.translate=function(o,u,s){for(var t=s?e.allBodies(o):o.bodies,i=0;i<t.length;i++)c.translate(t[i],u);return o},e.rotate=function(o,u,s,t){for(var i=Math.cos(u),n=Math.sin(u),f=t?e.allBodies(o):o.bodies,g=0;g<f.length;g++){var y=f[g],w=y.position.x-s.x,C=y.position.y-s.y;c.setPosition(y,{x:s.x+(w*i-C*n),y:s.y+(w*n+C*i)}),c.rotate(y,u)}return o},e.scale=function(o,u,s,t,i){for(var n=i?e.allBodies(o):o.bodies,f=0;f<n.length;f++){var g=n[f],y=g.position.x-t.x,w=g.position.y-t.y;c.setPosition(g,{x:t.x+y*u,y:t.y+w*s}),c.scale(g,u,s)}return o},e.bounds=function(o){for(var u=e.allBodies(o),s=[],t=0;t<u.length;t+=1){var i=u[t];s.push(i.bounds.min,i.bounds.max)}return a.create(s)}})()},function(I,E,m){var e={};I.exports=e;var l=m(4),r=m(5),a=m(0);(function(){e._motionWakeThreshold=.18,e._motionSleepThreshold=.08,e._minBias=.9,e.update=function(c,o){for(var u=o/a._baseDelta,s=e._motionSleepThreshold,t=0;t<c.length;t++){var i=c[t],n=l.getSpeed(i),f=l.getAngularSpeed(i),g=n*n+f*f;if(i.force.x!==0||i.force.y!==0){e.set(i,!1);continue}var y=Math.min(i.motion,g),w=Math.max(i.motion,g);i.motion=e._minBias*y+(1-e._minBias)*w,i.sleepThreshold>0&&i.motion<s?(i.sleepCounter+=1,i.sleepCounter>=i.sleepThreshold/u&&e.set(i,!0)):i.sleepCounter>0&&(i.sleepCounter-=1)}},e.afterCollisions=function(c){for(var o=e._motionSleepThreshold,u=0;u<c.length;u++){var s=c[u];if(s.isActive){var t=s.collision,i=t.bodyA.parent,n=t.bodyB.parent;if(!(i.isSleeping&&n.isSleeping||i.isStatic||n.isStatic)&&(i.isSleeping||n.isSleeping)){var f=i.isSleeping&&!i.isStatic?i:n,g=f===i?n:i;!f.isStatic&&g.motion>o&&e.set(f,!1)}}}},e.set=function(c,o){var u=c.isSleeping;o?(c.isSleeping=!0,c.sleepCounter=c.sleepThreshold,c.positionImpulse.x=0,c.positionImpulse.y=0,c.positionPrev.x=c.position.x,c.positionPrev.y=c.position.y,c.anglePrev=c.angle,c.speed=0,c.angularSpeed=0,c.motion=0,u||r.trigger(c,"sleepStart")):(c.isSleeping=!1,c.sleepCounter=0,u&&r.trigger(c,"sleepEnd"))}})()},function(I,E,m){var e={};I.exports=e;var l=m(3),r=m(9);(function(){var a=[],c={overlap:0,axis:null},o={overlap:0,axis:null};e.create=function(u,s){return{pair:null,collided:!1,bodyA:u,bodyB:s,parentA:u.parent,parentB:s.parent,depth:0,normal:{x:0,y:0},tangent:{x:0,y:0},penetration:{x:0,y:0},supports:[]}},e.collides=function(u,s,t){if(e._overlapAxes(c,u.vertices,s.vertices,u.axes),c.overlap<=0||(e._overlapAxes(o,s.vertices,u.vertices,s.axes),o.overlap<=0))return null;var i=t&&t.table[r.id(u,s)],n;i?n=i.collision:(n=e.create(u,s),n.collided=!0,n.bodyA=u.id<s.id?u:s,n.bodyB=u.id<s.id?s:u,n.parentA=n.bodyA.parent,n.parentB=n.bodyB.parent),u=n.bodyA,s=n.bodyB;var f;c.overlap<o.overlap?f=c:f=o;var g=n.normal,y=n.supports,w=f.axis,C=w.x,v=w.y;C*(s.position.x-u.position.x)+v*(s.position.y-u.position.y)<0?(g.x=C,g.y=v):(g.x=-C,g.y=-v),n.tangent.x=-g.y,n.tangent.y=g.x,n.depth=f.overlap,n.penetration.x=g.x*n.depth,n.penetration.y=g.y*n.depth;var h=e._findSupports(u,s,g,1),p=0;if(l.contains(u.vertices,h[0])&&(y[p++]=h[0]),l.contains(u.vertices,h[1])&&(y[p++]=h[1]),p<2){var d=e._findSupports(s,u,g,-1);l.contains(s.vertices,d[0])&&(y[p++]=d[0]),p<2&&l.contains(s.vertices,d[1])&&(y[p++]=d[1])}return p===0&&(y[p++]=h[0]),y.length=p,n},e._overlapAxes=function(u,s,t,i){var n=s.length,f=t.length,g=s[0].x,y=s[0].y,w=t[0].x,C=t[0].y,v=i.length,h=Number.MAX_VALUE,p=0,d,S,x,M,P,B;for(P=0;P<v;P++){var A=i[P],T=A.x,L=A.y,R=g*T+y*L,D=w*T+C*L,O=R,V=D;for(B=1;B<n;B+=1)M=s[B].x*T+s[B].y*L,M>O?O=M:M<R&&(R=M);for(B=1;B<f;B+=1)M=t[B].x*T+t[B].y*L,M>V?V=M:M<D&&(D=M);if(S=O-D,x=V-R,d=S<x?S:x,d<h&&(h=d,p=P,d<=0))break}u.axis=i[p],u.overlap=h},e._projectToAxis=function(u,s,t){for(var i=s[0].x*t.x+s[0].y*t.y,n=i,f=1;f<s.length;f+=1){var g=s[f].x*t.x+s[f].y*t.y;g>n?n=g:g<i&&(i=g)}u.min=i,u.max=n},e._findSupports=function(u,s,t,i){var n=s.vertices,f=n.length,g=u.position.x,y=u.position.y,w=t.x*i,C=t.y*i,v=Number.MAX_VALUE,h,p,d,S,x;for(x=0;x<f;x+=1)p=n[x],S=w*(g-p.x)+C*(y-p.y),S<v&&(v=S,h=p);return d=n[(f+h.index-1)%f],v=w*(g-d.x)+C*(y-d.y),p=n[(h.index+1)%f],w*(g-p.x)+C*(y-p.y)<v?(a[0]=h,a[1]=p,a):(a[0]=h,a[1]=d,a)}})()},function(I,E,m){var e={};I.exports=e;var l=m(16);(function(){e.create=function(r,a){var c=r.bodyA,o=r.bodyB,u={id:e.id(c,o),bodyA:c,bodyB:o,collision:r,contacts:[],activeContacts:[],separation:0,isActive:!0,confirmedActive:!0,isSensor:c.isSensor||o.isSensor,timeCreated:a,timeUpdated:a,inverseMass:0,friction:0,frictionStatic:0,restitution:0,slop:0};return e.update(u,r,a),u},e.update=function(r,a,c){var o=r.contacts,u=a.supports,s=r.activeContacts,t=a.parentA,i=a.parentB,n=t.vertices.length;r.isActive=!0,r.timeUpdated=c,r.collision=a,r.separation=a.depth,r.inverseMass=t.inverseMass+i.inverseMass,r.friction=t.friction<i.friction?t.friction:i.friction,r.frictionStatic=t.frictionStatic>i.frictionStatic?t.frictionStatic:i.frictionStatic,r.restitution=t.restitution>i.restitution?t.restitution:i.restitution,r.slop=t.slop>i.slop?t.slop:i.slop,a.pair=r,s.length=0;for(var f=0;f<u.length;f++){var g=u[f],y=g.body===t?g.index:n+g.index,w=o[y];w?s.push(w):s.push(o[y]=l.create(g))}},e.setActive=function(r,a,c){a?(r.isActive=!0,r.timeUpdated=c):(r.isActive=!1,r.activeContacts.length=0)},e.id=function(r,a){return r.id<a.id?"A"+r.id+"B"+a.id:"A"+a.id+"B"+r.id}})()},function(I,E,m){var e={};I.exports=e;var l=m(3),r=m(2),a=m(7),c=m(1),o=m(11),u=m(0);(function(){e._warming=.4,e._torqueDampen=1,e._minLength=1e-6,e.create=function(s){var t=s;t.bodyA&&!t.pointA&&(t.pointA={x:0,y:0}),t.bodyB&&!t.pointB&&(t.pointB={x:0,y:0});var i=t.bodyA?r.add(t.bodyA.position,t.pointA):t.pointA,n=t.bodyB?r.add(t.bodyB.position,t.pointB):t.pointB,f=r.magnitude(r.sub(i,n));t.length=typeof t.length<"u"?t.length:f,t.id=t.id||u.nextId(),t.label=t.label||"Constraint",t.type="constraint",t.stiffness=t.stiffness||(t.length>0?1:.7),t.damping=t.damping||0,t.angularStiffness=t.angularStiffness||0,t.angleA=t.bodyA?t.bodyA.angle:t.angleA,t.angleB=t.bodyB?t.bodyB.angle:t.angleB,t.plugin={};var g={visible:!0,lineWidth:2,strokeStyle:"#ffffff",type:"line",anchors:!0};return t.length===0&&t.stiffness>.1?(g.type="pin",g.anchors=!1):t.stiffness<.9&&(g.type="spring"),t.render=u.extend(g,t.render),t},e.preSolveAll=function(s){for(var t=0;t<s.length;t+=1){var i=s[t],n=i.constraintImpulse;i.isStatic||n.x===0&&n.y===0&&n.angle===0||(i.position.x+=n.x,i.position.y+=n.y,i.angle+=n.angle)}},e.solveAll=function(s,t){for(var i=u.clamp(t/u._baseDelta,0,1),n=0;n<s.length;n+=1){var f=s[n],g=!f.bodyA||f.bodyA&&f.bodyA.isStatic,y=!f.bodyB||f.bodyB&&f.bodyB.isStatic;(g||y)&&e.solve(s[n],i)}for(n=0;n<s.length;n+=1)f=s[n],g=!f.bodyA||f.bodyA&&f.bodyA.isStatic,y=!f.bodyB||f.bodyB&&f.bodyB.isStatic,!g&&!y&&e.solve(s[n],i)},e.solve=function(s,t){var i=s.bodyA,n=s.bodyB,f=s.pointA,g=s.pointB;if(!(!i&&!n)){i&&!i.isStatic&&(r.rotate(f,i.angle-s.angleA,f),s.angleA=i.angle),n&&!n.isStatic&&(r.rotate(g,n.angle-s.angleB,g),s.angleB=n.angle);var y=f,w=g;if(i&&(y=r.add(i.position,f)),n&&(w=r.add(n.position,g)),!(!y||!w)){var C=r.sub(y,w),v=r.magnitude(C);v<e._minLength&&(v=e._minLength);var h=(v-s.length)/v,p=s.stiffness>=1||s.length===0,d=p?s.stiffness*t:s.stiffness*t*t,S=s.damping*t,x=r.mult(C,h*d),M=(i?i.inverseMass:0)+(n?n.inverseMass:0),P=(i?i.inverseInertia:0)+(n?n.inverseInertia:0),B=M+P,A,T,L,R,D;if(S>0){var O=r.create();L=r.div(C,v),D=r.sub(n&&r.sub(n.position,n.positionPrev)||O,i&&r.sub(i.position,i.positionPrev)||O),R=r.dot(L,D)}i&&!i.isStatic&&(T=i.inverseMass/M,i.constraintImpulse.x-=x.x*T,i.constraintImpulse.y-=x.y*T,i.position.x-=x.x*T,i.position.y-=x.y*T,S>0&&(i.positionPrev.x-=S*L.x*R*T,i.positionPrev.y-=S*L.y*R*T),A=r.cross(f,x)/B*e._torqueDampen*i.inverseInertia*(1-s.angularStiffness),i.constraintImpulse.angle-=A,i.angle-=A),n&&!n.isStatic&&(T=n.inverseMass/M,n.constraintImpulse.x+=x.x*T,n.constraintImpulse.y+=x.y*T,n.position.x+=x.x*T,n.position.y+=x.y*T,S>0&&(n.positionPrev.x+=S*L.x*R*T,n.positionPrev.y+=S*L.y*R*T),A=r.cross(g,x)/B*e._torqueDampen*n.inverseInertia*(1-s.angularStiffness),n.constraintImpulse.angle+=A,n.angle+=A)}}},e.postSolveAll=function(s){for(var t=0;t<s.length;t++){var i=s[t],n=i.constraintImpulse;if(!(i.isStatic||n.x===0&&n.y===0&&n.angle===0)){a.set(i,!1);for(var f=0;f<i.parts.length;f++){var g=i.parts[f];l.translate(g.vertices,n),f>0&&(g.position.x+=n.x,g.position.y+=n.y),n.angle!==0&&(l.rotate(g.vertices,n.angle,i.position),o.rotate(g.axes,n.angle),f>0&&r.rotateAbout(g.position,n.angle,i.position,g.position)),c.update(g.bounds,g.vertices,i.velocity)}n.angle*=e._warming,n.x*=e._warming,n.y*=e._warming}}},e.pointAWorld=function(s){return{x:(s.bodyA?s.bodyA.position.x:0)+(s.pointA?s.pointA.x:0),y:(s.bodyA?s.bodyA.position.y:0)+(s.pointA?s.pointA.y:0)}},e.pointBWorld=function(s){return{x:(s.bodyB?s.bodyB.position.x:0)+(s.pointB?s.pointB.x:0),y:(s.bodyB?s.bodyB.position.y:0)+(s.pointB?s.pointB.y:0)}}})()},function(I,E,m){var e={};I.exports=e;var l=m(2),r=m(0);(function(){e.fromVertices=function(a){for(var c={},o=0;o<a.length;o++){var u=(o+1)%a.length,s=l.normalise({x:a[u].y-a[o].y,y:a[o].x-a[u].x}),t=s.y===0?1/0:s.x/s.y;t=t.toFixed(3).toString(),c[t]=s}return r.values(c)},e.rotate=function(a,c){if(c!==0)for(var o=Math.cos(c),u=Math.sin(c),s=0;s<a.length;s++){var t=a[s],i;i=t.x*o-t.y*u,t.y=t.x*u+t.y*o,t.x=i}}})()},function(I,E,m){var e={};I.exports=e;var l=m(3),r=m(0),a=m(4),c=m(1),o=m(2);(function(){e.rectangle=function(u,s,t,i,n){n=n||{};var f={label:"Rectangle Body",position:{x:u,y:s},vertices:l.fromPath("L 0 0 L "+t+" 0 L "+t+" "+i+" L 0 "+i)};if(n.chamfer){var g=n.chamfer;f.vertices=l.chamfer(f.vertices,g.radius,g.quality,g.qualityMin,g.qualityMax),delete n.chamfer}return a.create(r.extend({},f,n))},e.trapezoid=function(u,s,t,i,n,f){f=f||{},n*=.5;var g=(1-n*2)*t,y=t*n,w=y+g,C=w+y,v;n<.5?v="L 0 0 L "+y+" "+-i+" L "+w+" "+-i+" L "+C+" 0":v="L 0 0 L "+w+" "+-i+" L "+C+" 0";var h={label:"Trapezoid Body",position:{x:u,y:s},vertices:l.fromPath(v)};if(f.chamfer){var p=f.chamfer;h.vertices=l.chamfer(h.vertices,p.radius,p.quality,p.qualityMin,p.qualityMax),delete f.chamfer}return a.create(r.extend({},h,f))},e.circle=function(u,s,t,i,n){i=i||{};var f={label:"Circle Body",circleRadius:t};n=n||25;var g=Math.ceil(Math.max(10,Math.min(n,t)));return g%2===1&&(g+=1),e.polygon(u,s,g,t,r.extend({},f,i))},e.polygon=function(u,s,t,i,n){if(n=n||{},t<3)return e.circle(u,s,i,n);for(var f=2*Math.PI/t,g="",y=f*.5,w=0;w<t;w+=1){var C=y+w*f,v=Math.cos(C)*i,h=Math.sin(C)*i;g+="L "+v.toFixed(3)+" "+h.toFixed(3)+" "}var p={label:"Polygon Body",position:{x:u,y:s},vertices:l.fromPath(g)};if(n.chamfer){var d=n.chamfer;p.vertices=l.chamfer(p.vertices,d.radius,d.quality,d.qualityMin,d.qualityMax),delete n.chamfer}return a.create(r.extend({},p,n))},e.fromVertices=function(u,s,t,i,n,f,g,y){var w=r.getDecomp(),C,v,h,p,d,S,x,M,P,B,A;for(C=!!(w&&w.quickDecomp),i=i||{},h=[],n=typeof n<"u"?n:!1,f=typeof f<"u"?f:.01,g=typeof g<"u"?g:10,y=typeof y<"u"?y:.01,r.isArray(t[0])||(t=[t]),B=0;B<t.length;B+=1)if(S=t[B],p=l.isConvex(S),d=!p,d&&!C&&r.warnOnce("Bodies.fromVertices: Install the 'poly-decomp' library and use Common.setDecomp or provide 'decomp' as a global to decompose concave vertices."),p||!C)p?S=l.clockwiseSort(S):S=l.hull(S),h.push({position:{x:u,y:s},vertices:S});else{var T=S.map(function(b){return[b.x,b.y]});w.makeCCW(T),f!==!1&&w.removeCollinearPoints(T,f),y!==!1&&w.removeDuplicatePoints&&w.removeDuplicatePoints(T,y);var L=w.quickDecomp(T);for(x=0;x<L.length;x++){var R=L[x],D=R.map(function(b){return{x:b[0],y:b[1]}});g>0&&l.area(D)<g||h.push({position:l.centre(D),vertices:D})}}for(x=0;x<h.length;x++)h[x]=a.create(r.extend(h[x],i));if(n){var O=5;for(x=0;x<h.length;x++){var V=h[x];for(M=x+1;M<h.length;M++){var U=h[M];if(c.overlaps(V.bounds,U.bounds)){var k=V.vertices,G=U.vertices;for(P=0;P<V.vertices.length;P++)for(A=0;A<U.vertices.length;A++){var H=o.magnitudeSquared(o.sub(k[(P+1)%k.length],G[A])),$=o.magnitudeSquared(o.sub(k[P],G[(A+1)%G.length]));H<O&&$<O&&(k[P].isInternal=!0,G[A].isInternal=!0)}}}}}return h.length>1?(v=a.create(r.extend({parts:h.slice(0)},i)),a.setPosition(v,{x:u,y:s}),v):h[0]}})()},function(I,E,m){var e={};I.exports=e;var l=m(0),r=m(8);(function(){e.create=function(a){var c={bodies:[],pairs:null};return l.extend(c,a)},e.setBodies=function(a,c){a.bodies=c.slice(0)},e.clear=function(a){a.bodies=[]},e.collisions=function(a){var c=[],o=a.pairs,u=a.bodies,s=u.length,t=e.canCollide,i=r.collides,n,f;for(u.sort(e._compareBoundsX),n=0;n<s;n++){var g=u[n],y=g.bounds,w=g.bounds.max.x,C=g.bounds.max.y,v=g.bounds.min.y,h=g.isStatic||g.isSleeping,p=g.parts.length,d=p===1;for(f=n+1;f<s;f++){var S=u[f],x=S.bounds;if(x.min.x>w)break;if(!(C<x.min.y||v>x.max.y)&&!(h&&(S.isStatic||S.isSleeping))&&t(g.collisionFilter,S.collisionFilter)){var M=S.parts.length;if(d&&M===1){var P=i(g,S,o);P&&c.push(P)}else for(var B=p>1?1:0,A=M>1?1:0,T=B;T<p;T++)for(var L=g.parts[T],y=L.bounds,R=A;R<M;R++){var D=S.parts[R],x=D.bounds;if(!(y.min.x>x.max.x||y.max.x<x.min.x||y.max.y<x.min.y||y.min.y>x.max.y)){var P=i(L,D,o);P&&c.push(P)}}}}}return c},e.canCollide=function(a,c){return a.group===c.group&&a.group!==0?a.group>0:(a.mask&c.category)!==0&&(c.mask&a.category)!==0},e._compareBoundsX=function(a,c){return a.bounds.min.x-c.bounds.min.x}})()},function(I,E,m){var e={};I.exports=e;var l=m(0);(function(){e.create=function(r){var a={};return r||l.log("Mouse.create: element was undefined, defaulting to document.body","warn"),a.element=r||document.body,a.absolute={x:0,y:0},a.position={x:0,y:0},a.mousedownPosition={x:0,y:0},a.mouseupPosition={x:0,y:0},a.offset={x:0,y:0},a.scale={x:1,y:1},a.wheelDelta=0,a.button=-1,a.pixelRatio=parseInt(a.element.getAttribute("data-pixel-ratio"),10)||1,a.sourceEvents={mousemove:null,mousedown:null,mouseup:null,mousewheel:null},a.mousemove=function(c){var o=e._getRelativeMousePosition(c,a.element,a.pixelRatio),u=c.changedTouches;u&&(a.button=0,c.preventDefault()),a.absolute.x=o.x,a.absolute.y=o.y,a.position.x=a.absolute.x*a.scale.x+a.offset.x,a.position.y=a.absolute.y*a.scale.y+a.offset.y,a.sourceEvents.mousemove=c},a.mousedown=function(c){var o=e._getRelativeMousePosition(c,a.element,a.pixelRatio),u=c.changedTouches;u?(a.button=0,c.preventDefault()):a.button=c.button,a.absolute.x=o.x,a.absolute.y=o.y,a.position.x=a.absolute.x*a.scale.x+a.offset.x,a.position.y=a.absolute.y*a.scale.y+a.offset.y,a.mousedownPosition.x=a.position.x,a.mousedownPosition.y=a.position.y,a.sourceEvents.mousedown=c},a.mouseup=function(c){var o=e._getRelativeMousePosition(c,a.element,a.pixelRatio),u=c.changedTouches;u&&c.preventDefault(),a.button=-1,a.absolute.x=o.x,a.absolute.y=o.y,a.position.x=a.absolute.x*a.scale.x+a.offset.x,a.position.y=a.absolute.y*a.scale.y+a.offset.y,a.mouseupPosition.x=a.position.x,a.mouseupPosition.y=a.position.y,a.sourceEvents.mouseup=c},a.mousewheel=function(c){a.wheelDelta=Math.max(-1,Math.min(1,c.wheelDelta||-c.detail)),c.preventDefault()},e.setElement(a,a.element),a},e.setElement=function(r,a){r.element=a,a.addEventListener("mousemove",r.mousemove),a.addEventListener("mousedown",r.mousedown),a.addEventListener("mouseup",r.mouseup),a.addEventListener("mousewheel",r.mousewheel),a.addEventListener("DOMMouseScroll",r.mousewheel),a.addEventListener("touchmove",r.mousemove),a.addEventListener("touchstart",r.mousedown),a.addEventListener("touchend",r.mouseup)},e.clearSourceEvents=function(r){r.sourceEvents.mousemove=null,r.sourceEvents.mousedown=null,r.sourceEvents.mouseup=null,r.sourceEvents.mousewheel=null,r.wheelDelta=0},e.setOffset=function(r,a){r.offset.x=a.x,r.offset.y=a.y,r.position.x=r.absolute.x*r.scale.x+r.offset.x,r.position.y=r.absolute.y*r.scale.y+r.offset.y},e.setScale=function(r,a){r.scale.x=a.x,r.scale.y=a.y,r.position.x=r.absolute.x*r.scale.x+r.offset.x,r.position.y=r.absolute.y*r.scale.y+r.offset.y},e._getRelativeMousePosition=function(r,a,c){var o=a.getBoundingClientRect(),u=document.documentElement||document.body.parentNode||document.body,s=window.pageXOffset!==void 0?window.pageXOffset:u.scrollLeft,t=window.pageYOffset!==void 0?window.pageYOffset:u.scrollTop,i=r.changedTouches,n,f;return i?(n=i[0].pageX-o.left-s,f=i[0].pageY-o.top-t):(n=r.pageX-o.left-s,f=r.pageY-o.top-t),{x:n/(a.clientWidth/(a.width||a.clientWidth)*c),y:f/(a.clientHeight/(a.height||a.clientHeight)*c)}}})()},function(I,E,m){var e={};I.exports=e;var l=m(0);(function(){e._registry={},e.register=function(r){if(e.isPlugin(r)||l.warn("Plugin.register:",e.toString(r),"does not implement all required fields."),r.name in e._registry){var a=e._registry[r.name],c=e.versionParse(r.version).number,o=e.versionParse(a.version).number;c>o?(l.warn("Plugin.register:",e.toString(a),"was upgraded to",e.toString(r)),e._registry[r.name]=r):c<o?l.warn("Plugin.register:",e.toString(a),"can not be downgraded to",e.toString(r)):r!==a&&l.warn("Plugin.register:",e.toString(r),"is already registered to different plugin object")}else e._registry[r.name]=r;return r},e.resolve=function(r){return e._registry[e.dependencyParse(r).name]},e.toString=function(r){return typeof r=="string"?r:(r.name||"anonymous")+"@"+(r.version||r.range||"0.0.0")},e.isPlugin=function(r){return r&&r.name&&r.version&&r.install},e.isUsed=function(r,a){return r.used.indexOf(a)>-1},e.isFor=function(r,a){var c=r.for&&e.dependencyParse(r.for);return!r.for||a.name===c.name&&e.versionSatisfies(a.version,c.range)},e.use=function(r,a){if(r.uses=(r.uses||[]).concat(a||[]),r.uses.length===0){l.warn("Plugin.use:",e.toString(r),"does not specify any dependencies to install.");return}for(var c=e.dependencies(r),o=l.topologicalSort(c),u=[],s=0;s<o.length;s+=1)if(o[s]!==r.name){var t=e.resolve(o[s]);if(!t){u.push("❌ "+o[s]);continue}e.isUsed(r,t.name)||(e.isFor(t,r)||(l.warn("Plugin.use:",e.toString(t),"is for",t.for,"but installed on",e.toString(r)+"."),t._warned=!0),t.install?t.install(r):(l.warn("Plugin.use:",e.toString(t),"does not specify an install function."),t._warned=!0),t._warned?(u.push("🔶 "+e.toString(t)),delete t._warned):u.push("✅ "+e.toString(t)),r.used.push(t.name))}u.length>0&&l.info(u.join("  "))},e.dependencies=function(r,a){var c=e.dependencyParse(r),o=c.name;if(a=a||{},!(o in a)){r=e.resolve(r)||r,a[o]=l.map(r.uses||[],function(s){e.isPlugin(s)&&e.register(s);var t=e.dependencyParse(s),i=e.resolve(s);return i&&!e.versionSatisfies(i.version,t.range)?(l.warn("Plugin.dependencies:",e.toString(i),"does not satisfy",e.toString(t),"used by",e.toString(c)+"."),i._warned=!0,r._warned=!0):i||(l.warn("Plugin.dependencies:",e.toString(s),"used by",e.toString(c),"could not be resolved."),r._warned=!0),t.name});for(var u=0;u<a[o].length;u+=1)e.dependencies(a[o][u],a);return a}},e.dependencyParse=function(r){if(l.isString(r)){var a=/^[\w-]+(@(\*|[\^~]?\d+\.\d+\.\d+(-[0-9A-Za-z-+]+)?))?$/;return a.test(r)||l.warn("Plugin.dependencyParse:",r,"is not a valid dependency string."),{name:r.split("@")[0],range:r.split("@")[1]||"*"}}return{name:r.name,range:r.range||r.version}},e.versionParse=function(r){var a=/^(\*)|(\^|~|>=|>)?\s*((\d+)\.(\d+)\.(\d+))(-[0-9A-Za-z-+]+)?$/;a.test(r)||l.warn("Plugin.versionParse:",r,"is not a valid version or range.");var c=a.exec(r),o=Number(c[4]),u=Number(c[5]),s=Number(c[6]);return{isRange:!!(c[1]||c[2]),version:c[3],range:r,operator:c[1]||c[2]||"",major:o,minor:u,patch:s,parts:[o,u,s],prerelease:c[7],number:o*1e8+u*1e4+s}},e.versionSatisfies=function(r,a){a=a||"*";var c=e.versionParse(a),o=e.versionParse(r);if(c.isRange){if(c.operator==="*"||r==="*")return!0;if(c.operator===">")return o.number>c.number;if(c.operator===">=")return o.number>=c.number;if(c.operator==="~")return o.major===c.major&&o.minor===c.minor&&o.patch>=c.patch;if(c.operator==="^")return c.major>0?o.major===c.major&&o.number>=c.number:c.minor>0?o.minor===c.minor&&o.patch>=c.patch:o.patch===c.patch}return r===a||r==="*"}})()},function(I,E){var m={};I.exports=m,function(){m.create=function(e){return{vertex:e,normalImpulse:0,tangentImpulse:0}}}()},function(I,E,m){var e={};I.exports=e;var l=m(7),r=m(18),a=m(13),c=m(19),o=m(5),u=m(6),s=m(10),t=m(0),i=m(4);(function(){e.create=function(n){n=n||{};var f={positionIterations:6,velocityIterations:4,constraintIterations:2,enableSleeping:!1,events:[],plugin:{},gravity:{x:0,y:1,scale:.001},timing:{timestamp:0,timeScale:1,lastDelta:0,lastElapsed:0}},g=t.extend(f,n);return g.world=n.world||u.create({label:"World"}),g.pairs=n.pairs||c.create(),g.detector=n.detector||a.create(),g.grid={buckets:[]},g.world.gravity=g.gravity,g.broadphase=g.grid,g.metrics={},g},e.update=function(n,f){var g=t.now(),y=n.world,w=n.detector,C=n.pairs,v=n.timing,h=v.timestamp,p;f=typeof f<"u"?f:t._baseDelta,f*=v.timeScale,v.timestamp+=f,v.lastDelta=f;var d={timestamp:v.timestamp,delta:f};o.trigger(n,"beforeUpdate",d);var S=u.allBodies(y),x=u.allConstraints(y);for(y.isModified&&(a.setBodies(w,S),u.setModified(y,!1,!1,!0)),n.enableSleeping&&l.update(S,f),e._bodiesApplyGravity(S,n.gravity),f>0&&e._bodiesUpdate(S,f),s.preSolveAll(S),p=0;p<n.constraintIterations;p++)s.solveAll(x,f);s.postSolveAll(S),w.pairs=n.pairs;var M=a.collisions(w);c.update(C,M,h),n.enableSleeping&&l.afterCollisions(C.list),C.collisionStart.length>0&&o.trigger(n,"collisionStart",{pairs:C.collisionStart});var P=t.clamp(20/n.positionIterations,0,1);for(r.preSolvePosition(C.list),p=0;p<n.positionIterations;p++)r.solvePosition(C.list,f,P);for(r.postSolvePosition(S),s.preSolveAll(S),p=0;p<n.constraintIterations;p++)s.solveAll(x,f);for(s.postSolveAll(S),r.preSolveVelocity(C.list),p=0;p<n.velocityIterations;p++)r.solveVelocity(C.list,f);return e._bodiesUpdateVelocities(S),C.collisionActive.length>0&&o.trigger(n,"collisionActive",{pairs:C.collisionActive}),C.collisionEnd.length>0&&o.trigger(n,"collisionEnd",{pairs:C.collisionEnd}),e._bodiesClearForces(S),o.trigger(n,"afterUpdate",d),n.timing.lastElapsed=t.now()-g,n},e.merge=function(n,f){if(t.extend(n,f),f.world){n.world=f.world,e.clear(n);for(var g=u.allBodies(n.world),y=0;y<g.length;y++){var w=g[y];l.set(w,!1),w.id=t.nextId()}}},e.clear=function(n){c.clear(n.pairs),a.clear(n.detector)},e._bodiesClearForces=function(n){for(var f=n.length,g=0;g<f;g++){var y=n[g];y.force.x=0,y.force.y=0,y.torque=0}},e._bodiesApplyGravity=function(n,f){var g=typeof f.scale<"u"?f.scale:.001,y=n.length;if(!(f.x===0&&f.y===0||g===0))for(var w=0;w<y;w++){var C=n[w];C.isStatic||C.isSleeping||(C.force.y+=C.mass*f.y*g,C.force.x+=C.mass*f.x*g)}},e._bodiesUpdate=function(n,f){for(var g=n.length,y=0;y<g;y++){var w=n[y];w.isStatic||w.isSleeping||i.update(w,f)}},e._bodiesUpdateVelocities=function(n){for(var f=n.length,g=0;g<f;g++)i.updateVelocities(n[g])}})()},function(I,E,m){var e={};I.exports=e;var l=m(3),r=m(0),a=m(1);(function(){e._restingThresh=2,e._restingThreshTangent=Math.sqrt(6),e._positionDampen=.9,e._positionWarming=.8,e._frictionNormalMultiplier=5,e._frictionMaxStatic=Number.MAX_VALUE,e.preSolvePosition=function(c){var o,u,s,t=c.length;for(o=0;o<t;o++)u=c[o],u.isActive&&(s=u.activeContacts.length,u.collision.parentA.totalContacts+=s,u.collision.parentB.totalContacts+=s)},e.solvePosition=function(c,o,u){var s,t,i,n,f,g,y,w,C=e._positionDampen*(u||1),v=r.clamp(o/r._baseDelta,0,1),h=c.length;for(s=0;s<h;s++)t=c[s],!(!t.isActive||t.isSensor)&&(i=t.collision,n=i.parentA,f=i.parentB,g=i.normal,t.separation=g.x*(f.positionImpulse.x+i.penetration.x-n.positionImpulse.x)+g.y*(f.positionImpulse.y+i.penetration.y-n.positionImpulse.y));for(s=0;s<h;s++)t=c[s],!(!t.isActive||t.isSensor)&&(i=t.collision,n=i.parentA,f=i.parentB,g=i.normal,w=t.separation-t.slop*v,(n.isStatic||f.isStatic)&&(w*=2),n.isStatic||n.isSleeping||(y=C/n.totalContacts,n.positionImpulse.x+=g.x*w*y,n.positionImpulse.y+=g.y*w*y),f.isStatic||f.isSleeping||(y=C/f.totalContacts,f.positionImpulse.x-=g.x*w*y,f.positionImpulse.y-=g.y*w*y))},e.postSolvePosition=function(c){for(var o=e._positionWarming,u=c.length,s=l.translate,t=a.update,i=0;i<u;i++){var n=c[i],f=n.positionImpulse,g=f.x,y=f.y,w=n.velocity;if(n.totalContacts=0,g!==0||y!==0){for(var C=0;C<n.parts.length;C++){var v=n.parts[C];s(v.vertices,f),t(v.bounds,v.vertices,w),v.position.x+=g,v.position.y+=y}n.positionPrev.x+=g,n.positionPrev.y+=y,g*w.x+y*w.y<0?(f.x=0,f.y=0):(f.x*=o,f.y*=o)}}},e.preSolveVelocity=function(c){var o=c.length,u,s;for(u=0;u<o;u++){var t=c[u];if(!(!t.isActive||t.isSensor)){var i=t.activeContacts,n=i.length,f=t.collision,g=f.parentA,y=f.parentB,w=f.normal,C=f.tangent;for(s=0;s<n;s++){var v=i[s],h=v.vertex,p=v.normalImpulse,d=v.tangentImpulse;if(p!==0||d!==0){var S=w.x*p+C.x*d,x=w.y*p+C.y*d;g.isStatic||g.isSleeping||(g.positionPrev.x+=S*g.inverseMass,g.positionPrev.y+=x*g.inverseMass,g.anglePrev+=g.inverseInertia*((h.x-g.position.x)*x-(h.y-g.position.y)*S)),y.isStatic||y.isSleeping||(y.positionPrev.x-=S*y.inverseMass,y.positionPrev.y-=x*y.inverseMass,y.anglePrev-=y.inverseInertia*((h.x-y.position.x)*x-(h.y-y.position.y)*S))}}}}},e.solveVelocity=function(c,o){var u=o/r._baseDelta,s=u*u,t=s*u,i=-e._restingThresh*u,n=e._restingThreshTangent,f=e._frictionNormalMultiplier*u,g=e._frictionMaxStatic,y=c.length,w,C,v,h;for(v=0;v<y;v++){var p=c[v];if(!(!p.isActive||p.isSensor)){var d=p.collision,S=d.parentA,x=d.parentB,M=S.velocity,P=x.velocity,B=d.normal.x,A=d.normal.y,T=d.tangent.x,L=d.tangent.y,R=p.activeContacts,D=R.length,O=1/D,V=S.inverseMass+x.inverseMass,U=p.friction*p.frictionStatic*f;for(M.x=S.position.x-S.positionPrev.x,M.y=S.position.y-S.positionPrev.y,P.x=x.position.x-x.positionPrev.x,P.y=x.position.y-x.positionPrev.y,S.angularVelocity=S.angle-S.anglePrev,x.angularVelocity=x.angle-x.anglePrev,h=0;h<D;h++){var k=R[h],G=k.vertex,H=G.x-S.position.x,$=G.y-S.position.y,b=G.x-x.position.x,Q=G.y-x.position.y,N=M.x-$*S.angularVelocity,le=M.y+H*S.angularVelocity,fe=P.x-Q*x.angularVelocity,ue=P.y+b*x.angularVelocity,ee=N-fe,te=le-ue,j=B*ee+A*te,K=T*ee+L*te,ie=p.separation+j,q=Math.min(ie,1);q=ie<0?0:q;var ne=q*U;K<-ne||K>ne?(C=K>0?K:-K,w=p.friction*(K>0?1:-1)*t,w<-C?w=-C:w>C&&(w=C)):(w=K,C=g);var se=H*A-$*B,ae=b*A-Q*B,re=O/(V+S.inverseInertia*se*se+x.inverseInertia*ae*ae),Z=(1+p.restitution)*j*re;if(w*=re,j<i)k.normalImpulse=0;else{var ce=k.normalImpulse;k.normalImpulse+=Z,k.normalImpulse>0&&(k.normalImpulse=0),Z=k.normalImpulse-ce}if(K<-n||K>n)k.tangentImpulse=0;else{var ve=k.tangentImpulse;k.tangentImpulse+=w,k.tangentImpulse<-C&&(k.tangentImpulse=-C),k.tangentImpulse>C&&(k.tangentImpulse=C),w=k.tangentImpulse-ve}var Y=B*Z+T*w,J=A*Z+L*w;S.isStatic||S.isSleeping||(S.positionPrev.x+=Y*S.inverseMass,S.positionPrev.y+=J*S.inverseMass,S.anglePrev+=(H*J-$*Y)*S.inverseInertia),x.isStatic||x.isSleeping||(x.positionPrev.x-=Y*x.inverseMass,x.positionPrev.y-=J*x.inverseMass,x.anglePrev-=(b*J-Q*Y)*x.inverseInertia)}}}}})()},function(I,E,m){var e={};I.exports=e;var l=m(9),r=m(0);(function(){e.create=function(a){return r.extend({table:{},list:[],collisionStart:[],collisionActive:[],collisionEnd:[]},a)},e.update=function(a,c,o){var u=a.list,s=u.length,t=a.table,i=c.length,n=a.collisionStart,f=a.collisionEnd,g=a.collisionActive,y,w,C,v;for(n.length=0,f.length=0,g.length=0,v=0;v<s;v++)u[v].confirmedActive=!1;for(v=0;v<i;v++)y=c[v],C=y.pair,C?(C.isActive?g.push(C):n.push(C),l.update(C,y,o),C.confirmedActive=!0):(C=l.create(y,o),t[C.id]=C,n.push(C),u.push(C));var h=[];for(s=u.length,v=0;v<s;v++)C=u[v],C.confirmedActive||(l.setActive(C,!1,o),f.push(C),!C.collision.bodyA.isSleeping&&!C.collision.bodyB.isSleeping&&h.push(v));for(v=0;v<h.length;v++)w=h[v]-v,C=u[w],u.splice(w,1),delete t[C.id]},e.clear=function(a){return a.table={},a.list.length=0,a.collisionStart.length=0,a.collisionActive.length=0,a.collisionEnd.length=0,a}})()},function(I,E,m){var e=I.exports=m(21);e.Axes=m(11),e.Bodies=m(12),e.Body=m(4),e.Bounds=m(1),e.Collision=m(8),e.Common=m(0),e.Composite=m(6),e.Composites=m(22),e.Constraint=m(10),e.Contact=m(16),e.Detector=m(13),e.Engine=m(17),e.Events=m(5),e.Grid=m(23),e.Mouse=m(14),e.MouseConstraint=m(24),e.Pair=m(9),e.Pairs=m(19),e.Plugin=m(15),e.Query=m(25),e.Render=m(26),e.Resolver=m(18),e.Runner=m(27),e.SAT=m(28),e.Sleeping=m(7),e.Svg=m(29),e.Vector=m(2),e.Vertices=m(3),e.World=m(30),e.Engine.run=e.Runner.run,e.Common.deprecated(e.Engine,"run","Engine.run ➤ use Matter.Runner.run(engine) instead")},function(I,E,m){var e={};I.exports=e;var l=m(15),r=m(0);(function(){e.name="matter-js",e.version="0.19.0",e.uses=[],e.used=[],e.use=function(){l.use(e,Array.prototype.slice.call(arguments))},e.before=function(a,c){return a=a.replace(/^Matter./,""),r.chainPathBefore(e,a,c)},e.after=function(a,c){return a=a.replace(/^Matter./,""),r.chainPathAfter(e,a,c)}})()},function(I,E,m){var e={};I.exports=e;var l=m(6),r=m(10),a=m(0),c=m(4),o=m(12),u=a.deprecated;(function(){e.stack=function(s,t,i,n,f,g,y){for(var w=l.create({label:"Stack"}),C=s,v=t,h,p=0,d=0;d<n;d++){for(var S=0,x=0;x<i;x++){var M=y(C,v,x,d,h,p);if(M){var P=M.bounds.max.y-M.bounds.min.y,B=M.bounds.max.x-M.bounds.min.x;P>S&&(S=P),c.translate(M,{x:B*.5,y:P*.5}),C=M.bounds.max.x+f,l.addBody(w,M),h=M,p+=1}else C+=f}v+=S+g,C=s}return w},e.chain=function(s,t,i,n,f,g){for(var y=s.bodies,w=1;w<y.length;w++){var C=y[w-1],v=y[w],h=C.bounds.max.y-C.bounds.min.y,p=C.bounds.max.x-C.bounds.min.x,d=v.bounds.max.y-v.bounds.min.y,S=v.bounds.max.x-v.bounds.min.x,x={bodyA:C,pointA:{x:p*t,y:h*i},bodyB:v,pointB:{x:S*n,y:d*f}},M=a.extend(x,g);l.addConstraint(s,r.create(M))}return s.label+=" Chain",s},e.mesh=function(s,t,i,n,f){var g=s.bodies,y,w,C,v,h;for(y=0;y<i;y++){for(w=1;w<t;w++)C=g[w-1+y*t],v=g[w+y*t],l.addConstraint(s,r.create(a.extend({bodyA:C,bodyB:v},f)));if(y>0)for(w=0;w<t;w++)C=g[w+(y-1)*t],v=g[w+y*t],l.addConstraint(s,r.create(a.extend({bodyA:C,bodyB:v},f))),n&&w>0&&(h=g[w-1+(y-1)*t],l.addConstraint(s,r.create(a.extend({bodyA:h,bodyB:v},f)))),n&&w<t-1&&(h=g[w+1+(y-1)*t],l.addConstraint(s,r.create(a.extend({bodyA:h,bodyB:v},f))))}return s.label+=" Mesh",s},e.pyramid=function(s,t,i,n,f,g,y){return e.stack(s,t,i,n,f,g,function(w,C,v,h,p,d){var S=Math.min(n,Math.ceil(i/2)),x=p?p.bounds.max.x-p.bounds.min.x:0;if(!(h>S)){h=S-h;var M=h,P=i-1-h;if(!(v<M||v>P)){d===1&&c.translate(p,{x:(v+(i%2===1?1:-1))*x,y:0});var B=p?v*x:0;return y(s+B+v*f,C,v,h,p,d)}}})},e.newtonsCradle=function(s,t,i,n,f){for(var g=l.create({label:"Newtons Cradle"}),y=0;y<i;y++){var w=1.9,C=o.circle(s+y*(n*w),t+f,n,{inertia:1/0,restitution:1,friction:0,frictionAir:1e-4,slop:1}),v=r.create({pointA:{x:s+y*(n*w),y:t},bodyB:C});l.addBody(g,C),l.addConstraint(g,v)}return g},u(e,"newtonsCradle","Composites.newtonsCradle ➤ moved to newtonsCradle example"),e.car=function(s,t,i,n,f){var g=c.nextGroup(!0),y=20,w=-i*.5+y,C=i*.5-y,v=0,h=l.create({label:"Car"}),p=o.rectangle(s,t,i,n,{collisionFilter:{group:g},chamfer:{radius:n*.5},density:2e-4}),d=o.circle(s+w,t+v,f,{collisionFilter:{group:g},friction:.8}),S=o.circle(s+C,t+v,f,{collisionFilter:{group:g},friction:.8}),x=r.create({bodyB:p,pointB:{x:w,y:v},bodyA:d,stiffness:1,length:0}),M=r.create({bodyB:p,pointB:{x:C,y:v},bodyA:S,stiffness:1,length:0});return l.addBody(h,p),l.addBody(h,d),l.addBody(h,S),l.addConstraint(h,x),l.addConstraint(h,M),h},u(e,"car","Composites.car ➤ moved to car example"),e.softBody=function(s,t,i,n,f,g,y,w,C,v){C=a.extend({inertia:1/0},C),v=a.extend({stiffness:.2,render:{type:"line",anchors:!1}},v);var h=e.stack(s,t,i,n,f,g,function(p,d){return o.circle(p,d,w,C)});return e.mesh(h,i,n,y,v),h.label="Soft Body",h},u(e,"softBody","Composites.softBody ➤ moved to softBody and cloth examples")})()},function(I,E,m){var e={};I.exports=e;var l=m(9),r=m(0),a=r.deprecated;(function(){e.create=function(c){var o={buckets:{},pairs:{},pairsList:[],bucketWidth:48,bucketHeight:48};return r.extend(o,c)},e.update=function(c,o,u,s){var t,i,n,f=u.world,g=c.buckets,y,w,C=!1;for(t=0;t<o.length;t++){var v=o[t];if(!(v.isSleeping&&!s)&&!(f.bounds&&(v.bounds.max.x<f.bounds.min.x||v.bounds.min.x>f.bounds.max.x||v.bounds.max.y<f.bounds.min.y||v.bounds.min.y>f.bounds.max.y))){var h=e._getRegion(c,v);if(!v.region||h.id!==v.region.id||s){(!v.region||s)&&(v.region=h);var p=e._regionUnion(h,v.region);for(i=p.startCol;i<=p.endCol;i++)for(n=p.startRow;n<=p.endRow;n++){w=e._getBucketId(i,n),y=g[w];var d=i>=h.startCol&&i<=h.endCol&&n>=h.startRow&&n<=h.endRow,S=i>=v.region.startCol&&i<=v.region.endCol&&n>=v.region.startRow&&n<=v.region.endRow;!d&&S&&S&&y&&e._bucketRemoveBody(c,y,v),(v.region===h||d&&!S||s)&&(y||(y=e._createBucket(g,w)),e._bucketAddBody(c,y,v))}v.region=h,C=!0}}}C&&(c.pairsList=e._createActivePairsList(c))},a(e,"update","Grid.update ➤ replaced by Matter.Detector"),e.clear=function(c){c.buckets={},c.pairs={},c.pairsList=[]},a(e,"clear","Grid.clear ➤ replaced by Matter.Detector"),e._regionUnion=function(c,o){var u=Math.min(c.startCol,o.startCol),s=Math.max(c.endCol,o.endCol),t=Math.min(c.startRow,o.startRow),i=Math.max(c.endRow,o.endRow);return e._createRegion(u,s,t,i)},e._getRegion=function(c,o){var u=o.bounds,s=Math.floor(u.min.x/c.bucketWidth),t=Math.floor(u.max.x/c.bucketWidth),i=Math.floor(u.min.y/c.bucketHeight),n=Math.floor(u.max.y/c.bucketHeight);return e._createRegion(s,t,i,n)},e._createRegion=function(c,o,u,s){return{id:c+","+o+","+u+","+s,startCol:c,endCol:o,startRow:u,endRow:s}},e._getBucketId=function(c,o){return"C"+c+"R"+o},e._createBucket=function(c,o){var u=c[o]=[];return u},e._bucketAddBody=function(c,o,u){var s=c.pairs,t=l.id,i=o.length,n;for(n=0;n<i;n++){var f=o[n];if(!(u.id===f.id||u.isStatic&&f.isStatic)){var g=t(u,f),y=s[g];y?y[2]+=1:s[g]=[u,f,1]}}o.push(u)},e._bucketRemoveBody=function(c,o,u){var s=c.pairs,t=l.id,i;o.splice(r.indexOf(o,u),1);var n=o.length;for(i=0;i<n;i++){var f=s[t(u,o[i])];f&&(f[2]-=1)}},e._createActivePairsList=function(c){var o,u=c.pairs,s=r.keys(u),t=s.length,i=[],n;for(n=0;n<t;n++)o=u[s[n]],o[2]>0?i.push(o):delete u[s[n]];return i}})()},function(I,E,m){var e={};I.exports=e;var l=m(3),r=m(7),a=m(14),c=m(5),o=m(13),u=m(10),s=m(6),t=m(0),i=m(1);(function(){e.create=function(n,f){var g=(n?n.mouse:null)||(f?f.mouse:null);g||(n&&n.render&&n.render.canvas?g=a.create(n.render.canvas):f&&f.element?g=a.create(f.element):(g=a.create(),t.warn("MouseConstraint.create: options.mouse was undefined, options.element was undefined, may not function as expected")));var y=u.create({label:"Mouse Constraint",pointA:g.position,pointB:{x:0,y:0},length:.01,stiffness:.1,angularStiffness:1,render:{strokeStyle:"#90EE90",lineWidth:3}}),w={type:"mouseConstraint",mouse:g,element:null,body:null,constraint:y,collisionFilter:{category:1,mask:4294967295,group:0}},C=t.extend(w,f);return c.on(n,"beforeUpdate",function(){var v=s.allBodies(n.world);e.update(C,v),e._triggerEvents(C)}),C},e.update=function(n,f){var g=n.mouse,y=n.constraint,w=n.body;if(g.button===0){if(y.bodyB)r.set(y.bodyB,!1),y.pointA=g.position;else for(var C=0;C<f.length;C++)if(w=f[C],i.contains(w.bounds,g.position)&&o.canCollide(w.collisionFilter,n.collisionFilter))for(var v=w.parts.length>1?1:0;v<w.parts.length;v++){var h=w.parts[v];if(l.contains(h.vertices,g.position)){y.pointA=g.position,y.bodyB=n.body=w,y.pointB={x:g.position.x-w.position.x,y:g.position.y-w.position.y},y.angleB=w.angle,r.set(w,!1),c.trigger(n,"startdrag",{mouse:g,body:w});break}}}else y.bodyB=n.body=null,y.pointB=null,w&&c.trigger(n,"enddrag",{mouse:g,body:w})},e._triggerEvents=function(n){var f=n.mouse,g=f.sourceEvents;g.mousemove&&c.trigger(n,"mousemove",{mouse:f}),g.mousedown&&c.trigger(n,"mousedown",{mouse:f}),g.mouseup&&c.trigger(n,"mouseup",{mouse:f}),a.clearSourceEvents(f)}})()},function(I,E,m){var e={};I.exports=e;var l=m(2),r=m(8),a=m(1),c=m(12),o=m(3);(function(){e.collides=function(u,s){for(var t=[],i=s.length,n=u.bounds,f=r.collides,g=a.overlaps,y=0;y<i;y++){var w=s[y],C=w.parts.length,v=C===1?0:1;if(g(w.bounds,n))for(var h=v;h<C;h++){var p=w.parts[h];if(g(p.bounds,n)){var d=f(p,u);if(d){t.push(d);break}}}}return t},e.ray=function(u,s,t,i){i=i||1e-100;for(var n=l.angle(s,t),f=l.magnitude(l.sub(s,t)),g=(t.x+s.x)*.5,y=(t.y+s.y)*.5,w=c.rectangle(g,y,f,i,{angle:n}),C=e.collides(w,u),v=0;v<C.length;v+=1){var h=C[v];h.body=h.bodyB=h.bodyA}return C},e.region=function(u,s,t){for(var i=[],n=0;n<u.length;n++){var f=u[n],g=a.overlaps(f.bounds,s);(g&&!t||!g&&t)&&i.push(f)}return i},e.point=function(u,s){for(var t=[],i=0;i<u.length;i++){var n=u[i];if(a.contains(n.bounds,s))for(var f=n.parts.length===1?0:1;f<n.parts.length;f++){var g=n.parts[f];if(a.contains(g.bounds,s)&&o.contains(g.vertices,s)){t.push(n);break}}}return t}})()},function(I,E,m){var e={};I.exports=e;var l=m(4),r=m(0),a=m(6),c=m(1),o=m(5),u=m(2),s=m(14);(function(){var t,i;typeof window<"u"&&(t=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||function(v){window.setTimeout(function(){v(r.now())},1e3/60)},i=window.cancelAnimationFrame||window.mozCancelAnimationFrame||window.webkitCancelAnimationFrame||window.msCancelAnimationFrame),e._goodFps=30,e._goodDelta=1e3/60,e.create=function(v){var h={engine:null,element:null,canvas:null,mouse:null,frameRequestId:null,timing:{historySize:60,delta:0,deltaHistory:[],lastTime:0,lastTimestamp:0,lastElapsed:0,timestampElapsed:0,timestampElapsedHistory:[],engineDeltaHistory:[],engineElapsedHistory:[],elapsedHistory:[]},options:{width:800,height:600,pixelRatio:1,background:"#14151f",wireframeBackground:"#14151f",hasBounds:!!v.bounds,enabled:!0,wireframes:!0,showSleeping:!0,showDebug:!1,showStats:!1,showPerformance:!1,showBounds:!1,showVelocity:!1,showCollisions:!1,showSeparations:!1,showAxes:!1,showPositions:!1,showAngleIndicator:!1,showIds:!1,showVertexNumbers:!1,showConvexHulls:!1,showInternalEdges:!1,showMousePosition:!1}},p=r.extend(h,v);return p.canvas&&(p.canvas.width=p.options.width||p.canvas.width,p.canvas.height=p.options.height||p.canvas.height),p.mouse=v.mouse,p.engine=v.engine,p.canvas=p.canvas||g(p.options.width,p.options.height),p.context=p.canvas.getContext("2d"),p.textures={},p.bounds=p.bounds||{min:{x:0,y:0},max:{x:p.canvas.width,y:p.canvas.height}},p.controller=e,p.options.showBroadphase=!1,p.options.pixelRatio!==1&&e.setPixelRatio(p,p.options.pixelRatio),r.isElement(p.element)&&p.element.appendChild(p.canvas),p},e.run=function(v){(function h(p){v.frameRequestId=t(h),n(v,p),e.world(v,p),(v.options.showStats||v.options.showDebug)&&e.stats(v,v.context,p),(v.options.showPerformance||v.options.showDebug)&&e.performance(v,v.context,p)})()},e.stop=function(v){i(v.frameRequestId)},e.setPixelRatio=function(v,h){var p=v.options,d=v.canvas;h==="auto"&&(h=y(d)),p.pixelRatio=h,d.setAttribute("data-pixel-ratio",h),d.width=p.width*h,d.height=p.height*h,d.style.width=p.width+"px",d.style.height=p.height+"px"},e.lookAt=function(v,h,p,d){d=typeof d<"u"?d:!0,h=r.isArray(h)?h:[h],p=p||{x:0,y:0};for(var S={min:{x:1/0,y:1/0},max:{x:-1/0,y:-1/0}},x=0;x<h.length;x+=1){var M=h[x],P=M.bounds?M.bounds.min:M.min||M.position||M,B=M.bounds?M.bounds.max:M.max||M.position||M;P&&B&&(P.x<S.min.x&&(S.min.x=P.x),B.x>S.max.x&&(S.max.x=B.x),P.y<S.min.y&&(S.min.y=P.y),B.y>S.max.y&&(S.max.y=B.y))}var A=S.max.x-S.min.x+2*p.x,T=S.max.y-S.min.y+2*p.y,L=v.canvas.height,R=v.canvas.width,D=R/L,O=A/T,V=1,U=1;O>D?U=O/D:V=D/O,v.options.hasBounds=!0,v.bounds.min.x=S.min.x,v.bounds.max.x=S.min.x+A*V,v.bounds.min.y=S.min.y,v.bounds.max.y=S.min.y+T*U,d&&(v.bounds.min.x+=A*.5-A*V*.5,v.bounds.max.x+=A*.5-A*V*.5,v.bounds.min.y+=T*.5-T*U*.5,v.bounds.max.y+=T*.5-T*U*.5),v.bounds.min.x-=p.x,v.bounds.max.x-=p.x,v.bounds.min.y-=p.y,v.bounds.max.y-=p.y,v.mouse&&(s.setScale(v.mouse,{x:(v.bounds.max.x-v.bounds.min.x)/v.canvas.width,y:(v.bounds.max.y-v.bounds.min.y)/v.canvas.height}),s.setOffset(v.mouse,v.bounds.min))},e.startViewTransform=function(v){var h=v.bounds.max.x-v.bounds.min.x,p=v.bounds.max.y-v.bounds.min.y,d=h/v.options.width,S=p/v.options.height;v.context.setTransform(v.options.pixelRatio/d,0,0,v.options.pixelRatio/S,0,0),v.context.translate(-v.bounds.min.x,-v.bounds.min.y)},e.endViewTransform=function(v){v.context.setTransform(v.options.pixelRatio,0,0,v.options.pixelRatio,0,0)},e.world=function(v,h){var p=r.now(),d=v.engine,S=d.world,x=v.canvas,M=v.context,P=v.options,B=v.timing,A=a.allBodies(S),T=a.allConstraints(S),L=P.wireframes?P.wireframeBackground:P.background,R=[],D=[],O,V={timestamp:d.timing.timestamp};if(o.trigger(v,"beforeRender",V),v.currentBackground!==L&&C(v,L),M.globalCompositeOperation="source-in",M.fillStyle="transparent",M.fillRect(0,0,x.width,x.height),M.globalCompositeOperation="source-over",P.hasBounds){for(O=0;O<A.length;O++){var U=A[O];c.overlaps(U.bounds,v.bounds)&&R.push(U)}for(O=0;O<T.length;O++){var k=T[O],G=k.bodyA,H=k.bodyB,$=k.pointA,b=k.pointB;G&&($=u.add(G.position,k.pointA)),H&&(b=u.add(H.position,k.pointB)),!(!$||!b)&&(c.contains(v.bounds,$)||c.contains(v.bounds,b))&&D.push(k)}e.startViewTransform(v),v.mouse&&(s.setScale(v.mouse,{x:(v.bounds.max.x-v.bounds.min.x)/v.options.width,y:(v.bounds.max.y-v.bounds.min.y)/v.options.height}),s.setOffset(v.mouse,v.bounds.min))}else D=T,R=A,v.options.pixelRatio!==1&&v.context.setTransform(v.options.pixelRatio,0,0,v.options.pixelRatio,0,0);!P.wireframes||d.enableSleeping&&P.showSleeping?e.bodies(v,R,M):(P.showConvexHulls&&e.bodyConvexHulls(v,R,M),e.bodyWireframes(v,R,M)),P.showBounds&&e.bodyBounds(v,R,M),(P.showAxes||P.showAngleIndicator)&&e.bodyAxes(v,R,M),P.showPositions&&e.bodyPositions(v,R,M),P.showVelocity&&e.bodyVelocity(v,R,M),P.showIds&&e.bodyIds(v,R,M),P.showSeparations&&e.separations(v,d.pairs.list,M),P.showCollisions&&e.collisions(v,d.pairs.list,M),P.showVertexNumbers&&e.vertexNumbers(v,R,M),P.showMousePosition&&e.mousePosition(v,v.mouse,M),e.constraints(D,M),P.hasBounds&&e.endViewTransform(v),o.trigger(v,"afterRender",V),B.lastElapsed=r.now()-p},e.stats=function(v,h,p){for(var d=v.engine,S=d.world,x=a.allBodies(S),M=0,P=55,B=44,A=0,T=0,L=0;L<x.length;L+=1)M+=x[L].parts.length;var R={Part:M,Body:x.length,Cons:a.allConstraints(S).length,Comp:a.allComposites(S).length,Pair:d.pairs.list.length};h.fillStyle="#0e0f19",h.fillRect(A,T,P*5.5,B),h.font="12px Arial",h.textBaseline="top",h.textAlign="right";for(var D in R){var O=R[D];h.fillStyle="#aaa",h.fillText(D,A+P,T+8),h.fillStyle="#eee",h.fillText(O,A+P,T+26),A+=P}},e.performance=function(v,h){var p=v.engine,d=v.timing,S=d.deltaHistory,x=d.elapsedHistory,M=d.timestampElapsedHistory,P=d.engineDeltaHistory,B=d.engineElapsedHistory,A=p.timing.lastDelta,T=f(S),L=f(x),R=f(P),D=f(B),O=f(M),V=O/T||0,U=1e3/T||0,k=4,G=12,H=60,$=34,b=10,Q=69;h.fillStyle="#0e0f19",h.fillRect(0,50,G*4+H*5+22,$),e.status(h,b,Q,H,k,S.length,Math.round(U)+" fps",U/e._goodFps,function(N){return S[N]/T-1}),e.status(h,b+G+H,Q,H,k,P.length,A.toFixed(2)+" dt",e._goodDelta/A,function(N){return P[N]/R-1}),e.status(h,b+(G+H)*2,Q,H,k,B.length,D.toFixed(2)+" ut",1-D/e._goodFps,function(N){return B[N]/D-1}),e.status(h,b+(G+H)*3,Q,H,k,x.length,L.toFixed(2)+" rt",1-L/e._goodFps,function(N){return x[N]/L-1}),e.status(h,b+(G+H)*4,Q,H,k,M.length,V.toFixed(2)+" x",V*V*V,function(N){return(M[N]/S[N]/V||0)-1})},e.status=function(v,h,p,d,S,x,M,P,B){v.strokeStyle="#888",v.fillStyle="#444",v.lineWidth=1,v.fillRect(h,p+7,d,1),v.beginPath(),v.moveTo(h,p+7-S*r.clamp(.4*B(0),-2,2));for(var A=0;A<d;A+=1)v.lineTo(h+A,p+7-(A<x?S*r.clamp(.4*B(A),-2,2):0));v.stroke(),v.fillStyle="hsl("+r.clamp(25+95*P,0,120)+",100%,60%)",v.fillRect(h,p-7,4,4),v.font="12px Arial",v.textBaseline="middle",v.textAlign="right",v.fillStyle="#eee",v.fillText(M,h+d,p-5)},e.constraints=function(v,h){for(var p=h,d=0;d<v.length;d++){var S=v[d];if(!(!S.render.visible||!S.pointA||!S.pointB)){var x=S.bodyA,M=S.bodyB,P,B;if(x?P=u.add(x.position,S.pointA):P=S.pointA,S.render.type==="pin")p.beginPath(),p.arc(P.x,P.y,3,0,2*Math.PI),p.closePath();else{if(M?B=u.add(M.position,S.pointB):B=S.pointB,p.beginPath(),p.moveTo(P.x,P.y),S.render.type==="spring")for(var A=u.sub(B,P),T=u.perp(u.normalise(A)),L=Math.ceil(r.clamp(S.length/5,12,20)),R,D=1;D<L;D+=1)R=D%2===0?1:-1,p.lineTo(P.x+A.x*(D/L)+T.x*R*4,P.y+A.y*(D/L)+T.y*R*4);p.lineTo(B.x,B.y)}S.render.lineWidth&&(p.lineWidth=S.render.lineWidth,p.strokeStyle=S.render.strokeStyle,p.stroke()),S.render.anchors&&(p.fillStyle=S.render.strokeStyle,p.beginPath(),p.arc(P.x,P.y,3,0,2*Math.PI),p.arc(B.x,B.y,3,0,2*Math.PI),p.closePath(),p.fill())}}},e.bodies=function(v,h,p){var d=p;v.engine;var S=v.options,x=S.showInternalEdges||!S.wireframes,M,P,B,A;for(B=0;B<h.length;B++)if(M=h[B],!!M.render.visible){for(A=M.parts.length>1?1:0;A<M.parts.length;A++)if(P=M.parts[A],!!P.render.visible){if(S.showSleeping&&M.isSleeping?d.globalAlpha=.5*P.render.opacity:P.render.opacity!==1&&(d.globalAlpha=P.render.opacity),P.render.sprite&&P.render.sprite.texture&&!S.wireframes){var T=P.render.sprite,L=w(v,T.texture);d.translate(P.position.x,P.position.y),d.rotate(P.angle),d.drawImage(L,L.width*-T.xOffset*T.xScale,L.height*-T.yOffset*T.yScale,L.width*T.xScale,L.height*T.yScale),d.rotate(-P.angle),d.translate(-P.position.x,-P.position.y)}else{if(P.circleRadius)d.beginPath(),d.arc(P.position.x,P.position.y,P.circleRadius,0,2*Math.PI);else{d.beginPath(),d.moveTo(P.vertices[0].x,P.vertices[0].y);for(var R=1;R<P.vertices.length;R++)!P.vertices[R-1].isInternal||x?d.lineTo(P.vertices[R].x,P.vertices[R].y):d.moveTo(P.vertices[R].x,P.vertices[R].y),P.vertices[R].isInternal&&!x&&d.moveTo(P.vertices[(R+1)%P.vertices.length].x,P.vertices[(R+1)%P.vertices.length].y);d.lineTo(P.vertices[0].x,P.vertices[0].y),d.closePath()}S.wireframes?(d.lineWidth=1,d.strokeStyle="#bbb",d.stroke()):(d.fillStyle=P.render.fillStyle,P.render.lineWidth&&(d.lineWidth=P.render.lineWidth,d.strokeStyle=P.render.strokeStyle,d.stroke()),d.fill())}d.globalAlpha=1}}},e.bodyWireframes=function(v,h,p){var d=p,S=v.options.showInternalEdges,x,M,P,B,A;for(d.beginPath(),P=0;P<h.length;P++)if(x=h[P],!!x.render.visible)for(A=x.parts.length>1?1:0;A<x.parts.length;A++){for(M=x.parts[A],d.moveTo(M.vertices[0].x,M.vertices[0].y),B=1;B<M.vertices.length;B++)!M.vertices[B-1].isInternal||S?d.lineTo(M.vertices[B].x,M.vertices[B].y):d.moveTo(M.vertices[B].x,M.vertices[B].y),M.vertices[B].isInternal&&!S&&d.moveTo(M.vertices[(B+1)%M.vertices.length].x,M.vertices[(B+1)%M.vertices.length].y);d.lineTo(M.vertices[0].x,M.vertices[0].y)}d.lineWidth=1,d.strokeStyle="#bbb",d.stroke()},e.bodyConvexHulls=function(v,h,p){var d=p,S,x,M;for(d.beginPath(),x=0;x<h.length;x++)if(S=h[x],!(!S.render.visible||S.parts.length===1)){for(d.moveTo(S.vertices[0].x,S.vertices[0].y),M=1;M<S.vertices.length;M++)d.lineTo(S.vertices[M].x,S.vertices[M].y);d.lineTo(S.vertices[0].x,S.vertices[0].y)}d.lineWidth=1,d.strokeStyle="rgba(255,255,255,0.2)",d.stroke()},e.vertexNumbers=function(v,h,p){var d=p,S,x,M;for(S=0;S<h.length;S++){var P=h[S].parts;for(M=P.length>1?1:0;M<P.length;M++){var B=P[M];for(x=0;x<B.vertices.length;x++)d.fillStyle="rgba(255,255,255,0.2)",d.fillText(S+"_"+x,B.position.x+(B.vertices[x].x-B.position.x)*.8,B.position.y+(B.vertices[x].y-B.position.y)*.8)}}},e.mousePosition=function(v,h,p){var d=p;d.fillStyle="rgba(255,255,255,0.8)",d.fillText(h.position.x+"  "+h.position.y,h.position.x+5,h.position.y-5)},e.bodyBounds=function(v,h,p){var d=p;v.engine;var S=v.options;d.beginPath();for(var x=0;x<h.length;x++){var M=h[x];if(M.render.visible)for(var P=h[x].parts,B=P.length>1?1:0;B<P.length;B++){var A=P[B];d.rect(A.bounds.min.x,A.bounds.min.y,A.bounds.max.x-A.bounds.min.x,A.bounds.max.y-A.bounds.min.y)}}S.wireframes?d.strokeStyle="rgba(255,255,255,0.08)":d.strokeStyle="rgba(0,0,0,0.1)",d.lineWidth=1,d.stroke()},e.bodyAxes=function(v,h,p){var d=p;v.engine;var S=v.options,x,M,P,B;for(d.beginPath(),M=0;M<h.length;M++){var A=h[M],T=A.parts;if(A.render.visible)if(S.showAxes)for(P=T.length>1?1:0;P<T.length;P++)for(x=T[P],B=0;B<x.axes.length;B++){var L=x.axes[B];d.moveTo(x.position.x,x.position.y),d.lineTo(x.position.x+L.x*20,x.position.y+L.y*20)}else for(P=T.length>1?1:0;P<T.length;P++)for(x=T[P],B=0;B<x.axes.length;B++)d.moveTo(x.position.x,x.position.y),d.lineTo((x.vertices[0].x+x.vertices[x.vertices.length-1].x)/2,(x.vertices[0].y+x.vertices[x.vertices.length-1].y)/2)}S.wireframes?(d.strokeStyle="indianred",d.lineWidth=1):(d.strokeStyle="rgba(255, 255, 255, 0.4)",d.globalCompositeOperation="overlay",d.lineWidth=2),d.stroke(),d.globalCompositeOperation="source-over"},e.bodyPositions=function(v,h,p){var d=p;v.engine;var S=v.options,x,M,P,B;for(d.beginPath(),P=0;P<h.length;P++)if(x=h[P],!!x.render.visible)for(B=0;B<x.parts.length;B++)M=x.parts[B],d.arc(M.position.x,M.position.y,3,0,2*Math.PI,!1),d.closePath();for(S.wireframes?d.fillStyle="indianred":d.fillStyle="rgba(0,0,0,0.5)",d.fill(),d.beginPath(),P=0;P<h.length;P++)x=h[P],x.render.visible&&(d.arc(x.positionPrev.x,x.positionPrev.y,2,0,2*Math.PI,!1),d.closePath());d.fillStyle="rgba(255,165,0,0.8)",d.fill()},e.bodyVelocity=function(v,h,p){var d=p;d.beginPath();for(var S=0;S<h.length;S++){var x=h[S];if(x.render.visible){var M=l.getVelocity(x);d.moveTo(x.position.x,x.position.y),d.lineTo(x.position.x+M.x,x.position.y+M.y)}}d.lineWidth=3,d.strokeStyle="cornflowerblue",d.stroke()},e.bodyIds=function(v,h,p){var d=p,S,x;for(S=0;S<h.length;S++)if(h[S].render.visible){var M=h[S].parts;for(x=M.length>1?1:0;x<M.length;x++){var P=M[x];d.font="12px Arial",d.fillStyle="rgba(255,255,255,0.5)",d.fillText(P.id,P.position.x+10,P.position.y-10)}}},e.collisions=function(v,h,p){var d=p,S=v.options,x,M,P,B;for(d.beginPath(),P=0;P<h.length;P++)if(x=h[P],!!x.isActive)for(M=x.collision,B=0;B<x.activeContacts.length;B++){var A=x.activeContacts[B],T=A.vertex;d.rect(T.x-1.5,T.y-1.5,3.5,3.5)}for(S.wireframes?d.fillStyle="rgba(255,255,255,0.7)":d.fillStyle="orange",d.fill(),d.beginPath(),P=0;P<h.length;P++)if(x=h[P],!!x.isActive&&(M=x.collision,x.activeContacts.length>0)){var L=x.activeContacts[0].vertex.x,R=x.activeContacts[0].vertex.y;x.activeContacts.length===2&&(L=(x.activeContacts[0].vertex.x+x.activeContacts[1].vertex.x)/2,R=(x.activeContacts[0].vertex.y+x.activeContacts[1].vertex.y)/2),M.bodyB===M.supports[0].body||M.bodyA.isStatic===!0?d.moveTo(L-M.normal.x*8,R-M.normal.y*8):d.moveTo(L+M.normal.x*8,R+M.normal.y*8),d.lineTo(L,R)}S.wireframes?d.strokeStyle="rgba(255,165,0,0.7)":d.strokeStyle="orange",d.lineWidth=1,d.stroke()},e.separations=function(v,h,p){var d=p,S=v.options,x,M,P,B,A;for(d.beginPath(),A=0;A<h.length;A++)if(x=h[A],!!x.isActive){M=x.collision,P=M.bodyA,B=M.bodyB;var T=1;!B.isStatic&&!P.isStatic&&(T=.5),B.isStatic&&(T=0),d.moveTo(B.position.x,B.position.y),d.lineTo(B.position.x-M.penetration.x*T,B.position.y-M.penetration.y*T),T=1,!B.isStatic&&!P.isStatic&&(T=.5),P.isStatic&&(T=0),d.moveTo(P.position.x,P.position.y),d.lineTo(P.position.x+M.penetration.x*T,P.position.y+M.penetration.y*T)}S.wireframes?d.strokeStyle="rgba(255,165,0,0.5)":d.strokeStyle="orange",d.stroke()},e.inspector=function(v,h){v.engine;var p=v.selected,d=v.render,S=d.options,x;if(S.hasBounds){var M=d.bounds.max.x-d.bounds.min.x,P=d.bounds.max.y-d.bounds.min.y,B=M/d.options.width,A=P/d.options.height;h.scale(1/B,1/A),h.translate(-d.bounds.min.x,-d.bounds.min.y)}for(var T=0;T<p.length;T++){var L=p[T].data;switch(h.translate(.5,.5),h.lineWidth=1,h.strokeStyle="rgba(255,165,0,0.9)",h.setLineDash([1,2]),L.type){case"body":x=L.bounds,h.beginPath(),h.rect(Math.floor(x.min.x-3),Math.floor(x.min.y-3),Math.floor(x.max.x-x.min.x+6),Math.floor(x.max.y-x.min.y+6)),h.closePath(),h.stroke();break;case"constraint":var R=L.pointA;L.bodyA&&(R=L.pointB),h.beginPath(),h.arc(R.x,R.y,10,0,2*Math.PI),h.closePath(),h.stroke();break}h.setLineDash([]),h.translate(-.5,-.5)}v.selectStart!==null&&(h.translate(.5,.5),h.lineWidth=1,h.strokeStyle="rgba(255,165,0,0.6)",h.fillStyle="rgba(255,165,0,0.1)",x=v.selectBounds,h.beginPath(),h.rect(Math.floor(x.min.x),Math.floor(x.min.y),Math.floor(x.max.x-x.min.x),Math.floor(x.max.y-x.min.y)),h.closePath(),h.stroke(),h.fill(),h.translate(-.5,-.5)),S.hasBounds&&h.setTransform(1,0,0,1,0,0)};var n=function(v,h){var p=v.engine,d=v.timing,S=d.historySize,x=p.timing.timestamp;d.delta=h-d.lastTime||e._goodDelta,d.lastTime=h,d.timestampElapsed=x-d.lastTimestamp||0,d.lastTimestamp=x,d.deltaHistory.unshift(d.delta),d.deltaHistory.length=Math.min(d.deltaHistory.length,S),d.engineDeltaHistory.unshift(p.timing.lastDelta),d.engineDeltaHistory.length=Math.min(d.engineDeltaHistory.length,S),d.timestampElapsedHistory.unshift(d.timestampElapsed),d.timestampElapsedHistory.length=Math.min(d.timestampElapsedHistory.length,S),d.engineElapsedHistory.unshift(p.timing.lastElapsed),d.engineElapsedHistory.length=Math.min(d.engineElapsedHistory.length,S),d.elapsedHistory.unshift(d.lastElapsed),d.elapsedHistory.length=Math.min(d.elapsedHistory.length,S)},f=function(v){for(var h=0,p=0;p<v.length;p+=1)h+=v[p];return h/v.length||0},g=function(v,h){var p=document.createElement("canvas");return p.width=v,p.height=h,p.oncontextmenu=function(){return!1},p.onselectstart=function(){return!1},p},y=function(v){var h=v.getContext("2d"),p=window.devicePixelRatio||1,d=h.webkitBackingStorePixelRatio||h.mozBackingStorePixelRatio||h.msBackingStorePixelRatio||h.oBackingStorePixelRatio||h.backingStorePixelRatio||1;return p/d},w=function(v,h){var p=v.textures[h];return p||(p=v.textures[h]=new Image,p.src=h,p)},C=function(v,h){var p=h;/(jpg|gif|png)$/.test(h)&&(p="url("+h+")"),v.canvas.style.background=p,v.canvas.style.backgroundSize="contain",v.currentBackground=h}})()},function(I,E,m){var e={};I.exports=e;var l=m(5),r=m(17),a=m(0);(function(){var c,o;if(typeof window<"u"&&(c=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame,o=window.cancelAnimationFrame||window.mozCancelAnimationFrame||window.webkitCancelAnimationFrame||window.msCancelAnimationFrame),!c){var u;c=function(s){u=setTimeout(function(){s(a.now())},1e3/60)},o=function(){clearTimeout(u)}}e.create=function(s){var t={fps:60,deltaSampleSize:60,counterTimestamp:0,frameCounter:0,deltaHistory:[],timePrev:null,frameRequestId:null,isFixed:!1,enabled:!0},i=a.extend(t,s);return i.delta=i.delta||1e3/i.fps,i.deltaMin=i.deltaMin||1e3/i.fps,i.deltaMax=i.deltaMax||1e3/(i.fps*.5),i.fps=1e3/i.delta,i},e.run=function(s,t){return typeof s.positionIterations<"u"&&(t=s,s=e.create()),function i(n){s.frameRequestId=c(i),n&&s.enabled&&e.tick(s,t,n)}(),s},e.tick=function(s,t,i){var n=t.timing,f;s.isFixed?f=s.delta:(f=i-s.timePrev||s.delta,s.timePrev=i,s.deltaHistory.push(f),s.deltaHistory=s.deltaHistory.slice(-s.deltaSampleSize),f=Math.min.apply(null,s.deltaHistory),f=f<s.deltaMin?s.deltaMin:f,f=f>s.deltaMax?s.deltaMax:f,s.delta=f);var g={timestamp:n.timestamp};l.trigger(s,"beforeTick",g),s.frameCounter+=1,i-s.counterTimestamp>=1e3&&(s.fps=s.frameCounter*((i-s.counterTimestamp)/1e3),s.counterTimestamp=i,s.frameCounter=0),l.trigger(s,"tick",g),l.trigger(s,"beforeUpdate",g),r.update(t,f),l.trigger(s,"afterUpdate",g),l.trigger(s,"afterTick",g)},e.stop=function(s){o(s.frameRequestId)},e.start=function(s,t){e.run(s,t)}})()},function(I,E,m){var e={};I.exports=e;var l=m(8),r=m(0),a=r.deprecated;(function(){e.collides=function(c,o){return l.collides(c,o)},a(e,"collides","SAT.collides ➤ replaced by Collision.collides")})()},function(I,E,m){var e={};I.exports=e,m(1);var l=m(0);(function(){e.pathToVertices=function(r,a){typeof window<"u"&&!("SVGPathSeg"in window)&&l.warn("Svg.pathToVertices: SVGPathSeg not defined, a polyfill is required.");var c,o,u,s,t,i,n,f,g,y,w=[],C,v,h=0,p=0,d=0;a=a||15;var S=function(M,P,B){var A=B%2===1&&B>1;if(!g||M!=g.x||P!=g.y){g&&A?(C=g.x,v=g.y):(C=0,v=0);var T={x:C+M,y:v+P};(A||!g)&&(g=T),w.push(T),p=C+M,d=v+P}},x=function(M){var P=M.pathSegTypeAsLetter.toUpperCase();if(P!=="Z"){switch(P){case"M":case"L":case"T":case"C":case"S":case"Q":p=M.x,d=M.y;break;case"H":p=M.x;break;case"V":d=M.y;break}S(p,d,M.pathSegType)}};for(e._svgPathToAbsolute(r),u=r.getTotalLength(),i=[],c=0;c<r.pathSegList.numberOfItems;c+=1)i.push(r.pathSegList.getItem(c));for(n=i.concat();h<u;){if(y=r.getPathSegAtLength(h),t=i[y],t!=f){for(;n.length&&n[0]!=t;)x(n.shift());f=t}switch(t.pathSegTypeAsLetter.toUpperCase()){case"C":case"T":case"S":case"Q":case"A":s=r.getPointAtLength(h),S(s.x,s.y,0);break}h+=a}for(c=0,o=n.length;c<o;++c)x(n[c]);return w},e._svgPathToAbsolute=function(r){for(var a,c,o,u,s,t,i=r.pathSegList,n=0,f=0,g=i.numberOfItems,y=0;y<g;++y){var w=i.getItem(y),C=w.pathSegTypeAsLetter;if(/[MLHVCSQTA]/.test(C))"x"in w&&(n=w.x),"y"in w&&(f=w.y);else switch("x1"in w&&(o=n+w.x1),"x2"in w&&(s=n+w.x2),"y1"in w&&(u=f+w.y1),"y2"in w&&(t=f+w.y2),"x"in w&&(n+=w.x),"y"in w&&(f+=w.y),C){case"m":i.replaceItem(r.createSVGPathSegMovetoAbs(n,f),y);break;case"l":i.replaceItem(r.createSVGPathSegLinetoAbs(n,f),y);break;case"h":i.replaceItem(r.createSVGPathSegLinetoHorizontalAbs(n),y);break;case"v":i.replaceItem(r.createSVGPathSegLinetoVerticalAbs(f),y);break;case"c":i.replaceItem(r.createSVGPathSegCurvetoCubicAbs(n,f,o,u,s,t),y);break;case"s":i.replaceItem(r.createSVGPathSegCurvetoCubicSmoothAbs(n,f,s,t),y);break;case"q":i.replaceItem(r.createSVGPathSegCurvetoQuadraticAbs(n,f,o,u),y);break;case"t":i.replaceItem(r.createSVGPathSegCurvetoQuadraticSmoothAbs(n,f),y);break;case"a":i.replaceItem(r.createSVGPathSegArcAbs(n,f,w.r1,w.r2,w.angle,w.largeArcFlag,w.sweepFlag),y);break;case"z":case"Z":n=a,f=c;break}(C=="M"||C=="m")&&(a=n,c=f)}}})()},function(I,E,m){var e={};I.exports=e;var l=m(6);m(0),function(){e.create=l.create,e.add=l.add,e.remove=l.remove,e.clear=l.clear,e.addComposite=l.addComposite,e.addBody=l.addBody,e.addConstraint=l.addConstraint}()}])})})(oe);var W=oe.exports;class me{constructor(){this.gameEngine=W.Engine.create(),this.gameWorld=this.gameEngine.world,this.gameMouse=null,this.gamePlayableWidth=500,this.gamePlayableHeight=600,this.gameFruit=null,this.gameFruitBody=null,this.gameFruitNext=null,this.gameFruits=this.gameFruits=[{id:0,name:"Scout",radius:33/2,rarity:1,texture:"assets/images/mercs/Scout.png",points:5,friction:.1,restitution:.01},{id:1,name:"Soldier",radius:48/2,rarity:2,texture:"assets/images/mercs/Soldier.png",points:10,friction:.1,restitution:.02},{id:2,name:"Pyro",radius:61/2,rarity:3,texture:"assets/images/mercs/Pyro.png",points:15,friction:.1,restitution:.03},{id:3,name:"Demoman",radius:69/2,rarity:4,texture:"assets/images/mercs/Demoman.png",points:20,friction:.1,restitution:.04},{id:4,name:"Heavy",radius:89/2,rarity:0,texture:"assets/images/mercs/Heavy.png",points:25,friction:.1,restitution:.05},{id:5,name:"Engineer",radius:114/2,rarity:0,texture:"assets/images/mercs/Engineer.png",points:30,friction:.1,restitution:.06},{id:6,name:"Medic",radius:129/2,rarity:0,texture:"assets/images/mercs/Medic.png",points:35,friction:.1,restitution:.07},{id:7,name:"Sniper",radius:156/2,rarity:0,texture:"assets/images/mercs/Sniper.png",points:40,friction:.1,restitution:.08},{id:8,name:"Spy",radius:177/2,rarity:0,texture:"assets/images/mercs/Spy.png",points:45,friction:.1,restitution:.09},{id:9,name:"Saxton Hale",radius:220/2,rarity:0,texture:"assets/images/mercs/Saxton Hale.png",points:50,friction:.1,restitution:.1}],this.userScore=0,this.userScoreBest=parseInt(localStorage.getItem("t-scorebest"))||0,this.userScoreBestPrev=this.userScore,this.userCanClick=!0,this.userGameOver=!1,this.upgradeRandomCrit=!1,this.upgradeUber=!1,this.upgradeBackToBase=!1,this.setupGameHtml(),this.setupControls(),this.setupCollision(),this.setupFruitTable(),this.setupTopScoresTable(),this.updateUserScore(0)}handleDropFruit(){this.userCanClick&&(this.gameFruitBody.isSleeping=!1,this.userCanClick=!1,setTimeout(()=>{this.spawnFruit(this.gameFruitNext),this.userCanClick=!0},1e3))}handleMouseMove(F){const E=document.getElementById("t-game").getBoundingClientRect(),m=F.clientX-E.left;this.gameMouseX=m>=20&&m<=480?m:null,this.userCanClick&&this.gameMouseX&&this.gameFruitBody&&W.Body.setPosition(this.gameFruitBody,{x:this.gameMouseX,y:this.gameFruitBody.position.y})}handleMouseClick(F){this.gameMouseX&&this.handleDropFruit()}handleKeyDown(F){const E={KeyH:()=>this.upgradeHandlerBackToBase()}[F.code];E&&E()}getFruit(F){const I=this.gameFruits.find(E=>E.name===F);if(I){const m=(this.gameFruits.indexOf(I)+1)%this.gameFruits.length,e=this.gameFruits[m];return[I,e]}else console.log(`ERROR: ${F} NOT FOUND IN DEFS.`)}updateUserScore(F){this.userScore+=F,this.userScore>this.userScoreBest&&(this.userScoreBest=this.userScore,localStorage.setItem("t-scorebest",this.userScore),z.playSfx("assets/audio/ball_stolen.wav"));const I=document.getElementById("t-score"),E=document.getElementById("t-score-best");I&&(I.textContent=`Score: ${this.userScore}`,E.textContent=`Best: ${this.userScoreBest}`)}setupCollision(){W.Events.on(this.gameEngine,"collisionStart",F=>{F.pairs.forEach(I=>{const{bodyA:E,bodyB:m}=I;this.userCanClick&&(E.name==="boxLimit"||m.name==="boxLimit")?this.handleCollisionGameOver():this.handleCollision(I)})})}setupControls(){window.addEventListener("mousemove",F=>{this.userGameOver||this.handleMouseMove(F)}),window.addEventListener("click",F=>{this.userGameOver||this.handleMouseClick(F)}),window.addEventListener("keydown",F=>{this.userGameOver||this.handleKeyDown(F)})}handleCollision(F){const{bodyA:I,bodyB:E}=F;if(I.isFruit&&E.isFruit){if(I.label==="UPGRADE_RANDOM_CRIT"||E.label==="UPGRADE_RANDOM_CRIT"){z.playSfx("assets/audio/crit_hit.wav");let m=I.label;I.isPowerup&&(m=E.label);const e=this.getFruit(m);W.World.remove(this.gameWorld,[I,E]);const l=e[1],r=F.collision.supports[0],a=W.Bodies.circle(r.x,r.y,l.radius,{label:l.name,isFruit:!0,isPowerup:!1,isSleeping:!1,render:{sprite:{texture:`${l.texture}`}},friction:l.friction,restitution:l.restitution});W.World.add(this.gameWorld,a);const c=W.Bodies.rectangle(F.collision.supports[0].x,F.collision.supports[0].y,1,1,{isSleeping:!1,collisionFilter:0,render:{sprite:{texture:"assets/images/effects/mvm_pow_crit.png"}},friction:1,frictionAir:0,restitution:1});W.World.add(this.gameWorld,c),setTimeout(()=>{W.World.remove(this.gameWorld,c)},500)}else if(I.label===E.label){if(I.label==="Saxton Hale")return;z.playSfx("assets/audio/col.mp3"),W.World.remove(this.gameWorld,[I,E]);const m=this.getFruit(I.label),e=m[1],l=F.collision.supports[0],r=W.Bodies.circle(l.x,l.y,e.radius,{label:e.name,isFruit:!0,isPowerup:!1,isSleeping:!1,render:{sprite:{texture:`${e.texture}`}},friction:e.friction,restitution:e.restitution});W.World.add(this.gameWorld,r),this.updateUserScore(m[0].points);const a=["assets/images/effects/mvm_pow_bam.png","assets/images/effects/mvm_pow_boing.png","assets/images/effects/mvm_pow_boot.png","assets/images/effects/mvm_pow_caber.png","assets/images/effects/mvm_pow_crash.png","assets/images/effects/mvm_pow_loot.png","assets/images/effects/mvm_pow_mmph.png","assets/images/effects/mvm_pow_poof.png","assets/images/effects/mvm_pow_pow.png","assets/images/effects/mvm_pow_punch.png","assets/images/effects/mvm_pow_smash.png"],c=W.Bodies.rectangle(F.collision.supports[0].x,F.collision.supports[0].y,1,1,{isSleeping:!1,collisionFilter:0,render:{sprite:{texture:`${e.name==="Saxton Hale"?"assets/images/effects/mvm_pow_banana.png":a[Math.floor(Math.random()*a.length)]}`}},friction:1,frictionAir:0,restitution:1});W.World.add(this.gameWorld,c),setTimeout(()=>{W.World.remove(this.gameWorld,c)},500)}}}handleCollisionGameOver(){this.userGameOver=!0,z.stopBgm(),z.playSfx("assets/audio/duel_challenge_rejected.wav");let F="Well, that was impressive!";this.userScore===this.userScoreBest?F=`It's... a tie. I'm not proud of you, but I'm not unproud of you.<br><br>Your score: ${this.userScore}<br>Your best: ${this.userScoreBest}`:this.userScore>this.userScoreBest?F=`Excellent work! You've set a new personal record!<br><br>Your new best: ${this.userScore}`:this.userScoreBest-this.userScore<=100?F=`On the bright side... You came close to your record!<br><br>Your score: ${this.userScore}<br>Your best: ${this.userScoreBest}`:this.userScore>1e3?F=`Well, that was impressive!<br><br>Your score: ${this.userScore}<br>Your best: ${this.userScoreBest}`:this.userScore>500?F=`Great job!<br><br>Your score: ${this.userScore}<br>Your best: ${this.userScoreBest}`:F=`Nice try!<br><br>Your score: ${this.userScore}<br>Your best: ${this.userScoreBest}`,this.modalSetText("Game over",F),this.modalToggle()}upgradeHandlerBackToBase(){if(this.userCanClick&&!this.userGameOver){if(this.gameFruitBody.label==="UPGRADE_RANDOM_CRIT"||!this.upgradeBackToBase&&this.userScore<200){z.playSfx("assets/audio/record_fail.wav");return}const F=document.getElementById("t-backtobase-name");this.upgradeBackToBase?(z.playSfx("assets/audio/mvm_used_powerup.wav"),F.htmlContent="&mdash;",this.gameFruitBody&&W.World.remove(this.gameWorld,this.gameFruitBody),this.spawnFruit(this.upgradeBackToBase,this.gameFruit),this.upgradeBackToBase=null):(z.playSfx("assets/audio/mvm_bought_upgrade.wav"),this.upgradeBackToBase=this.gameFruit,this.updateUserScore(-200),F.textContent=this.upgradeBackToBase.name,W.World.remove(this.gameWorld,this.gameFruitBody),this.spawnFruit())}}spawnFruit(F=null,I=null){const E=Math.random();if(!this.upgradeRandomCrit&&E<=.05){this.upgradeRandomCrit=!0,this.gameFruit={name:"Random Crit",texture:"assets/images/upgrades/Random Crit.png",radius:33/2,rarity:0,points:0,id:-99},this.gameFruitBody=W.Bodies.circle(this.gameMouseX||250,50,this.gameFruit.radius,{label:"UPGRADE_RANDOM_CRIT",index:-1,isFruit:!0,isPowerup:!0,isSleeping:!0,render:{sprite:{texture:this.gameFruit.texture}},friction:.1,restitution:.1}),W.World.add(this.gameWorld,this.gameFruitBody);return}let m,e;const l=2,r=Math.random();r<=.4?(m=Math.floor(Math.random()*l),e=Math.floor(Math.random()*l)):(r<=.65,m=Math.floor(Math.random()*l)+l,e=Math.floor(Math.random()*l)+l);const a=F||this.gameFruits[m];this.gameFruitBody=W.Bodies.circle(this.gameMouseX||250,50,a.radius,{label:a.name,isFruit:!0,isPowerup:!1,isSleeping:!0,render:{sprite:{texture:`${a.texture}`}},friction:a.friction,restitution:a.restitution}),this.gameFruit=a,W.World.add(this.gameWorld,this.gameFruitBody),this.gameFruitNext=I||this.gameFruits[e],this.updateNextFruitDisplay()}setupTopScoresTable(){fetch("https://digitdigout.espacore.de/suika/top").then(F=>{if(!F.ok){console.error("Failed to fetch scores");return}return F.json()}).then(F=>{const I=F.scores,E=document.getElementById("t-bestscores");I.forEach(m=>{const e=document.createElement("p");e.textContent=`${m.score} - ${m.name}`,E.appendChild(e)})}).catch(F=>{console.error("Error fetching top scores:",F.message)})}setupFruitTable(){const F=document.getElementById("t-explainer"),I=document.createElement("div");this.gameFruits.forEach((E,m)=>{const e=document.createElement("img");e.src=E.texture,e.alt=E.name,e.title=E.name,e.width=50,e.height=50,I.appendChild(e)}),F.appendChild(I)}updateNextFruitDisplay(){const F=document.getElementById("t-next-name");F.textContent=this.gameFruitNext.name}setupGameHtml(){const F=`
 
        <div class="container">
 
            <div class="GAME">
 
                <div id="t-game"></div>
 
            </div>
 
 
 
            <div class="SCORE">
 
                <div class="CURRENT">
 
                    <div id="t-score"></div>
 
                </div>
 
 
 
                <div class="BEST">
 
                    <div id="t-score-best"></div>
 
                </div>
 
 
 
                <div class="SAVED">
 
                    <div id="t-backtobase">
 
                        SAVED:&nbsp;<span id="t-backtobase-name">&mdash;</span>
 
                    </div>
 
                </div>
 
 
 
                <div class="NEXT">
 
                    <div id="t-next">
 
                        NEXT:&nbsp;<span id="t-next-name">&mdash;</span>
 
                    </div>
 
                </div>
 
            </div>
 
 
 
            <div class="FRUITLIST">
 
                <div id="t-explainer">
 
                    Mercs & Upgrades
 
 
 
                    <hr style="color: #ece3cb;background-color: #ece3cb;">
 
 
 
                    <div style="text-align: left">
 
                        <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/upgrades/Back to Base.png" style="width: 33px;height: 33px;" title="Upgrade: Back to Base" alt="Upgrade: Back to Base">
 
                        <small>Press [H] to save a Merc.<br>&nbsp;&nbsp;&nbsp;&rarr; Cost: 200 points.</small><br>
 
                        <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/upgrades/Random Crit.png" style="width: 33px;height: 33px;" title="Upgrade: Random Crit" alt="Upgrade: Random Crit">
 
                        <small>Instantly upgrades a Merc.<br>&nbsp;&nbsp;&nbsp;&rarr; Random chance.</small><br>
 
                        <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/upgrades/UberCharge.png" style="width: 33px;height: 33px;" title="Upgrade: UberCharge" alt="Upgrade: UberCharge">
 
                        <small><s>Grants Uber for 2 seconds.</s><br>&nbsp;&nbsp;&nbsp;&rarr; <s>Builds over time.</s></small>
 
                    </div>
 
 
 
                    <hr style="color: #ece3cb;background-color: #ece3cb;">
 
                    <br>
 
                </div>
 
            </div>
 
 
 
            <div class="BEST-SCORES">
 
                <div id="t-bestscores">
 
                    Leaderboard
 
                </div>
 
            </div>
 
 
 
            <!-- Poor man's preload -->
 
            <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/effects/mvm_pow_bam.png" style="display: none;" />
 
            <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/effects/mvm_pow_banana.png" style="display: none;" />
 
            <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/effects/mvm_pow_boing.png" style="display: none;" />
 
            <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/effects/mvm_pow_boot.png" style="display: none;" />
 
            <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/effects/mvm_pow_caber.png" style="display: none;" />
 
            <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/effects/mvm_pow_crash.png" style="display: none;" />
 
            <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/effects/mvm_pow_crit.png" style="display: none;" />
 
            <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/effects/mvm_pow_loot.png" style="display: none;" />
 
            <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/effects/mvm_pow_mmph.png" style="display: none;" />
 
            <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/effects/mvm_pow_poof.png" style="display: none;" />
 
            <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/effects/mvm_pow_pow.png" style="display: none;" />
 
            <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/effects/mvm_pow_punch.png" style="display: none;" />
 
            <img src="https://digitdigout.espacore.de/static/uhhv2/assets/images/effects/mvm_pow_smash.png" style="display: none;" />
 
 
 
            <!-- Modal -->
 
            <div id="t-modal-gameover" class="t-modal">
 
                <div class="t-modal-content">
 
                    <span id="t-modal-close" class="t-modal-close">[&times; dismiss]</span>
 
                    <p id="t-modal-gameover-header"></p>
 
                    <hr>
 
                    <p id="t-modal-gameover-text"></p>
 
                    <hr>
 
                    <input type="text" id="t-nickname" placeholder="Enter your nickname">
 
                    <br>
 
                    <button id="t-modal-gameover-submit">Submit score</button>
 
                    <button id="t-modal-gameover-restart">Play again</button>
 
                </div>
 
            </div>
 
        </div>`,I=document.getElementById("mw-content-text");I.innerHTML=F,document.getElementById("t-modal-close").addEventListener("click",this.modalToggle.bind(this)),document.getElementById("t-modal-gameover-submit").addEventListener("click",this.modalSubmitScore.bind(this)),document.getElementById("t-modal-gameover-restart").addEventListener("click",this.modalRestartGame.bind(this))}modalToggle(){const F=document.getElementById("t-modal-gameover"),I=F.style.display==="block";F.style.display=I?"none":"block",document.body.style.overflow=I?"":"hidden"}modalSetText(F,I,E=!0){const m=document.getElementById("t-modal-gameover-submit"),e=document.getElementById("t-nickname");document.getElementById("t-modal-gameover-header").textContent=F,document.getElementById("t-modal-gameover-text").innerHTML=I,m.style.display=E?"initial":"none",e.style.display=E?"initial":"none"}modalRestartGame(){location.reload()}modalSubmitScore(){const F=document.getElementById("t-nickname").value.trim();if(F===""){alert("Oi!! Please enter a name!!!");return}this.userScoreBest>this.userScoreBestPrev&&fetch("https://digitdigout.espacore.de/suika/submit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:F,score:this.userScore})}).then(I=>{if(!I.ok){this.modalSetText("Score submissiom","Failed to submit score.<br>So sorry about that...",!1);return}this.modalSetText("Score submissiom","Score submitted successfully!",!1)}).catch(I=>{this.modalSetText("Score submissiom",`Error submitting score: ${I.message}<br>So sorry about that...`,!1)})}initializeGame(){z.playBgm();const F=W.Render.create({engine:this.gameEngine,element:document.getElementById("t-game"),options:{wireframes:!1,width:this.gamePlayableWidth,height:this.gamePlayableHeight,fillStyle:"red"}});W.World.add(this.gameWorld,[W.Bodies.rectangle(10,this.gamePlayableHeight/2,20,this.gamePlayableHeight,{name:"boxWallLeft",isStatic:!0,isSensor:!1,render:{fillStyle:"#a39588"}}),W.Bodies.rectangle(this.gamePlayableWidth-10,300,20,this.gamePlayableHeight,{name:"boxWallRight",isStatic:!0,isSensor:!1,render:{fillStyle:"#a39588"}}),W.Bodies.rectangle(this.gamePlayableWidth/2,this.gamePlayableHeight-10,this.gamePlayableWidth,20,{name:"boxWallBottom",isStatic:!0,isSensor:!1,render:{fillStyle:"#a39588"}}),W.Bodies.rectangle(this.gamePlayableWidth/2,50,this.gamePlayableWidth-40,10,{name:"boxLimit",isStatic:!0,isSensor:!0,render:{fillStyle:"red"}})]),W.Render.run(F),W.Runner.run(this.gameEngine),this.spawnFruit()}}class ge{constructor(){this.preloadedAudios={},this.gameBgm=null}playBgm(){this.gameBgm=new Audio("assets/audio/cyoa_musicfasterthanaspeedingbullet_tv.mp3"),this.gameBgm.loop=!0,this.gameBgm.volume=.1,this.gameBgm.play()}stopBgm(){this.gameBgm&&(this.gameBgm.pause(),this.gameBgm.currentTime=0)}preloadSfx(F){F.forEach(I=>{const E=new Audio;E.src=`${I}`,E.volume=.2,E.preload="auto",this.preloadedAudios[I]=E})}playSfx(F){const I=this.preloadedAudios[F];I&&I.play()}}const z=new ge;z.preloadSfx(["assets/audio/ball_stolen.wav","assets/audio/mvm_used_powerup.wav","assets/audio/record_fail.wav","assets/audio/col.mp3","assets/audio/crit_hit.wav","assets/audio/duel_challenge_rejected.wav","assets/audio/duel_challenge_rejected_with_restriction.wav","assets/audio/mvm_bought_upgrade.wav"]);const de=new me;de.initializeGame();
 
}
 

Latest revision as of 17:26, 29 April 2024

// The heck