-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathearly-minified.html
145 lines (127 loc) · 125 KB
/
early-minified.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<!doctypehtml><html lang=en><meta charset=UTF-8><meta content="width=device-width,initial-scale=1"name=viewport><title>yayhsbdj</title><style>body{margin:0;overflow:hidden}</style><script>!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Matter",[],t):"object"==typeof exports?exports.Matter=t():e.Matter=t()}(this,function(){return function(n){var i={};function o(e){if(i[e])return i[e].exports;var t=i[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}return o.m=n,o.c=i,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)o.d(n,i,function(e){return t[e]}.bind(null,i));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=21)}([function(e,t){var l={};e.exports=l,function(){l._nextId=0,l._seed=0,l._nowStartTime=+new Date,l._warnedOnce={},l._decomp=null,l.extend=function(e,t){var n,i;i="boolean"==typeof t?(n=2,t):(n=1,!0);for(var o=n;o<arguments.length;o++){var r=arguments[o];if(r)for(var a in r)i&&r[a]&&r[a].constructor===Object?e[a]&&e[a].constructor!==Object?e[a]=r[a]:(e[a]=e[a]||{},l.extend(e[a],i,r[a])):e[a]=r[a]}return e},l.clone=function(e,t){return l.extend({},t,e)},l.keys=function(e){if(Object.keys)return Object.keys(e);var t=[];for(var n in e)t.push(n);return t},l.values=function(e){var t=[];if(Object.keys){for(var n=Object.keys(e),i=0;i<n.length;i++)t.push(e[n[i]]);return t}for(var o in e)t.push(e[o]);return t},l.get=function(e,t,n,i){t=t.split(".").slice(n,i);for(var o=0;o<t.length;o+=1)e=e[t[o]];return e},l.set=function(e,t,n,i,o){var r=t.split(".").slice(i,o);return l.get(e,t,0,-1)[r[r.length-1]]=n},l.shuffle=function(e){for(var t=e.length-1;0<t;t--){var n=Math.floor(l.random()*(t+1)),i=e[t];e[t]=e[n],e[n]=i}return e},l.choose=function(e){return e[Math.floor(l.random()*e.length)]},l.isElement=function(e){return"undefined"!=typeof HTMLElement?e instanceof HTMLElement:!!(e&&e.nodeType&&e.nodeName)},l.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)},l.isFunction=function(e){return"function"==typeof e},l.isPlainObject=function(e){return"object"==typeof e&&e.constructor===Object},l.isString=function(e){return"[object String]"===toString.call(e)},l.clamp=function(e,t,n){return e<t?t:n<e?n:e},l.sign=function(e){return e<0?-1:1},l.now=function(){if("undefined"!=typeof window&&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-l._nowStartTime},l.random=function(e,t){return t=void 0!==t?t:1,(e=void 0!==e?e:0)+n()*(t-e)};var n=function(){return l._seed=(9301*l._seed+49297)%233280,l._seed/233280};l.colorToNumber=function(e){return 3==(e=e.replace("#","")).length&&(e=e.charAt(0)+e.charAt(0)+e.charAt(1)+e.charAt(1)+e.charAt(2)+e.charAt(2)),parseInt(e,16)},l.logLevel=1,l.log=function(){console&&0<l.logLevel&&l.logLevel<=3&&console.log.apply(console,["matter-js:"].concat(Array.prototype.slice.call(arguments)))},l.info=function(){console&&0<l.logLevel&&l.logLevel<=2&&console.info.apply(console,["matter-js:"].concat(Array.prototype.slice.call(arguments)))},l.warn=function(){console&&0<l.logLevel&&l.logLevel<=3&&console.warn.apply(console,["matter-js:"].concat(Array.prototype.slice.call(arguments)))},l.warnOnce=function(){var e=Array.prototype.slice.call(arguments).join(" ");l._warnedOnce[e]||(l.warn(e),l._warnedOnce[e]=!0)},l.deprecated=function(e,t,n){e[t]=l.chain(function(){l.warnOnce("🔅 deprecated 🔅",n)},e[t])},l.nextId=function(){return l._nextId++},l.indexOf=function(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0;n<e.length;n++)if(e[n]===t)return n;return-1},l.map=function(e,t){if(e.map)return e.map(t);for(var n=[],i=0;i<e.length;i+=1)n.push(t(e[i]));return n},l.topologicalSort=function(e){var t=[],n=[],i=[];for(var o in e)n[o]||i[o]||l._topologicalSort(o,n,i,e,t);return t},l._topologicalSort=function(e,t,n,i,o){var r=i[e]||[];n[e]=!0;for(var a=0;a<r.length;a+=1){var s=r[a];n[s]||t[s]||l._topologicalSort(s,t,n,i,o)}n[e]=!1,t[e]=!0,o.push(e)},l.chain=function(){for(var r=[],e=0;e<arguments.length;e+=1){var t=arguments[e];t._chained?r.push.apply(r,t._chained):r.push(t)}var n=function(){for(var e,t=new Array(arguments.length),n=0,i=arguments.length;n<i;n++)t[n]=arguments[n];for(n=0;n<r.length;n+=1){var o=r[n].apply(e,t);void 0!==o&&(e=o)}return e};return n._chained=r,n},l.chainPathBefore=function(e,t,n){return l.set(e,t,l.chain(n,l.get(e,t)))},l.chainPathAfter=function(e,t,n){return l.set(e,t,l.chain(l.get(e,t),n))},l.setDecomp=function(e){l._decomp=e},l.getDecomp=function(){var t=l._decomp;try{t||"undefined"==typeof window||(t=window.decomp),t||"undefined"==typeof global||(t=global.decomp)}catch(e){t=null}return t}}()},function(e,t){var n={};(e.exports=n).create=function(e){var t={min:{x:0,y:0},max:{x:0,y:0}};return e&&n.update(t,e),t},n.update=function(e,t,n){e.min.x=1/0,e.max.x=-1/0,e.min.y=1/0,e.max.y=-1/0;for(var i=0;i<t.length;i++){var o=t[i];o.x>e.max.x&&(e.max.x=o.x),o.x<e.min.x&&(e.min.x=o.x),o.y>e.max.y&&(e.max.y=o.y),o.y<e.min.y&&(e.min.y=o.y)}n&&(0<n.x?e.max.x+=n.x:e.min.x+=n.x,0<n.y?e.max.y+=n.y:e.min.y+=n.y)},n.contains=function(e,t){return t.x>=e.min.x&&t.x<=e.max.x&&t.y>=e.min.y&&t.y<=e.max.y},n.overlaps=function(e,t){return e.min.x<=t.max.x&&e.max.x>=t.min.x&&e.max.y>=t.min.y&&e.min.y<=t.max.y},n.translate=function(e,t){e.min.x+=t.x,e.max.x+=t.x,e.min.y+=t.y,e.max.y+=t.y},n.shift=function(e,t){var n=e.max.x-e.min.x,i=e.max.y-e.min.y;e.min.x=t.x,e.max.x=t.x+n,e.min.y=t.y,e.max.y=t.y+i}},function(e,t){var n={};(e.exports=n).create=function(e,t){return{x:e||0,y:t||0}},n.clone=function(e){return{x:e.x,y:e.y}},n.magnitude=function(e){return Math.sqrt(e.x*e.x+e.y*e.y)},n.magnitudeSquared=function(e){return e.x*e.x+e.y*e.y},n.rotate=function(e,t,n){var i=Math.cos(t),o=Math.sin(t);n||(n={});var r=e.x*i-e.y*o;return n.y=e.x*o+e.y*i,n.x=r,n},n.rotateAbout=function(e,t,n,i){var o=Math.cos(t),r=Math.sin(t);i||(i={});var a=n.x+((e.x-n.x)*o-(e.y-n.y)*r);return i.y=n.y+((e.x-n.x)*r+(e.y-n.y)*o),i.x=a,i},n.normalise=function(e){var t=n.magnitude(e);return 0===t?{x:0,y:0}:{x:e.x/t,y:e.y/t}},n.dot=function(e,t){return e.x*t.x+e.y*t.y},n.cross=function(e,t){return e.x*t.y-e.y*t.x},n.cross3=function(e,t,n){return(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x)},n.add=function(e,t,n){return n||(n={}),n.x=e.x+t.x,n.y=e.y+t.y,n},n.sub=function(e,t,n){return n||(n={}),n.x=e.x-t.x,n.y=e.y-t.y,n},n.mult=function(e,t){return{x:e.x*t,y:e.y*t}},n.div=function(e,t){return{x:e.x/t,y:e.y/t}},n.perp=function(e,t){return{x:(t=!0===t?-1:1)*-e.y,y:t*e.x}},n.neg=function(e){return{x:-e.x,y:-e.y}},n.angle=function(e,t){return Math.atan2(t.y-e.y,t.x-e.x)},n._temp=[n.create(),n.create(),n.create(),n.create(),n.create(),n.create()]},function(e,t,n){var s={};e.exports=s;var b=n(2),S=n(0);s.create=function(e,t){for(var n=[],i=0;i<e.length;i++){var o=e[i],r={x:o.x,y:o.y,index:i,body:t,isInternal:!1};n.push(r)}return n},s.fromPath=function(e,t){var i=[];return e.replace(/L?\s*([-\d.e]+)[\s,]*([-\d.e]+)*/gi,function(e,t,n){i.push({x:parseFloat(t),y:parseFloat(n)})}),s.create(i,t)},s.centre=function(e){for(var t,n,i,o=s.area(e,!0),r={x:0,y:0},a=0;a<e.length;a++)i=(a+1)%e.length,t=b.cross(e[a],e[i]),n=b.mult(b.add(e[a],e[i]),t),r=b.add(r,n);return b.div(r,6*o)},s.mean=function(e){for(var t={x:0,y:0},n=0;n<e.length;n++)t.x+=e[n].x,t.y+=e[n].y;return b.div(t,e.length)},s.area=function(e,t){for(var n=0,i=e.length-1,o=0;o<e.length;o++)n+=(e[i].x-e[o].x)*(e[i].y+e[o].y),i=o;return t?n/2:Math.abs(n)/2},s.inertia=function(e,t){for(var n,i,o=0,r=0,a=e,s=0;s<a.length;s++)i=(s+1)%a.length,o+=(n=Math.abs(b.cross(a[i],a[s])))*(b.dot(a[i],a[i])+b.dot(a[i],a[s])+b.dot(a[s],a[s])),r+=n;return t/6*(o/r)},s.translate=function(e,t,n){n=void 0!==n?n:1;var i,o=e.length,r=t.x*n,a=t.y*n;for(i=0;i<o;i++)e[i].x+=r,e[i].y+=a;return e},s.rotate=function(e,t,n){if(0!==t){var i,o,r,a,s=Math.cos(t),l=Math.sin(t),c=n.x,u=n.y,d=e.length;for(a=0;a<d;a++)o=(i=e[a]).x-c,r=i.y-u,i.x=c+(o*s-r*l),i.y=u+(o*l+r*s);return e}},s.contains=function(e,t){for(var n,i=t.x,o=t.y,r=e.length,a=e[r-1],s=0;s<r;s++){if(n=e[s],0<(i-a.x)*(n.y-a.y)+(o-a.y)*(a.x-n.x))return!1;a=n}return!0},s.scale=function(e,t,n,i){if(1===t&&1===n)return e;var o,r;i=i||s.centre(e);for(var a=0;a<e.length;a++)o=e[a],r=b.sub(o,i),e[a].x=i.x+r.x*t,e[a].y=i.y+r.y*n;return e},s.chamfer=function(e,t,n,i,o){t="number"==typeof t?[t]:t||[8],n=void 0!==n?n:-1,i=i||2,o=o||14;for(var r=[],a=0;a<e.length;a++){var s=e[0<=a-1?a-1:e.length-1],l=e[a],c=e[(a+1)%e.length],u=t[a<t.length?a:t.length-1];if(0!==u){var d=b.normalise({x:l.y-s.y,y:s.x-l.x}),p=b.normalise({x:c.y-l.y,y:l.x-c.x}),f=Math.sqrt(2*Math.pow(u,2)),v=b.mult(S.clone(d),u),y=b.normalise(b.mult(b.add(d,p),.5)),m=b.sub(l,b.mult(y,f)),g=n;-1===n&&(g=1.75*Math.pow(u,.32)),(g=S.clamp(g,i,o))%2==1&&(g+=1);for(var x=Math.acos(b.dot(d,p))/g,h=0;h<g;h++)r.push(b.add(b.rotate(v,x*h),m))}else r.push(l)}return r},s.clockwiseSort=function(e){var n=s.mean(e);return e.sort(function(e,t){return b.angle(n,e)-b.angle(n,t)}),e},s.isConvex=function(e){var t,n,i,o,r=0,a=e.length;if(a<3)return null;for(t=0;t<a;t++)if(i=(t+2)%a,o=(e[n=(t+1)%a].x-e[t].x)*(e[i].y-e[n].y),(o-=(e[n].y-e[t].y)*(e[i].x-e[n].x))<0?r|=1:0<o&&(r|=2),3===r)return!1;return 0!==r||null},s.hull=function(e){var t,n,i=[],o=[];for((e=e.slice(0)).sort(function(e,t){var n=e.x-t.x;return 0!=n?n:e.y-t.y}),n=0;n<e.length;n+=1){for(t=e[n];2<=o.length&&b.cross3(o[o.length-2],o[o.length-1],t)<=0;)o.pop();o.push(t)}for(n=e.length-1;0<=n;n-=1){for(t=e[n];2<=i.length&&b.cross3(i[i.length-2],i[i.length-1],t)<=0;)i.pop();i.push(t)}return i.pop(),o.pop(),i.concat(o)}},function(e,t,n){var i={};e.exports=i;var u=n(0);i.on=function(e,t,n){for(var i,o=t.split(" "),r=0;r<o.length;r++)i=o[r],e.events=e.events||{},e.events[i]=e.events[i]||[],e.events[i].push(n);return n},i.off=function(e,t,n){if(t){"function"==typeof t&&(n=t,t=u.keys(e.events).join(" "));for(var i=t.split(" "),o=0;o<i.length;o++){var r=e.events[i[o]],a=[];if(n&&r)for(var s=0;s<r.length;s++)r[s]!==n&&a.push(r[s]);e.events[i[o]]=a}}else e.events={}},i.trigger=function(e,t,n){var i,o,r,a,s=e.events;if(s&&0<u.keys(s).length){n||(n={}),i=t.split(" ");for(var l=0;l<i.length;l++)if(r=s[o=i[l]]){(a=u.clone(n,!1)).name=o,a.source=e;for(var c=0;c<r.length;c++)r[c].apply(e,[a])}}}},function(e,t,n){var d={};e.exports=d;var a=n(4),r=n(0),s=n(1),p=n(6);d.create=function(e){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}},e)},d.setModified=function(e,t,n,i){if((e.isModified=t)&&e.cache&&(e.cache.allBodies=null,e.cache.allConstraints=null,e.cache.allComposites=null),n&&e.parent&&d.setModified(e.parent,t,n,i),i)for(var o=0;o<e.composites.length;o++){var r=e.composites[o];d.setModified(r,t,n,i)}},d.add=function(e,t){var n=[].concat(t);a.trigger(e,"beforeAdd",{object:t});for(var i=0;i<n.length;i++){var o=n[i];switch(o.type){case"body":if(o.parent!==o){r.warn("Composite.add: skipped adding a compound body part (you must add its parent instead)");break}d.addBody(e,o);break;case"constraint":d.addConstraint(e,o);break;case"composite":d.addComposite(e,o);break;case"mouseConstraint":d.addConstraint(e,o.constraint)}}return a.trigger(e,"afterAdd",{object:t}),e},d.remove=function(e,t,n){var i=[].concat(t);a.trigger(e,"beforeRemove",{object:t});for(var o=0;o<i.length;o++){var r=i[o];switch(r.type){case"body":d.removeBody(e,r,n);break;case"constraint":d.removeConstraint(e,r,n);break;case"composite":d.removeComposite(e,r,n);break;case"mouseConstraint":d.removeConstraint(e,r.constraint)}}return a.trigger(e,"afterRemove",{object:t}),e},d.addComposite=function(e,t){return e.composites.push(t),t.parent=e,d.setModified(e,!0,!0,!1),e},d.removeComposite=function(e,t,n){var i=r.indexOf(e.composites,t);if(-1!==i&&d.removeCompositeAt(e,i),n)for(var o=0;o<e.composites.length;o++)d.removeComposite(e.composites[o],t,!0);return e},d.removeCompositeAt=function(e,t){return e.composites.splice(t,1),d.setModified(e,!0,!0,!1),e},d.addBody=function(e,t){return e.bodies.push(t),d.setModified(e,!0,!0,!1),e},d.removeBody=function(e,t,n){var i=r.indexOf(e.bodies,t);if(-1!==i&&d.removeBodyAt(e,i),n)for(var o=0;o<e.composites.length;o++)d.removeBody(e.composites[o],t,!0);return e},d.removeBodyAt=function(e,t){return e.bodies.splice(t,1),d.setModified(e,!0,!0,!1),e},d.addConstraint=function(e,t){return e.constraints.push(t),d.setModified(e,!0,!0,!1),e},d.removeConstraint=function(e,t,n){var i=r.indexOf(e.constraints,t);if(-1!==i&&d.removeConstraintAt(e,i),n)for(var o=0;o<e.composites.length;o++)d.removeConstraint(e.composites[o],t,!0);return e},d.removeConstraintAt=function(e,t){return e.constraints.splice(t,1),d.setModified(e,!0,!0,!1),e},d.clear=function(e,t,n){if(n)for(var i=0;i<e.composites.length;i++)d.clear(e.composites[i],t,!0);return t?e.bodies=e.bodies.filter(function(e){return e.isStatic}):e.bodies.length=0,e.constraints.length=0,e.composites.length=0,d.setModified(e,!0,!0,!1),e},d.allBodies=function(e){if(e.cache&&e.cache.allBodies)return e.cache.allBodies;for(var t=[].concat(e.bodies),n=0;n<e.composites.length;n++)t=t.concat(d.allBodies(e.composites[n]));return e.cache&&(e.cache.allBodies=t),t},d.allConstraints=function(e){if(e.cache&&e.cache.allConstraints)return e.cache.allConstraints;for(var t=[].concat(e.constraints),n=0;n<e.composites.length;n++)t=t.concat(d.allConstraints(e.composites[n]));return e.cache&&(e.cache.allConstraints=t),t},d.allComposites=function(e){if(e.cache&&e.cache.allComposites)return e.cache.allComposites;for(var t=[].concat(e.composites),n=0;n<e.composites.length;n++)t=t.concat(d.allComposites(e.composites[n]));return e.cache&&(e.cache.allComposites=t),t},d.get=function(e,t,n){var i,o;switch(n){case"body":i=d.allBodies(e);break;case"constraint":i=d.allConstraints(e);break;case"composite":i=d.allComposites(e).concat(e)}return i?0===(o=i.filter(function(e){return e.id.toString()===t.toString()})).length?null:o[0]:null},d.move=function(e,t,n){return d.remove(e,t),d.add(n,t),e},d.rebase=function(e){for(var t=d.allBodies(e).concat(d.allConstraints(e)).concat(d.allComposites(e)),n=0;n<t.length;n++)t[n].id=r.nextId();return e},d.translate=function(e,t,n){for(var i=n?d.allBodies(e):e.bodies,o=0;o<i.length;o++)p.translate(i[o],t);return e},d.rotate=function(e,t,n,i){for(var o=Math.cos(t),r=Math.sin(t),a=i?d.allBodies(e):e.bodies,s=0;s<a.length;s++){var l=a[s],c=l.position.x-n.x,u=l.position.y-n.y;p.setPosition(l,{x:n.x+(c*o-u*r),y:n.y+(c*r+u*o)}),p.rotate(l,t)}return e},d.scale=function(e,t,n,i,o){for(var r=o?d.allBodies(e):e.bodies,a=0;a<r.length;a++){var s=r[a],l=s.position.x-i.x,c=s.position.y-i.y;p.setPosition(s,{x:i.x+l*t,y:i.y+c*n}),p.scale(s,t,n)}return e},d.bounds=function(e){for(var t=d.allBodies(e),n=[],i=0;i<t.length;i+=1){var o=t[i];n.push(o.bounds.min,o.bounds.max)}return s.create(n)}},function(e,t,n){var c={};e.exports=c;var u=n(3),d=n(2),o=n(7),r=(n(16),n(0)),p=n(1),f=n(11);!function(){c._inertiaScale=4,c._nextCollidingGroupId=1,c._nextNonCollidingGroupId=-1,c._nextCategory=1,c.create=function(e){var t={id:r.nextId(),type:"body",label:"Body",parts:[],plugin:{},angle:0,vertices:u.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,_original:null},n=r.extend(t,e);return i(n,e),n},c.nextGroup=function(e){return e?c._nextNonCollidingGroupId--:c._nextCollidingGroupId++},c.nextCategory=function(){return c._nextCategory=c._nextCategory<<1,c._nextCategory};var i=function(e,t){t=t||{},c.set(e,{bounds:e.bounds||p.create(e.vertices),positionPrev:e.positionPrev||d.clone(e.position),anglePrev:e.anglePrev||e.angle,vertices:e.vertices,parts:e.parts||[e],isStatic:e.isStatic,isSleeping:e.isSleeping,parent:e.parent||e}),u.rotate(e.vertices,e.angle,e.position),f.rotate(e.axes,e.angle),p.update(e.bounds,e.vertices,e.velocity),c.set(e,{axes:t.axes||e.axes,area:t.area||e.area,mass:t.mass||e.mass,inertia:t.inertia||e.inertia});var n=e.isStatic?"#14151f":r.choose(["#f19648","#f5d259","#f55a3c","#063e7b","#ececd1"]),i=e.isStatic?"#555":"#ccc",o=e.isStatic&&null===e.render.fillStyle?1:0;e.render.fillStyle=e.render.fillStyle||n,e.render.strokeStyle=e.render.strokeStyle||i,e.render.lineWidth=e.render.lineWidth||o,e.render.sprite.xOffset+=-(e.bounds.min.x-e.position.x)/(e.bounds.max.x-e.bounds.min.x),e.render.sprite.yOffset+=-(e.bounds.min.y-e.position.y)/(e.bounds.max.y-e.bounds.min.y)};c.set=function(e,t,n){var i;for(i in"string"==typeof t&&(i=t,(t={})[i]=n),t)if(Object.prototype.hasOwnProperty.call(t,i))switch(n=t[i],i){case"isStatic":c.setStatic(e,n);break;case"isSleeping":o.set(e,n);break;case"mass":c.setMass(e,n);break;case"density":c.setDensity(e,n);break;case"inertia":c.setInertia(e,n);break;case"vertices":c.setVertices(e,n);break;case"position":c.setPosition(e,n);break;case"angle":c.setAngle(e,n);break;case"velocity":c.setVelocity(e,n);break;case"angularVelocity":c.setAngularVelocity(e,n);break;case"parts":c.setParts(e,n);break;case"centre":c.setCentre(e,n);break;default:e[i]=n}},c.setStatic=function(e,t){for(var n=0;n<e.parts.length;n++){var i=e.parts[n];(i.isStatic=t)?(i._original={restitution:i.restitution,friction:i.friction,mass:i.mass,inertia:i.inertia,density:i.density,inverseMass:i.inverseMass,inverseInertia:i.inverseInertia},i.restitution=0,i.friction=1,i.mass=i.inertia=i.density=1/0,i.inverseMass=i.inverseInertia=0,i.positionPrev.x=i.position.x,i.positionPrev.y=i.position.y,i.anglePrev=i.angle,i.angularVelocity=0,i.speed=0,i.angularSpeed=0,i.motion=0):i._original&&(i.restitution=i._original.restitution,i.friction=i._original.friction,i.mass=i._original.mass,i.inertia=i._original.inertia,i.density=i._original.density,i.inverseMass=i._original.inverseMass,i.inverseInertia=i._original.inverseInertia,i._original=null)}},c.setMass=function(e,t){var n=e.inertia/(e.mass/6);e.inertia=t/6*n,e.inverseInertia=1/e.inertia,e.mass=t,e.inverseMass=1/e.mass,e.density=e.mass/e.area},c.setDensity=function(e,t){c.setMass(e,t*e.area),e.density=t},c.setInertia=function(e,t){e.inertia=t,e.inverseInertia=1/e.inertia},c.setVertices=function(e,t){t[0].body===e?e.vertices=t:e.vertices=u.create(t,e),e.axes=f.fromVertices(e.vertices),e.area=u.area(e.vertices),c.setMass(e,e.density*e.area);var n=u.centre(e.vertices);u.translate(e.vertices,n,-1),c.setInertia(e,c._inertiaScale*u.inertia(e.vertices,e.mass)),u.translate(e.vertices,e.position),p.update(e.bounds,e.vertices,e.velocity)},c.setParts=function(e,t,n){var i;for(t=t.slice(0),e.parts.length=0,e.parts.push(e),e.parent=e,i=0;i<t.length;i++){var o=t[i];o!==e&&(o.parent=e).parts.push(o)}if(1!==e.parts.length){if(n=void 0===n||n){var r=[];for(i=0;i<t.length;i++)r=r.concat(t[i].vertices);u.clockwiseSort(r);var a=u.hull(r),s=u.centre(a);c.setVertices(e,a),u.translate(e.vertices,s)}var l=c._totalProperties(e);e.area=l.area,(e.parent=e).position.x=l.centre.x,e.position.y=l.centre.y,e.positionPrev.x=l.centre.x,e.positionPrev.y=l.centre.y,c.setMass(e,l.mass),c.setInertia(e,l.inertia),c.setPosition(e,l.centre)}},c.setCentre=function(e,t,n){n?(e.positionPrev.x+=t.x,e.positionPrev.y+=t.y,e.position.x+=t.x,e.position.y+=t.y):(e.positionPrev.x=t.x-(e.position.x-e.positionPrev.x),e.positionPrev.y=t.y-(e.position.y-e.positionPrev.y),e.position.x=t.x,e.position.y=t.y)},c.setPosition=function(e,t){var n=d.sub(t,e.position);e.positionPrev.x+=n.x,e.positionPrev.y+=n.y;for(var i=0;i<e.parts.length;i++){var o=e.parts[i];o.position.x+=n.x,o.position.y+=n.y,u.translate(o.vertices,n),p.update(o.bounds,o.vertices,e.velocity)}},c.setAngle=function(e,t){var n=t-e.angle;e.anglePrev+=n;for(var i=0;i<e.parts.length;i++){var o=e.parts[i];o.angle+=n,u.rotate(o.vertices,n,e.position),f.rotate(o.axes,n),p.update(o.bounds,o.vertices,e.velocity),0<i&&d.rotateAbout(o.position,n,e.position,o.position)}},c.setVelocity=function(e,t){e.positionPrev.x=e.position.x-t.x,e.positionPrev.y=e.position.y-t.y,e.velocity.x=t.x,e.velocity.y=t.y,e.speed=d.magnitude(e.velocity)},c.setAngularVelocity=function(e,t){e.anglePrev=e.angle-t,e.angularVelocity=t,e.angularSpeed=Math.abs(e.angularVelocity)},c.translate=function(e,t){c.setPosition(e,d.add(e.position,t))},c.rotate=function(e,t,n){if(n){var i=Math.cos(t),o=Math.sin(t),r=e.position.x-n.x,a=e.position.y-n.y;c.setPosition(e,{x:n.x+(r*i-a*o),y:n.y+(r*o+a*i)}),c.setAngle(e,e.angle+t)}else c.setAngle(e,e.angle+t)},c.scale=function(e,t,n,i){var o=0,r=0;i=i||e.position;for(var a=0;a<e.parts.length;a++){var s=e.parts[a];u.scale(s.vertices,t,n,i),s.axes=f.fromVertices(s.vertices),s.area=u.area(s.vertices),c.setMass(s,e.density*s.area),u.translate(s.vertices,{x:-s.position.x,y:-s.position.y}),c.setInertia(s,c._inertiaScale*u.inertia(s.vertices,s.mass)),u.translate(s.vertices,{x:s.position.x,y:s.position.y}),0<a&&(o+=s.area,r+=s.inertia),s.position.x=i.x+(s.position.x-i.x)*t,s.position.y=i.y+(s.position.y-i.y)*n,p.update(s.bounds,s.vertices,e.velocity)}1<e.parts.length&&(e.area=o,e.isStatic||(c.setMass(e,e.density*o),c.setInertia(e,r))),e.circleRadius&&(t===n?e.circleRadius*=t:e.circleRadius=null)},c.update=function(e,t,n,i){var o=Math.pow(t*n*e.timeScale,2),r=1-e.frictionAir*n*e.timeScale,a=e.position.x-e.positionPrev.x,s=e.position.y-e.positionPrev.y;e.velocity.x=a*r*i+e.force.x/e.mass*o,e.velocity.y=s*r*i+e.force.y/e.mass*o,e.positionPrev.x=e.position.x,e.positionPrev.y=e.position.y,e.position.x+=e.velocity.x,e.position.y+=e.velocity.y,e.angularVelocity=(e.angle-e.anglePrev)*r*i+e.torque/e.inertia*o,e.anglePrev=e.angle,e.angle+=e.angularVelocity,e.speed=d.magnitude(e.velocity),e.angularSpeed=Math.abs(e.angularVelocity);for(var l=0;l<e.parts.length;l++){var c=e.parts[l];u.translate(c.vertices,e.velocity),0<l&&(c.position.x+=e.velocity.x,c.position.y+=e.velocity.y),0!==e.angularVelocity&&(u.rotate(c.vertices,e.angularVelocity,e.position),f.rotate(c.axes,e.angularVelocity),0<l&&d.rotateAbout(c.position,e.angularVelocity,e.position,c.position)),p.update(c.bounds,c.vertices,e.velocity)}},c.applyForce=function(e,t,n){e.force.x+=n.x,e.force.y+=n.y;var i=t.x-e.position.x,o=t.y-e.position.y;e.torque+=i*n.y-o*n.x},c._totalProperties=function(e){for(var t={mass:0,area:0,inertia:0,centre:{x:0,y:0}},n=1===e.parts.length?0:1;n<e.parts.length;n++){var i=e.parts[n],o=i.mass!==1/0?i.mass:1;t.mass+=o,t.area+=i.area,t.inertia+=i.inertia,t.centre=d.add(t.centre,d.mult(i.position,o))}return t.centre=d.div(t.centre,t.mass),t}}()},function(e,t,n){var u={};e.exports=u;var i=n(4);u._motionWakeThreshold=.18,u._motionSleepThreshold=.08,u._minBias=.9,u.update=function(e,t){for(var n=t*t*t,i=0;i<e.length;i++){var o=e[i],r=o.speed*o.speed+o.angularSpeed*o.angularSpeed;if(0===o.force.x&&0===o.force.y){var a=Math.min(o.motion,r),s=Math.max(o.motion,r);o.motion=u._minBias*a+(1-u._minBias)*s,0<o.sleepThreshold&&o.motion<u._motionSleepThreshold*n?(o.sleepCounter+=1,o.sleepCounter>=o.sleepThreshold&&u.set(o,!0)):0<o.sleepCounter&&(o.sleepCounter-=1)}else u.set(o,!1)}},u.afterCollisions=function(e,t){for(var n=t*t*t,i=0;i<e.length;i++){var o=e[i];if(o.isActive){var r=o.collision,a=r.bodyA.parent,s=r.bodyB.parent;if(!(a.isSleeping&&s.isSleeping||a.isStatic||s.isStatic)&&(a.isSleeping||s.isSleeping)){var l=a.isSleeping&&!a.isStatic?a:s,c=l===a?s:a;!l.isStatic&&c.motion>u._motionWakeThreshold*n&&u.set(l,!1)}}}},u.set=function(e,t){var n=e.isSleeping;t?(e.isSleeping=!0,e.sleepCounter=e.sleepThreshold,e.positionImpulse.x=0,e.positionImpulse.y=0,e.positionPrev.x=e.position.x,e.positionPrev.y=e.position.y,e.anglePrev=e.angle,e.speed=0,e.angularSpeed=0,e.motion=0,n||i.trigger(e,"sleepStart")):(e.isSleeping=!1,e.sleepCounter=0,n&&i.trigger(e,"sleepEnd"))}},function(e,t,n){var v={};e.exports=v;var m,y,g,x=n(3),h=n(9);m=[],y={overlap:0,axis:null},g={overlap:0,axis:null},v.create=function(e,t){return{pair:null,collided:!1,bodyA:e,bodyB:t,parentA:e.parent,parentB:t.parent,depth:0,normal:{x:0,y:0},tangent:{x:0,y:0},penetration:{x:0,y:0},supports:[]}},v.collides=function(e,t,n){if(v._overlapAxes(y,e.vertices,t.vertices,e.axes),y.overlap<=0)return null;if(v._overlapAxes(g,t.vertices,e.vertices,t.axes),g.overlap<=0)return null;var i,o,r=n&&n.table[h.id(e,t)];r?i=r.collision:((i=v.create(e,t)).collided=!0,i.bodyA=e.id<t.id?e:t,i.bodyB=e.id<t.id?t:e,i.parentA=i.bodyA.parent,i.parentB=i.bodyB.parent),e=i.bodyA,t=i.bodyB,o=y.overlap<g.overlap?y:g;var a=i.normal,s=i.supports,l=o.axis,c=l.x,u=l.y;c*(t.position.x-e.position.x)+u*(t.position.y-e.position.y)<0?(a.x=c,a.y=u):(a.x=-c,a.y=-u),i.tangent.x=-a.y,i.tangent.y=a.x,i.depth=o.overlap,i.penetration.x=a.x*i.depth,i.penetration.y=a.y*i.depth;var d=v._findSupports(e,t,a,1),p=0;if(x.contains(e.vertices,d[0])&&(s[p++]=d[0]),x.contains(e.vertices,d[1])&&(s[p++]=d[1]),p<2){var f=v._findSupports(t,e,a,-1);x.contains(t.vertices,f[0])&&(s[p++]=f[0]),p<2&&x.contains(t.vertices,f[1])&&(s[p++]=f[1])}return 0===p&&(s[p++]=d[0]),s.length=p,i},v._overlapAxes=function(e,t,n,i){var o,r,a,s,l,c,u=t.length,d=n.length,p=t[0].x,f=t[0].y,v=n[0].x,y=n[0].y,m=i.length,g=Number.MAX_VALUE,x=0;for(l=0;l<m;l++){var h=i[l],b=h.x,S=h.y,w=p*b+f*S,A=v*b+y*S,P=w,C=A;for(c=1;c<u;c+=1)(s=t[c].x*b+t[c].y*S)>P?P=s:s<w&&(w=s);for(c=1;c<d;c+=1)(s=n[c].x*b+n[c].y*S)>C?C=s:s<A&&(A=s);if((o=(r=P-A)<(a=C-w)?r:a)<g&&(x=l,(g=o)<=0))break}e.axis=i[x],e.overlap=g},v._projectToAxis=function(e,t,n){for(var i=t[0].x*n.x+t[0].y*n.y,o=i,r=1;r<t.length;r+=1){var a=t[r].x*n.x+t[r].y*n.y;o<a?o=a:a<i&&(i=a)}e.min=i,e.max=o},v._findSupports=function(e,t,n,i){var o,r,a,s,l,c=t.vertices,u=c.length,d=e.position.x,p=e.position.y,f=n.x*i,v=n.y*i,y=Number.MAX_VALUE;for(l=0;l<u;l+=1)(s=f*(d-(r=c[l]).x)+v*(p-r.y))<y&&(y=s,o=r);return y=f*(d-(a=c[(u+o.index-1)%u]).x)+v*(p-a.y),f*(d-(r=c[(o.index+1)%u]).x)+v*(p-r.y)<y?(m[0]=o,m[1]=r):(m[0]=o,m[1]=a),m}},function(e,t,n){var r={};e.exports=r;var f=n(17);r.create=function(e,t){var n=e.bodyA,i=e.bodyB,o={id:r.id(n,i),bodyA:n,bodyB:i,collision:e,contacts:[],activeContacts:[],separation:0,isActive:!0,confirmedActive:!0,isSensor:n.isSensor||i.isSensor,timeCreated:t,timeUpdated:t,inverseMass:0,friction:0,frictionStatic:0,restitution:0,slop:0};return r.update(o,e,t),o},r.update=function(e,t,n){var i=e.contacts,o=t.supports,r=e.activeContacts,a=t.parentA,s=t.parentB,l=a.vertices.length;e.isActive=!0,e.timeUpdated=n,e.collision=t,e.separation=t.depth,e.inverseMass=a.inverseMass+s.inverseMass,e.friction=a.friction<s.friction?a.friction:s.friction,e.frictionStatic=a.frictionStatic>s.frictionStatic?a.frictionStatic:s.frictionStatic,e.restitution=a.restitution>s.restitution?a.restitution:s.restitution,e.slop=a.slop>s.slop?a.slop:s.slop,t.pair=e;for(var c=r.length=0;c<o.length;c++){var u=o[c],d=u.body===a?u.index:l+u.index,p=i[d];p?r.push(p):r.push(i[d]=f.create(u))}},r.setActive=function(e,t,n){t?(e.isActive=!0,e.timeUpdated=n):(e.isActive=!1,e.activeContacts.length=0)},r.id=function(e,t){return e.id<t.id?"A"+e.id+"B"+t.id:"A"+t.id+"B"+e.id}},function(e,t,n){var S={};e.exports=S;var a=n(3),w=n(2),s=n(7),l=n(1),c=n(11),u=n(0);S._warming=.4,S._torqueDampen=1,S._minLength=1e-6,S.create=function(e){var t=e;t.bodyA&&!t.pointA&&(t.pointA={x:0,y:0}),t.bodyB&&!t.pointB&&(t.pointB={x:0,y:0});var n=t.bodyA?w.add(t.bodyA.position,t.pointA):t.pointA,i=t.bodyB?w.add(t.bodyB.position,t.pointB):t.pointB,o=w.magnitude(w.sub(n,i));t.length=void 0!==t.length?t.length:o,t.id=t.id||u.nextId(),t.label=t.label||"Constraint",t.type="constraint",t.stiffness=t.stiffness||(0<t.length?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 r={visible:!0,lineWidth:2,strokeStyle:"#ffffff",type:"line",anchors:!0};return 0===t.length&&.1<t.stiffness?(r.type="pin",r.anchors=!1):t.stiffness<.9&&(r.type="spring"),t.render=u.extend(r,t.render),t},S.preSolveAll=function(e){for(var t=0;t<e.length;t+=1){var n=e[t],i=n.constraintImpulse;n.isStatic||0===i.x&&0===i.y&&0===i.angle||(n.position.x+=i.x,n.position.y+=i.y,n.angle+=i.angle)}},S.solveAll=function(e,t){for(var n=0;n<e.length;n+=1){var i=e[n],o=!i.bodyA||i.bodyA&&i.bodyA.isStatic,r=!i.bodyB||i.bodyB&&i.bodyB.isStatic;(o||r)&&S.solve(e[n],t)}for(n=0;n<e.length;n+=1)o=!(i=e[n]).bodyA||i.bodyA&&i.bodyA.isStatic,r=!i.bodyB||i.bodyB&&i.bodyB.isStatic,o||r||S.solve(e[n],t)},S.solve=function(e,t){var n=e.bodyA,i=e.bodyB,o=e.pointA,r=e.pointB;if(n||i){n&&!n.isStatic&&(w.rotate(o,n.angle-e.angleA,o),e.angleA=n.angle),i&&!i.isStatic&&(w.rotate(r,i.angle-e.angleB,r),e.angleB=i.angle);var a=o,s=r;if(n&&(a=w.add(n.position,o)),i&&(s=w.add(i.position,r)),a&&s){var l=w.sub(a,s),c=w.magnitude(l);c<S._minLength&&(c=S._minLength);var u,d,p,f,v,y=(c-e.length)/c,m=e.stiffness<1?e.stiffness*t:e.stiffness,g=w.mult(l,y*m),x=(n?n.inverseMass:0)+(i?i.inverseMass:0),h=x+((n?n.inverseInertia:0)+(i?i.inverseInertia:0));if(e.damping){var b=w.create();p=w.div(l,c),v=w.sub(i&&w.sub(i.position,i.positionPrev)||b,n&&w.sub(n.position,n.positionPrev)||b),f=w.dot(p,v)}n&&!n.isStatic&&(d=n.inverseMass/x,n.constraintImpulse.x-=g.x*d,n.constraintImpulse.y-=g.y*d,n.position.x-=g.x*d,n.position.y-=g.y*d,e.damping&&(n.positionPrev.x-=e.damping*p.x*f*d,n.positionPrev.y-=e.damping*p.y*f*d),u=w.cross(o,g)/h*S._torqueDampen*n.inverseInertia*(1-e.angularStiffness),n.constraintImpulse.angle-=u,n.angle-=u),i&&!i.isStatic&&(d=i.inverseMass/x,i.constraintImpulse.x+=g.x*d,i.constraintImpulse.y+=g.y*d,i.position.x+=g.x*d,i.position.y+=g.y*d,e.damping&&(i.positionPrev.x+=e.damping*p.x*f*d,i.positionPrev.y+=e.damping*p.y*f*d),u=w.cross(r,g)/h*S._torqueDampen*i.inverseInertia*(1-e.angularStiffness),i.constraintImpulse.angle+=u,i.angle+=u)}}},S.postSolveAll=function(e){for(var t=0;t<e.length;t++){var n=e[t],i=n.constraintImpulse;if(!(n.isStatic||0===i.x&&0===i.y&&0===i.angle)){s.set(n,!1);for(var o=0;o<n.parts.length;o++){var r=n.parts[o];a.translate(r.vertices,i),0<o&&(r.position.x+=i.x,r.position.y+=i.y),0!==i.angle&&(a.rotate(r.vertices,i.angle,n.position),c.rotate(r.axes,i.angle),0<o&&w.rotateAbout(r.position,i.angle,n.position,r.position)),l.update(r.bounds,r.vertices,n.velocity)}i.angle*=S._warming,i.x*=S._warming,i.y*=S._warming}}},S.pointAWorld=function(e){return{x:(e.bodyA?e.bodyA.position.x:0)+e.pointA.x,y:(e.bodyA?e.bodyA.position.y:0)+e.pointA.y}},S.pointBWorld=function(e){return{x:(e.bodyB?e.bodyB.position.x:0)+e.pointB.x,y:(e.bodyB?e.bodyB.position.y:0)+e.pointB.y}}},function(e,t,n){var i={};e.exports=i;var a=n(2),s=n(0);i.fromVertices=function(e){for(var t={},n=0;n<e.length;n++){var i=(n+1)%e.length,o=a.normalise({x:e[i].y-e[n].y,y:e[n].x-e[i].x}),r=0===o.y?1/0:o.x/o.y;t[r=r.toFixed(3).toString()]=o}return s.values(t)},i.rotate=function(e,t){if(0!==t)for(var n=Math.cos(t),i=Math.sin(t),o=0;o<e.length;o++){var r,a=e[o];r=a.x*n-a.y*i,a.y=a.x*i+a.y*n,a.x=r}}},function(e,t,n){var v={};e.exports=v;var k=n(3),_=n(0),I=n(6),T=n(1),R=n(2);v.rectangle=function(e,t,n,i,o){o=o||{};var r={label:"Rectangle Body",position:{x:e,y:t},vertices:k.fromPath("L 0 0 L "+n+" 0 L "+n+" "+i+" L 0 "+i)};if(o.chamfer){var a=o.chamfer;r.vertices=k.chamfer(r.vertices,a.radius,a.quality,a.qualityMin,a.qualityMax),delete o.chamfer}return I.create(_.extend({},r,o))},v.trapezoid=function(e,t,n,i,o,r){r=r||{};var a,s=n*(o*=.5),l=s+(1-2*o)*n,c=l+s;a=o<.5?"L 0 0 L "+s+" "+-i+" L "+l+" "+-i+" L "+c+" 0":"L 0 0 L "+l+" "+-i+" L "+c+" 0";var u={label:"Trapezoid Body",position:{x:e,y:t},vertices:k.fromPath(a)};if(r.chamfer){var d=r.chamfer;u.vertices=k.chamfer(u.vertices,d.radius,d.quality,d.qualityMin,d.qualityMax),delete r.chamfer}return I.create(_.extend({},u,r))},v.circle=function(e,t,n,i,o){i=i||{};var r={label:"Circle Body",circleRadius:n};o=o||25;var a=Math.ceil(Math.max(10,Math.min(o,n)));return a%2==1&&(a+=1),v.polygon(e,t,a,n,_.extend({},r,i))},v.polygon=function(e,t,n,i,o){if(o=o||{},n<3)return v.circle(e,t,i,o);for(var r=2*Math.PI/n,a="",s=.5*r,l=0;l<n;l+=1){var c=s+l*r,u=Math.cos(c)*i,d=Math.sin(c)*i;a+="L "+u.toFixed(3)+" "+d.toFixed(3)+" "}var p={label:"Polygon Body",position:{x:e,y:t},vertices:k.fromPath(a)};if(o.chamfer){var f=o.chamfer;p.vertices=k.chamfer(p.vertices,f.radius,f.quality,f.qualityMin,f.qualityMax),delete o.chamfer}return I.create(_.extend({},p,o))},v.fromVertices=function(e,t,n,i,o,r,a,s){var l,c,u,d,p,f,v,y,m,g,x=_.getDecomp();for(l=Boolean(x&&x.quickDecomp),i=i||{},u=[],o=void 0!==o&&o,r=void 0!==r?r:.01,a=void 0!==a?a:10,s=void 0!==s?s:.01,_.isArray(n[0])||(n=[n]),m=0;m<n.length;m+=1)if(p=n[m],!(d=k.isConvex(p))&&!l&&_.warnOnce("Bodies.fromVertices: Install the 'poly-decomp' library and use Common.setDecomp or provide 'decomp' as a global to decompose concave vertices."),d||!l)p=d?k.clockwiseSort(p):k.hull(p),u.push({position:{x:e,y:t},vertices:p});else{var h=p.map(function(e){return[e.x,e.y]});x.makeCCW(h),!1!==r&&x.removeCollinearPoints(h,r),!1!==s&&x.removeDuplicatePoints&&x.removeDuplicatePoints(h,s);var b=x.quickDecomp(h);for(f=0;f<b.length;f++){var S=b[f].map(function(e){return{x:e[0],y:e[1]}});0<a&&k.area(S)<a||u.push({position:k.centre(S),vertices:S})}}for(f=0;f<u.length;f++)u[f]=I.create(_.extend(u[f],i));if(o)for(f=0;f<u.length;f++){var w=u[f];for(v=f+1;v<u.length;v++){var A=u[v];if(T.overlaps(w.bounds,A.bounds)){var P=w.vertices,C=A.vertices;for(y=0;y<w.vertices.length;y++)for(g=0;g<A.vertices.length;g++){var M=R.magnitudeSquared(R.sub(P[(y+1)%P.length],C[g])),B=R.magnitudeSquared(R.sub(P[y],C[(g+1)%C.length]));M<5&&B<5&&(P[y].isInternal=!0,C[g].isInternal=!0)}}}}return 1<u.length?(c=I.create(_.extend({parts:u.slice(0)},i)),I.setPosition(c,{x:e,y:t}),c):u[0]}},function(e,t,n){var i={};e.exports=i;var o=n(0);i.create=function(e){var n={};return e||o.log("Mouse.create: element was undefined, defaulting to document.body","warn"),n.element=e||document.body,n.absolute={x:0,y:0},n.position={x:0,y:0},n.mousedownPosition={x:0,y:0},n.mouseupPosition={x:0,y:0},n.offset={x:0,y:0},n.scale={x:1,y:1},n.wheelDelta=0,n.button=-1,n.pixelRatio=parseInt(n.element.getAttribute("data-pixel-ratio"),10)||1,n.sourceEvents={mousemove:null,mousedown:null,mouseup:null,mousewheel:null},n.mousemove=function(e){var t=i._getRelativeMousePosition(e,n.element,n.pixelRatio);e.changedTouches&&(n.button=0,e.preventDefault()),n.absolute.x=t.x,n.absolute.y=t.y,n.position.x=n.absolute.x*n.scale.x+n.offset.x,n.position.y=n.absolute.y*n.scale.y+n.offset.y,n.sourceEvents.mousemove=e},n.mousedown=function(e){var t=i._getRelativeMousePosition(e,n.element,n.pixelRatio);e.changedTouches?(n.button=0,e.preventDefault()):n.button=e.button,n.absolute.x=t.x,n.absolute.y=t.y,n.position.x=n.absolute.x*n.scale.x+n.offset.x,n.position.y=n.absolute.y*n.scale.y+n.offset.y,n.mousedownPosition.x=n.position.x,n.mousedownPosition.y=n.position.y,n.sourceEvents.mousedown=e},n.mouseup=function(e){var t=i._getRelativeMousePosition(e,n.element,n.pixelRatio);e.changedTouches&&e.preventDefault(),n.button=-1,n.absolute.x=t.x,n.absolute.y=t.y,n.position.x=n.absolute.x*n.scale.x+n.offset.x,n.position.y=n.absolute.y*n.scale.y+n.offset.y,n.mouseupPosition.x=n.position.x,n.mouseupPosition.y=n.position.y,n.sourceEvents.mouseup=e},n.mousewheel=function(e){n.wheelDelta=Math.max(-1,Math.min(1,e.wheelDelta||-e.detail)),e.preventDefault()},i.setElement(n,n.element),n},i.setElement=function(e,t){(e.element=t).addEventListener("mousemove",e.mousemove),t.addEventListener("mousedown",e.mousedown),t.addEventListener("mouseup",e.mouseup),t.addEventListener("mousewheel",e.mousewheel),t.addEventListener("DOMMouseScroll",e.mousewheel),t.addEventListener("touchmove",e.mousemove),t.addEventListener("touchstart",e.mousedown),t.addEventListener("touchend",e.mouseup)},i.clearSourceEvents=function(e){e.sourceEvents.mousemove=null,e.sourceEvents.mousedown=null,e.sourceEvents.mouseup=null,e.sourceEvents.mousewheel=null,e.wheelDelta=0},i.setOffset=function(e,t){e.offset.x=t.x,e.offset.y=t.y,e.position.x=e.absolute.x*e.scale.x+e.offset.x,e.position.y=e.absolute.y*e.scale.y+e.offset.y},i.setScale=function(e,t){e.scale.x=t.x,e.scale.y=t.y,e.position.x=e.absolute.x*e.scale.x+e.offset.x,e.position.y=e.absolute.y*e.scale.y+e.offset.y},i._getRelativeMousePosition=function(e,t,n){var i,o,r=t.getBoundingClientRect(),a=document.documentElement||document.body.parentNode||document.body,s=void 0!==window.pageXOffset?window.pageXOffset:a.scrollLeft,l=void 0!==window.pageYOffset?window.pageYOffset:a.scrollTop,c=e.changedTouches;return o=c?(i=c[0].pageX-r.left-s,c[0].pageY-r.top-l):(i=e.pageX-r.left-s,e.pageY-r.top-l),{x:i/(t.clientWidth/(t.width||t.clientWidth)*n),y:o/(t.clientHeight/(t.height||t.clientHeight)*n)}}},function(e,t,n){var M={};e.exports=M;var i=n(0),B=n(8);M.create=function(e){return i.extend({bodies:[],pairs:null},e)},M.setBodies=function(e,t){e.bodies=t.slice(0)},M.clear=function(e){e.bodies=[]},M.collisions=function(e){var t,n,i=[],o=e.pairs,r=e.bodies,a=r.length,s=M.canCollide,l=B.collides;for(r.sort(M._compareBoundsX),t=0;t<a;t++){var c=r[t],u=c.bounds,d=c.bounds.max.x,p=c.bounds.max.y,f=c.bounds.min.y,v=c.isStatic||c.isSleeping,y=c.parts.length,m=1===y;for(n=t+1;n<a;n++){var g=r[n];if((C=g.bounds).min.x>d)break;if(!(p<C.min.y||f>C.max.y)&&(!v||!g.isStatic&&!g.isSleeping)&&s(c.collisionFilter,g.collisionFilter)){var x=g.parts.length;if(m&&1===x)(A=l(c,g,o))&&i.push(A);else for(var h=1<x?1:0,b=1<y?1:0;b<y;b++)for(var S=c.parts[b],w=(u=S.bounds,h);w<x;w++){var A,P=g.parts[w],C=P.bounds;u.min.x>C.max.x||u.max.x<C.min.x||u.max.y<C.min.y||u.min.y>C.max.y||(A=l(S,P,o))&&i.push(A)}}}}return i},M.canCollide=function(e,t){return e.group===t.group&&0!==e.group?0<e.group:0!=(e.mask&t.category)&&0!=(t.mask&e.category)},M._compareBoundsX=function(e,t){return e.bounds.min.x-t.bounds.min.x}},function(e,t,n){var s={};e.exports=s;var l=n(0);s._registry={},s.register=function(e){if(s.isPlugin(e)||l.warn("Plugin.register:",s.toString(e),"does not implement all required fields."),e.name in s._registry){var t=s._registry[e.name],n=s.versionParse(e.version).number,i=s.versionParse(t.version).number;i<n?(l.warn("Plugin.register:",s.toString(t),"was upgraded to",s.toString(e)),s._registry[e.name]=e):n<i?l.warn("Plugin.register:",s.toString(t),"can not be downgraded to",s.toString(e)):e!==t&&l.warn("Plugin.register:",s.toString(e),"is already registered to different plugin object")}else s._registry[e.name]=e;return e},s.resolve=function(e){return s._registry[s.dependencyParse(e).name]},s.toString=function(e){return"string"==typeof e?e:(e.name||"anonymous")+"@"+(e.version||e.range||"0.0.0")},s.isPlugin=function(e){return e&&e.name&&e.version&&e.install},s.isUsed=function(e,t){return-1<e.used.indexOf(t)},s.isFor=function(e,t){var n=e.for&&s.dependencyParse(e.for);return!e.for||t.name===n.name&&s.versionSatisfies(t.version,n.range)},s.use=function(e,t){if(e.uses=(e.uses||[]).concat(t||[]),0!==e.uses.length){for(var n=s.dependencies(e),i=l.topologicalSort(n),o=[],r=0;r<i.length;r+=1)if(i[r]!==e.name){var a=s.resolve(i[r]);a?s.isUsed(e,a.name)||(s.isFor(a,e)||(l.warn("Plugin.use:",s.toString(a),"is for",a.for,"but installed on",s.toString(e)+"."),a._warned=!0),a.install?a.install(e):(l.warn("Plugin.use:",s.toString(a),"does not specify an install function."),a._warned=!0),a._warned?(o.push("🔶 "+s.toString(a)),delete a._warned):o.push("✅ "+s.toString(a)),e.used.push(a.name)):o.push("❌ "+i[r])}0<o.length&&l.info(o.join(" "))}else l.warn("Plugin.use:",s.toString(e),"does not specify any dependencies to install.")},s.dependencies=function(i,e){var o=s.dependencyParse(i),t=o.name;if(!(t in(e=e||{}))){i=s.resolve(i)||i,e[t]=l.map(i.uses||[],function(e){s.isPlugin(e)&&s.register(e);var t=s.dependencyParse(e),n=s.resolve(e);return n&&!s.versionSatisfies(n.version,t.range)?(l.warn("Plugin.dependencies:",s.toString(n),"does not satisfy",s.toString(t),"used by",s.toString(o)+"."),n._warned=!0,i._warned=!0):n||(l.warn("Plugin.dependencies:",s.toString(e),"used by",s.toString(o),"could not be resolved."),i._warned=!0),t.name});for(var n=0;n<e[t].length;n+=1)s.dependencies(e[t][n],e);return e}},s.dependencyParse=function(e){return l.isString(e)?(/^[\w-]+(@(\*|[\^~]?\d+\.\d+\.\d+(-[0-9A-Za-z-+]+)?))?$/.test(e)||l.warn("Plugin.dependencyParse:",e,"is not a valid dependency string."),{name:e.split("@")[0],range:e.split("@")[1]||"*"}):{name:e.name,range:e.range||e.version}},s.versionParse=function(e){var t=/^(\*)|(\^|~|>=|>)?\s*((\d+)\.(\d+)\.(\d+))(-[0-9A-Za-z-+]+)?$/;t.test(e)||l.warn("Plugin.versionParse:",e,"is not a valid version or range.");var n=t.exec(e),i=Number(n[4]),o=Number(n[5]),r=Number(n[6]);return{isRange:Boolean(n[1]||n[2]),version:n[3],range:e,operator:n[1]||n[2]||"",major:i,minor:o,patch:r,parts:[i,o,r],prerelease:n[7],number:1e8*i+1e4*o+r}},s.versionSatisfies=function(e,t){t=t||"*";var n=s.versionParse(t),i=s.versionParse(e);if(n.isRange){if("*"===n.operator||"*"===e)return!0;if(">"===n.operator)return i.number>n.number;if(">="===n.operator)return i.number>=n.number;if("~"===n.operator)return i.major===n.major&&i.minor===n.minor&&i.patch>=n.patch;if("^"===n.operator)return 0<n.major?i.major===n.major&&i.number>=n.number:0<n.minor?i.minor===n.minor&&i.patch>=n.patch:i.patch===n.patch}return e===t||"*"===e}},function(e,t,n){var A={};e.exports=A;var P=n(0),C=n(5),M=n(1),B=n(4),k=n(2),_=n(13);!function(){var i,t;"undefined"!=typeof window&&(i=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||function(e){window.setTimeout(function(){e(P.now())},1e3/60)},t=window.cancelAnimationFrame||window.mozCancelAnimationFrame||window.webkitCancelAnimationFrame||window.msCancelAnimationFrame),A._goodFps=30,A._goodDelta=1e3/60,A.create=function(e){var t={controller:A,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:!!e.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}},n=P.extend(t,e);return n.canvas&&(n.canvas.width=n.options.width||n.canvas.width,n.canvas.height=n.options.height||n.canvas.height),n.mouse=e.mouse,n.engine=e.engine,n.canvas=n.canvas||r(n.options.width,n.options.height),n.context=n.canvas.getContext("2d"),n.textures={},n.bounds=n.bounds||{min:{x:0,y:0},max:{x:n.canvas.width,y:n.canvas.height}},n.options.showBroadphase=!1,1!==n.options.pixelRatio&&A.setPixelRatio(n,n.options.pixelRatio),P.isElement(n.element)?n.element.appendChild(n.canvas):n.canvas.parentNode||P.log("Render.create: options.element was undefined, render.canvas was created but not appended","warn"),n},A.run=function(n){!function e(t){n.frameRequestId=i(e),o(n,t),A.world(n,t),(n.options.showStats||n.options.showDebug)&&A.stats(n,n.context,t),(n.options.showPerformance||n.options.showDebug)&&A.performance(n,n.context,t)}()},A.stop=function(e){t(e.frameRequestId)},A.setPixelRatio=function(e,t){var n=e.options,i=e.canvas;"auto"===t&&(t=a(i)),n.pixelRatio=t,i.setAttribute("data-pixel-ratio",t),i.width=n.width*t,i.height=n.height*t,i.style.width=n.width+"px",i.style.height=n.height+"px"},A.lookAt=function(e,t,n,i){i=void 0===i||i,t=P.isArray(t)?t:[t],n=n||{x:0,y:0};for(var o={min:{x:1/0,y:1/0},max:{x:-1/0,y:-1/0}},r=0;r<t.length;r+=1){var a=t[r],s=a.bounds?a.bounds.min:a.min||a.position||a,l=a.bounds?a.bounds.max:a.max||a.position||a;s&&l&&(s.x<o.min.x&&(o.min.x=s.x),l.x>o.max.x&&(o.max.x=l.x),s.y<o.min.y&&(o.min.y=s.y),l.y>o.max.y&&(o.max.y=l.y))}var c=o.max.x-o.min.x+2*n.x,u=o.max.y-o.min.y+2*n.y,d=e.canvas.height,p=e.canvas.width/d,f=c/u,v=1,y=1;p<f?y=f/p:v=p/f,e.options.hasBounds=!0,e.bounds.min.x=o.min.x,e.bounds.max.x=o.min.x+c*v,e.bounds.min.y=o.min.y,e.bounds.max.y=o.min.y+u*y,i&&(e.bounds.min.x+=.5*c-c*v*.5,e.bounds.max.x+=.5*c-c*v*.5,e.bounds.min.y+=.5*u-u*y*.5,e.bounds.max.y+=.5*u-u*y*.5),e.bounds.min.x-=n.x,e.bounds.max.x-=n.x,e.bounds.min.y-=n.y,e.bounds.max.y-=n.y,e.mouse&&(_.setScale(e.mouse,{x:(e.bounds.max.x-e.bounds.min.x)/e.canvas.width,y:(e.bounds.max.y-e.bounds.min.y)/e.canvas.height}),_.setOffset(e.mouse,e.bounds.min))},A.startViewTransform=function(e){var t=e.bounds.max.x-e.bounds.min.x,n=e.bounds.max.y-e.bounds.min.y,i=t/e.options.width,o=n/e.options.height;e.context.setTransform(e.options.pixelRatio/i,0,0,e.options.pixelRatio/o,0,0),e.context.translate(-e.bounds.min.x,-e.bounds.min.y)},A.endViewTransform=function(e){e.context.setTransform(e.options.pixelRatio,0,0,e.options.pixelRatio,0,0)},A.world=function(e,t){var n,i=P.now(),o=e.engine,r=o.world,a=e.canvas,s=e.context,l=e.options,c=e.timing,u=C.allBodies(r),d=C.allConstraints(r),p=l.wireframes?l.wireframeBackground:l.background,f=[],v=[],y={timestamp:o.timing.timestamp};if(B.trigger(e,"beforeRender",y),e.currentBackground!==p&&w(e,p),s.globalCompositeOperation="source-in",s.fillStyle="transparent",s.fillRect(0,0,a.width,a.height),s.globalCompositeOperation="source-over",l.hasBounds){for(n=0;n<u.length;n++){var m=u[n];M.overlaps(m.bounds,e.bounds)&&f.push(m)}for(n=0;n<d.length;n++){var g=d[n],x=g.bodyA,h=g.bodyB,b=g.pointA,S=g.pointB;x&&(b=k.add(x.position,g.pointA)),h&&(S=k.add(h.position,g.pointB)),b&&S&&(M.contains(e.bounds,b)||M.contains(e.bounds,S))&&v.push(g)}A.startViewTransform(e),e.mouse&&(_.setScale(e.mouse,{x:(e.bounds.max.x-e.bounds.min.x)/e.options.width,y:(e.bounds.max.y-e.bounds.min.y)/e.options.height}),_.setOffset(e.mouse,e.bounds.min))}else v=d,f=u,1!==e.options.pixelRatio&&e.context.setTransform(e.options.pixelRatio,0,0,e.options.pixelRatio,0,0);!l.wireframes||o.enableSleeping&&l.showSleeping?A.bodies(e,f,s):(l.showConvexHulls&&A.bodyConvexHulls(e,f,s),A.bodyWireframes(e,f,s)),l.showBounds&&A.bodyBounds(e,f,s),(l.showAxes||l.showAngleIndicator)&&A.bodyAxes(e,f,s),l.showPositions&&A.bodyPositions(e,f,s),l.showVelocity&&A.bodyVelocity(e,f,s),l.showIds&&A.bodyIds(e,f,s),l.showSeparations&&A.separations(e,o.pairs.list,s),l.showCollisions&&A.collisions(e,o.pairs.list,s),l.showVertexNumbers&&A.vertexNumbers(e,f,s),l.showMousePosition&&A.mousePosition(e,e.mouse,s),A.constraints(v,s),l.hasBounds&&A.endViewTransform(e),B.trigger(e,"afterRender",y),c.lastElapsed=P.now()-i},A.stats=function(e,t,n){for(var i=e.engine,o=i.world,r=C.allBodies(o),a=0,s=0,l=0;l<r.length;l+=1)a+=r[l].parts.length;var c={Part:a,Body:r.length,Cons:C.allConstraints(o).length,Comp:C.allComposites(o).length,Pair:i.pairs.list.length};for(var u in t.fillStyle="#0e0f19",t.fillRect(s,0,302.5,44),t.font="12px Arial",t.textBaseline="top",t.textAlign="right",c){var d=c[u];t.fillStyle="#aaa",t.fillText(u,s+55,8),t.fillStyle="#eee",t.fillText(d,s+55,26),s+=55}},A.performance=function(e,t){var n=e.engine,i=e.timing,o=i.deltaHistory,r=i.elapsedHistory,a=i.timestampElapsedHistory,s=i.engineDeltaHistory,l=i.engineElapsedHistory,c=n.timing.lastDelta,u=m(o),d=m(r),p=m(s),f=m(l),v=m(a)/u||0,y=1e3/u||0;t.fillStyle="#0e0f19",t.fillRect(0,50,370,34),A.status(t,10,69,60,4,o.length,Math.round(y)+" fps",y/A._goodFps,function(e){return o[e]/u-1}),A.status(t,82,69,60,4,s.length,c.toFixed(2)+" dt",A._goodDelta/c,function(e){return s[e]/p-1}),A.status(t,154,69,60,4,l.length,f.toFixed(2)+" ut",1-f/A._goodFps,function(e){return l[e]/f-1}),A.status(t,226,69,60,4,r.length,d.toFixed(2)+" rt",1-d/A._goodFps,function(e){return r[e]/d-1}),A.status(t,298,69,60,4,a.length,v.toFixed(2)+" x",v*v*v,function(e){return(a[e]/o[e]/v||0)-1})},A.status=function(e,t,n,i,o,r,a,s,l){e.strokeStyle="#888",e.fillStyle="#444",e.lineWidth=1,e.fillRect(t,n+7,i,1),e.beginPath(),e.moveTo(t,n+7-o*P.clamp(.4*l(0),-2,2));for(var c=0;c<i;c+=1)e.lineTo(t+c,n+7-(c<r?o*P.clamp(.4*l(c),-2,2):0));e.stroke(),e.fillStyle="hsl("+P.clamp(25+95*s,0,120)+",100%,60%)",e.fillRect(t,n-7,4,4),e.font="12px Arial",e.textBaseline="middle",e.textAlign="right",e.fillStyle="#eee",e.fillText(a,t+i,n-5)},A.constraints=function(e,t){for(var n=t,i=0;i<e.length;i++){var o=e[i];if(o.render.visible&&o.pointA&&o.pointB){var r,a,s=o.bodyA,l=o.bodyB;if(r=s?k.add(s.position,o.pointA):o.pointA,"pin"===o.render.type)n.beginPath(),n.arc(r.x,r.y,3,0,2*Math.PI),n.closePath();else{if(a=l?k.add(l.position,o.pointB):o.pointB,n.beginPath(),n.moveTo(r.x,r.y),"spring"===o.render.type)for(var c,u=k.sub(a,r),d=k.perp(k.normalise(u)),p=Math.ceil(P.clamp(o.length/5,12,20)),f=1;f<p;f+=1)c=f%2==0?1:-1,n.lineTo(r.x+u.x*(f/p)+d.x*c*4,r.y+u.y*(f/p)+d.y*c*4);n.lineTo(a.x,a.y)}o.render.lineWidth&&(n.lineWidth=o.render.lineWidth,n.strokeStyle=o.render.strokeStyle,n.stroke()),o.render.anchors&&(n.fillStyle=o.render.strokeStyle,n.beginPath(),n.arc(r.x,r.y,3,0,2*Math.PI),n.arc(a.x,a.y,3,0,2*Math.PI),n.closePath(),n.fill())}}},A.bodies=function(e,t,n){var i,o,r,a,s=n,l=(e.engine,e.options),c=l.showInternalEdges||!l.wireframes;for(r=0;r<t.length;r++)if((i=t[r]).render.visible)for(a=1<i.parts.length?1:0;a<i.parts.length;a++)if((o=i.parts[a]).render.visible){if(l.showSleeping&&i.isSleeping?s.globalAlpha=.5*o.render.opacity:1!==o.render.opacity&&(s.globalAlpha=o.render.opacity),o.render.sprite&&o.render.sprite.texture&&!l.wireframes){var u=o.render.sprite,d=f(e,u.texture);s.translate(o.position.x,o.position.y),s.rotate(o.angle),s.drawImage(d,d.width*-u.xOffset*u.xScale,d.height*-u.yOffset*u.yScale,d.width*u.xScale,d.height*u.yScale),s.rotate(-o.angle),s.translate(-o.position.x,-o.position.y)}else{if(o.circleRadius)s.beginPath(),s.arc(o.position.x,o.position.y,o.circleRadius,0,2*Math.PI);else{s.beginPath(),s.moveTo(o.vertices[0].x,o.vertices[0].y);for(var p=1;p<o.vertices.length;p++)!o.vertices[p-1].isInternal||c?s.lineTo(o.vertices[p].x,o.vertices[p].y):s.moveTo(o.vertices[p].x,o.vertices[p].y),o.vertices[p].isInternal&&!c&&s.moveTo(o.vertices[(p+1)%o.vertices.length].x,o.vertices[(p+1)%o.vertices.length].y);s.lineTo(o.vertices[0].x,o.vertices[0].y),s.closePath()}l.wireframes?(s.lineWidth=1,s.strokeStyle="#bbb",s.stroke()):(s.fillStyle=o.render.fillStyle,o.render.lineWidth&&(s.lineWidth=o.render.lineWidth,s.strokeStyle=o.render.strokeStyle,s.stroke()),s.fill())}s.globalAlpha=1}},A.bodyWireframes=function(e,t,n){var i,o,r,a,s,l=n,c=e.options.showInternalEdges;for(l.beginPath(),r=0;r<t.length;r++)if((i=t[r]).render.visible)for(s=1<i.parts.length?1:0;s<i.parts.length;s++){for(o=i.parts[s],l.moveTo(o.vertices[0].x,o.vertices[0].y),a=1;a<o.vertices.length;a++)!o.vertices[a-1].isInternal||c?l.lineTo(o.vertices[a].x,o.vertices[a].y):l.moveTo(o.vertices[a].x,o.vertices[a].y),o.vertices[a].isInternal&&!c&&l.moveTo(o.vertices[(a+1)%o.vertices.length].x,o.vertices[(a+1)%o.vertices.length].y);l.lineTo(o.vertices[0].x,o.vertices[0].y)}l.lineWidth=1,l.strokeStyle="#bbb",l.stroke()},A.bodyConvexHulls=function(e,t,n){var i,o,r,a=n;for(a.beginPath(),o=0;o<t.length;o++)if((i=t[o]).render.visible&&1!==i.parts.length){for(a.moveTo(i.vertices[0].x,i.vertices[0].y),r=1;r<i.vertices.length;r++)a.lineTo(i.vertices[r].x,i.vertices[r].y);a.lineTo(i.vertices[0].x,i.vertices[0].y)}a.lineWidth=1,a.strokeStyle="rgba(255,255,255,0.2)",a.stroke()},A.vertexNumbers=function(e,t,n){var i,o,r,a=n;for(i=0;i<t.length;i++){var s=t[i].parts;for(r=1<s.length?1:0;r<s.length;r++){var l=s[r];for(o=0;o<l.vertices.length;o++)a.fillStyle="rgba(255,255,255,0.2)",a.fillText(i+"_"+o,l.position.x+.8*(l.vertices[o].x-l.position.x),l.position.y+.8*(l.vertices[o].y-l.position.y))}}},A.mousePosition=function(e,t,n){var i=n;i.fillStyle="rgba(255,255,255,0.8)",i.fillText(t.position.x+" "+t.position.y,t.position.x+5,t.position.y-5)},A.bodyBounds=function(e,t,n){var i=n,o=(e.engine,e.options);i.beginPath();for(var r=0;r<t.length;r++)if(t[r].render.visible)for(var a=t[r].parts,s=1<a.length?1:0;s<a.length;s++){var l=a[s];i.rect(l.bounds.min.x,l.bounds.min.y,l.bounds.max.x-l.bounds.min.x,l.bounds.max.y-l.bounds.min.y)}o.wireframes?i.strokeStyle="rgba(255,255,255,0.08)":i.strokeStyle="rgba(0,0,0,0.1)",i.lineWidth=1,i.stroke()},A.bodyAxes=function(e,t,n){var i,o,r,a,s=n,l=(e.engine,e.options);for(s.beginPath(),o=0;o<t.length;o++){var c=t[o],u=c.parts;if(c.render.visible)if(l.showAxes)for(r=1<u.length?1:0;r<u.length;r++)for(i=u[r],a=0;a<i.axes.length;a++){var d=i.axes[a];s.moveTo(i.position.x,i.position.y),s.lineTo(i.position.x+20*d.x,i.position.y+20*d.y)}else for(r=1<u.length?1:0;r<u.length;r++)for(i=u[r],a=0;a<i.axes.length;a++)s.moveTo(i.position.x,i.position.y),s.lineTo((i.vertices[0].x+i.vertices[i.vertices.length-1].x)/2,(i.vertices[0].y+i.vertices[i.vertices.length-1].y)/2)}l.wireframes?(s.strokeStyle="indianred",s.lineWidth=1):(s.strokeStyle="rgba(255, 255, 255, 0.4)",s.globalCompositeOperation="overlay",s.lineWidth=2),s.stroke(),s.globalCompositeOperation="source-over"},A.bodyPositions=function(e,t,n){var i,o,r,a,s=n,l=(e.engine,e.options);for(s.beginPath(),r=0;r<t.length;r++)if((i=t[r]).render.visible)for(a=0;a<i.parts.length;a++)o=i.parts[a],s.arc(o.position.x,o.position.y,3,0,2*Math.PI,!1),s.closePath();for(l.wireframes?s.fillStyle="indianred":s.fillStyle="rgba(0,0,0,0.5)",s.fill(),s.beginPath(),r=0;r<t.length;r++)(i=t[r]).render.visible&&(s.arc(i.positionPrev.x,i.positionPrev.y,2,0,2*Math.PI,!1),s.closePath());s.fillStyle="rgba(255,165,0,0.8)",s.fill()},A.bodyVelocity=function(e,t,n){var i=n;i.beginPath();for(var o=0;o<t.length;o++){var r=t[o];r.render.visible&&(i.moveTo(r.position.x,r.position.y),i.lineTo(r.position.x+2*(r.position.x-r.positionPrev.x),r.position.y+2*(r.position.y-r.positionPrev.y)))}i.lineWidth=3,i.strokeStyle="cornflowerblue",i.stroke()},A.bodyIds=function(e,t,n){var i,o,r=n;for(i=0;i<t.length;i++)if(t[i].render.visible){var a=t[i].parts;for(o=1<a.length?1:0;o<a.length;o++){var s=a[o];r.font="12px Arial",r.fillStyle="rgba(255,255,255,0.5)",r.fillText(s.id,s.position.x+10,s.position.y-10)}}},A.collisions=function(e,t,n){var i,o,r,a,s=n,l=e.options;for(s.beginPath(),r=0;r<t.length;r++)if((i=t[r]).isActive)for(o=i.collision,a=0;a<i.activeContacts.length;a++){var c=i.activeContacts[a].vertex;s.rect(c.x-1.5,c.y-1.5,3.5,3.5)}for(l.wireframes?s.fillStyle="rgba(255,255,255,0.7)":s.fillStyle="orange",s.fill(),s.beginPath(),r=0;r<t.length;r++)if((i=t[r]).isActive&&(o=i.collision,0<i.activeContacts.length)){var u=i.activeContacts[0].vertex.x,d=i.activeContacts[0].vertex.y;2===i.activeContacts.length&&(u=(i.activeContacts[0].vertex.x+i.activeContacts[1].vertex.x)/2,d=(i.activeContacts[0].vertex.y+i.activeContacts[1].vertex.y)/2),o.bodyB===o.supports[0].body||!0===o.bodyA.isStatic?s.moveTo(u-8*o.normal.x,d-8*o.normal.y):s.moveTo(u+8*o.normal.x,d+8*o.normal.y),s.lineTo(u,d)}l.wireframes?s.strokeStyle="rgba(255,165,0,0.7)":s.strokeStyle="orange",s.lineWidth=1,s.stroke()},A.separations=function(e,t,n){var i,o,r,a,s,l=n,c=e.options;for(l.beginPath(),s=0;s<t.length;s++)if((i=t[s]).isActive){r=(o=i.collision).bodyA;var u=1;(a=o.bodyB).isStatic||r.isStatic||(u=.5),a.isStatic&&(u=0),l.moveTo(a.position.x,a.position.y),l.lineTo(a.position.x-o.penetration.x*u,a.position.y-o.penetration.y*u),u=1,a.isStatic||r.isStatic||(u=.5),r.isStatic&&(u=0),l.moveTo(r.position.x,r.position.y),l.lineTo(r.position.x+o.penetration.x*u,r.position.y+o.penetration.y*u)}c.wireframes?l.strokeStyle="rgba(255,165,0,0.5)":l.strokeStyle="orange",l.stroke()},A.inspector=function(e,t){e.engine;var n,i=e.selected,o=e.render,r=o.options;if(r.hasBounds){var a=o.bounds.max.x-o.bounds.min.x,s=o.bounds.max.y-o.bounds.min.y,l=a/o.options.width,c=s/o.options.height;t.scale(1/l,1/c),t.translate(-o.bounds.min.x,-o.bounds.min.y)}for(var u=0;u<i.length;u++){var d=i[u].data;switch(t.translate(.5,.5),t.lineWidth=1,t.strokeStyle="rgba(255,165,0,0.9)",t.setLineDash([1,2]),d.type){case"body":n=d.bounds,t.beginPath(),t.rect(Math.floor(n.min.x-3),Math.floor(n.min.y-3),Math.floor(n.max.x-n.min.x+6),Math.floor(n.max.y-n.min.y+6)),t.closePath(),t.stroke();break;case"constraint":var p=d.pointA;d.bodyA&&(p=d.pointB),t.beginPath(),t.arc(p.x,p.y,10,0,2*Math.PI),t.closePath(),t.stroke()}t.setLineDash([]),t.translate(-.5,-.5)}null!==e.selectStart&&(t.translate(.5,.5),t.lineWidth=1,t.strokeStyle="rgba(255,165,0,0.6)",t.fillStyle="rgba(255,165,0,0.1)",n=e.selectBounds,t.beginPath(),t.rect(Math.floor(n.min.x),Math.floor(n.min.y),Math.floor(n.max.x-n.min.x),Math.floor(n.max.y-n.min.y)),t.closePath(),t.stroke(),t.fill(),t.translate(-.5,-.5)),r.hasBounds&&t.setTransform(1,0,0,1,0,0)};var o=function(e,t){var n=e.engine,i=e.timing,o=i.historySize,r=n.timing.timestamp;i.delta=t-i.lastTime||A._goodDelta,i.lastTime=t,i.timestampElapsed=r-i.lastTimestamp||0,i.lastTimestamp=r,i.deltaHistory.unshift(i.delta),i.deltaHistory.length=Math.min(i.deltaHistory.length,o),i.engineDeltaHistory.unshift(n.timing.lastDelta),i.engineDeltaHistory.length=Math.min(i.engineDeltaHistory.length,o),i.timestampElapsedHistory.unshift(i.timestampElapsed),i.timestampElapsedHistory.length=Math.min(i.timestampElapsedHistory.length,o),i.engineElapsedHistory.unshift(n.timing.lastElapsed),i.engineElapsedHistory.length=Math.min(i.engineElapsedHistory.length,o),i.elapsedHistory.unshift(i.lastElapsed),i.elapsedHistory.length=Math.min(i.elapsedHistory.length,o)},m=function(e){for(var t=0,n=0;n<e.length;n+=1)t+=e[n];return t/e.length||0},r=function(e,t){var n=document.createElement("canvas");return n.width=e,n.height=t,n.oncontextmenu=function(){return!1},n.onselectstart=function(){return!1},n},a=function(e){var t=e.getContext("2d");return(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)},f=function(e,t){var n=e.textures[t];return n||((n=e.textures[t]=new Image).src=t,n)},w=function(e,t){var n=t;/(jpg|gif|png)$/.test(t)&&(n="url("+t+")"),e.canvas.style.background=n,e.canvas.style.backgroundSize="contain",e.currentBackground=t}}()},function(e,t){var n={};(e.exports=n).create=function(e){return{vertex:e,normalImpulse:0,tangentImpulse:0}}},function(e,t,n){var v={};e.exports=v;var y=n(7),m=n(19),g=n(14),x=n(20),h=n(4),b=n(5),S=n(10),w=n(0),s=n(6);v.create=function(e){e=e||{};var t=w.extend({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}},e);return t.world=e.world||b.create({label:"World"}),t.pairs=e.pairs||x.create(),t.detector=e.detector||g.create(),t.grid={buckets:[]},t.world.gravity=t.gravity,t.broadphase=t.grid,t.metrics={},t},v.update=function(e,t,n){var i=w.now();t=t||1e3/60,n=n||1;var o,r=e.world,a=e.detector,s=e.pairs,l=e.timing,c=l.timestamp;l.timestamp+=t*l.timeScale,l.lastDelta=t*l.timeScale;var u={timestamp:l.timestamp};h.trigger(e,"beforeUpdate",u);var d=b.allBodies(r),p=b.allConstraints(r);for(r.isModified&&g.setBodies(a,d),r.isModified&&b.setModified(r,!1,!1,!0),e.enableSleeping&&y.update(d,l.timeScale),v._bodiesApplyGravity(d,e.gravity),v._bodiesUpdate(d,t,l.timeScale,n,r.bounds),S.preSolveAll(d),o=0;o<e.constraintIterations;o++)S.solveAll(p,l.timeScale);S.postSolveAll(d),a.pairs=e.pairs;var f=g.collisions(a);for(x.update(s,f,c),e.enableSleeping&&y.afterCollisions(s.list,l.timeScale),0<s.collisionStart.length&&h.trigger(e,"collisionStart",{pairs:s.collisionStart}),m.preSolvePosition(s.list),o=0;o<e.positionIterations;o++)m.solvePosition(s.list,l.timeScale);for(m.postSolvePosition(d),S.preSolveAll(d),o=0;o<e.constraintIterations;o++)S.solveAll(p,l.timeScale);for(S.postSolveAll(d),m.preSolveVelocity(s.list),o=0;o<e.velocityIterations;o++)m.solveVelocity(s.list,l.timeScale);return 0<s.collisionActive.length&&h.trigger(e,"collisionActive",{pairs:s.collisionActive}),0<s.collisionEnd.length&&h.trigger(e,"collisionEnd",{pairs:s.collisionEnd}),v._bodiesClearForces(d),h.trigger(e,"afterUpdate",u),e.timing.lastElapsed=w.now()-i,e},v.merge=function(e,t){if(w.extend(e,t),t.world){e.world=t.world,v.clear(e);for(var n=b.allBodies(e.world),i=0;i<n.length;i++){var o=n[i];y.set(o,!1),o.id=w.nextId()}}},v.clear=function(e){x.clear(e.pairs),g.clear(e.detector)},v._bodiesClearForces=function(e){for(var t=0;t<e.length;t++){var n=e[t];n.force.x=0,n.force.y=0,n.torque=0}},v._bodiesApplyGravity=function(e,t){var n=void 0!==t.scale?t.scale:.001;if((0!==t.x||0!==t.y)&&0!==n)for(var i=0;i<e.length;i++){var o=e[i];o.isStatic||o.isSleeping||(o.force.y+=o.mass*t.y*n,o.force.x+=o.mass*t.x*n)}},v._bodiesUpdate=function(e,t,n,i,o){for(var r=0;r<e.length;r++){var a=e[r];a.isStatic||a.isSleeping||s.update(a,t,n,i)}}},function(e,t,n){var Z={};e.exports=Z;var f=n(3),v=n(1);Z._restingThresh=4,Z._restingThreshTangent=6,Z._positionDampen=.9,Z._positionWarming=.8,Z._frictionNormalMultiplier=5,Z.preSolvePosition=function(e){var t,n,i,o=e.length;for(t=0;t<o;t++)(n=e[t]).isActive&&(i=n.activeContacts.length,n.collision.parentA.totalContacts+=i,n.collision.parentB.totalContacts+=i)},Z.solvePosition=function(e,t){var n,i,o,r,a,s,l,c,u=Z._positionDampen,d=e.length;for(n=0;n<d;n++)(i=e[n]).isActive&&!i.isSensor&&(r=(o=i.collision).parentA,a=o.parentB,s=o.normal,i.separation=s.x*(a.positionImpulse.x+o.penetration.x-r.positionImpulse.x)+s.y*(a.positionImpulse.y+o.penetration.y-r.positionImpulse.y));for(n=0;n<d;n++)(i=e[n]).isActive&&!i.isSensor&&(r=(o=i.collision).parentA,a=o.parentB,s=o.normal,c=(i.separation-i.slop)*t,(r.isStatic||a.isStatic)&&(c*=2),r.isStatic||r.isSleeping||(l=u/r.totalContacts,r.positionImpulse.x+=s.x*c*l,r.positionImpulse.y+=s.y*c*l),a.isStatic||a.isSleeping||(l=u/a.totalContacts,a.positionImpulse.x-=s.x*c*l,a.positionImpulse.y-=s.y*c*l))},Z.postSolvePosition=function(e){for(var t=Z._positionWarming,n=e.length,i=f.translate,o=v.update,r=0;r<n;r++){var a=e[r],s=a.positionImpulse,l=s.x,c=s.y,u=a.velocity;if((a.totalContacts=0)!==l||0!==c){for(var d=0;d<a.parts.length;d++){var p=a.parts[d];i(p.vertices,s),o(p.bounds,p.vertices,u),p.position.x+=l,p.position.y+=c}a.positionPrev.x+=l,a.positionPrev.y+=c,l*u.x+c*u.y<0?(s.x=0,s.y=0):(s.x*=t,s.y*=t)}}},Z.preSolveVelocity=function(e){var t,n,i=e.length;for(t=0;t<i;t++){var o=e[t];if(o.isActive&&!o.isSensor){var r=o.activeContacts,a=r.length,s=o.collision,l=s.parentA,c=s.parentB,u=s.normal,d=s.tangent;for(n=0;n<a;n++){var p=r[n],f=p.vertex,v=p.normalImpulse,y=p.tangentImpulse;if(0!==v||0!==y){var m=u.x*v+d.x*y,g=u.y*v+d.y*y;l.isStatic||l.isSleeping||(l.positionPrev.x+=m*l.inverseMass,l.positionPrev.y+=g*l.inverseMass,l.anglePrev+=l.inverseInertia*((f.x-l.position.x)*g-(f.y-l.position.y)*m)),c.isStatic||c.isSleeping||(c.positionPrev.x-=m*c.inverseMass,c.positionPrev.y-=g*c.inverseMass,c.anglePrev-=c.inverseInertia*((f.x-c.position.x)*g-(f.y-c.position.y)*m))}}}}},Z.solveVelocity=function(e,t){var n,i,o,r,a=t*t,s=Z._restingThresh*a,l=Z._frictionNormalMultiplier,c=Z._restingThreshTangent*a,u=Number.MAX_VALUE,d=e.length;for(o=0;o<d;o++){var p=e[o];if(p.isActive&&!p.isSensor){var f=p.collision,v=f.parentA,y=f.parentB,m=v.velocity,g=y.velocity,x=f.normal.x,h=f.normal.y,b=f.tangent.x,S=f.tangent.y,w=p.activeContacts,A=w.length,P=1/A,C=v.inverseMass+y.inverseMass,M=p.friction*p.frictionStatic*l*a;for(m.x=v.position.x-v.positionPrev.x,m.y=v.position.y-v.positionPrev.y,g.x=y.position.x-y.positionPrev.x,g.y=y.position.y-y.positionPrev.y,v.angularVelocity=v.angle-v.anglePrev,y.angularVelocity=y.angle-y.anglePrev,r=0;r<A;r++){var B=w[r],k=B.vertex,_=k.x-v.position.x,I=k.y-v.position.y,T=k.x-y.position.x,R=k.y-y.position.y,E=m.x-I*v.angularVelocity,V=m.y+_*v.angularVelocity,L=E-(g.x-R*y.angularVelocity),O=V-(g.y+T*y.angularVelocity),D=x*L+h*O,F=b*L+S*O,H=p.separation+D,j=Math.min(H,1),q=(j=H<0?0:j)*M;q<F||q<-F?(i=0<F?F:-F,(n=p.friction*(0<F?1:-1)*a)<-i?n=-i:i<n&&(n=i)):(n=F,i=u);var W=_*h-I*x,G=T*h-R*x,N=P/(C+v.inverseInertia*W*W+y.inverseInertia*G*G),U=(1+p.restitution)*D*N;if(n*=N,s<D*D&&D<0)B.normalImpulse=0;else{var z=B.normalImpulse;B.normalImpulse+=U,B.normalImpulse=Math.min(B.normalImpulse,0),U=B.normalImpulse-z}if(c<F*F)B.tangentImpulse=0;else{var X=B.tangentImpulse;B.tangentImpulse+=n,B.tangentImpulse<-i&&(B.tangentImpulse=-i),B.tangentImpulse>i&&(B.tangentImpulse=i),n=B.tangentImpulse-X}var Q=x*U+b*n,Y=h*U+S*n;v.isStatic||v.isSleeping||(v.positionPrev.x+=Q*v.inverseMass,v.positionPrev.y+=Y*v.inverseMass,v.anglePrev+=(_*Y-I*Q)*v.inverseInertia),y.isStatic||y.isSleeping||(y.positionPrev.x-=Q*y.inverseMass,y.positionPrev.y-=Y*y.inverseMass,y.anglePrev-=(T*Y-R*Q)*y.inverseInertia)}}}}},function(e,t,n){var i={};e.exports=i;var y=n(9),o=n(0);i.create=function(e){return o.extend({table:{},list:[],collisionStart:[],collisionActive:[],collisionEnd:[]},e)},i.update=function(e,t,n){var i,o,r,a,s=e.list,l=s.length,c=e.table,u=t.length,d=e.collisionStart,p=e.collisionEnd,f=e.collisionActive;for(d.length=0,p.length=0,a=f.length=0;a<l;a++)s[a].confirmedActive=!1;for(a=0;a<u;a++)(r=(i=t[a]).pair)?(r.isActive?f.push(r):d.push(r),y.update(r,i,n),r.confirmedActive=!0):(c[(r=y.create(i,n)).id]=r,d.push(r),s.push(r));var v=[];for(l=s.length,a=0;a<l;a++)(r=s[a]).confirmedActive||(y.setActive(r,!1,n),p.push(r),r.collision.bodyA.isSleeping||r.collision.bodyB.isSleeping||v.push(a));for(a=0;a<v.length;a++)r=s[o=v[a]-a],s.splice(o,1),delete c[r.id]},i.clear=function(e){return e.table={},e.list.length=0,e.collisionStart.length=0,e.collisionActive.length=0,e.collisionEnd.length=0,e}},function(e,t,n){var i=e.exports=n(22);i.Axes=n(11),i.Bodies=n(12),i.Body=n(6),i.Bounds=n(1),i.Collision=n(8),i.Common=n(0),i.Composite=n(5),i.Composites=n(23),i.Constraint=n(10),i.Contact=n(17),i.Detector=n(14),i.Engine=n(18),i.Events=n(4),i.Grid=n(24),i.Mouse=n(13),i.MouseConstraint=n(25),i.Pair=n(9),i.Pairs=n(20),i.Plugin=n(15),i.Query=n(26),i.Render=n(16),i.Resolver=n(19),i.Runner=n(27),i.SAT=n(28),i.Sleeping=n(7),i.Svg=n(29),i.Vector=n(2),i.Vertices=n(3),i.World=n(30),i.Engine.run=i.Runner.run,i.Common.deprecated(i.Engine,"run","Engine.run ➤ use Matter.Runner.run(engine) instead")},function(e,t,n){var i={};e.exports=i;var o=n(15),r=n(0);i.name="matter-js",i.version="0.18.0",i.uses=[],i.used=[],i.use=function(){o.use(i,Array.prototype.slice.call(arguments))},i.before=function(e,t){return e=e.replace(/^Matter./,""),r.chainPathBefore(i,e,t)},i.after=function(e,t){return e=e.replace(/^Matter./,""),r.chainPathAfter(i,e,t)}},function(e,t,n){var f={};e.exports=f;var x=n(5),y=n(10),m=n(0),h=n(6),v=n(12),i=m.deprecated;f.stack=function(e,t,n,i,o,r,a){for(var s,l=x.create({label:"Stack"}),c=e,u=t,d=0,p=0;p<i;p++){for(var f=0,v=0;v<n;v++){var y=a(c,u,v,p,s,d);if(y){var m=y.bounds.max.y-y.bounds.min.y,g=y.bounds.max.x-y.bounds.min.x;f<m&&(f=m),h.translate(y,{x:.5*g,y:.5*m}),c=y.bounds.max.x+o,x.addBody(l,y),s=y,d+=1}else c+=o}u+=f+r,c=e}return l},f.chain=function(e,t,n,i,o,r){for(var a=e.bodies,s=1;s<a.length;s++){var l=a[s-1],c=a[s],u=l.bounds.max.y-l.bounds.min.y,d=l.bounds.max.x-l.bounds.min.x,p=c.bounds.max.y-c.bounds.min.y,f={bodyA:l,pointA:{x:d*t,y:u*n},bodyB:c,pointB:{x:(c.bounds.max.x-c.bounds.min.x)*i,y:p*o}},v=m.extend(f,r);x.addConstraint(e,y.create(v))}return e.label+=" Chain",e},f.mesh=function(e,t,n,i,o){var r,a,s,l,c,u=e.bodies;for(r=0;r<n;r++){for(a=1;a<t;a++)s=u[a-1+r*t],l=u[a+r*t],x.addConstraint(e,y.create(m.extend({bodyA:s,bodyB:l},o)));if(0<r)for(a=0;a<t;a++)s=u[a+(r-1)*t],l=u[a+r*t],x.addConstraint(e,y.create(m.extend({bodyA:s,bodyB:l},o))),i&&0<a&&(c=u[a-1+(r-1)*t],x.addConstraint(e,y.create(m.extend({bodyA:c,bodyB:l},o)))),i&&a<t-1&&(c=u[a+1+(r-1)*t],x.addConstraint(e,y.create(m.extend({bodyA:c,bodyB:l},o))))}return e.label+=" Mesh",e},f.pyramid=function(l,e,c,u,d,t,p){return f.stack(l,e,c,u,d,t,function(e,t,n,i,o,r){var a=Math.min(u,Math.ceil(c/2)),s=o?o.bounds.max.x-o.bounds.min.x:0;if(!(a<i||n<(i=a-i)||c-1-i<n))return 1===r&&h.translate(o,{x:(n+(c%2==1?1:-1))*s,y:0}),p(l+(o?n*s:0)+n*d,t,n,i,o,r)})},f.newtonsCradle=function(e,t,n,i,o){for(var r=x.create({label:"Newtons Cradle"}),a=0;a<n;a++){var s=v.circle(e+a*(1.9*i),t+o,i,{inertia:1/0,restitution:1,friction:0,frictionAir:1e-4,slop:1}),l=y.create({pointA:{x:e+a*(1.9*i),y:t},bodyB:s});x.addBody(r,s),x.addConstraint(r,l)}return r},i(f,"newtonsCradle","Composites.newtonsCradle ➤ moved to newtonsCradle example"),f.car=function(e,t,n,i,o){var r=h.nextGroup(!0),a=.5*-n+20,s=.5*n-20,l=x.create({label:"Car"}),c=v.rectangle(e,t,n,i,{collisionFilter:{group:r},chamfer:{radius:.5*i},density:2e-4}),u=v.circle(e+a,t+0,o,{collisionFilter:{group:r},friction:.8}),d=v.circle(e+s,t+0,o,{collisionFilter:{group:r},friction:.8}),p=y.create({bodyB:c,pointB:{x:a,y:0},bodyA:u,stiffness:1,length:0}),f=y.create({bodyB:c,pointB:{x:s,y:0},bodyA:d,stiffness:1,length:0});return x.addBody(l,c),x.addBody(l,u),x.addBody(l,d),x.addConstraint(l,p),x.addConstraint(l,f),l},i(f,"car","Composites.car ➤ moved to car example"),f.softBody=function(e,t,n,i,o,r,a,s,l,c){l=m.extend({inertia:1/0},l),c=m.extend({stiffness:.2,render:{type:"line",anchors:!1}},c);var u=f.stack(e,t,n,i,o,r,function(e,t){return v.circle(e,t,s,l)});return f.mesh(u,n,i,a,c),u.label="Soft Body",u},i(f,"softBody","Composites.softBody ➤ moved to softBody and cloth examples")},function(e,t,n){var g={};e.exports=g;var u=n(9),l=n(0),i=l.deprecated;g.create=function(e){return l.extend({buckets:{},pairs:{},pairsList:[],bucketWidth:48,bucketHeight:48},e)},g.update=function(e,t,n,i){var o,r,a,s,l,c=n.world,u=e.buckets,d=!1;for(o=0;o<t.length;o++){var p=t[o];if((!p.isSleeping||i)&&(!c.bounds||!(p.bounds.max.x<c.bounds.min.x||p.bounds.min.x>c.bounds.max.x||p.bounds.max.y<c.bounds.min.y||p.bounds.min.y>c.bounds.max.y))){var f=g._getRegion(e,p);if(!p.region||f.id!==p.region.id||i){p.region&&!i||(p.region=f);var v=g._regionUnion(f,p.region);for(r=v.startCol;r<=v.endCol;r++)for(a=v.startRow;a<=v.endRow;a++){s=u[l=g._getBucketId(r,a)];var y=r>=f.startCol&&r<=f.endCol&&a>=f.startRow&&a<=f.endRow,m=r>=p.region.startCol&&r<=p.region.endCol&&a>=p.region.startRow&&a<=p.region.endRow;!y&&m&&m&&s&&g._bucketRemoveBody(e,s,p),(p.region===f||y&&!m||i)&&(s||(s=g._createBucket(u,l)),g._bucketAddBody(e,s,p))}p.region=f,d=!0}}}d&&(e.pairsList=g._createActivePairsList(e))},i(g,"update","Grid.update ➤ replaced by Matter.Detector"),g.clear=function(e){e.buckets={},e.pairs={},e.pairsList=[]},i(g,"clear","Grid.clear ➤ replaced by Matter.Detector"),g._regionUnion=function(e,t){var n=Math.min(e.startCol,t.startCol),i=Math.max(e.endCol,t.endCol),o=Math.min(e.startRow,t.startRow),r=Math.max(e.endRow,t.endRow);return g._createRegion(n,i,o,r)},g._getRegion=function(e,t){var n=t.bounds,i=Math.floor(n.min.x/e.bucketWidth),o=Math.floor(n.max.x/e.bucketWidth),r=Math.floor(n.min.y/e.bucketHeight),a=Math.floor(n.max.y/e.bucketHeight);return g._createRegion(i,o,r,a)},g._createRegion=function(e,t,n,i){return{id:e+","+t+","+n+","+i,startCol:e,endCol:t,startRow:n,endRow:i}},g._getBucketId=function(e,t){return"C"+e+"R"+t},g._createBucket=function(e,t){return e[t]=[]},g._bucketAddBody=function(e,t,n){var i,o=e.pairs,r=u.id,a=t.length;for(i=0;i<a;i++){var s=t[i];if(!(n.id===s.id||n.isStatic&&s.isStatic)){var l=r(n,s),c=o[l];c?c[2]+=1:o[l]=[n,s,1]}}t.push(n)},g._bucketRemoveBody=function(e,t,n){var i,o=e.pairs,r=u.id;t.splice(l.indexOf(t,n),1);var a=t.length;for(i=0;i<a;i++){var s=o[r(n,t[i])];s&&(s[2]-=1)}},g._createActivePairsList=function(e){var t,n,i=e.pairs,o=l.keys(i),r=o.length,a=[];for(n=0;n<r;n++)0<(t=i[o[n]])[2]?a.push(t):delete i[o[n]];return a}},function(e,t,n){var r={};e.exports=r;var l=n(3),c=n(7),a=n(13),u=n(4),d=n(14),s=n(10),p=n(5),f=n(0),v=n(1);r.create=function(t,e){var n=(t?t.mouse:null)||(e?e.mouse:null);n||(t&&t.render&&t.render.canvas?n=a.create(t.render.canvas):e&&e.element?n=a.create(e.element):(n=a.create(),f.warn("MouseConstraint.create: options.mouse was undefined, options.element was undefined, may not function as expected")));var i={type:"mouseConstraint",mouse:n,element:null,body:null,constraint:s.create({label:"Mouse Constraint",pointA:n.position,pointB:{x:0,y:0},length:.01,stiffness:.1,angularStiffness:1,render:{strokeStyle:"#90EE90",lineWidth:3}}),collisionFilter:{category:1,mask:4294967295,group:0}},o=f.extend(i,e);return u.on(t,"beforeUpdate",function(){var e=p.allBodies(t.world);r.update(o,e),r._triggerEvents(o)}),o},r.update=function(e,t){var n=e.mouse,i=e.constraint,o=e.body;if(0===n.button){if(i.bodyB)c.set(i.bodyB,!1),i.pointA=n.position;else for(var r=0;r<t.length;r++)if(o=t[r],v.contains(o.bounds,n.position)&&d.canCollide(o.collisionFilter,e.collisionFilter))for(var a=1<o.parts.length?1:0;a<o.parts.length;a++){var s=o.parts[a];if(l.contains(s.vertices,n.position)){i.pointA=n.position,i.bodyB=e.body=o,i.pointB={x:n.position.x-o.position.x,y:n.position.y-o.position.y},i.angleB=o.angle,c.set(o,!1),u.trigger(e,"startdrag",{mouse:n,body:o});break}}}else i.bodyB=e.body=null,i.pointB=null,o&&u.trigger(e,"enddrag",{mouse:n,body:o})},r._triggerEvents=function(e){var t=e.mouse,n=t.sourceEvents;n.mousemove&&u.trigger(e,"mousemove",{mouse:t}),n.mousedown&&u.trigger(e,"mousedown",{mouse:t}),n.mouseup&&u.trigger(e,"mouseup",{mouse:t}),a.clearSourceEvents(t)}},function(e,t,n){var p={};e.exports=p;var f=n(2),v=n(8),y=n(1),m=n(12),s=n(3);p.collides=function(e,t){for(var n=[],i=t.length,o=e.bounds,r=v.collides,a=y.overlaps,s=0;s<i;s++){var l=t[s],c=l.parts.length,u=1===c?0:1;if(a(l.bounds,o))for(var d=u;d<c;d++){var p=l.parts[d];if(a(p.bounds,o)){var f=r(p,e);if(f){n.push(f);break}}}}return n},p.ray=function(e,t,n,i){i=i||1e-100;for(var o=f.angle(t,n),r=f.magnitude(f.sub(t,n)),a=.5*(n.x+t.x),s=.5*(n.y+t.y),l=m.rectangle(a,s,r,i,{angle:o}),c=p.collides(l,e),u=0;u<c.length;u+=1){var d=c[u];d.body=d.bodyB=d.bodyA}return c},p.region=function(e,t,n){for(var i=[],o=0;o<e.length;o++){var r=e[o],a=y.overlaps(r.bounds,t);(a&&!n||!a&&n)&&i.push(r)}return i},p.point=function(e,t){for(var n=[],i=0;i<e.length;i++){var o=e[i];if(y.contains(o.bounds,t))for(var r=1===o.parts.length?0:1;r<o.parts.length;r++){var a=o.parts[r];if(y.contains(a.bounds,t)&&s.contains(a.vertices,t)){n.push(o);break}}}return n}},function(e,t,n){var o={};e.exports=o;var r,i,a,s=n(4),l=n(18),c=n(0);"undefined"!=typeof window&&(r=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame,i=window.cancelAnimationFrame||window.mozCancelAnimationFrame||window.webkitCancelAnimationFrame||window.msCancelAnimationFrame),r||(r=function(e){a=setTimeout(function(){e(c.now())},1e3/60)},i=function(){clearTimeout(a)}),o.create=function(e){var t=c.extend({fps:60,correction:1,deltaSampleSize:60,counterTimestamp:0,frameCounter:0,deltaHistory:[],timePrev:null,timeScalePrev:1,frameRequestId:null,isFixed:!1,enabled:!0},e);return t.delta=t.delta||1e3/t.fps,t.deltaMin=t.deltaMin||1e3/t.fps,t.deltaMax=t.deltaMax||1e3/(.5*t.fps),t.fps=1e3/t.delta,t},o.run=function(n,i){return void 0!==n.positionIterations&&(i=n,n=o.create()),function e(t){n.frameRequestId=r(e),t&&n.enabled&&o.tick(n,i,t)}(),n},o.tick=function(e,t,n){var i,o=t.timing,r=1,a={timestamp:o.timestamp};s.trigger(e,"beforeTick",a),e.isFixed?i=e.delta:(i=n-e.timePrev||e.delta,e.timePrev=n,e.deltaHistory.push(i),e.deltaHistory=e.deltaHistory.slice(-e.deltaSampleSize),r=(i=(i=(i=Math.min.apply(null,e.deltaHistory))<e.deltaMin?e.deltaMin:i)>e.deltaMax?e.deltaMax:i)/e.delta,e.delta=i),0!==e.timeScalePrev&&(r*=o.timeScale/e.timeScalePrev),0===o.timeScale&&(r=0),e.timeScalePrev=o.timeScale,e.correction=r,e.frameCounter+=1,1e3<=n-e.counterTimestamp&&(e.fps=e.frameCounter*((n-e.counterTimestamp)/1e3),e.counterTimestamp=n,e.frameCounter=0),s.trigger(e,"tick",a),s.trigger(e,"beforeUpdate",a),l.update(t,i,r),s.trigger(e,"afterUpdate",a),s.trigger(e,"afterTick",a)},o.stop=function(e){i(e.frameRequestId)},o.start=function(e,t){o.run(e,t)}},function(e,t,n){var i={};e.exports=i;var o=n(8),r=n(0).deprecated;i.collides=function(e,t){return o.collides(e,t)},r(i,"collides","SAT.collides ➤ replaced by Collision.collides")},function(e,t,n){var h={};e.exports=h,n(1);var b=n(0);h.pathToVertices=function(e,t){"undefined"==typeof window||"SVGPathSeg"in window||b.warn("Svg.pathToVertices: SVGPathSeg not defined, a polyfill is required.");var n,i,o,r,a,s,l,c,u,d,p,f=[],v=0,y=0,m=0;t=t||15;var g=function(e,t,n){var i=n%2==1&&1<n;if(!u||e!=u.x||t!=u.y){p=u&&i?(d=u.x,u.y):d=0;var o={x:d+e,y:p+t};!i&&u||(u=o),f.push(o),y=d+e,m=p+t}},x=function(e){var t=e.pathSegTypeAsLetter.toUpperCase();if("Z"!==t){switch(t){case"M":case"L":case"T":case"C":case"S":case"Q":y=e.x,m=e.y;break;case"H":y=e.x;break;case"V":m=e.y}g(y,m,e.pathSegType)}};for(h._svgPathToAbsolute(e),o=e.getTotalLength(),s=[],n=0;n<e.pathSegList.numberOfItems;n+=1)s.push(e.pathSegList.getItem(n));for(l=s.concat();v<o;){if((a=s[e.getPathSegAtLength(v)])!=c){for(;l.length&&l[0]!=a;)x(l.shift());c=a}switch(a.pathSegTypeAsLetter.toUpperCase()){case"C":case"T":case"S":case"Q":case"A":r=e.getPointAtLength(v),g(r.x,r.y,0)}v+=t}for(n=0,i=l.length;n<i;++n)x(l[n]);return f},h._svgPathToAbsolute=function(e){for(var t,n,i,o,r,a,s=e.pathSegList,l=0,c=0,u=s.numberOfItems,d=0;d<u;++d){var p=s.getItem(d),f=p.pathSegTypeAsLetter;if(/[MLHVCSQTA]/.test(f))"x"in p&&(l=p.x),"y"in p&&(c=p.y);else switch("x1"in p&&(i=l+p.x1),"x2"in p&&(r=l+p.x2),"y1"in p&&(o=c+p.y1),"y2"in p&&(a=c+p.y2),"x"in p&&(l+=p.x),"y"in p&&(c+=p.y),f){case"m":s.replaceItem(e.createSVGPathSegMovetoAbs(l,c),d);break;case"l":s.replaceItem(e.createSVGPathSegLinetoAbs(l,c),d);break;case"h":s.replaceItem(e.createSVGPathSegLinetoHorizontalAbs(l),d);break;case"v":s.replaceItem(e.createSVGPathSegLinetoVerticalAbs(c),d);break;case"c":s.replaceItem(e.createSVGPathSegCurvetoCubicAbs(l,c,i,o,r,a),d);break;case"s":s.replaceItem(e.createSVGPathSegCurvetoCubicSmoothAbs(l,c,r,a),d);break;case"q":s.replaceItem(e.createSVGPathSegCurvetoQuadraticAbs(l,c,i,o),d);break;case"t":s.replaceItem(e.createSVGPathSegCurvetoQuadraticSmoothAbs(l,c),d);break;case"a":s.replaceItem(e.createSVGPathSegArcAbs(l,c,p.r1,p.r2,p.angle,p.largeArcFlag,p.sweepFlag),d);break;case"z":case"Z":l=t,c=n}"M"!=f&&"m"!=f||(t=l,n=c)}}},function(e,t,n){var i={};e.exports=i;var o=n(5);n(0),i.create=o.create,i.add=o.add,i.remove=o.remove,i.clear=o.clear,i.addComposite=o.addComposite,i.addBody=o.addBody,i.addConstraint=o.addConstraint}])});</script><body><script>var imgs={hand:"data:image/png;base64,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"};</script><script>var spawns=Matter.Composite.create(),spawners=new Array;setTimeout(function(){Matter.Composite.add(engine.world,spawns)},1);class Spawner{constructor(t,s,i){this.pos=t,this.tick=.02,this.subtraction=1/s,this.halfLife=i}update(){if(this.tick-=this.subtraction,this.tick<=0){this.tick=1;let t=Matter.Bodies.circle(this.pos.x,this.pos.y,50,{friction:0,density:.01});t.halfLife=this.halfLife,Matter.Composite.add(spawns,t)}}static updateSpawns(){for(let t=0;t<spawns.bodies.length;t++){const s=spawns.bodies[t];s.halfLife-=1,s.halfLife<=0&&Matter.Composite.remove(spawns,s)}}}</script><script>function v(e,n){return{x:e,y:n}}var Engine=Matter.Engine,Render=Matter.Render,Runner=Matter.Runner,Bodies=Matter.Bodies,Composite=Matter.Composite;Composites=Matter.Composites,Constraint=Matter.Constraint;var engine=Engine.create(),render=Render.create({element:document.body,engine:engine,options:{wireframes:!1,background:"#1d5956"}});initalRenderBounds=JSON.parse(JSON.stringify(render.bounds));var canvas=render.canvas;canvas.width=window.innerWidth,canvas.height=window.innerHeight;var mouse=Matter.Mouse.create(render.canvas),mouseConstraint=Matter.MouseConstraint.create(engine,{mouse:mouse,constraint:{stiffness:1,render:{visible:!0}}});Matter.Composite.add(engine.world,mouseConstraint);var runner=Matter.Runner.create();Matter.Runner.start(runner,engine),Render.run(render);var chunksComp=Matter.Composite.create({label:"chunksComp"});function getDst(e,n){let t=e.x-n.x,r=e.y-n.y;return Math.sqrt(Math.pow(t,2)+Math.pow(r,2))}Matter.Composite.add(engine.world,chunksComp),Matter.Events.on(runner,"beforeUpdate",function(){Spawner.updateSpawns(),Chunks.updateChunks();for(let e=0;e<entitys.length;e++){entitys[e].update()}for(let e=0;e<spawners.length;e++){spawners[e].update()}preKeys={...keys},getDst(entitys[0].body.position,v(2910,-3190))>1e3&&(Matter.Body.set(fakeGround,"position",v(2910,-3190)),Matter.Body.set(fakeGround,"angle",0),Matter.Body.set(fakeGround,"angularVelocity",0),Matter.Body.set(fakeGround,"velocity",v(0,0)))});var camera=v(0,0);Matter.Events.on(render,"beforeRender",function(){hero=entitys[0].body.position;let e=v(-window.innerWidth/4,-window.innerHeight/4),n=hero.x-camera.x,t=hero.y-camera.y;camera.x+=.1*n,camera.y+=.1*t,render.bounds.min.x=e.x+camera.x,render.bounds.max.x=e.x+camera.x+initalRenderBounds.max.x/2,render.bounds.min.y=e.y+camera.y,render.bounds.max.y=e.y+camera.y+initalRenderBounds.max.y/2,Matter.Render.startViewTransform(render)}),Matter.Events.on(render,"afterRender",function(){Chunks.getLoadedChunks(entitys[0].body.position);let e=document.createElement("img");e.src=imgs.hand,render.context.drawImage(e,3716,-3454)});</script><script>class Chunks{static chunkSize=1000
static currentLevel=Matter.Composite.create()
static levelDat=undefined
static getLoadedChunks(pos){let chunkPos=v(Math.round(pos.x/this.chunkSize),Math.round(pos.y/this.chunkSize))
let loadedChunks={}
loadedChunks[`${chunkPos.x},${chunkPos.y}`]=!1
loadedChunks[`${chunkPos.x-1},${chunkPos.y}`]=!1
loadedChunks[`${chunkPos.x},${chunkPos.y-1}`]=!1
loadedChunks[`${chunkPos.x-1},${chunkPos.y-1}`]=!1
loadedChunks[`${chunkPos.x+1},${chunkPos.y}`]=!1
loadedChunks[`${chunkPos.x},${chunkPos.y+1}`]=!1
loadedChunks[`${chunkPos.x+1},${chunkPos.y+1}`]=!1
loadedChunks[`${chunkPos.x-1},${chunkPos.y+1}`]=!1
loadedChunks[`${chunkPos.x+1},${chunkPos.y-1}`]=!1
return loadedChunks}
static loadLevelDat(string){this.levelDat=JSON.parse(string).chunks;Levels.texts = JSON.parse(string).texts}
static loadChunk(pos){if(this.levelDat!=undefined){let chunkDat=this.levelDat[`${pos.x},${pos.y}`]
if(chunkDat!=undefined){Levels.loadData(chunkDat,`${pos.x},${pos.y}`)}}}
static unLoadChunk(pos){let comps=chunksComp.composites
for(let i=0;i<comps.length;i++){let comp=comps[i];if(comp.label==`${pos.x},${pos.y}`){Matter.Composite.remove(chunksComp,comp)}}}
static updateChunks(){let loadedChunks=this.getLoadedChunks(entitys[0].body.position)
let chunks=chunksComp.composites
for(let i=0;i<spawners.length;i++){let spawner=spawners[i];if(!Object.keys(loadedChunks).includes(spawner.chunkPos)||spawners.length>1){spawners.splice(i,1)
i-=1}}
for(let i=0;i<chunks.length;i++){const chunk=chunks[i];if(!Object.keys(loadedChunks).includes(chunk.label)){Matter.Composite.remove(chunksComp,chunk)}else{loadedChunks[chunk.label]=!0}}
for(let i=0;i<Object.keys(loadedChunks).length;i++){const chunk=Object.keys(loadedChunks)[i];let check=loadedChunks[chunk]
if(!check){let chunkDat=this.levelDat[chunk]
if(chunkDat!=undefined){Levels.loadData(this.levelDat[chunk],chunk)}else{}}}}}</script><script>class Save{static saveGame(){localStorage.setItem("save_cubePlayer",JSON.stringify({pos:v(entitys[0].body.position.x,entitys[0].body.position.y),angle:entitys[0].body.angle,velocity:v(entitys[0].body.velocity.x,entitys[0].body.velocity.y),angularVelocity:entitys[0].body.angularVelocity,}))}
static loadGame(){if(localStorage.getItem("save_cubePlayer")!=null){let data=JSON.parse((localStorage.getItem("save_cubePlayer")));console.log(data.pos);Matter.Body.set(entitys[0].body,"position",v(data.pos.x,data.pos.y));Matter.Body.set(entitys[0].body,"angle",data.angle);Matter.Body.set(entitys[0].body,"velocity",v(data.velocity.x,data.velocity.y));Matter.Body.set(entitys[0].body,"angularVelocity",data.angularVelocity);camera={...data.pos}}}}</script><script>var keys={},preKeys={};document.addEventListener("keydown",function(e){keys[e.key]=!0});document.addEventListener("keyup", function(e){delete keys[e.key]});</script><script>var spawnPos=v(100,100)
var fakeGround=Matter.Bodies.rectangle(2910,-3190,300,20,{render:{fillStyle:"#15051a",},density:0.0001,})
Matter.Composite.add(engine.world,fakeGround)
class Levels{static texts = new Array();static loadData(data,chunkPos){let levelObject=data
spawnPos=levelObject.spawn
let chunkComp=Matter.Composite.create({label:chunkPos})
levelObject.rects.forEach(ob=>{let newRect=Matter.Bodies.rectangle(ob.x,ob.y,ob.width,ob.height,{isStatic:!0,render:{fillStyle:"#15051a",},angle:ob.angle,})
Matter.Composite.add(chunkComp,newRect)});console.log(levelObject.spawners)
levelObject.spawners.forEach(spawner=>{let s=new Spawner(v(spawner.x,spawner.y),200,400)
s.chunkPos=chunkPos
spawners.push(s)});Matter.Composite.add(chunksComp,chunkComp)}
static getGroundBodies(){let bodies=new Array(),loadedChunks=Object.keys(Chunks.getLoadedChunks(entitys[0].body.position))
for(let i=0;i<chunksComp.composites.length;i++){const comp=chunksComp.composites[i];if(loadedChunks.includes(comp.label)){bodies=[...bodies,...comp.bodies]}}
return bodies}}</script><script>var levelDat={start:'{"chunks":{"0,0":{"spawn":[],"rects":[{"x":170,"y":160,"width":340,"height":40,"type":"wall","angle":0},{"x":400,"y":160,"width":120,"height":40,"type":"wall","angle":0},{"x":380,"y":140,"width":120,"height":80,"type":"wall","angle":0},{"x":300,"y":140,"width":80,"height":40,"type":"wall","angle":-0.6981317007977318},{"x":570,"y":160,"width":220,"height":40,"type":"wall","angle":0},{"x":460,"y":140,"width":80,"height":40,"type":"wall","angle":0.6981317007977318},{"x":880,"y":160,"width":240,"height":40,"type":"wall","angle":0},{"x":720,"y":160,"width":80,"height":40,"type":"wall","angle":0}],"spawners":[]},"2,-2":{"spawn":[],"rects":[{"x":2460,"y":-1070,"width":1000,"height":40,"type":"wall","angle":-0.17453292519943292,"selected":false}],"spawners":[]},"3,-2":{"spawn":[],"rects":[{"x":3410,"y":-1240,"width":1000,"height":40,"type":"wall","angle":-0.17453292519943295,"selected":false}],"spawners":[]},"4,-2":{"spawn":[],"rects":[{"x":4360,"y":-1410,"width":1000,"height":40,"type":"wall","angle":-0.17453292519943292,"selected":false},{"x":4870,"y":-1810,"width":40,"height":1040,"type":"wall","angle":0,"selected":true},{"x":4990,"y":-1480,"width":20,"height":160,"type":"wall","angle":0}],"spawners":[]},"4,-4":{"spawn":[],"rects":[{"x":4020,"y":-3600,"width":40,"height":760,"type":"wall","angle":0}],"spawners":[]},"5,-2":{"spawn":[],"rects":[{"x":5020,"y":-1490,"width":40,"height":20,"type":"wall","angle":0},{"x":5050,"y":-1480,"width":20,"height":160,"type":"wall","angle":0},{"x":5090,"y":-1430,"width":20,"height":60,"type":"wall","angle":0},{"x":5090,"y":-1490,"width":20,"height":20,"type":"wall","angle":0}],"spawners":[]},"2,-5":{"spawn":[],"rects":[],"spawners":[{"x":2880,"y":-4320}]}},"text":[]}'};
</script><script>class Entity{constructor(pos,scale){this.body=Matter.Bodies.rectangle(pos.x,pos.y,scale,scale,{frictionAir:0,restitution:0.1,friction:0.7,})
Matter.Composite.add(engine.world,this.body)}}
class Player extends Entity{constructor(pos,keyset){super(pos,30)
this.keyset=keyset
this.jumpTime=0}
updateControls(){let speed=(Math.PI*2)*0.006,jump=8.5
let entityBodies=new Array()
for(let i=0;i<entitys.length;i++){const ent=entitys[i];entityBodies.push(ent.body)}
let detector=((Matter.Detector.collisions(Matter.Detector.create({bodies:[this.body,...Levels.getGroundBodies()]})))),detector2=((Matter.Detector.collisions(Matter.Detector.create({bodies:[this.body,fakeGround]})))),onGround=!1
if(detector.length>0){for(let i=0;i<detector.length;i++){const coll=detector[i];if(Math.floor(coll.normal.y+0.15)==((coll.bodyA.id==this.body.id)?-1:1)){onGround=!0
this.jumpTime=15}}}else{onGround=!1}
if(detector2.length>0){for(let i=0;i<detector2.length;i++){const coll=detector2[i];if(Math.floor(coll.normal.y+0.15)==((coll.bodyA.id==this.body.id)?-1:1)){onGround=!0
this.jumpTime=15}}}
function scaleBody(body,x,y){let angle=body.angle
Matter.Body.setAngle(body,0)
Matter.Body.scale(body,x,y)
Matter.Body.setAngle(body,angle)};
function checkKey(avalibleKeys, keys) {
for (let i = 0; i < avalibleKeys.length; i++) {
if (keys[avalibleKeys[i]]) {return true};
}
return false;
};
if(checkKey(this.keyset.moveRight, keys)&&onGround){if(Math.sign(this.body.angularVelocity)==-1){Matter.Body.setAngularVelocity(this.body,this.body.angularVelocity*-1)}
Matter.Body.setAngularVelocity(this.body,this.body.angularVelocity+speed)}
if(checkKey(this.keyset.moveLeft, keys)&&onGround){if(Math.sign(this.body.angularVelocity)==1){Matter.Body.setAngularVelocity(this.body,this.body.angularVelocity*-1)}
Matter.Body.setAngularVelocity(this.body,this.body.angularVelocity-speed)}
if(checkKey(this.keyset.jump, keys) && !checkKey(this.keyset.jump, preKeys)/*&&this.jumpTime>0*/){Matter.Body.setVelocity(this.body,v(this.body.velocity.x,-jump));
this.jumpTime=0};
if (checkKey(this.keyset.jump, keys) && this.jumpTime > -15) {
Matter.Body.setVelocity(this.body, v(this.body.velocity.x,this.body.velocity.y-(jump*0.025)));
};
if(checkKey(this.keyset.duck, keys)&&!checkKey(this.keyset.duck, preKeys)){scaleBody(this.body,2/3,2/3)}
if(!checkKey(this.keyset.duck, keys)&&checkKey(this.keyset.duck, preKeys)){scaleBody(this.body,1.5,1.5)}
this.jumpTime-=1}
update(){this.updateControls()}}
var entitys=new Array()</script><script>//Levels.loadData(levelDat["basic"])
Chunks.loadLevelDat(levelDat["start"])
Chunks.loadChunk(v(0,1))
entitys.push(new Player(v(120,100), {
"moveLeft":["a","ArrowLeft"],
"moveRight":["d","ArrowRight"],
"jump":["w", "ArrowUp", " "],
"duck":["s", "ArrowDown"],
}))
Save.loadGame()
setInterval(() => {
Save.saveGame()
}, 250);</script><script>
var startTime = false
document.addEventListener("keydown", function(e){
keys[e.key]=true;
if (startTime == false) {
startTime = new Date().getTime()
}
})
Matter.Events.on(render, "afterRender", function() {
let chunks = Chunks.getLoadedChunks(entitys[0].body.position)
/*
for (let i = 0; i < Object.keys(chunks).length; i++) {
var chunk = Object.keys(chunks)[i];
chunk = v(parseInt(chunk.split(",")[0]), parseInt(chunk.split(",")[1]))
render.context.strokeRect(chunk.x*Chunks.chunkSize,chunk.y*Chunks.chunkSize,Chunks.chunkSize,Chunks.chunkSize)
}
*/
let img = document.createElement("img")
img.src = imgs.hand
render.context.drawImage(img, 3716, -3454)
if (getDst(entitys[0].body.position, v(3716, -3454)) < 400 && startTime > 0) {
startTime = -(((new Date().getTime())-startTime)/1000)
console.log("yys")
}
let time = `${((new Date().getTime())-startTime)/1000}`
if (startTime < 0) {
time = -startTime
}
//render.context.fillText(`you get ${time}`, camera.x-(window.innerWidth/4)+20, camera.y-(window.innerHeight/4)+20)
render.context.fillText(`you get ${Math.floor(time*100)/100}s cookies`, 3716, -3454)
Levels.texts.forEach((text) => {
render.context.fillText(text.text, text.x, text.y)
});
render.context.fillText(`devolped by B. reed`, 3716, -3334)
render.context.fillText("thanks to the horrible music by jai rodgie", 3716, -3324)
})
</script>