littlejsengine 1.11.13 → 1.11.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/littlejs.d.ts +1306 -66
- package/dist/littlejs.esm.js +3097 -269
- package/dist/littlejs.esm.min.js +1 -1
- package/dist/littlejs.js +253 -265
- package/dist/littlejs.min.js +1 -1
- package/dist/littlejs.release.js +155 -260
- package/examples/box2d/game.js +7 -10
- package/examples/box2d/gameObjects.js +33 -33
- package/examples/box2d/index.html +6 -6
- package/examples/box2d/scenes.js +28 -28
- package/examples/breakout/game.js +1 -4
- package/examples/breakout/index.html +4 -4
- package/examples/breakoutTutorial/index.html +2 -2
- package/examples/htmlMenu/game.js +3 -6
- package/examples/htmlMenu/index.html +2 -2
- package/examples/module/index.html +1 -1
- package/examples/particles/index.html +1 -1
- package/examples/platformer/game.js +0 -3
- package/examples/platformer/index.html +8 -8
- package/examples/puzzle/game.js +0 -3
- package/examples/puzzle/index.html +2 -2
- package/examples/shorts/base.html +1 -1
- package/examples/starter/build.js +4 -4
- package/examples/starter/index.html +13 -13
- package/examples/stress/index.html +3 -2
- package/examples/uiSystem/game.js +1 -7
- package/examples/uiSystem/index.html +3 -3
- package/package.json +3 -3
- package/plugins/box2d.js +1552 -640
- package/plugins/{Box2D_v2.3.1_min.wasm.js → box2d.wasm.js} +1 -1
- package/plugins/newgrounds.js +7 -8
- package/plugins/pluginExport.js +51 -0
- package/plugins/postProcess.js +94 -93
- package/plugins/uiSystem.js +145 -161
- package/plugins/zzfxm.js +163 -0
- package/src/engine.js +15 -20
- package/src/engineAudio.js +74 -204
- package/src/engineBuild.js +21 -3
- package/src/engineDebug.js +104 -6
- package/src/engineDraw.js +27 -14
- package/src/engineExport.js +12 -4
- package/src/engineParticles.js +6 -1
- package/src/engineRelease.js +6 -1
- package/src/engineSettings.js +2 -2
- package/src/engineUtilities.js +5 -11
- package/src/engineWebGL.js +19 -7
- package/examples/starter/build/index.html +0 -2
- package/examples/starter/build/index.js +0 -1
- package/examples/starter/build/tiles.png +0 -0
- package/examples/starter/game.zip +0 -0
- /package/plugins/{Box2D_v2.3.1_min.wasm.wasm → box2d.wasm.wasm} +0 -0
package/dist/littlejs.esm.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
let showWatermark=0,debugKey="";const debug=0,debugOverlay=0,debugPhysics=0,debugParticles=0,debugRaycast=0,debugGamepads=0,debugMedals=0;function ASSERT(){}function debugInit(){}function debugUpdate(){}function debugRender(){}function debugRect(){}function debugPoly(){}function debugCircle(){}function debugPoint(){}function debugLine(){}function debugOverlap(){}function debugText(){}function debugClear(){}function debugScreenshot(){}function debugSaveCanvas(){}function debugSaveText(){}function debugSaveDataURL(){}const PI=Math.PI;function abs(a){return Math.abs(a)}function min(a,b){return Math.min(a,b)}function max(a,b){return Math.max(a,b)}function sign(a){return Math.sign(a)}function mod(a,b=1){return(a%b+b)%b}function clamp(a,b=0,c=1){return a<b?b:a>c?c:a}function percent(a,b,c){return(c-=b)?clamp((a-b)/c):0}function lerp(a,b,c){return b+clamp(a)*(c-b)}function distanceWrap(a,b,c=1){a=(a-b)%c;return 2*a%c-a}function lerpWrap(a,b,c,d=1){return c+clamp(a)*distanceWrap(b,c,d)}function distanceAngle(a,b){return distanceWrap(a,b,2*PI)}function lerpAngle(a,b,c){return lerpWrap(a,b,c,2*PI)}function smoothStep(a){return a*a*(3-2*a)}function nearestPowerOfTwo(a){return 2**Math.ceil(Math.log2(a))}function isOverlapping(a,b,c,d=vec2()){return 2*abs(a.x-c.x)<b.x+d.x&&2*abs(a.y-c.y)<b.y+d.y}function isIntersecting(a,b,c,d){c=c.subtract(d.scale(.5));d=c.add(d);b=b.subtract(a);c=a.subtract(c);d=a.subtract(d);a=[-b.x,b.x,-b.y,b.y];b=[c.x,-d.x,c.y,-d.y];c=0;d=1;for(let e=4;e--;)if(a[e]){const f=b[e]/a[e];if(0>a[e]){if(f>d)return!1;c=max(f,c)}else{if(f<c)return!1;d=min(f,d)}}else if(0>b[e])return!1;return!0}function wave(a=1,b=1,c=time){return b/2*(1-Math.cos(c*a*2*PI))}function formatTime(a){return(a/60|0)+":"+(10>a%60?"0":"")+(a%60|0)}function rand(a=1,b=0){return b+Math.random()*(a-b)}function randInt(a,b=0){return Math.floor(rand(a,b))}function randSign(){return 2*randInt(2)-1}function randVector(a=1){return(new Vector2).setAngle(rand(2*PI),a)}function randInCircle(a=1,b=0){return 0<a?randVector(a*rand(b/a,1)**.5):new Vector2}function randColor(a=new Color,b=new Color(0,0,0,1),c=!1){return c?a.lerp(b,rand()):new Color(rand(a.r,b.r),rand(a.g,b.g),rand(a.b,b.b),rand(a.a,b.a))}class RandomGenerator{constructor(a){this.seed=a}float(a=1,b=0){this.seed^=this.seed<<13;this.seed^=this.seed>>>17;this.seed^=this.seed<<5;return b+(this.seed>>>0)/2**32*(a-b)}int(a,b=0){return Math.floor(this.float(a,b))}sign(){return.5<this.float()?1:-1}}function vec2(a=0,b){return"number"==typeof a?new Vector2(a,void 0==b?a:b):new Vector2(a.x,a.y)}function isVector2(a){return a instanceof Vector2}class Vector2{constructor(a=0,b=0){this.x=a;this.y=b;ASSERT(this.isValid())}set(a=0,b=0){this.x=a;this.y=b;ASSERT(this.isValid());return this}copy(){return new Vector2(this.x,this.y)}add(a){ASSERT(isVector2(a));return new Vector2(this.x+a.x,this.y+a.y)}subtract(a){ASSERT(isVector2(a));return new Vector2(this.x-a.x,this.y-a.y)}multiply(a){ASSERT(isVector2(a));return new Vector2(this.x*a.x,this.y*a.y)}divide(a){ASSERT(isVector2(a));return new Vector2(this.x/a.x,this.y/a.y)}scale(a){ASSERT(!isVector2(a));return new Vector2(this.x*a,this.y*a)}length(){return this.lengthSquared()**.5}lengthSquared(){return this.x**2+this.y**2}distance(a){ASSERT(isVector2(a));return this.distanceSquared(a)**.5}distanceSquared(a){ASSERT(isVector2(a));return(this.x-a.x)**2+(this.y-a.y)**2}normalize(a=1){const b=this.length();return b?this.scale(a/b):new Vector2(0,a)}clampLength(a=1){const b=this.length();return b>a?this.scale(a/b):this}dot(a){ASSERT(isVector2(a));return this.x*a.x+this.y*a.y}cross(a){ASSERT(isVector2(a));return this.x*a.y-this.y*a.x}angle(){return Math.atan2(this.x,this.y)}setAngle(a=0,b=1){this.x=b*Math.sin(a);this.y=b*Math.cos(a);return this}rotate(a){const b=Math.cos(-a);a=Math.sin(-a);return new Vector2(this.x*b-this.y*a,this.x*a+this.y*b)}setDirection(a,b=1){a=mod(a,4);ASSERT(0==a||1==a||2==a||3==a);return vec2(a%2?a-1?-b:b:0,a%2?0:a?-b:b)}direction(){return abs(this.x)>abs(this.y)?0>this.x?3:1:0>this.y?2:0}invert(){return new Vector2(this.y,-this.x)}floor(){return new Vector2(Math.floor(this.x),Math.floor(this.y))}area(){return abs(this.x*this.y)}lerp(a,b){ASSERT(isVector2(a));return this.add(a.subtract(this).scale(clamp(b)))}arrayCheck(a){ASSERT(isVector2(a));return 0<=this.x&&0<=this.y&&this.x<a.x&&this.y<a.y}toString(a=3){if(debug)return`(${(0>this.x?"":" ")+this.x.toFixed(a)},${(0>this.y?"":" ")+this.y.toFixed(a)} )`}isValid(){return"number"==typeof this.x&&!isNaN(this.x)&&"number"==typeof this.y&&!isNaN(this.y)}}function rgb(a,b,c,d){return new Color(a,b,c,d)}function hsl(a,b,c,d){return(new Color).setHSLA(a,b,c,d)}function isColor(a){return a instanceof Color}class Color{constructor(a=1,b=1,c=1,d=1){this.r=a;this.g=b;this.b=c;this.a=d;ASSERT(this.isValid())}set(a=1,b=1,c=1,d=1){this.r=a;this.g=b;this.b=c;this.a=d;ASSERT(this.isValid());return this}copy(){return new Color(this.r,this.g,this.b,this.a)}add(a){ASSERT(isColor(a));return new Color(this.r+a.r,this.g+a.g,this.b+a.b,this.a+a.a)}subtract(a){ASSERT(isColor(a));return new Color(this.r-a.r,this.g-a.g,this.b-a.b,this.a-a.a)}multiply(a){ASSERT(isColor(a));return new Color(this.r*a.r,this.g*a.g,this.b*a.b,this.a*a.a)}divide(a){ASSERT(isColor(a));return new Color(this.r/a.r,this.g/a.g,this.b/a.b,this.a/a.a)}scale(a,b=a){return new Color(this.r*a,this.g*a,this.b*a,this.a*b)}clamp(){return new Color(clamp(this.r),clamp(this.g),clamp(this.b),clamp(this.a))}lerp(a,b){ASSERT(isColor(a));return this.add(a.subtract(this).scale(clamp(b)))}setHSLA(a=0,b=0,c=1,d=1){a=mod(a,1);b=clamp(b);c=clamp(c);b=.5>c?c*(1+b):c+b-c*b;c=2*c-b;const e=(f,g,k)=>1>6*(k=mod(k,1))?f+6*(g-f)*k:1>2*k?g:2>3*k?f+(g-f)*(4-6*k):f;this.r=e(c,b,a+1/3);this.g=e(c,b,a);this.b=e(c,b,a-1/3);this.a=d;ASSERT(this.isValid());return this}HSLA(){const a=clamp(this.r),b=clamp(this.g),c=clamp(this.b),d=clamp(this.a),e=Math.max(a,b,c),f=Math.min(a,b,c),g=(e+f)/2;let k=0,h=0;if(e!=f){let m=e-f;h=.5<g?m/(2-e-f):m/(e+f);a==e?k=(b-c)/m+(b<c?6:0):b==e?k=(c-a)/m+2:c==e&&(k=(a-b)/m+4)}return[k/6,h,g,d]}mutate(a=.05,b=0){return new Color(this.r+rand(a,-a),this.g+rand(a,-a),this.b+rand(a,-a),this.a+rand(b,-b)).clamp()}toString(a=!0){const b=c=>(16>(c=255*clamp(c)|0)?"0":"")+c.toString(16);return"#"+b(this.r)+b(this.g)+b(this.b)+(a?b(this.a):"")}setHex(a){ASSERT("string"==typeof a&&"#"==a[0]);ASSERT([4,5,7,9].includes(a.length),"Invalid hex");6>a.length?(this.r=clamp(parseInt(a[1],16)/15),this.g=clamp(parseInt(a[2],16)/15),this.b=clamp(parseInt(a[3],16)/15),this.a=5==a.length?clamp(parseInt(a[4],16)/15):1):(this.r=clamp(parseInt(a.slice(1,3),16)/255),this.g=clamp(parseInt(a.slice(3,5),16)/255),this.b=clamp(parseInt(a.slice(5,7),16)/255),this.a=9==a.length?clamp(parseInt(a.slice(7,9),16)/255):1);ASSERT(this.isValid());return this}rgbaInt(){const a=255*clamp(this.r)|0,b=255*clamp(this.g)<<8,c=255*clamp(this.b)<<16,d=255*clamp(this.a)<<24;return a+b+c+d}isValid(){return"number"==typeof this.r&&!isNaN(this.r)&&"number"==typeof this.g&&!isNaN(this.g)&&"number"==typeof this.b&&!isNaN(this.b)&&"number"==typeof this.a&&!isNaN(this.a)}}const WHITE=rgb(),BLACK=rgb(0,0,0),GRAY=rgb(.5,.5,.5),RED=rgb(1,0,0),ORANGE=rgb(1,.5,0),YELLOW=rgb(1,1,0),GREEN=rgb(0,1,0),CYAN=rgb(0,1,1),BLUE=rgb(0,0,1),PURPLE=rgb(.5,0,1),MAGENTA=rgb(1,0,1);class Timer{constructor(a){this.time=void 0==a?void 0:time+a;this.setTime=a}set(a=0){this.time=time+a;this.setTime=a}unset(){this.time=void 0}isSet(){return void 0!=this.time}active(){return time<this.time}elapsed(){return time>=this.time}get(){return this.isSet()?time-this.time:0}getPercent(){return this.isSet()?1-percent(this.time-time,0,this.setTime):0}toString(){if(debug)return this.isSet()?Math.abs(this.get())+" seconds "+(0>this.get()?"before":"after"):"unset"}valueOf(){return this.get()}}let cameraPos=vec2(),cameraScale=32,canvasMaxSize=vec2(1920,1080),canvasFixedSize=vec2(),canvasPixelated=!0,tilesPixelated=!0,fontDefault="arial",showSplashScreen=!1,headlessMode=!1,glEnable=!0,glOverlay=!0,tileSizeDefault=vec2(16),tileFixBleedScale=0,enablePhysicsSolver=!0,objectDefaultMass=1,objectDefaultDamping=1,objectDefaultAngleDamping=1,objectDefaultElasticity=0,objectDefaultFriction=.8,objectMaxSpeed=1,gravity=0,particleEmitRateScale=1,gamepadsEnable=!0,gamepadDirectionEmulateStick=!0,inputWASDEmulateDirection=!0,touchInputEnable=!0,touchGamepadEnable=!1,touchGamepadAnalog=!0,touchGamepadSize=99,touchGamepadAlpha=.3,vibrateEnable=!0,soundEnable=!0,soundVolume=.3,soundDefaultRange=40,soundDefaultTaper=.7,medalDisplayTime=5,medalDisplaySlideTime=.5,medalDisplaySize=vec2(640,80),medalsPreventUnlock=!1;function setCameraPos(a){cameraPos=a}function setCameraScale(a){cameraScale=a}function setCanvasMaxSize(a){canvasMaxSize=a}function setCanvasFixedSize(a){canvasFixedSize=a}function setCanvasPixelated(a){canvasPixelated=a}function setTilesPixelated(a){tilesPixelated=a}function setFontDefault(a){fontDefault=a}function setShowSplashScreen(a){showSplashScreen=a}function setHeadlessMode(a){headlessMode=a}function setGlEnable(a){glEnable=a}function setGlOverlay(a){glOverlay=a}function setTileSizeDefault(a){tileSizeDefault=a}function setTileFixBleedScale(a){tileFixBleedScale=a}function setEnablePhysicsSolver(a){enablePhysicsSolver=a}function setObjectDefaultMass(a){objectDefaultMass=a}function setObjectDefaultDamping(a){objectDefaultDamping=a}function setObjectDefaultAngleDamping(a){objectDefaultAngleDamping=a}function setObjectDefaultElasticity(a){objectDefaultElasticity=a}function setObjectDefaultFriction(a){objectDefaultFriction=a}function setObjectMaxSpeed(a){objectMaxSpeed=a}function setGravity(a){gravity=a}function setParticleEmitRateScale(a){particleEmitRateScale=a}function setGamepadsEnable(a){gamepadsEnable=a}function setGamepadDirectionEmulateStick(a){gamepadDirectionEmulateStick=a}function setInputWASDEmulateDirection(a){inputWASDEmulateDirection=a}function setTouchInputEnable(a){touchInputEnable=a}function setTouchGamepadEnable(a){touchGamepadEnable=a}function setTouchGamepadAnalog(a){touchGamepadAnalog=a}function setTouchGamepadSize(a){touchGamepadSize=a}function setTouchGamepadAlpha(a){touchGamepadAlpha=a}function setVibrateEnable(a){vibrateEnable=a}function setSoundEnable(a){soundEnable=a}function setSoundVolume(a){soundVolume=a;soundEnable&&!headlessMode&&audioGainNode&&(audioGainNode.gain.value=a)}function setSoundDefaultRange(a){soundDefaultRange=a}function setSoundDefaultTaper(a){soundDefaultTaper=a}function setMedalDisplayTime(a){medalDisplayTime=a}function setMedalDisplaySlideTime(a){medalDisplaySlideTime=a}function setMedalDisplaySize(a){medalDisplaySize=a}function setMedalsPreventUnlock(a){medalsPreventUnlock=a}function setShowWatermark(a){showWatermark=a}function setDebugKey(a){debugKey=a}class EngineObject{constructor(a=vec2(),b=vec2(1),c,d=0,e=new Color,f=0){ASSERT(isVector2(a)&&isVector2(b),"ensure pos and size are vec2s");ASSERT("number"!==typeof c||!c,"old style tile setup");this.pos=a.copy();this.size=b;this.drawSize=void 0;this.tileInfo=c;this.angle=d;this.color=e;this.additiveColor=void 0;this.mirror=!1;this.mass=objectDefaultMass;this.damping=objectDefaultDamping;this.angleDamping=objectDefaultAngleDamping;this.elasticity=objectDefaultElasticity;this.friction=objectDefaultFriction;this.gravityScale=1;this.renderOrder=f;this.velocity=vec2();this.angleVelocity=0;this.spawnTime=time;this.children=[];this.clampSpeedLinear=!0;this.parent=this.groundObject=void 0;this.localPos=vec2();this.localAngle=0;this.collideRaycast=this.isSolid=this.collideSolidObjects=this.collideTiles=!1;engineObjects.push(this)}updateTransforms(){const a=this.parent;if(a){const b=a.getMirrorSign();this.pos=this.localPos.multiply(vec2(b,1)).rotate(a.angle).add(a.pos);this.angle=b*this.localAngle+a.angle}for(const b of this.children)b.updateTransforms()}update(){if(!this.parent){if(this.clampSpeedLinear)this.velocity.x=clamp(this.velocity.x,-objectMaxSpeed,objectMaxSpeed),this.velocity.y=clamp(this.velocity.y,-objectMaxSpeed,objectMaxSpeed);else{var a=this.velocity.lengthSquared();a>objectMaxSpeed*objectMaxSpeed&&(a=objectMaxSpeed/a**.5,this.velocity.x*=a,this.velocity.y*=a)}a=this.pos.copy();this.velocity.x*=this.damping;this.velocity.y*=this.damping;this.mass&&(this.velocity.y+=gravity*this.gravityScale);this.pos.x+=this.velocity.x;this.pos.y+=this.velocity.y;this.angle+=this.angleVelocity*=this.angleDamping;ASSERT(0<=this.angleDamping&&1>=this.angleDamping);ASSERT(0<=this.damping&&1>=this.damping);if(enablePhysicsSolver&&this.mass){var b=0>this.velocity.y;if(this.groundObject){var c=this.groundObject!=this&&this.groundObject.velocity?this.groundObject.velocity.x:0;this.velocity.x=c+(this.velocity.x-c)*this.friction;this.groundObject=void 0}if(this.collideSolidObjects)for(var d of engineObjectsCollide){if(!this.isSolid&&!d.isSolid||d.destroyed||d.parent||d==this)continue;if(!isOverlapping(this.pos,this.size,d.pos,d.size))continue;c=this.collideWithObject(d);var e=d.collideWithObject(this);if(!c||!e)continue;if(isOverlapping(a,this.size,d.pos,d.size)){c=a.subtract(d.pos);e=c.length();c=.01>e?randVector(.001):c.scale(.001/e);this.velocity=this.velocity.add(c);d.mass&&(d.velocity=d.velocity.subtract(c));debugOverlay&&debugPhysics&&debugOverlap(this.pos,this.size,d.pos,d.size,"#f00");continue}e=this.size.add(d.size);var f=2*(a.y-d.pos.y)>e.y+gravity;const k=2*abs(a.y-d.pos.y)<e.y;var g=2*abs(a.x-d.pos.x)<e.x;c=max(this.elasticity,d.elasticity);if(f||g||!k)if(this.pos.y=d.pos.y+(e.y/2+.001)*sign(a.y-d.pos.y),d.groundObject&&b||!d.mass)b&&(this.groundObject=d),this.velocity.y*=-c;else if(d.mass){g=(this.mass*this.velocity.y+d.mass*d.velocity.y)/(this.mass+d.mass);const h=d.velocity.y*(d.mass-this.mass)/(this.mass+d.mass)+2*this.velocity.y*this.mass/(this.mass+d.mass);this.velocity.y=lerp(c,g,this.velocity.y*(this.mass-d.mass)/(this.mass+d.mass)+2*d.velocity.y*d.mass/(this.mass+d.mass));d.velocity.y=lerp(c,g,h)}!f&&k&&(this.pos.x=d.pos.x+(e.x/2+.001)*sign(a.x-d.pos.x),d.mass?(e=(this.mass*this.velocity.x+d.mass*d.velocity.x)/(this.mass+d.mass),f=d.velocity.x*(d.mass-this.mass)/(this.mass+d.mass)+2*this.velocity.x*this.mass/(this.mass+d.mass),this.velocity.x=lerp(c,e,this.velocity.x*(this.mass-d.mass)/(this.mass+d.mass)+2*d.velocity.x*d.mass/(this.mass+d.mass)),d.velocity.x=lerp(c,e,f)):this.velocity.x*=-c);debugOverlay&&debugPhysics&&debugOverlap(this.pos,this.size,d.pos,d.size,"#f0f")}if(this.collideTiles&&tileCollisionTest(this.pos,this.size,this)&&!tileCollisionTest(a,this.size,this)){d=tileCollisionTest(vec2(a.x,this.pos.y),this.size,this);c=tileCollisionTest(vec2(this.pos.x,a.y),this.size,this);if(d||!c)this.velocity.y*=-this.elasticity,b?(this.pos.y=(a.y-this.size.y/2|0)+this.size.y/2+1e-4,this.groundObject=this):(this.pos.y=a.y,this.groundObject=void 0);c&&(this.pos.x=a.x,this.velocity.x*=-this.elasticity);debugOverlay&&debugPhysics&&debugRect(this.pos,this.size,"#f00")}}}}render(){drawTile(this.pos,this.drawSize||this.size,this.tileInfo,this.color,this.angle,this.mirror,this.additiveColor)}destroy(){if(!this.destroyed){this.destroyed=1;this.parent&&this.parent.removeChild(this);for(const a of this.children)a.destroy(a.parent=0)}}localToWorld(a){return this.pos.add(a.rotate(this.angle))}worldToLocal(a){return a.subtract(this.pos).rotate(-this.angle)}localToWorldVector(a){return a.rotate(this.angle)}worldToLocalVector(a){return a.rotate(-this.angle)}collideWithTile(a,b){return 0<a}collideWithObject(a){return!0}getAliveTime(){return time-this.spawnTime}applyAcceleration(a){this.mass&&(this.velocity=this.velocity.add(a))}applyForce(a){this.applyAcceleration(a.scale(1/this.mass))}getMirrorSign(){return this.mirror?-1:1}addChild(a,b=vec2(),c=0){ASSERT(!a.parent&&!this.children.includes(a));this.children.push(a);a.parent=this;a.localPos=b.copy();a.localAngle=c}removeChild(a){ASSERT(a.parent==this&&this.children.includes(a));this.children.splice(this.children.indexOf(a),1);a.parent=0}setCollision(a=!0,b=!0,c=!0,d=!0){ASSERT(a||!b,"solid objects must be set to collide");this.collideSolidObjects=a;this.isSolid=b;this.collideTiles=c;this.collideRaycast=d}toString(){if(debug){let a="type = "+this.constructor.name;if(this.pos.x||this.pos.y)a+="\npos = "+this.pos;if(this.velocity.x||this.velocity.y)a+="\nvelocity = "+this.velocity;if(this.size.x||this.size.y)a+="\nsize = "+this.size;this.angle&&(a+="\nangle = "+this.angle.toFixed(3));this.color&&(a+="\ncolor = "+this.color);return a}}renderDebugInfo(){if(debug){const a=vec2(max(this.size.x,.2),max(this.size.y,.2)),b=rgb(this.collideTiles?1:0,this.collideSolidObjects?1:0,this.isSolid?1:0,this.parent?.2:.5),c=this.parent?rgb(1,1,1,.5):rgb(0,0,0,.8);drawRect(this.pos,a,b,this.angle,!1);drawRect(this.pos,a.scale(.8),c,this.angle,!1);this.parent&&drawLine(this.pos,this.parent.pos,.1,rgb(0,0,1,.5),!1)}}}let mainCanvas,mainContext,overlayCanvas,overlayContext,mainCanvasSize=vec2(),textureInfos=[],drawCount;function tile(a=vec2(),b=tileSizeDefault,c=0,d=0){if(headlessMode)return new TileInfo;"number"===typeof b&&(ASSERT(0<b),b=vec2(b));var e=textureInfos[c];ASSERT(!!e,"Texture not loaded");const f=b.add(vec2(2*d));"number"===typeof a&&(e=e.size.x/f.x|0,a=0<e?vec2(a%e,a/e|0):vec2());a=vec2(a.x*f.x+d,a.y*f.y+d);return new TileInfo(a,b,c,d)}class TileInfo{constructor(a=vec2(),b=tileSizeDefault,c=0,d=0){this.pos=a.copy();this.size=b.copy();this.textureIndex=c;this.padding=d}offset(a){return new TileInfo(this.pos.add(a),this.size,this.textureIndex)}frame(a){ASSERT("number"==typeof a);return this.offset(vec2(a*(this.size.x+2*this.padding),0))}getTextureInfo(){return textureInfos[this.textureIndex]}}class TextureInfo{constructor(a){this.image=a;this.size=vec2(a.width,a.height);this.glTexture=glEnable&&glCreateTexture(a)}}function screenToWorld(a){return new Vector2((a.x-mainCanvasSize.x/2+.5)/cameraScale+cameraPos.x,(a.y-mainCanvasSize.y/2+.5)/-cameraScale+cameraPos.y)}function worldToScreen(a){return new Vector2((a.x-cameraPos.x)*cameraScale+mainCanvasSize.x/2-.5,(a.y-cameraPos.y)*-cameraScale+mainCanvasSize.y/2-.5)}function getCameraSize(){return mainCanvasSize.scale(1/cameraScale)}function drawTile(a,b=vec2(1),c,d=new Color,e=0,f,g=new Color(0,0,0,0),k=glEnable,h,m){ASSERT(!m||!k,"context only supported in canvas 2D mode");ASSERT("number"!==typeof c||!c,"this is an old style calls, to fix replace it with tile(tileIndex, tileSize)");ASSERT(isVector2(a)&&isVector2(b));ASSERT(isColor(d)&&isColor(g));const n=c&&c.getTextureInfo();if(k)if(h&&(a=screenToWorld(a),b=b.scale(1/cameraScale)),n){var l=vec2(1).divide(n.size);k=c.pos.x*l.x;h=c.pos.y*l.y;m=c.size.x*l.x;const p=c.size.y*l.y;l=l.scale(tileFixBleedScale);glSetTexture(n.glTexture);glDraw(a.x,a.y,f?-b.x:b.x,b.y,e,k+l.x,h+l.y,k-l.x+m,h-l.y+p,d.rgbaInt(),g.rgbaInt())}else glDraw(a.x,a.y,b.x,b.y,e,0,0,0,0,0,d.rgbaInt());else showWatermark&&++drawCount,b=vec2(b.x,-b.y),drawCanvas2D(a,b,e,f,p=>{if(n){const q=c.pos.x+tileFixBleedScale,r=c.pos.y+tileFixBleedScale,x=c.size.x-2*tileFixBleedScale,v=c.size.y-2*tileFixBleedScale;p.globalAlpha=d.a;p.drawImage(n.image,q,r,x,v,-.5,-.5,1,1);p.globalAlpha=1}else p.fillStyle=d.toString(),p.fillRect(-.5,-.5,1,1)},h,m)}function drawRect(a,b,c,d,e,f,g){drawTile(a,b,void 0,c,d,!1,void 0,e,f,g)}function drawLine(a,b,c=.1,d,e,f,g){b=vec2((b.x-a.x)/2,(b.y-a.y)/2);c=vec2(c,2*b.length());drawRect(a.add(b),c,d,b.angle(),e,f,g)}function drawPoly(a,b=new Color,c=0,d=new Color(0,0,0),e,f=mainContext){ASSERT(isColor(b)&&isColor(d));f.fillStyle=b.toString();f.beginPath();for(const g of e?a:a.map(worldToScreen))f.lineTo(g.x,g.y);f.closePath();f.fill();c&&(f.strokeStyle=d.toString(),f.lineWidth=e?c:c*cameraScale,f.stroke())}function drawEllipse(a,b=1,c=1,d=0,e=new Color,f=0,g=new Color(0,0,0),k,h=mainContext){ASSERT(isColor(e)&&isColor(g));k||(a=worldToScreen(a),b*=cameraScale,c*=cameraScale,f*=cameraScale);h.fillStyle=e.toString();h.beginPath();h.ellipse(a.x,a.y,b,c,d,0,9);h.fill();f&&(h.strokeStyle=g.toString(),h.lineWidth=f,h.stroke())}function drawCircle(a,b=1,c=new Color,d=0,e=new Color(0,0,0),f,g=mainContext){drawEllipse(a,b,b,0,c,d,e,f,g)}function drawCanvas2D(a,b,c,d,e,f,g=mainContext){f||(a=worldToScreen(a),b=b.scale(cameraScale));g.save();g.translate(a.x+.5,a.y+.5);g.rotate(c);g.scale(d?-b.x:b.x,-b.y);e(g);g.restore()}function drawText(a,b,c=1,d,e=0,f,g,k,h,m=mainContext){drawTextScreen(a,worldToScreen(b),c*cameraScale,d,e*cameraScale,f,g,k,h,m)}function drawTextOverlay(a,b,c=1,d,e=0,f,g,k,h){drawText(a,b,c,d,e,f,g,k,h,overlayContext)}function drawTextScreen(a,b,c=1,d=new Color,e=0,f=new Color(0,0,0),g="center",k=fontDefault,h,m=overlayContext){m.fillStyle=d.toString();m.lineWidth=e;m.strokeStyle=f.toString();m.textAlign=g;m.font=c+"px "+k;m.textBaseline="middle";m.lineJoin="round";b=b.copy();a=(a+"").split("\n");b.y-=(a.length-1)*c/2;a.forEach(n=>{e&&m.strokeText(n,b.x,b.y,h);m.fillText(n,b.x,b.y,h);b.y+=c})}function setBlendMode(a,b=glEnable,c){ASSERT(!c||!b,"context only supported in canvas 2D mode");b?glAdditive=a:(c||=mainContext,c.globalCompositeOperation=a?"lighter":"source-over")}function combineCanvases(){glCopyToContext(mainContext,!0);mainContext.drawImage(overlayCanvas,0,0);glClearCanvas();overlayCanvas.width|=0}let engineFontImage;class FontImage{constructor(a,b=vec2(8),c=vec2(0,1),d=overlayContext){engineFontImage||((engineFontImage=new Image).src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAAYAQAAAAA9+x6JAAAAAnRSTlMAAHaTzTgAAAGiSURBVHjaZZABhxxBEIUf6ECLBdFY+Q0PMNgf0yCgsSAGZcT9sgIPtBWwIA5wgAPEoHUyJeeSlW+gjK+fegWwtROWpVQEyWh2npdpBmTUFVhb29RINgLIukoXr5LIAvYQ5ve+1FqWEMqNKTX3FAJHyQDRZvmKWubAACcv5z5Gtg2oyCWE+Yk/8JZQX1jTTCpKAFGIgza+dJCNBF2UskRlsgwitHbSV0QLgt9sTPtsRlvJjEr8C/FARWA2bJ/TtJ7lko34dNDn6usJUMzuErP89UUBJbWeozrwLLncXczd508deAjLWipLO4Q5XGPcJvPu92cNDaN0P5G1FL0nSOzddZOrJ6rNhbXGmeDvO3TF7DeJWl4bvaYQTNHCTeuqKZmbjHaSOFes+IX/+IhHrnAkXOAsfn24EM68XieIECoccD4KZLk/odiwzeo2rovYdhvb2HYFgyznJyDpYJdYOmfXgVdJTaUi4xA2uWYNYec9BLeqdl9EsoTw582mSFDX2DxVLbNt9U3YYoeatBad1c2Tj8t2akrjaIGJNywKB/7h75/gN3vCMSaadIUTAAAAAElFTkSuQmCC");this.image=a||engineFontImage;this.tileSize=b;this.paddingSize=c;this.context=d}drawText(a,b,c=1,d){this.drawTextScreen(a,worldToScreen(b).floor(),c*cameraScale|0,d)}drawTextScreen(a,b,c=4,d){const e=this.context;e.save();const f=this.tileSize,g=f.add(this.paddingSize).scale(c),k=this.image.width/this.tileSize.x|0;(a+"").split("\n").forEach((h,m)=>{const n=d?h.length*f.x*c/2|0:0;for(let q=h.length;q--;){var l=h[q].charCodeAt(0);if(32>l||127<l)l=127;var p=l-32;l=p%k;p=p/k|0;const r=b.add(vec2(q,m).multiply(g));e.drawImage(this.image,l*f.x,p*f.y,f.x,f.y,r.x-n,r.y,f.x*c,f.y*c)}});e.restore()}}function isFullscreen(){return!!document.fullscreenElement}function toggleFullscreen(){const a=mainCanvas.parentElement;isFullscreen()?document.exitFullscreen&&document.exitFullscreen():a.requestFullscreen&&a.requestFullscreen()}function setCursor(a="auto"){mainCanvas.parentElement.style.cursor=a}function keyIsDown(a,b=0){ASSERT(0<b||"number"!==typeof a||3>a,"use code string for keyboard");return inputData[b]&&!!(inputData[b][a]&1)}function keyWasPressed(a,b=0){ASSERT(0<b||"number"!==typeof a||3>a,"use code string for keyboard");return inputData[b]&&!!(inputData[b][a]&2)}function keyWasReleased(a,b=0){ASSERT(0<b||"number"!==typeof a||3>a,"use code string for keyboard");return inputData[b]&&!!(inputData[b][a]&4)}function keyDirection(a="ArrowUp",b="ArrowDown",c="ArrowLeft",d="ArrowRight"){return vec2((keyIsDown(d)?1:0)-(keyIsDown(c)?1:0),(keyIsDown(a)?1:0)-(keyIsDown(b)?1:0))}function clearInput(){inputData=[[]];touchGamepadButtons=[]}const mouseIsDown=keyIsDown,mouseWasPressed=keyWasPressed,mouseWasReleased=keyWasReleased;let mousePos=vec2(),mousePosScreen=vec2(),mouseWheel=0,isUsingGamepad=!1,inputPreventDefault=!0;function setInputPreventDefault(a){inputPreventDefault=a}function gamepadIsDown(a,b=0){return keyIsDown(a,b+1)}function gamepadWasPressed(a,b=0){return keyWasPressed(a,b+1)}function gamepadWasReleased(a,b=0){return keyWasReleased(a,b+1)}function gamepadStick(a,b=0){return gamepadStickData[b]?gamepadStickData[b][a]||vec2():vec2()}let inputData=[[]];function inputUpdate(){headlessMode||(touchInputEnable&&isTouchDevice||document.hasFocus()||clearInput(),mousePos=screenToWorld(mousePosScreen),gamepadsUpdate())}function inputUpdatePost(){if(!headlessMode){for(const a of inputData)for(const b in a)a[b]&=1;mouseWheel=0}}function inputInit(){function a(b){return inputWASDEmulateDirection?"KeyW"==b?"ArrowUp":"KeyS"==b?"ArrowDown":"KeyA"==b?"ArrowLeft":"KeyD"==b?"ArrowRight":b:b}headlessMode||(onkeydown=b=>{b.repeat||(isUsingGamepad=!1,inputData[0][b.code]=3,inputWASDEmulateDirection&&(inputData[0][a(b.code)]=3))},onkeyup=b=>{inputData[0][b.code]=4;inputWASDEmulateDirection&&(inputData[0][a(b.code)]=4)},onmousedown=b=>{soundEnable&&!headlessMode&&audioContext&&"running"!=audioContext.state&&audioContext.resume();isUsingGamepad=!1;inputData[0][b.button]=3;mousePosScreen=mouseEventToScreen(b);inputPreventDefault&&b.button&&b.preventDefault()},onmouseup=b=>inputData[0][b.button]=inputData[0][b.button]&2|4,onmousemove=b=>mousePosScreen=mouseEventToScreen(b),onwheel=b=>mouseWheel=b.ctrlKey?0:sign(b.deltaY),oncontextmenu=b=>!1,onblur=b=>clearInput(),isTouchDevice&&touchInputEnable&&touchInputInit())}function mouseEventToScreen(a){const b=mainCanvas.getBoundingClientRect(),c=percent(a.x,b.left,b.right);a=percent(a.y,b.top,b.bottom);return vec2(c*mainCanvas.width,a*mainCanvas.height)}const gamepadStickData=[];function gamepadsUpdate(){const a=g=>{const k=h=>.3<h?percent(h,.3,.8):-.3>h?-percent(-h,.3,.8):0;return vec2(k(g.x),k(-g.y)).clampLength()};if(touchGamepadEnable&&isTouchDevice&&(ASSERT(touchGamepadButtons,"set touchGamepadEnable before calling init!"),touchGamepadTimer.isSet())){var b=gamepadStickData[0]||(gamepadStickData[0]=[]);b[0]=vec2();touchGamepadAnalog?b[0]=a(touchGamepadStick):.3<touchGamepadStick.lengthSquared()&&(b[0].x=Math.round(touchGamepadStick.x),b[0].y=-Math.round(touchGamepadStick.y),b[0]=b[0].clampLength());b=inputData[1]||(inputData[1]=[]);for(var c=10;c--;){var d=3==c?2:2==c?3:c,e=gamepadIsDown(d,0);b[d]=touchGamepadButtons[c]?e?1:3:e?4:0}}if(gamepadsEnable&&navigator&&navigator.getGamepads&&(debug||document.hasFocus()))for(b=navigator.getGamepads(),c=b.length;c--;){e=b[c];const g=inputData[c+1]||(inputData[c+1]=[]);d=gamepadStickData[c]||(gamepadStickData[c]=[]);if(e){for(var f=0;f<e.axes.length-1;f+=2)d[f>>1]=a(vec2(e.axes[f],e.axes[f+1]));for(f=e.buttons.length;f--;){const k=e.buttons[f],h=gamepadIsDown(f,c);g[f]=k.pressed?h?1:3:h?4:0;isUsingGamepad||=!c&&k.pressed}gamepadDirectionEmulateStick&&(e=vec2((gamepadIsDown(15,c)&&1)-(gamepadIsDown(14,c)&&1),(gamepadIsDown(12,c)&&1)-(gamepadIsDown(13,c)&&1)),e.lengthSquared()&&(d[0]=e.clampLength()));touchGamepadEnable&&isUsingGamepad&&touchGamepadTimer.unset()}}}function vibrate(a=100){vibrateEnable&&!headlessMode&&navigator&&navigator.vibrate&&navigator.vibrate(a)}function vibrateStop(){vibrate(0)}const isTouchDevice=!headlessMode&&void 0!==window.ontouchstart;let touchGamepadTimer=new Timer,touchGamepadButtons,touchGamepadStick;function touchInputInit(){function a(e){soundEnable&&!headlessMode&&audioContext&&"running"!=audioContext.state&&audioContext.resume();const f=e.touches.length;if(f){const g=vec2(e.touches[0].clientX,e.touches[0].clientY);mousePosScreen=mouseEventToScreen(g);d?isUsingGamepad=touchGamepadEnable:inputData[0][0]=3}else d&&(inputData[0][0]=inputData[0][0]&2|4);d=f;inputPreventDefault&&document.hasFocus()&&e.preventDefault();return!0}function b(e){touchGamepadStick=vec2();touchGamepadButtons=[];isUsingGamepad=!0;if(e.touches.length&&(touchGamepadTimer.set(),paused&&!d)){touchGamepadButtons[9]=1;a(e);return}const f=vec2(touchGamepadSize,mainCanvasSize.y-touchGamepadSize),g=mainCanvasSize.subtract(vec2(touchGamepadSize,touchGamepadSize)),k=mainCanvasSize.scale(.5);for(const m of e.touches){var h=mouseEventToScreen(vec2(m.clientX,m.clientY));h.distance(f)<touchGamepadSize?touchGamepadStick=h.subtract(f).scale(2/touchGamepadSize).clampLength():h.distance(g)<touchGamepadSize?(h=h.subtract(g).direction(),touchGamepadButtons[h]=1):h.distance(k)<touchGamepadSize&&!d&&(touchGamepadButtons[9]=1)}a(e);return!0}let c=a;touchGamepadEnable&&(c=b,touchGamepadButtons=[],touchGamepadStick=vec2());document.addEventListener("touchstart",e=>c(e),{passive:!1});document.addEventListener("touchmove",e=>c(e),{passive:!1});document.addEventListener("touchend",e=>c(e),{passive:!1});onmousedown=onmouseup=()=>0;let d}function touchGamepadRender(){if(touchInputEnable&&isTouchDevice&&!headlessMode&&touchGamepadEnable&&touchGamepadTimer.isSet()){var a=percent(touchGamepadTimer.get(),4,3);if(a&&!paused){var b=overlayContext;b.save();b.globalAlpha=a*touchGamepadAlpha;b.strokeStyle="#fff";b.lineWidth=3;b.fillStyle=0<touchGamepadStick.lengthSquared()?"#fff":"#000";b.beginPath();a=vec2(touchGamepadSize,mainCanvasSize.y-touchGamepadSize);if(touchGamepadAnalog)b.arc(a.x,a.y,touchGamepadSize/2,0,9),b.fill();else for(var c=10;c--;){var d=c*PI/4;b.arc(a.x,a.y,.6*touchGamepadSize,d+PI/8,d+PI/8);c%2&&b.arc(a.x,a.y,.33*touchGamepadSize,d,d);1==c&&b.fill()}b.stroke();a=vec2(mainCanvasSize.x-touchGamepadSize,mainCanvasSize.y-touchGamepadSize);for(c=4;c--;)d=a.add(vec2().setDirection(c,touchGamepadSize/2)),b.fillStyle=touchGamepadButtons[c]?"#fff":"#000",b.beginPath(),b.arc(d.x,d.y,touchGamepadSize/4,0,9),b.fill(),b.stroke();b.restore()}}}let audioContext=new AudioContext,audioGainNode;function audioInit(){soundEnable&&!headlessMode&&(audioGainNode=audioContext.createGain(),audioGainNode.connect(audioContext.destination),audioGainNode.gain.value=soundVolume)}class Sound{constructor(a,b=soundDefaultRange,c=soundDefaultTaper){soundEnable&&!headlessMode&&(this.range=b,this.taper=c,this.randomness=0,a&&(this.randomness=void 0!=a[1]?a[1]:.05,a[1]=0,this.sampleChannels=[zzfxG(...a)],this.sampleRate=zzfxR))}play(a,b=1,c=1,d=1,e=!1){if(soundEnable&&!headlessMode&&this.sampleChannels){var f;if(a){if(f=this.range){const g=cameraPos.distanceSquared(a);if(g>f*f)return;b*=percent(g**.5,f,f*this.taper)}f=2*worldToScreen(a).x/mainCanvas.width-1}a=c+c*this.randomness*d*rand(-1,1);this.gainNode=audioContext.createGain();return this.source=playSamples(this.sampleChannels,b,a,f,e,this.sampleRate,this.gainNode)}}setVolume(a=1){this.gainNode&&(this.gainNode.gain.value=a)}stop(){this.source&&this.source.stop();this.source=void 0}getSource(){return this.source}playNote(a,b,c){return this.play(b,c,2**(a/12),0)}getDuration(){return this.sampleChannels&&this.sampleChannels[0].length/this.sampleRate}isLoading(){return!this.sampleChannels}}class SoundWave extends Sound{constructor(a,b=0,c,d,e){super(void 0,c,d);soundEnable&&!headlessMode&&(this.randomness=b,fetch(a).then(f=>f.arrayBuffer()).then(f=>audioContext.decodeAudioData(f)).then(f=>{this.sampleChannels=[];for(let g=f.numberOfChannels;g--;)this.sampleChannels[g]=Array.from(f.getChannelData(g));this.sampleRate=f.sampleRate}).then(()=>e&&e(this)))}}function playAudioFile(a,b=1,c=!1){if(soundEnable&&!headlessMode)return new SoundWave(a,0,0,0,d=>d.play(void 0,b,1,1,c))}class Music extends Sound{constructor(a){super(void 0);soundEnable&&!headlessMode&&(this.randomness=0,this.sampleChannels=zzfxM(...a),this.sampleRate=zzfxR)}playMusic(a,b=!1){return super.play(void 0,a,1,1,b)}}function speak(a,b="",c=1,d=1,e=1){if(soundEnable&&!headlessMode&&speechSynthesis)return a=new SpeechSynthesisUtterance(a),a.lang=b,a.volume=2*c*soundVolume,a.rate=d,a.pitch=e,speechSynthesis.speak(a),a}function speakStop(){speechSynthesis&&speechSynthesis.cancel()}function getNoteFrequency(a,b=220){return b*2**(a/12)}function playSamples(a,b=1,c=1,d=0,e=!1,f=zzfxR,g){if(soundEnable&&!headlessMode){var k=audioContext.createBuffer(a.length,a[0].length,f),h=audioContext.createBufferSource();a.forEach((m,n)=>k.getChannelData(n).set(m));h.buffer=k;h.playbackRate.value=c;h.loop=e;g=g||audioContext.createGain();g.gain.value=b;g.connect(audioGainNode);a=new StereoPannerNode(audioContext,{pan:clamp(d,-1,1)});h.connect(a).connect(g);"running"!=audioContext.state?audioContext.resume().then(()=>h.start()):h.start();return h}}function zzfx(...a){return playSamples([zzfxG(...a)])}const zzfxR=44100;function zzfxG(a=1,b=.05,c=220,d=0,e=0,f=.1,g=0,k=1,h=0,m=0,n=0,l=0,p=0,q=0,r=0,x=0,v=0,D=1,z=0,E=0,A=0){let w=2*PI;var t=zzfxR;let F=h*=500*w/t/t;b=c*=rand(1+b,1-b)*w/t;let C=[],y=0,G=0,u=0,H=1,R=0,S=0,B=0,J;var L=w*abs(A)*2/t,K=Math.cos(L),M=Math.sin(L)/2/2,I=1+M;L=-2*K/I;M=(1-M)/I;let N=(1+sign(A)*K)/2/I;K=-(sign(A)+K)/I;let O=I=0,P=0,Q=0;d=d*t+9;z*=t;e*=t;f*=t;v*=t;m*=500*w/t**3;r*=w/t;n*=w/t;l*=t;p=p*t|0;for(J=d+z+e+f+v|0;u<J;C[u++]=B*a)++S%(100*x|0)||(B=g?1<g?2<g?3<g?Math.sin(y**3):clamp(Math.tan(y),1,-1):1-(2*y/w%2+2)%2:1-4*abs(Math.round(y/w)-y/w):Math.sin(y),B=(p?1-E+E*Math.sin(w*u/p):1)*sign(B)*abs(B)**k*(u<d?u/d:u<d+z?1-(u-d)/z*(1-D):u<d+z+e?D:u<J-v?(J-u-v)/f*D:0),B=v?B/2+(v>u?0:(u<J-v?1:(J-u)/v)*C[u-v|0]/2/a):B,A&&(B=Q=N*I+K*(I=O)+N*(O=B)-M*P-L*(P=Q))),t=(c+=h+=m)*Math.cos(r*G++),y+=t+t*q*Math.sin(u**5),H&&++H>l&&(c+=n,b+=n,H=0),!p||++R%p||(c=b,h=F,H=H||1);return C}function zzfxM(a,b,c,d=125){let e,f,g,k,h,m,n,l,p,q,r,x,v,D=0,z,E=[],A=[],w=[],t=0,F=0,C=1,y={},G=zzfxR/d*60>>2;for(;C;t++)E=[C=l=x=0],c.forEach((u,H)=>{n=b[u][t]||[0,0,0];C|=b[u][t]&&1;z=x+(b[u][0].length-2-(l?0:1))*G;v=H==c.length-1;e=2;for(g=x;e<n.length+v;l=++e){h=n[e];p=e==n.length+v-1&&v||q!=(n[0]||0)||h|0;for(f=0;f<G&&l;f++>G-99&&p&&1>r?r+=1/99:0)m=(1-r)*E[D++]/2||0,A[g]=(A[g]||0)-m*F+m,w[g]=(w[g++]||0)+m*F+m;h&&(r=h%1,F=n[1]||0,h|=0)&&(E=y[[q=n[D=0]||0,h]]=y[[q,h]]||(k=[...a[q]],k[2]*=2**((h-12)/12),0<h?zzfxG(...k):[]))}x=z});return[A,w]}let tileCollision=[],tileCollisionSize=vec2();function initTileCollision(a){tileCollisionSize=a;tileCollision=[];for(a=tileCollision.length=tileCollisionSize.area();a--;)tileCollision[a]=0}function setTileCollisionData(a,b=0){a.arrayCheck(tileCollisionSize)&&(tileCollision[(a.y|0)*tileCollisionSize.x+a.x|0]=b)}function getTileCollisionData(a){return a.arrayCheck(tileCollisionSize)?tileCollision[(a.y|0)*tileCollisionSize.x+a.x|0]:0}function tileCollisionTest(a,b=vec2(),c){const d=max(a.x-b.x/2|0,0);var e=max(a.y-b.y/2|0,0);const f=min(a.x+b.x/2,tileCollisionSize.x);for(a=min(a.y+b.y/2,tileCollisionSize.y);e<a;++e)for(b=d;b<f;++b){const g=tileCollision[e*tileCollisionSize.x+b];if(g&&(!c||c.collideWithTile(g,vec2(b,e))))return!0}return!1}function tileCollisionRaycast(a,b,c){const d=b.subtract(a),e=d.length();var f=d.normalize();f=vec2(abs(1/f.x),abs(1/f.y));let g=a.floor(),k=f.x*(0>d.x?a.x-g.x:g.x-a.x+1),h=f.y*(0>d.y?a.y-g.y:g.y-a.y+1);for(;;){const m=getTileCollisionData(g);if(m&&(!c||c.collideWithTile(m,g)))return debugRaycast&&debugLine(a,b,"#f00",.02),debugRaycast&&debugPoint(g.add(vec2(.5)),"#ff0"),g.add(vec2(.5));if(k>e&&h>e)break;k>h?(g.y+=sign(d.y),h+=f.y):(g.x+=sign(d.x),k+=f.x)}debugRaycast&&debugLine(a,b,"#00f",.02)}class TileLayerData{constructor(a,b=0,c=!1,d=new Color){this.tile=a;this.direction=b;this.mirror=c;this.color=d}clear(){this.tile=this.direction=0;this.mirror=!1;this.color=new Color}}class TileLayer extends EngineObject{constructor(a,b=tileCollisionSize,c=tile(),d=vec2(1),e=0){super(a,b,c,0,void 0,e);this.canvas=document.createElement("canvas");this.context=this.canvas.getContext("2d");this.scale=d;this.isOverlay=!1;this.data=[];for(a=this.size.area();a--;)this.data.push(new TileLayerData);headlessMode&&(this.redraw=()=>{},this.render=()=>{},this.redrawStart=()=>{},this.redrawEnd=()=>{},this.drawTileData=()=>{},this.drawCanvas2D=()=>{})}setData(a,b,c=!1){a.arrayCheck(this.size)&&(this.data[(a.y|0)*this.size.x+a.x|0]=b,c&&this.drawTileData(a))}getData(a){return a.arrayCheck(this.size)&&this.data[(a.y|0)*this.size.x+a.x|0]}update(){}render(){ASSERT(mainContext!=this.context,"must call redrawEnd() after drawing tiles");glOverlay||this.isOverlay||glCopyToContext(mainContext);let a=worldToScreen(this.pos.add(vec2(0,this.size.y*this.scale.y)));a=a.floor();(this.isOverlay?overlayContext:mainContext).drawImage(this.canvas,a.x,a.y,cameraScale*this.size.x*this.scale.x,cameraScale*this.size.y*this.scale.y)}redraw(){this.redrawStart(!0);for(let a=this.size.x;a--;)for(let b=this.size.y;b--;)this.drawTileData(vec2(a,b),!1);this.redrawEnd()}redrawStart(a=!1){this.savedRenderSettings=[mainCanvas,mainContext,mainCanvasSize,cameraPos,cameraScale];mainCanvas=this.canvas;mainContext=this.context;mainCanvasSize=this.size.multiply(this.tileInfo.size);cameraPos=this.size.scale(.5);cameraScale=this.tileInfo.size.x;a&&(mainCanvas.width=mainCanvasSize.x,mainCanvas.height=mainCanvasSize.y);this.context.imageSmoothingEnabled=!tilesPixelated;glPreRender()}redrawEnd(){ASSERT(mainContext==this.context,"must call redrawStart() before drawing tiles");glCopyToContext(mainContext,!0);[mainCanvas,mainContext,mainCanvasSize,cameraPos,cameraScale]=this.savedRenderSettings}drawTileData(a,b=!0){var c=this.tileInfo.size;b&&(b=a.multiply(c),this.context.clearRect(b.x,this.canvas.height-b.y,c.x,-c.y));b=this.getData(a);void 0!=b.tile&&(ASSERT(mainContext==this.context,"must call redrawStart() before drawing tiles"),a=a.add(vec2(.5)),c=tile(b.tile,c,this.tileInfo.textureIndex,this.tileInfo.padding),drawTile(a,vec2(1),c,b.color,b.direction*PI/2,b.mirror))}drawCanvas2D(a,b,c,d,e){const f=this.context;f.save();a=a.subtract(this.pos).multiply(this.tileInfo.size);b=b.multiply(this.tileInfo.size);f.translate(a.x,this.canvas.height-a.y);f.rotate(c);f.scale(d?-b.x:b.x,b.y);e(f);f.restore()}drawTile(a,b=vec2(1),c,d=new Color,e,f){this.drawCanvas2D(a,b,e,f,g=>{const k=c&&c.getTextureInfo();k?(g.globalAlpha=d.a,g.drawImage(k.image,c.pos.x,c.pos.y,c.size.x,c.size.y,-.5,-.5,1,1),g.globalAlpha=1):(g.fillStyle=d,g.fillRect(-.5,-.5,1,1))})}drawRect(a,b,c,d){this.drawTile(a,b,void 0,c,d)}}class ParticleEmitter extends EngineObject{constructor(a,b,c=0,d=0,e=100,f=PI,g,k=new Color,h=new Color,m=new Color(1,1,1,0),n=new Color(1,1,1,0),l=.5,p=.1,q=1,r=.1,x=.05,v=1,D=1,z=0,E=PI,A=.1,w=.2,t=!1,F=!1,C=!0,y=F?1e9:0,G=!1){super(a,vec2(),g,b,void 0,y);this.emitSize=c;this.emitTime=d;this.emitRate=e;this.emitConeAngle=f;this.colorStartA=k;this.colorStartB=h;this.colorEndA=m;this.colorEndB=n;this.randomColorLinear=C;this.particleTime=l;this.sizeStart=p;this.sizeEnd=q;this.speed=r;this.angleSpeed=x;this.damping=v;this.angleDamping=D;this.gravityScale=z;this.particleConeAngle=E;this.fadeRate=A;this.randomness=w;this.collideTiles=t;this.additive=F;this.localSpace=G;this.trailScale=0;this.particleCreateCallback=this.particleDestroyCallback=void 0;this.emitTimeBuffer=0}update(){this.parent&&super.update();if(!this.emitTime||this.getAliveTime()<=this.emitTime){if(this.emitRate*particleEmitRateScale){const a=1/this.emitRate/particleEmitRateScale;for(this.emitTimeBuffer+=timeDelta;0<this.emitTimeBuffer;this.emitTimeBuffer-=a)this.emitParticle()}}else this.destroy();debugParticles&&debugRect(this.pos,vec2(this.emitSize),"#0f0",0,this.angle)}emitParticle(){var a="number"===typeof this.emitSize?randInCircle(this.emitSize/2):vec2(rand(-.5,.5),rand(-.5,.5)).multiply(this.emitSize).rotate(this.angle);let b=rand(this.particleConeAngle,-this.particleConeAngle);this.localSpace||(a=this.pos.add(a),b+=this.angle);const c=this.randomness;var d=l=>l+l*rand(c,-c);const e=d(this.particleTime),f=d(this.sizeStart),g=d(this.sizeEnd),k=d(this.speed);d=d(this.angleSpeed)*randSign();var h=rand(this.emitConeAngle,-this.emitConeAngle);const m=randColor(this.colorStartA,this.colorStartB,this.randomColorLinear),n=randColor(this.colorEndA,this.colorEndB,this.randomColorLinear);h=this.localSpace?h:this.angle+h;a=new Particle(a,this.tileInfo,b,m,n,e,f,g,this.fadeRate,this.additive,this.trailScale,this.localSpace&&this,this.particleDestroyCallback);a.velocity=vec2().setAngle(h,k);a.angleVelocity=d;a.fadeRate=this.fadeRate;a.damping=this.damping;a.angleDamping=this.angleDamping;a.elasticity=this.elasticity;a.friction=this.friction;a.gravityScale=this.gravityScale;a.collideTiles=this.collideTiles;a.renderOrder=this.renderOrder;a.mirror=!!randInt(2);this.particleCreateCallback&&this.particleCreateCallback(a);return a}render(){}}class Particle extends EngineObject{constructor(a,b,c,d,e,f,g,k,h,m,n,l,p){super(a,vec2(),b,c);this.colorStart=d;this.colorEndDelta=e.subtract(d);this.lifeTime=f;this.sizeStart=g;this.sizeEndDelta=k-g;this.fadeRate=h;this.additive=m;this.trailScale=n;this.localSpaceEmitter=l;this.destroyCallback=p;this.clampSpeedLinear=!1}render(){const a=0<this.lifeTime?min((time-this.spawnTime)/this.lifeTime,1):1,b=vec2(this.sizeStart+a*this.sizeEndDelta);var c=this.fadeRate/2;c=new Color(this.colorStart.r+a*this.colorEndDelta.r,this.colorStart.g+a*this.colorEndDelta.g,this.colorStart.b+a*this.colorEndDelta.b,(this.colorStart.a+a*this.colorEndDelta.a)*(a<c?a/c:a>1-c?(1-a)/c:1));this.additive&&setBlendMode(!0);let d=this.pos,e=this.angle;this.localSpaceEmitter&&(d=this.localSpaceEmitter.pos.add(d.rotate(-this.localSpaceEmitter.angle)),e+=this.localSpaceEmitter.angle);if(this.trailScale){var f=this.velocity;this.localSpaceEmitter&&(f=f.rotate(-this.localSpaceEmitter.angle));var g=f.length();g&&(f=f.scale(1/g),g*=this.trailScale,b.y=max(b.x,g),e=f.angle(),drawTile(d.add(f.multiply(vec2(0,-g/2))),b,this.tileInfo,c,e,this.mirror))}else drawTile(d,b,this.tileInfo,c,e,this.mirror);this.additive&&setBlendMode();debugParticles&&debugRect(d,b,"#f005",0,e);1==a&&(this.color=c,this.size=b,this.destroyCallback&&this.destroyCallback(this),this.destroyed=1)}}const medals={};let medalsDisplayQueue=[],medalsSaveName,medalsDisplayTimeLast;function medalsInit(a){medalsSaveName=a;debugMedals||medalsForEach(b=>b.unlocked=!!localStorage[b.storageKey()]);engineAddPlugin(void 0,function(){if(medalsDisplayQueue.length){var b=medalsDisplayQueue[0],c=timeReal-medalsDisplayTimeLast;if(medalsDisplayTimeLast)if(c>medalDisplayTime)medalsDisplayTimeLast=0,medalsDisplayQueue.shift();else{const d=medalDisplayTime-medalDisplaySlideTime;b.render(c<medalDisplaySlideTime?1-c/medalDisplaySlideTime:c>d?(c-d)/medalDisplaySlideTime:0)}else medalsDisplayTimeLast=timeReal}})}function medalsForEach(a){Object.values(medals).forEach(b=>a(b))}class Medal{constructor(a,b,c="",d="🏆",e){ASSERT(0<=a&&!medals[a]);this.id=a;this.name=b;this.description=c;this.icon=d;this.unlocked=!1;e&&((this.image=new Image).src=e);medals[a]=this}unlock(){medalsPreventUnlock||this.unlocked||(ASSERT(medalsSaveName,"save name must be set"),localStorage[this.storageKey()]=this.unlocked=!0,medalsDisplayQueue.push(this))}render(a=0){const b=overlayContext;var c=min(medalDisplaySize.x,mainCanvas.width);const d=medalDisplaySize.y;var e=overlayCanvas.width-c;a*=-d;b.save();b.beginPath();b.fillStyle=new Color(.9,.9,.9).toString();b.strokeStyle=new Color(0,0,0).toString();b.lineWidth=3;b.rect(e,a,c,d);b.fill();b.stroke();b.clip();const f=vec2(.1,.05).scale(d),g=d-2*f.x;this.renderIcon(vec2(e+f.x+g/2,a+d/2),g);const k=.5*d,h=.3*d;e=vec2(e+g+2*f.x,a+2*f.y+k/2);c=c-g-3*f.x;drawTextScreen(this.name,e,k,new Color(0,0,0),0,void 0,"left",void 0,c);e.y=a+d-2*f.y-h/2;drawTextScreen(this.description,e,h,new Color(0,0,0),0,void 0,"left",void 0,c);b.restore()}renderIcon(a,b){this.image?overlayContext.drawImage(this.image,a.x-b/2,a.y-b/2,b,b):drawTextScreen(this.icon,a,.7*b,new Color(0,0,0))}storageKey(){return medalsSaveName+"_"+this.id}}let glCanvas,glContext,glAntialias=!0,glShader,glActiveTexture,glArrayBuffer,glGeometryBuffer,glPositionData,glColorData,glInstanceCount,glAdditive,glBatchAdditive;const gl_MAX_INSTANCES=1e4,gl_INDICES_PER_INSTANCE=11,gl_INSTANCE_BYTE_STRIDE=4*gl_INDICES_PER_INSTANCE,gl_INSTANCE_BUFFER_SIZE=gl_MAX_INSTANCES*gl_INSTANCE_BYTE_STRIDE;function glInit(){if(glEnable&&!headlessMode){glCanvas=document.createElement("canvas");glContext=glCanvas.getContext("webgl2",{antialias:glAntialias});var a=mainCanvas.parentElement;glOverlay&&a.appendChild(glCanvas);glShader=glCreateProgram("#version 300 es\nprecision highp float;uniform mat4 m;in vec2 g;in vec4 p,u,c,a;in float r;out vec2 v;out vec4 d,e;void main(){vec2 s=(g-.5)*p.zw;gl_Position=m*vec4(p.xy+s*cos(r)-vec2(-s.y,s)*sin(r),1,1);v=mix(u.xw,u.zy,g);d=c;e=a;}","#version 300 es\nprecision highp float;uniform sampler2D s;in vec2 v;in vec4 d,e;out vec4 c;void main(){c=texture(s,v)*d+e;}");a=new ArrayBuffer(gl_INSTANCE_BUFFER_SIZE);glPositionData=new Float32Array(a);glColorData=new Uint32Array(a);glArrayBuffer=glContext.createBuffer();glGeometryBuffer=glContext.createBuffer();a=new Float32Array([glInstanceCount=0,0,1,0,0,1,1,1]);glContext.bindBuffer(glContext.ARRAY_BUFFER,glGeometryBuffer);glContext.bufferData(glContext.ARRAY_BUFFER,a,glContext.STATIC_DRAW)}}function glPreRender(){if(glEnable&&!headlessMode){glClearCanvas();glContext.useProgram(glShader);glContext.activeTexture(glContext.TEXTURE0);textureInfos[0]&&glContext.bindTexture(glContext.TEXTURE_2D,glActiveTexture=textureInfos[0].glTexture);var a=glAdditive=glBatchAdditive=0,b=(d,e,f,g)=>{d=glContext.getAttribLocation(glShader,d);const k=f&&gl_INSTANCE_BYTE_STRIDE,h=f&&1,m=1==f;glContext.enableVertexAttribArray(d);glContext.vertexAttribPointer(d,g,e,m,k,a);glContext.vertexAttribDivisor(d,h);a+=g*f};glContext.bindBuffer(glContext.ARRAY_BUFFER,glGeometryBuffer);b("g",glContext.FLOAT,0,2);glContext.bindBuffer(glContext.ARRAY_BUFFER,glArrayBuffer);glContext.bufferData(glContext.ARRAY_BUFFER,gl_INSTANCE_BUFFER_SIZE,glContext.DYNAMIC_DRAW);b("p",glContext.FLOAT,4,4);b("u",glContext.FLOAT,4,4);b("c",glContext.UNSIGNED_BYTE,1,4);b("a",glContext.UNSIGNED_BYTE,1,4);b("r",glContext.FLOAT,4,1);b=vec2(2*cameraScale).divide(mainCanvasSize);var c=vec2(-1).subtract(cameraPos.multiply(b));glContext.uniformMatrix4fv(glContext.getUniformLocation(glShader,"m"),!1,[b.x,0,0,0,0,b.y,0,0,1,1,1,1,c.x,c.y,0,0])}}function glClearCanvas(){glContext.viewport(0,0,glCanvas.width=mainCanvas.width,glCanvas.height=mainCanvas.height);glContext.clear(glContext.COLOR_BUFFER_BIT)}function glSetTexture(a){headlessMode||a==glActiveTexture||(glFlush(),glContext.bindTexture(glContext.TEXTURE_2D,glActiveTexture=a))}function glCompileShader(a,b){b=glContext.createShader(b);glContext.shaderSource(b,a);glContext.compileShader(b);if(debug&&!glContext.getShaderParameter(b,glContext.COMPILE_STATUS))throw glContext.getShaderInfoLog(b);return b}function glCreateProgram(a,b){const c=glContext.createProgram();glContext.attachShader(c,glCompileShader(a,glContext.VERTEX_SHADER));glContext.attachShader(c,glCompileShader(b,glContext.FRAGMENT_SHADER));glContext.linkProgram(c);if(debug&&!glContext.getProgramParameter(c,glContext.LINK_STATUS))throw glContext.getProgramInfoLog(c);return c}function glCreateTexture(a){const b=glContext.createTexture();glContext.bindTexture(glContext.TEXTURE_2D,b);a&&a.width?glContext.texImage2D(glContext.TEXTURE_2D,0,glContext.RGBA,glContext.RGBA,glContext.UNSIGNED_BYTE,a):(a=new Uint8Array([255,255,255,255]),glContext.texImage2D(glContext.TEXTURE_2D,0,glContext.RGBA,1,1,0,glContext.RGBA,glContext.UNSIGNED_BYTE,a));a=tilesPixelated?glContext.NEAREST:glContext.LINEAR;glContext.texParameteri(glContext.TEXTURE_2D,glContext.TEXTURE_MIN_FILTER,a);glContext.texParameteri(glContext.TEXTURE_2D,glContext.TEXTURE_MAG_FILTER,a);return b}function glFlush(){if(glInstanceCount){var a=glBatchAdditive?glContext.ONE:glContext.ONE_MINUS_SRC_ALPHA;glContext.blendFuncSeparate(glContext.SRC_ALPHA,a,glContext.ONE,a);glContext.enable(glContext.BLEND);glContext.bufferSubData(glContext.ARRAY_BUFFER,0,glPositionData);glContext.drawArraysInstanced(glContext.TRIANGLE_STRIP,0,4,glInstanceCount);showWatermark&&(drawCount+=glInstanceCount);glInstanceCount=0;glBatchAdditive=glAdditive}}function glCopyToContext(a,b=!1){glEnable&&(glInstanceCount||b)&&(glFlush(),glOverlay&&!b||a.drawImage(glCanvas,0,0))}function glSetAntialias(a=!0){ASSERT(!glCanvas,"must be called before engineInit");glAntialias=a}function glDraw(a,b,c,d,e,f,g,k,h,m,n=0){ASSERT("number"==typeof m&&"number"==typeof n,"invalid color");(glInstanceCount>=gl_MAX_INSTANCES||glBatchAdditive!=glAdditive)&&glFlush();let l=glInstanceCount++*gl_INDICES_PER_INSTANCE;glPositionData[l++]=a;glPositionData[l++]=b;glPositionData[l++]=c;glPositionData[l++]=d;glPositionData[l++]=f;glPositionData[l++]=g;glPositionData[l++]=k;glPositionData[l++]=h;glColorData[l++]=m;glColorData[l++]=n;glPositionData[l++]=e}const engineName="LittleJS",engineVersion="1.11.13",frameRate=60,timeDelta=1/frameRate;let engineObjects=[],engineObjectsCollide=[],frame=0,time=0,timeReal=0,paused=!1;function setPaused(a){paused=a}let frameTimeLastMS=0,frameTimeBufferMS=0,averageFPS=0;const pluginUpdateList=[],pluginRenderList=[];function engineAddPlugin(a,b){ASSERT(!pluginUpdateList.includes(a));ASSERT(!pluginRenderList.includes(b));a&&pluginUpdateList.push(a);b&&pluginRenderList.push(b)}function engineInit(a,b,c,d,e,f=[],g=document.body){function k(n=0){var l=n-frameTimeLastMS;frameTimeLastMS=n;if(debug||showWatermark)averageFPS=lerp(.05,averageFPS,1e3/(l||1));n=debug&&keyIsDown("Equal");const p=debug&&keyIsDown("Minus");debug&&(l*=n?5:p?.2:1);timeReal+=l/1e3;frameTimeBufferMS+=paused?0:l;n||(frameTimeBufferMS=min(frameTimeBufferMS,50));h();if(paused){for(const r of engineObjects)r.parent||r.updateTransforms();inputUpdate();pluginUpdateList.forEach(r=>r());debugUpdate();c();inputUpdatePost()}else{l=0;0>frameTimeBufferMS&&-9<frameTimeBufferMS&&(l=frameTimeBufferMS,frameTimeBufferMS=0);for(;0<=frameTimeBufferMS;frameTimeBufferMS-=1e3/frameRate)time=frame++/frameRate,inputUpdate(),b(),pluginUpdateList.forEach(r=>r()),engineObjectsUpdate(),debugUpdate(),c(),inputUpdatePost();frameTimeBufferMS+=l}if(!headlessMode){mainCanvasSize=vec2(mainCanvas.width,mainCanvas.height);overlayContext.imageSmoothingEnabled=mainContext.imageSmoothingEnabled=!tilesPixelated;glPreRender();d();engineObjects.sort((r,x)=>r.renderOrder-x.renderOrder);for(var q of engineObjects)q.destroyed||q.render();e();pluginRenderList.forEach(r=>r());touchGamepadRender();debugRender();glCopyToContext(mainContext);showWatermark&&(overlayContext.textAlign="right",overlayContext.textBaseline="top",overlayContext.font="1em monospace",overlayContext.fillStyle="#000",q=engineName+" v"+engineVersion+" / "+drawCount+" / "+engineObjects.length+" / "+averageFPS.toFixed(1)+(glEnable?" GL":" 2D"),overlayContext.fillText(q,mainCanvas.width-3,3),overlayContext.fillStyle="#fff",overlayContext.fillText(q,mainCanvas.width-2,2),drawCount=0)}requestAnimationFrame(k)}function h(){if(!headlessMode){if(canvasFixedSize.x){mainCanvas.width=canvasFixedSize.x;mainCanvas.height=canvasFixedSize.y;const n=innerWidth/innerHeight,l=mainCanvas.width/mainCanvas.height;(glCanvas||mainCanvas).style.width=mainCanvas.style.width=overlayCanvas.style.width=n<l?"100%":"";(glCanvas||mainCanvas).style.height=mainCanvas.style.height=overlayCanvas.style.height=n<l?"":"100%"}else mainCanvas.width=min(innerWidth,canvasMaxSize.x),mainCanvas.height=min(innerHeight,canvasMaxSize.y);overlayCanvas.width=mainCanvas.width;overlayCanvas.height=mainCanvas.height;mainCanvasSize=vec2(mainCanvas.width,mainCanvas.height)}}function m(){new Promise(n=>n(a())).then(k)}ASSERT(!mainContext,"engine already initialized");ASSERT(Array.isArray(f),"pass in images as array");a||=()=>{};b||=()=>{};c||=()=>{};d||=()=>{};e||=()=>{};headlessMode?m():(g.style.cssText="margin:0;overflow:hidden;width:100vw;height:100vh;display:flex;align-items:center;justify-content:center;background:#000;"+(canvasPixelated?"image-rendering:pixelated;":"")+"user-select:none;-webkit-user-select:none;"+(touchInputEnable?"touch-action:none;-webkit-touch-callout:none":""),g.appendChild(mainCanvas=document.createElement("canvas")),mainContext=mainCanvas.getContext("2d"),inputInit(),audioInit(),debugInit(),glInit(),g.appendChild(overlayCanvas=document.createElement("canvas")),overlayContext=overlayCanvas.getContext("2d"),mainCanvas.style.cssText=overlayCanvas.style.cssText="position:absolute",glCanvas&&(glCanvas.style.cssText="position:absolute"),h(),g=f.map((n,l)=>new Promise(p=>{const q=new Image;q.crossOrigin="anonymous";q.onerror=q.onload=()=>{textureInfos[l]=new TextureInfo(q);p()};q.src=n})),f.length||g.push(new Promise(n=>{textureInfos[0]=new TextureInfo(new Image);n()})),showSplashScreen&&g.push(new Promise(n=>{function l(){clearInput();drawEngineSplashScreen(p+=.01);1<p?n():setTimeout(l,16)}let p=0;console.log(`${engineName} Engine v${engineVersion}`);l()})),Promise.all(g).then(m))}function engineObjectsUpdate(){function a(b){if(!b.destroyed){b.update();for(const c of b.children)a(c)}}engineObjectsCollide=engineObjects.filter(b=>b.collideSolidObjects);for(const b of engineObjects)b.parent||(a(b),b.updateTransforms());engineObjects=engineObjects.filter(b=>!b.destroyed)}function engineObjectsDestroy(){for(const a of engineObjects)a.parent||a.destroy();engineObjects=engineObjects.filter(a=>!a.destroyed)}function engineObjectsCollect(a,b,c=engineObjects){const d=[];if(a)if(b instanceof Vector2)for(const e of c)isOverlapping(a,b,e.pos,e.size)&&d.push(e);else{b*=b;for(const e of c)a.distanceSquared(e.pos)<b&&d.push(e)}else for(const e of c)d.push(e);return d}function engineObjectsCallback(a,b,c,d=engineObjects){engineObjectsCollect(a,b,d).forEach(e=>c(e))}function engineObjectsRaycast(a,b,c=engineObjects){const d=[];for(const e of c)e.collideRaycast&&isIntersecting(a,b,e.pos,e.size)&&(debugRaycast&&debugRect(e.pos,e.size,"#f00"),d.push(e));debugRaycast&&debugLine(a,b,d.length?"#f00":"#00f",.02);return d}function drawEngineSplashScreen(a){const b=overlayContext;var c=overlayCanvas.width=innerWidth,d=overlayCanvas.height=innerHeight,e=percent(a,1,.8),f=percent(a,0,.5),g=b.createRadialGradient(c/2,d/2,0,c/2,d/2,.7*Math.hypot(c,d));g.addColorStop(0,hsl(0,0,lerp(f,0,e/2),e).toString());g.addColorStop(1,hsl(0,0,0,e).toString());b.save();b.fillStyle=g;b.fillRect(0,0,c,d);g=(h,m,n,l,p)=>{b.beginPath();b.rect(h,m,n,p?l*k:l);(b.fillStyle=p)?b.fill():b.stroke()};f=(h,m,n,l=0,p=2*PI,q,r)=>{const x=(l+p)/2;l=k*(p-l)/2;b.beginPath();r&&b.lineTo(h,m);b.arc(h,m,n,x-l,x+l);(b.fillStyle=q)?b.fill():b.stroke()};e=(h=0,m=0)=>hsl([.98,.3,.57,.14][h%4]-10,.8,[0,.3,.5,.8,.9][m]).toString();a=wave(1,1,a);const k=percent(a,.1,.5);b.translate(c/2,d/2);c=min(6,min(c,d)/99);b.scale(c,c);b.translate(-40,-35);b.lineJoin=b.lineCap="round";b.lineWidth=.1+1.9*k;c=percent(a,.1,1);b.setLineDash([99*c,99]);g(7,16,18,-8,e(2,2));g(7,8,18,4,e(2,3));g(25,8,8,8,e(2,1));g(25,8,-18,8);g(25,8,8,8);g(25,16,7,23,e());g(11,39,14,-23,e(1,1));g(11,16,14,18,e(1,2));g(11,16,14,8,e(1,3));g(25,16,-14,24);g(15,29,6,-9,e(2,2));f(15,21,5,0,PI/2,e(2,4),1);g(21,21,-6,9);g(37,14,9,6,e(3,2));g(37,14,4.5,6,e(3,3));g(37,14,9,6);g(50,20,10,-8,e(0,1));g(50,20,6.5,-8,e(0,2));g(50,20,3.5,-8,e(0,3));g(50,20,10,-8);f(55,2,11.4,.5,PI-.5,e(3,3));f(55,2,11.4,.5,PI/2,e(3,2),1);f(55,2,11.4,.5,PI-.5);g(45,7,20,-7,e(0,2));g(45,-1,20,4,e(0,3));g(45,-1,20,8);for(c=5;c--;)f(60-6*c,30,9.9,0,2*PI,e(c+2,3)),f(60-6*c,30,10,-.5,PI+.5,e(c+2,2)),f(60-6*c,30,10.1,.5,PI-.5,e(c+2,1));f(36,30,10,PI/2,3*PI/2);f(48,30,10,PI/2,3*PI/2);f(60,30,10);b.beginPath();b.lineTo(36,20);b.lineTo(60,20);b.stroke();f(60,30,4,PI,3*PI,e(3,2));f(60,30,4,PI,2*PI,e(3,3));f(60,30,4,PI,3*PI);for(c=6;c--;)b.beginPath(),b.lineTo(53,54),b.lineTo(53,40),b.lineTo(53+(1+2.9*c)*k,40),b.lineTo(53+(4+3.5*c)*k,54),b.fillStyle=e(0,c%2+2),b.fill(),c%2&&b.stroke();g(6,40,5,5);g(6,40,5,5,e());g(15,54,38,-14,e());for(g=3;g--;)for(c=2;c--;)f(15*g+15,47,c?7:1,PI,3*PI,e(g,3)),b.stroke(),f(15*g+15,47,c?7:1,0,PI,e(g,2)),b.stroke();b.beginPath();b.lineTo(6,40);b.lineTo(68,40);b.stroke();b.beginPath();b.lineTo(77,54);b.lineTo(4,54);b.stroke();f=engineName;b.font="900 16px arial";b.textAlign="center";b.textBaseline="top";b.lineWidth=.1+3.9*k;g=0;for(c=0;c<f.length;++c)g+=b.measureText(f[c]).width;for(c=2;c--;)for(let h=0,m=41-g/2;h<f.length;++h)b.fillStyle=e(h,2),d=b.measureText(f[h]).width,b[c?"strokeText":"fillText"](f[h],m+d/2,55.5,17*k),m+=d;b.restore()}export{engineName,engineVersion,frameRate,timeDelta,engineObjects,frame,time,timeReal,paused,setPaused,engineInit,engineObjectsUpdate,engineObjectsDestroy,engineObjectsCollect,engineObjectsCallback,engineObjectsRaycast,engineAddPlugin,debug,debugOverlay,showWatermark,ASSERT,debugRect,debugPoly,debugCircle,debugPoint,debugLine,debugOverlap,debugText,debugClear,debugScreenshot,debugSaveCanvas,debugSaveText,debugSaveDataURL,cameraPos,cameraScale,canvasMaxSize,canvasFixedSize,canvasPixelated,tilesPixelated,fontDefault,showSplashScreen,headlessMode,tileSizeDefault,tileFixBleedScale,enablePhysicsSolver,objectDefaultMass,objectDefaultDamping,objectDefaultAngleDamping,objectDefaultElasticity,objectDefaultFriction,objectMaxSpeed,gravity,particleEmitRateScale,glEnable,glOverlay,gamepadsEnable,gamepadDirectionEmulateStick,inputWASDEmulateDirection,touchGamepadEnable,touchGamepadAnalog,touchGamepadSize,touchGamepadAlpha,vibrateEnable,soundEnable,soundVolume,soundDefaultRange,soundDefaultTaper,medalDisplayTime,medalDisplaySlideTime,medalDisplaySize,setCameraPos,setCameraScale,setCanvasMaxSize,setCanvasFixedSize,setCanvasPixelated,setTilesPixelated,setFontDefault,setShowSplashScreen,setHeadlessMode,setGlEnable,setGlOverlay,setTileSizeDefault,setTileFixBleedScale,setEnablePhysicsSolver,setObjectDefaultMass,setObjectDefaultDamping,setObjectDefaultAngleDamping,setObjectDefaultElasticity,setObjectDefaultFriction,setObjectMaxSpeed,setGravity,setParticleEmitRateScale,setTouchInputEnable,setGamepadsEnable,setGamepadDirectionEmulateStick,setInputWASDEmulateDirection,setTouchGamepadEnable,setTouchGamepadAnalog,setTouchGamepadSize,setTouchGamepadAlpha,setVibrateEnable,setSoundEnable,setSoundVolume,setSoundDefaultRange,setSoundDefaultTaper,setMedalDisplayTime,setMedalDisplaySlideTime,setMedalDisplaySize,setMedalsPreventUnlock,setShowWatermark,setDebugKey,PI,abs,min,max,sign,mod,clamp,percent,distanceWrap,lerpWrap,distanceAngle,lerpAngle,lerp,smoothStep,nearestPowerOfTwo,isOverlapping,isIntersecting,wave,formatTime,rand,randInt,randSign,randInCircle,randVector,randColor,RandomGenerator,Vector2,Color,Timer,vec2,rgb,hsl,isColor,WHITE,BLACK,GRAY,RED,ORANGE,YELLOW,GREEN,CYAN,BLUE,PURPLE,MAGENTA,textureInfos,tile,TileInfo,TextureInfo,mainCanvas,mainContext,overlayCanvas,overlayContext,mainCanvasSize,screenToWorld,worldToScreen,drawTile,drawRect,drawLine,drawPoly,drawEllipse,drawCircle,drawCanvas2D,drawText,drawTextOverlay,drawTextScreen,setBlendMode,combineCanvases,engineFontImage,FontImage,isFullscreen,toggleFullscreen,setCursor,getCameraSize,glCanvas,glContext,glCompileShader,glCopyToContext,glCreateProgram,glCreateTexture,glDraw,glFlush,glSetTexture,glSetAntialias,glClearCanvas,glAntialias,glShader,glActiveTexture,glArrayBuffer,glGeometryBuffer,glPositionData,glColorData,glInstanceCount,glAdditive,glBatchAdditive,keyIsDown,keyWasPressed,keyWasReleased,keyDirection,clearInput,mouseIsDown,mouseWasPressed,mouseWasReleased,mousePos,mousePosScreen,mouseWheel,isUsingGamepad,preventDefaultInput,gamepadIsDown,gamepadWasPressed,gamepadWasReleased,gamepadStick,gamepadsUpdate,vibrate,vibrateStop,isTouchDevice,Sound,SoundWave,Music,playAudioFile,speak,speakStop,getNoteFrequency,audioContext,playSamples,zzfx,EngineObject,tileCollision,tileCollisionSize,initTileCollision,setTileCollisionData,getTileCollisionData,tileCollisionTest,tileCollisionRaycast,TileLayerData,TileLayer,ParticleEmitter,Particle,medals,medalsPreventUnlock,medalsInit,Medal};
|
|
1
|
+
let showWatermark$$module$dist$littlejs_esm_min_js_tmp=0,debugKey$$module$dist$littlejs_esm_min_js_tmp="";const debug$$module$dist$littlejs_esm_min_js_tmp=0,debugOverlay$$module$dist$littlejs_esm_min_js_tmp=0,debugPhysics$$module$dist$littlejs_esm_min_js_tmp=0,debugParticles$$module$dist$littlejs_esm_min_js_tmp=0,debugRaycast$$module$dist$littlejs_esm_min_js_tmp=0,debugGamepads$$module$dist$littlejs_esm_min_js_tmp=0,debugMedals$$module$dist$littlejs_esm_min_js_tmp=0;function ASSERT$$module$dist$littlejs_esm_min_js_tmp(){}function debugInit$$module$dist$littlejs_esm_min_js_tmp(){}function debugUpdate$$module$dist$littlejs_esm_min_js_tmp(){}function debugRender$$module$dist$littlejs_esm_min_js_tmp(){}function debugRect$$module$dist$littlejs_esm_min_js_tmp(){}function debugPoly$$module$dist$littlejs_esm_min_js_tmp(){}function debugCircle$$module$dist$littlejs_esm_min_js_tmp(){}function debugPoint$$module$dist$littlejs_esm_min_js_tmp(){}function debugLine$$module$dist$littlejs_esm_min_js_tmp(){}function debugOverlap$$module$dist$littlejs_esm_min_js_tmp(){}function debugText$$module$dist$littlejs_esm_min_js_tmp(){}function debugClear$$module$dist$littlejs_esm_min_js_tmp(){}function debugScreenshot$$module$dist$littlejs_esm_min_js_tmp(){}function debugSaveCanvas$$module$dist$littlejs_esm_min_js_tmp(){}function debugSaveText$$module$dist$littlejs_esm_min_js_tmp(){}function debugSaveDataURL$$module$dist$littlejs_esm_min_js_tmp(){}function debugShowErrors$$module$dist$littlejs_esm_min_js_tmp(){}function debugVideoCaptureIsActive$$module$dist$littlejs_esm_min_js_tmp(){return!1}function debugVideoCaptureStart$$module$dist$littlejs_esm_min_js_tmp(){}function debugVideoCaptureStop$$module$dist$littlejs_esm_min_js_tmp(){}function debugVideoCaptureUpdate$$module$dist$littlejs_esm_min_js_tmp(){}const PI$$module$dist$littlejs_esm_min_js_tmp=Math.PI;function abs$$module$dist$littlejs_esm_min_js_tmp(a){return Math.abs(a)}function min$$module$dist$littlejs_esm_min_js_tmp(a,b){return Math.min(a,b)}function max$$module$dist$littlejs_esm_min_js_tmp(a,b){return Math.max(a,b)}function sign$$module$dist$littlejs_esm_min_js_tmp(a){return Math.sign(a)}function mod$$module$dist$littlejs_esm_min_js_tmp(a,b=1){return(a%b+b)%b}function clamp$$module$dist$littlejs_esm_min_js_tmp(a,b=0,c=1){return a<b?b:a>c?c:a}function percent$$module$dist$littlejs_esm_min_js_tmp(a,b,c){return(c-=b)?clamp$$module$dist$littlejs_esm_min_js_tmp((a-b)/c):0}function lerp$$module$dist$littlejs_esm_min_js_tmp(a,b,c){return b+clamp$$module$dist$littlejs_esm_min_js_tmp(a)*(c-b)}function distanceWrap$$module$dist$littlejs_esm_min_js_tmp(a,b,c=1){a=(a-b)%c;return 2*a%c-a}function lerpWrap$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d=1){return b+clamp$$module$dist$littlejs_esm_min_js_tmp(a)*distanceWrap$$module$dist$littlejs_esm_min_js_tmp(c,b,d)}function distanceAngle$$module$dist$littlejs_esm_min_js_tmp(a,b){return distanceWrap$$module$dist$littlejs_esm_min_js_tmp(a,b,2*PI$$module$dist$littlejs_esm_min_js_tmp)}function lerpAngle$$module$dist$littlejs_esm_min_js_tmp(a,b,c){return lerpWrap$$module$dist$littlejs_esm_min_js_tmp(a,b,c,2*PI$$module$dist$littlejs_esm_min_js_tmp)}function smoothStep$$module$dist$littlejs_esm_min_js_tmp(a){return a*a*(3-2*a)}function nearestPowerOfTwo$$module$dist$littlejs_esm_min_js_tmp(a){return 2**Math.ceil(Math.log2(a))}function isOverlapping$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d=vec2$$module$dist$littlejs_esm_min_js_tmp()){return 2*abs$$module$dist$littlejs_esm_min_js_tmp(a.x-c.x)<b.x+d.x&&2*abs$$module$dist$littlejs_esm_min_js_tmp(a.y-c.y)<b.y+d.y}function isIntersecting$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d){c=c.subtract(d.scale(.5));d=c.add(d);b=b.subtract(a);c=a.subtract(c);d=a.subtract(d);a=[-b.x,b.x,-b.y,b.y];b=[c.x,-d.x,c.y,-d.y];c=0;d=1;for(let e=4;e--;)if(a[e]){const f=b[e]/a[e];if(0>a[e]){if(f>d)return!1;c=max$$module$dist$littlejs_esm_min_js_tmp(f,c)}else{if(f<c)return!1;d=min$$module$dist$littlejs_esm_min_js_tmp(f,d)}}else if(0>b[e])return!1;return!0}function wave$$module$dist$littlejs_esm_min_js_tmp(a=1,b=1,c=time$$module$dist$littlejs_esm_min_js_tmp){return b/2*(1-Math.cos(c*a*2*PI$$module$dist$littlejs_esm_min_js_tmp))}function formatTime$$module$dist$littlejs_esm_min_js_tmp(a){return(a/60|0)+":"+(10>a%60?"0":"")+(a%60|0)}function rand$$module$dist$littlejs_esm_min_js_tmp(a=1,b=0){return b+Math.random()*(a-b)}function randInt$$module$dist$littlejs_esm_min_js_tmp(a,b=0){return Math.floor(rand$$module$dist$littlejs_esm_min_js_tmp(a,b))}function randSign$$module$dist$littlejs_esm_min_js_tmp(){return 2*randInt$$module$dist$littlejs_esm_min_js_tmp(2)-1}function randVector$$module$dist$littlejs_esm_min_js_tmp(a=1){return(new Vector2$$module$dist$littlejs_esm_min_js_tmp).setAngle(rand$$module$dist$littlejs_esm_min_js_tmp(2*PI$$module$dist$littlejs_esm_min_js_tmp),a)}function randInCircle$$module$dist$littlejs_esm_min_js_tmp(a=1,b=0){return 0<a?randVector$$module$dist$littlejs_esm_min_js_tmp(a*rand$$module$dist$littlejs_esm_min_js_tmp(b/a,1)**.5):new Vector2$$module$dist$littlejs_esm_min_js_tmp}function randColor$$module$dist$littlejs_esm_min_js_tmp(a=new Color$$module$dist$littlejs_esm_min_js_tmp,b=new Color$$module$dist$littlejs_esm_min_js_tmp(0,0,0,1),c=!1){return c?a.lerp(b,rand$$module$dist$littlejs_esm_min_js_tmp()):new Color$$module$dist$littlejs_esm_min_js_tmp(rand$$module$dist$littlejs_esm_min_js_tmp(a.r,b.r),rand$$module$dist$littlejs_esm_min_js_tmp(a.g,b.g),rand$$module$dist$littlejs_esm_min_js_tmp(a.b,b.b),rand$$module$dist$littlejs_esm_min_js_tmp(a.a,b.a))}class RandomGenerator$$module$dist$littlejs_esm_min_js_tmp{constructor(a){this.seed=a}float(a=1,b=0){this.seed^=this.seed<<13;this.seed^=this.seed>>>17;this.seed^=this.seed<<5;return b+(this.seed>>>0)/2**32*(a-b)}int(a,b=0){return Math.floor(this.float(a,b))}sign(){return.5<this.float()?1:-1}}function vec2$$module$dist$littlejs_esm_min_js_tmp(a=0,b){return new Vector2$$module$dist$littlejs_esm_min_js_tmp(a,void 0==b?a:b)}function isVector2$$module$dist$littlejs_esm_min_js_tmp(a){return a instanceof Vector2$$module$dist$littlejs_esm_min_js_tmp}class Vector2$$module$dist$littlejs_esm_min_js_tmp{constructor(a=0,b=0){this.x=a;this.y=b;ASSERT$$module$dist$littlejs_esm_min_js_tmp(this.isValid())}set(a=0,b=0){this.x=a;this.y=b;ASSERT$$module$dist$littlejs_esm_min_js_tmp(this.isValid());return this}copy(){return new Vector2$$module$dist$littlejs_esm_min_js_tmp(this.x,this.y)}add(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isVector2$$module$dist$littlejs_esm_min_js_tmp(a));return new Vector2$$module$dist$littlejs_esm_min_js_tmp(this.x+a.x,this.y+a.y)}subtract(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isVector2$$module$dist$littlejs_esm_min_js_tmp(a));return new Vector2$$module$dist$littlejs_esm_min_js_tmp(this.x-a.x,this.y-a.y)}multiply(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isVector2$$module$dist$littlejs_esm_min_js_tmp(a));return new Vector2$$module$dist$littlejs_esm_min_js_tmp(this.x*a.x,this.y*a.y)}divide(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isVector2$$module$dist$littlejs_esm_min_js_tmp(a));return new Vector2$$module$dist$littlejs_esm_min_js_tmp(this.x/a.x,this.y/a.y)}scale(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(!isVector2$$module$dist$littlejs_esm_min_js_tmp(a));return new Vector2$$module$dist$littlejs_esm_min_js_tmp(this.x*a,this.y*a)}length(){return this.lengthSquared()**.5}lengthSquared(){return this.x**2+this.y**2}distance(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isVector2$$module$dist$littlejs_esm_min_js_tmp(a));return this.distanceSquared(a)**.5}distanceSquared(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isVector2$$module$dist$littlejs_esm_min_js_tmp(a));return(this.x-a.x)**2+(this.y-a.y)**2}normalize(a=1){const b=this.length();return b?this.scale(a/b):new Vector2$$module$dist$littlejs_esm_min_js_tmp(0,a)}clampLength(a=1){const b=this.length();return b>a?this.scale(a/b):this}dot(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isVector2$$module$dist$littlejs_esm_min_js_tmp(a));return this.x*a.x+this.y*a.y}cross(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isVector2$$module$dist$littlejs_esm_min_js_tmp(a));return this.x*a.y-this.y*a.x}angle(){return Math.atan2(this.x,this.y)}setAngle(a=0,b=1){this.x=b*Math.sin(a);this.y=b*Math.cos(a);return this}rotate(a){const b=Math.cos(-a);a=Math.sin(-a);return new Vector2$$module$dist$littlejs_esm_min_js_tmp(this.x*b-this.y*a,this.x*a+this.y*b)}setDirection(a,b=1){a=mod$$module$dist$littlejs_esm_min_js_tmp(a,4);ASSERT$$module$dist$littlejs_esm_min_js_tmp(0==a||1==a||2==a||3==a);return vec2$$module$dist$littlejs_esm_min_js_tmp(a%2?a-1?-b:b:0,a%2?0:a?-b:b)}direction(){return abs$$module$dist$littlejs_esm_min_js_tmp(this.x)>abs$$module$dist$littlejs_esm_min_js_tmp(this.y)?0>this.x?3:1:0>this.y?2:0}invert(){return new Vector2$$module$dist$littlejs_esm_min_js_tmp(this.y,-this.x)}floor(){return new Vector2$$module$dist$littlejs_esm_min_js_tmp(Math.floor(this.x),Math.floor(this.y))}area(){return abs$$module$dist$littlejs_esm_min_js_tmp(this.x*this.y)}lerp(a,b){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isVector2$$module$dist$littlejs_esm_min_js_tmp(a));return this.add(a.subtract(this).scale(clamp$$module$dist$littlejs_esm_min_js_tmp(b)))}arrayCheck(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isVector2$$module$dist$littlejs_esm_min_js_tmp(a));return 0<=this.x&&0<=this.y&&this.x<a.x&&this.y<a.y}toString(a=3){if(debug$$module$dist$littlejs_esm_min_js_tmp)return`(${(0>this.x?"":" ")+this.x.toFixed(a)},${(0>this.y?"":" ")+this.y.toFixed(a)} )`}isValid(){return"number"==typeof this.x&&!isNaN(this.x)&&"number"==typeof this.y&&!isNaN(this.y)}}function rgb$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d){return new Color$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d)}function hsl$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d){return(new Color$$module$dist$littlejs_esm_min_js_tmp).setHSLA(a,b,c,d)}function isColor$$module$dist$littlejs_esm_min_js_tmp(a){return a instanceof Color$$module$dist$littlejs_esm_min_js_tmp}class Color$$module$dist$littlejs_esm_min_js_tmp{constructor(a=1,b=1,c=1,d=1){this.r=a;this.g=b;this.b=c;this.a=d;ASSERT$$module$dist$littlejs_esm_min_js_tmp(this.isValid())}set(a=1,b=1,c=1,d=1){this.r=a;this.g=b;this.b=c;this.a=d;ASSERT$$module$dist$littlejs_esm_min_js_tmp(this.isValid());return this}copy(){return new Color$$module$dist$littlejs_esm_min_js_tmp(this.r,this.g,this.b,this.a)}add(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isColor$$module$dist$littlejs_esm_min_js_tmp(a));return new Color$$module$dist$littlejs_esm_min_js_tmp(this.r+a.r,this.g+a.g,this.b+a.b,this.a+a.a)}subtract(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isColor$$module$dist$littlejs_esm_min_js_tmp(a));return new Color$$module$dist$littlejs_esm_min_js_tmp(this.r-a.r,this.g-a.g,this.b-a.b,this.a-a.a)}multiply(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isColor$$module$dist$littlejs_esm_min_js_tmp(a));return new Color$$module$dist$littlejs_esm_min_js_tmp(this.r*a.r,this.g*a.g,this.b*a.b,this.a*a.a)}divide(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isColor$$module$dist$littlejs_esm_min_js_tmp(a));return new Color$$module$dist$littlejs_esm_min_js_tmp(this.r/a.r,this.g/a.g,this.b/a.b,this.a/a.a)}scale(a,b=a){return new Color$$module$dist$littlejs_esm_min_js_tmp(this.r*a,this.g*a,this.b*a,this.a*b)}clamp(){return new Color$$module$dist$littlejs_esm_min_js_tmp(clamp$$module$dist$littlejs_esm_min_js_tmp(this.r),clamp$$module$dist$littlejs_esm_min_js_tmp(this.g),clamp$$module$dist$littlejs_esm_min_js_tmp(this.b),clamp$$module$dist$littlejs_esm_min_js_tmp(this.a))}lerp(a,b){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isColor$$module$dist$littlejs_esm_min_js_tmp(a));return this.add(a.subtract(this).scale(clamp$$module$dist$littlejs_esm_min_js_tmp(b)))}setHSLA(a=0,b=0,c=1,d=1){a=mod$$module$dist$littlejs_esm_min_js_tmp(a,1);b=clamp$$module$dist$littlejs_esm_min_js_tmp(b);c=clamp$$module$dist$littlejs_esm_min_js_tmp(c);b=.5>c?c*(1+b):c+b-c*b;c=2*c-b;const e=(f,g,h)=>1>6*(h=mod$$module$dist$littlejs_esm_min_js_tmp(h,1))?f+6*(g-f)*h:1>2*h?g:2>3*h?f+(g-f)*(4-6*h):f;this.r=e(c,b,a+1/3);this.g=e(c,b,a);this.b=e(c,b,a-1/3);this.a=d;ASSERT$$module$dist$littlejs_esm_min_js_tmp(this.isValid());return this}HSLA(){const a=clamp$$module$dist$littlejs_esm_min_js_tmp(this.r),b=clamp$$module$dist$littlejs_esm_min_js_tmp(this.g),c=clamp$$module$dist$littlejs_esm_min_js_tmp(this.b),d=clamp$$module$dist$littlejs_esm_min_js_tmp(this.a),e=Math.max(a,b,c),f=Math.min(a,b,c),g=(e+f)/2;let h=0,k=0;if(e!=f){let n=e-f;k=.5<g?n/(2-e-f):n/(e+f);a==e?h=(b-c)/n+(b<c?6:0):b==e?h=(c-a)/n+2:c==e&&(h=(a-b)/n+4)}return[h/6,k,g,d]}mutate(a=.05,b=0){return new Color$$module$dist$littlejs_esm_min_js_tmp(this.r+rand$$module$dist$littlejs_esm_min_js_tmp(a,-a),this.g+rand$$module$dist$littlejs_esm_min_js_tmp(a,-a),this.b+rand$$module$dist$littlejs_esm_min_js_tmp(a,-a),this.a+rand$$module$dist$littlejs_esm_min_js_tmp(b,-b)).clamp()}toString(a=!0){const b=c=>(16>(c=255*clamp$$module$dist$littlejs_esm_min_js_tmp(c)|0)?"0":"")+c.toString(16);return"#"+b(this.r)+b(this.g)+b(this.b)+(a?b(this.a):"")}setHex(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp("string"==typeof a&&"#"==a[0]);ASSERT$$module$dist$littlejs_esm_min_js_tmp([4,5,7,9].includes(a.length),"Invalid hex");6>a.length?(this.r=clamp$$module$dist$littlejs_esm_min_js_tmp(parseInt(a[1],16)/15),this.g=clamp$$module$dist$littlejs_esm_min_js_tmp(parseInt(a[2],16)/15),this.b=clamp$$module$dist$littlejs_esm_min_js_tmp(parseInt(a[3],16)/15),this.a=5==a.length?clamp$$module$dist$littlejs_esm_min_js_tmp(parseInt(a[4],16)/15):1):(this.r=clamp$$module$dist$littlejs_esm_min_js_tmp(parseInt(a.slice(1,3),16)/255),this.g=clamp$$module$dist$littlejs_esm_min_js_tmp(parseInt(a.slice(3,5),16)/255),this.b=clamp$$module$dist$littlejs_esm_min_js_tmp(parseInt(a.slice(5,7),16)/255),this.a=9==a.length?clamp$$module$dist$littlejs_esm_min_js_tmp(parseInt(a.slice(7,9),16)/255):1);ASSERT$$module$dist$littlejs_esm_min_js_tmp(this.isValid());return this}rgbaInt(){const a=255*clamp$$module$dist$littlejs_esm_min_js_tmp(this.r)|0,b=255*clamp$$module$dist$littlejs_esm_min_js_tmp(this.g)<<8,c=255*clamp$$module$dist$littlejs_esm_min_js_tmp(this.b)<<16,d=255*clamp$$module$dist$littlejs_esm_min_js_tmp(this.a)<<24;return a+b+c+d}isValid(){return"number"==typeof this.r&&!isNaN(this.r)&&"number"==typeof this.g&&!isNaN(this.g)&&"number"==typeof this.b&&!isNaN(this.b)&&"number"==typeof this.a&&!isNaN(this.a)}}const WHITE$$module$dist$littlejs_esm_min_js_tmp=rgb$$module$dist$littlejs_esm_min_js_tmp(),BLACK$$module$dist$littlejs_esm_min_js_tmp=rgb$$module$dist$littlejs_esm_min_js_tmp(0,0,0),GRAY$$module$dist$littlejs_esm_min_js_tmp=rgb$$module$dist$littlejs_esm_min_js_tmp(.5,.5,.5),RED$$module$dist$littlejs_esm_min_js_tmp=rgb$$module$dist$littlejs_esm_min_js_tmp(1,0,0),ORANGE$$module$dist$littlejs_esm_min_js_tmp=rgb$$module$dist$littlejs_esm_min_js_tmp(1,.5,0),YELLOW$$module$dist$littlejs_esm_min_js_tmp=rgb$$module$dist$littlejs_esm_min_js_tmp(1,1,0),GREEN$$module$dist$littlejs_esm_min_js_tmp=rgb$$module$dist$littlejs_esm_min_js_tmp(0,1,0),CYAN$$module$dist$littlejs_esm_min_js_tmp=rgb$$module$dist$littlejs_esm_min_js_tmp(0,1,1),BLUE$$module$dist$littlejs_esm_min_js_tmp=rgb$$module$dist$littlejs_esm_min_js_tmp(0,0,1),PURPLE$$module$dist$littlejs_esm_min_js_tmp=rgb$$module$dist$littlejs_esm_min_js_tmp(.5,0,1),MAGENTA$$module$dist$littlejs_esm_min_js_tmp=rgb$$module$dist$littlejs_esm_min_js_tmp(1,0,1);class Timer$$module$dist$littlejs_esm_min_js_tmp{constructor(a){this.time=void 0==a?void 0:time$$module$dist$littlejs_esm_min_js_tmp+a;this.setTime=a}set(a=0){this.time=time$$module$dist$littlejs_esm_min_js_tmp+a;this.setTime=a}unset(){this.time=void 0}isSet(){return void 0!=this.time}active(){return time$$module$dist$littlejs_esm_min_js_tmp<this.time}elapsed(){return time$$module$dist$littlejs_esm_min_js_tmp>=this.time}get(){return this.isSet()?time$$module$dist$littlejs_esm_min_js_tmp-this.time:0}getPercent(){return this.isSet()?1-percent$$module$dist$littlejs_esm_min_js_tmp(this.time-time$$module$dist$littlejs_esm_min_js_tmp,0,this.setTime):0}toString(){if(debug$$module$dist$littlejs_esm_min_js_tmp)return this.isSet()?Math.abs(this.get())+" seconds "+(0>this.get()?"before":"after"):"unset"}valueOf(){return this.get()}}let cameraPos$$module$dist$littlejs_esm_min_js_tmp=vec2$$module$dist$littlejs_esm_min_js_tmp(),cameraScale$$module$dist$littlejs_esm_min_js_tmp=32,canvasMaxSize$$module$dist$littlejs_esm_min_js_tmp=vec2$$module$dist$littlejs_esm_min_js_tmp(1920,1080),canvasFixedSize$$module$dist$littlejs_esm_min_js_tmp=vec2$$module$dist$littlejs_esm_min_js_tmp(),canvasPixelated$$module$dist$littlejs_esm_min_js_tmp=!0,tilesPixelated$$module$dist$littlejs_esm_min_js_tmp=!0,fontDefault$$module$dist$littlejs_esm_min_js_tmp="arial",showSplashScreen$$module$dist$littlejs_esm_min_js_tmp=!1,headlessMode$$module$dist$littlejs_esm_min_js_tmp=!1,glEnable$$module$dist$littlejs_esm_min_js_tmp=!0,glOverlay$$module$dist$littlejs_esm_min_js_tmp=!0,tileSizeDefault$$module$dist$littlejs_esm_min_js_tmp=vec2$$module$dist$littlejs_esm_min_js_tmp(16),tileFixBleedScale$$module$dist$littlejs_esm_min_js_tmp=0,enablePhysicsSolver$$module$dist$littlejs_esm_min_js_tmp=!0,objectDefaultMass$$module$dist$littlejs_esm_min_js_tmp=1,objectDefaultDamping$$module$dist$littlejs_esm_min_js_tmp=1,objectDefaultAngleDamping$$module$dist$littlejs_esm_min_js_tmp=1,objectDefaultElasticity$$module$dist$littlejs_esm_min_js_tmp=0,objectDefaultFriction$$module$dist$littlejs_esm_min_js_tmp=.8,objectMaxSpeed$$module$dist$littlejs_esm_min_js_tmp=1,gravity$$module$dist$littlejs_esm_min_js_tmp=0,particleEmitRateScale$$module$dist$littlejs_esm_min_js_tmp=1,gamepadsEnable$$module$dist$littlejs_esm_min_js_tmp=!0,gamepadDirectionEmulateStick$$module$dist$littlejs_esm_min_js_tmp=!0,inputWASDEmulateDirection$$module$dist$littlejs_esm_min_js_tmp=!0,touchInputEnable$$module$dist$littlejs_esm_min_js_tmp=!0,touchGamepadEnable$$module$dist$littlejs_esm_min_js_tmp=!1,touchGamepadAnalog$$module$dist$littlejs_esm_min_js_tmp=!0,touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp=99,touchGamepadAlpha$$module$dist$littlejs_esm_min_js_tmp=.3,vibrateEnable$$module$dist$littlejs_esm_min_js_tmp=!0,soundEnable$$module$dist$littlejs_esm_min_js_tmp=!0,soundVolume$$module$dist$littlejs_esm_min_js_tmp=.3,soundDefaultRange$$module$dist$littlejs_esm_min_js_tmp=40,soundDefaultTaper$$module$dist$littlejs_esm_min_js_tmp=.7,medalDisplayTime$$module$dist$littlejs_esm_min_js_tmp=5,medalDisplaySlideTime$$module$dist$littlejs_esm_min_js_tmp=.5,medalDisplaySize$$module$dist$littlejs_esm_min_js_tmp=vec2$$module$dist$littlejs_esm_min_js_tmp(640,80),medalsPreventUnlock$$module$dist$littlejs_esm_min_js_tmp=!1;function setCameraPos$$module$dist$littlejs_esm_min_js_tmp(a){cameraPos$$module$dist$littlejs_esm_min_js_tmp=a}function setCameraScale$$module$dist$littlejs_esm_min_js_tmp(a){cameraScale$$module$dist$littlejs_esm_min_js_tmp=a}function setCanvasMaxSize$$module$dist$littlejs_esm_min_js_tmp(a){canvasMaxSize$$module$dist$littlejs_esm_min_js_tmp=a}function setCanvasFixedSize$$module$dist$littlejs_esm_min_js_tmp(a){canvasFixedSize$$module$dist$littlejs_esm_min_js_tmp=a}function setCanvasPixelated$$module$dist$littlejs_esm_min_js_tmp(a){canvasPixelated$$module$dist$littlejs_esm_min_js_tmp=a}function setTilesPixelated$$module$dist$littlejs_esm_min_js_tmp(a){tilesPixelated$$module$dist$littlejs_esm_min_js_tmp=a}function setFontDefault$$module$dist$littlejs_esm_min_js_tmp(a){fontDefault$$module$dist$littlejs_esm_min_js_tmp=a}function setShowSplashScreen$$module$dist$littlejs_esm_min_js_tmp(a){showSplashScreen$$module$dist$littlejs_esm_min_js_tmp=a}function setHeadlessMode$$module$dist$littlejs_esm_min_js_tmp(a){headlessMode$$module$dist$littlejs_esm_min_js_tmp=a}function setGlEnable$$module$dist$littlejs_esm_min_js_tmp(a){glEnable$$module$dist$littlejs_esm_min_js_tmp=a}function setGlOverlay$$module$dist$littlejs_esm_min_js_tmp(a){glOverlay$$module$dist$littlejs_esm_min_js_tmp=a}function setTileSizeDefault$$module$dist$littlejs_esm_min_js_tmp(a){tileSizeDefault$$module$dist$littlejs_esm_min_js_tmp=a}function setTileFixBleedScale$$module$dist$littlejs_esm_min_js_tmp(a){tileFixBleedScale$$module$dist$littlejs_esm_min_js_tmp=a}function setEnablePhysicsSolver$$module$dist$littlejs_esm_min_js_tmp(a){enablePhysicsSolver$$module$dist$littlejs_esm_min_js_tmp=a}function setObjectDefaultMass$$module$dist$littlejs_esm_min_js_tmp(a){objectDefaultMass$$module$dist$littlejs_esm_min_js_tmp=a}function setObjectDefaultDamping$$module$dist$littlejs_esm_min_js_tmp(a){objectDefaultDamping$$module$dist$littlejs_esm_min_js_tmp=a}function setObjectDefaultAngleDamping$$module$dist$littlejs_esm_min_js_tmp(a){objectDefaultAngleDamping$$module$dist$littlejs_esm_min_js_tmp=a}function setObjectDefaultElasticity$$module$dist$littlejs_esm_min_js_tmp(a){objectDefaultElasticity$$module$dist$littlejs_esm_min_js_tmp=a}function setObjectDefaultFriction$$module$dist$littlejs_esm_min_js_tmp(a){objectDefaultFriction$$module$dist$littlejs_esm_min_js_tmp=a}function setObjectMaxSpeed$$module$dist$littlejs_esm_min_js_tmp(a){objectMaxSpeed$$module$dist$littlejs_esm_min_js_tmp=a}function setGravity$$module$dist$littlejs_esm_min_js_tmp(a){gravity$$module$dist$littlejs_esm_min_js_tmp=a}function setParticleEmitRateScale$$module$dist$littlejs_esm_min_js_tmp(a){particleEmitRateScale$$module$dist$littlejs_esm_min_js_tmp=a}function setGamepadsEnable$$module$dist$littlejs_esm_min_js_tmp(a){gamepadsEnable$$module$dist$littlejs_esm_min_js_tmp=a}function setGamepadDirectionEmulateStick$$module$dist$littlejs_esm_min_js_tmp(a){gamepadDirectionEmulateStick$$module$dist$littlejs_esm_min_js_tmp=a}function setInputWASDEmulateDirection$$module$dist$littlejs_esm_min_js_tmp(a){inputWASDEmulateDirection$$module$dist$littlejs_esm_min_js_tmp=a}function setTouchInputEnable$$module$dist$littlejs_esm_min_js_tmp(a){touchInputEnable$$module$dist$littlejs_esm_min_js_tmp=a}function setTouchGamepadEnable$$module$dist$littlejs_esm_min_js_tmp(a){touchGamepadEnable$$module$dist$littlejs_esm_min_js_tmp=a}function setTouchGamepadAnalog$$module$dist$littlejs_esm_min_js_tmp(a){touchGamepadAnalog$$module$dist$littlejs_esm_min_js_tmp=a}function setTouchGamepadSize$$module$dist$littlejs_esm_min_js_tmp(a){touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp=a}function setTouchGamepadAlpha$$module$dist$littlejs_esm_min_js_tmp(a){touchGamepadAlpha$$module$dist$littlejs_esm_min_js_tmp=a}function setVibrateEnable$$module$dist$littlejs_esm_min_js_tmp(a){vibrateEnable$$module$dist$littlejs_esm_min_js_tmp=a}function setSoundEnable$$module$dist$littlejs_esm_min_js_tmp(a){soundEnable$$module$dist$littlejs_esm_min_js_tmp=a}function setSoundVolume$$module$dist$littlejs_esm_min_js_tmp(a){soundVolume$$module$dist$littlejs_esm_min_js_tmp=a;soundEnable$$module$dist$littlejs_esm_min_js_tmp&&!headlessMode$$module$dist$littlejs_esm_min_js_tmp&&audioMasterGain$$module$dist$littlejs_esm_min_js_tmp&&(audioMasterGain$$module$dist$littlejs_esm_min_js_tmp.gain.value=a)}function setSoundDefaultRange$$module$dist$littlejs_esm_min_js_tmp(a){soundDefaultRange$$module$dist$littlejs_esm_min_js_tmp=a}function setSoundDefaultTaper$$module$dist$littlejs_esm_min_js_tmp(a){soundDefaultTaper$$module$dist$littlejs_esm_min_js_tmp=a}function setMedalDisplayTime$$module$dist$littlejs_esm_min_js_tmp(a){medalDisplayTime$$module$dist$littlejs_esm_min_js_tmp=a}function setMedalDisplaySlideTime$$module$dist$littlejs_esm_min_js_tmp(a){medalDisplaySlideTime$$module$dist$littlejs_esm_min_js_tmp=a}function setMedalDisplaySize$$module$dist$littlejs_esm_min_js_tmp(a){medalDisplaySize$$module$dist$littlejs_esm_min_js_tmp=a}function setMedalsPreventUnlock$$module$dist$littlejs_esm_min_js_tmp(a){medalsPreventUnlock$$module$dist$littlejs_esm_min_js_tmp=a}function setShowWatermark$$module$dist$littlejs_esm_min_js_tmp(a){showWatermark$$module$dist$littlejs_esm_min_js_tmp=a}function setDebugKey$$module$dist$littlejs_esm_min_js_tmp(a){debugKey$$module$dist$littlejs_esm_min_js_tmp=a}class EngineObject$$module$dist$littlejs_esm_min_js_tmp{constructor(a=vec2$$module$dist$littlejs_esm_min_js_tmp(),b=vec2$$module$dist$littlejs_esm_min_js_tmp(1),c,d=0,e=new Color$$module$dist$littlejs_esm_min_js_tmp,f=0){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isVector2$$module$dist$littlejs_esm_min_js_tmp(a)&&isVector2$$module$dist$littlejs_esm_min_js_tmp(b),"ensure pos and size are vec2s");ASSERT$$module$dist$littlejs_esm_min_js_tmp("number"!==typeof c||!c,"old style tile setup");this.pos=a.copy();this.size=b;this.drawSize=void 0;this.tileInfo=c;this.angle=d;this.color=e;this.additiveColor=void 0;this.mirror=!1;this.mass=objectDefaultMass$$module$dist$littlejs_esm_min_js_tmp;this.damping=objectDefaultDamping$$module$dist$littlejs_esm_min_js_tmp;this.angleDamping=objectDefaultAngleDamping$$module$dist$littlejs_esm_min_js_tmp;this.elasticity=objectDefaultElasticity$$module$dist$littlejs_esm_min_js_tmp;this.friction=objectDefaultFriction$$module$dist$littlejs_esm_min_js_tmp;this.gravityScale=1;this.renderOrder=f;this.velocity=vec2$$module$dist$littlejs_esm_min_js_tmp();this.angleVelocity=0;this.spawnTime=time$$module$dist$littlejs_esm_min_js_tmp;this.children=[];this.clampSpeedLinear=!0;this.parent=this.groundObject=void 0;this.localPos=vec2$$module$dist$littlejs_esm_min_js_tmp();this.localAngle=0;this.collideRaycast=this.isSolid=this.collideSolidObjects=this.collideTiles=!1;engineObjects$$module$dist$littlejs_esm_min_js_tmp.push(this)}updateTransforms(){const a=this.parent;if(a){const b=a.getMirrorSign();this.pos=this.localPos.multiply(vec2$$module$dist$littlejs_esm_min_js_tmp(b,1)).rotate(a.angle).add(a.pos);this.angle=b*this.localAngle+a.angle}for(const b of this.children)b.updateTransforms()}update(){if(!this.parent){if(this.clampSpeedLinear)this.velocity.x=clamp$$module$dist$littlejs_esm_min_js_tmp(this.velocity.x,-objectMaxSpeed$$module$dist$littlejs_esm_min_js_tmp,objectMaxSpeed$$module$dist$littlejs_esm_min_js_tmp),this.velocity.y=clamp$$module$dist$littlejs_esm_min_js_tmp(this.velocity.y,-objectMaxSpeed$$module$dist$littlejs_esm_min_js_tmp,objectMaxSpeed$$module$dist$littlejs_esm_min_js_tmp);else{var a=this.velocity.lengthSquared();a>objectMaxSpeed$$module$dist$littlejs_esm_min_js_tmp*objectMaxSpeed$$module$dist$littlejs_esm_min_js_tmp&&(a=objectMaxSpeed$$module$dist$littlejs_esm_min_js_tmp/a**.5,this.velocity.x*=a,this.velocity.y*=a)}a=this.pos.copy();this.velocity.x*=this.damping;this.velocity.y*=this.damping;this.mass&&(this.velocity.y+=gravity$$module$dist$littlejs_esm_min_js_tmp*this.gravityScale);this.pos.x+=this.velocity.x;this.pos.y+=this.velocity.y;this.angle+=this.angleVelocity*=this.angleDamping;ASSERT$$module$dist$littlejs_esm_min_js_tmp(0<=this.angleDamping&&1>=this.angleDamping);ASSERT$$module$dist$littlejs_esm_min_js_tmp(0<=this.damping&&1>=this.damping);if(enablePhysicsSolver$$module$dist$littlejs_esm_min_js_tmp&&this.mass){var b=0>this.velocity.y;if(this.groundObject){var c=this.groundObject!=this&&this.groundObject.velocity?this.groundObject.velocity.x:0;this.velocity.x=c+(this.velocity.x-c)*this.friction;this.groundObject=void 0}if(this.collideSolidObjects)for(var d of engineObjectsCollide$$module$dist$littlejs_esm_min_js_tmp){if(!this.isSolid&&!d.isSolid||d.destroyed||d.parent||d==this)continue;if(!isOverlapping$$module$dist$littlejs_esm_min_js_tmp(this.pos,this.size,d.pos,d.size))continue;c=this.collideWithObject(d);var e=d.collideWithObject(this);if(!c||!e)continue;if(isOverlapping$$module$dist$littlejs_esm_min_js_tmp(a,this.size,d.pos,d.size)){c=a.subtract(d.pos);e=c.length();c=.01>e?randVector$$module$dist$littlejs_esm_min_js_tmp(.001):c.scale(.001/e);this.velocity=this.velocity.add(c);d.mass&&(d.velocity=d.velocity.subtract(c));debugOverlay$$module$dist$littlejs_esm_min_js_tmp&&debugPhysics$$module$dist$littlejs_esm_min_js_tmp&&debugOverlap$$module$dist$littlejs_esm_min_js_tmp(this.pos,this.size,d.pos,d.size,"#f00");continue}e=this.size.add(d.size);var f=2*(a.y-d.pos.y)>e.y+gravity$$module$dist$littlejs_esm_min_js_tmp;const h=2*abs$$module$dist$littlejs_esm_min_js_tmp(a.y-d.pos.y)<e.y;var g=2*abs$$module$dist$littlejs_esm_min_js_tmp(a.x-d.pos.x)<e.x;c=max$$module$dist$littlejs_esm_min_js_tmp(this.elasticity,d.elasticity);if(f||g||!h)if(this.pos.y=d.pos.y+(e.y/2+.001)*sign$$module$dist$littlejs_esm_min_js_tmp(a.y-d.pos.y),d.groundObject&&b||!d.mass)b&&(this.groundObject=d),this.velocity.y*=-c;else if(d.mass){g=(this.mass*this.velocity.y+d.mass*d.velocity.y)/(this.mass+d.mass);const k=d.velocity.y*(d.mass-this.mass)/(this.mass+d.mass)+2*this.velocity.y*this.mass/(this.mass+d.mass);this.velocity.y=lerp$$module$dist$littlejs_esm_min_js_tmp(c,g,this.velocity.y*(this.mass-d.mass)/(this.mass+d.mass)+2*d.velocity.y*d.mass/(this.mass+d.mass));d.velocity.y=lerp$$module$dist$littlejs_esm_min_js_tmp(c,g,k)}!f&&h&&(this.pos.x=d.pos.x+(e.x/2+.001)*sign$$module$dist$littlejs_esm_min_js_tmp(a.x-d.pos.x),d.mass?(e=(this.mass*this.velocity.x+d.mass*d.velocity.x)/(this.mass+d.mass),f=d.velocity.x*(d.mass-this.mass)/(this.mass+d.mass)+2*this.velocity.x*this.mass/(this.mass+d.mass),this.velocity.x=lerp$$module$dist$littlejs_esm_min_js_tmp(c,e,this.velocity.x*(this.mass-d.mass)/(this.mass+d.mass)+2*d.velocity.x*d.mass/(this.mass+d.mass)),d.velocity.x=lerp$$module$dist$littlejs_esm_min_js_tmp(c,e,f)):this.velocity.x*=-c);debugOverlay$$module$dist$littlejs_esm_min_js_tmp&&debugPhysics$$module$dist$littlejs_esm_min_js_tmp&&debugOverlap$$module$dist$littlejs_esm_min_js_tmp(this.pos,this.size,d.pos,d.size,"#f0f")}if(this.collideTiles&&tileCollisionTest$$module$dist$littlejs_esm_min_js_tmp(this.pos,this.size,this)&&!tileCollisionTest$$module$dist$littlejs_esm_min_js_tmp(a,this.size,this)){d=tileCollisionTest$$module$dist$littlejs_esm_min_js_tmp(vec2$$module$dist$littlejs_esm_min_js_tmp(a.x,this.pos.y),this.size,this);c=tileCollisionTest$$module$dist$littlejs_esm_min_js_tmp(vec2$$module$dist$littlejs_esm_min_js_tmp(this.pos.x,a.y),this.size,this);if(d||!c)this.velocity.y*=-this.elasticity,b?(this.pos.y=(a.y-this.size.y/2|0)+this.size.y/2+1e-4,this.groundObject=this):(this.pos.y=a.y,this.groundObject=void 0);c&&(this.pos.x=a.x,this.velocity.x*=-this.elasticity);debugOverlay$$module$dist$littlejs_esm_min_js_tmp&&debugPhysics$$module$dist$littlejs_esm_min_js_tmp&&debugRect$$module$dist$littlejs_esm_min_js_tmp(this.pos,this.size,"#f00")}}}}render(){drawTile$$module$dist$littlejs_esm_min_js_tmp(this.pos,this.drawSize||this.size,this.tileInfo,this.color,this.angle,this.mirror,this.additiveColor)}destroy(){if(!this.destroyed){this.destroyed=1;this.parent&&this.parent.removeChild(this);for(const a of this.children)a.destroy(a.parent=0)}}localToWorld(a){return this.pos.add(a.rotate(this.angle))}worldToLocal(a){return a.subtract(this.pos).rotate(-this.angle)}localToWorldVector(a){return a.rotate(this.angle)}worldToLocalVector(a){return a.rotate(-this.angle)}collideWithTile(a,b){return 0<a}collideWithObject(a){return!0}getAliveTime(){return time$$module$dist$littlejs_esm_min_js_tmp-this.spawnTime}applyAcceleration(a){this.mass&&(this.velocity=this.velocity.add(a))}applyForce(a){this.applyAcceleration(a.scale(1/this.mass))}getMirrorSign(){return this.mirror?-1:1}addChild(a,b=vec2$$module$dist$littlejs_esm_min_js_tmp(),c=0){ASSERT$$module$dist$littlejs_esm_min_js_tmp(!a.parent&&!this.children.includes(a));this.children.push(a);a.parent=this;a.localPos=b.copy();a.localAngle=c}removeChild(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(a.parent==this&&this.children.includes(a));this.children.splice(this.children.indexOf(a),1);a.parent=0}setCollision(a=!0,b=!0,c=!0,d=!0){ASSERT$$module$dist$littlejs_esm_min_js_tmp(a||!b,"solid objects must be set to collide");this.collideSolidObjects=a;this.isSolid=b;this.collideTiles=c;this.collideRaycast=d}toString(){if(debug$$module$dist$littlejs_esm_min_js_tmp){let a="type = "+this.constructor.name;if(this.pos.x||this.pos.y)a+="\npos = "+this.pos;if(this.velocity.x||this.velocity.y)a+="\nvelocity = "+this.velocity;if(this.size.x||this.size.y)a+="\nsize = "+this.size;this.angle&&(a+="\nangle = "+this.angle.toFixed(3));this.color&&(a+="\ncolor = "+this.color);return a}}renderDebugInfo(){if(debug$$module$dist$littlejs_esm_min_js_tmp){const a=vec2$$module$dist$littlejs_esm_min_js_tmp(max$$module$dist$littlejs_esm_min_js_tmp(this.size.x,.2),max$$module$dist$littlejs_esm_min_js_tmp(this.size.y,.2)),b=rgb$$module$dist$littlejs_esm_min_js_tmp(this.collideTiles?1:0,this.collideSolidObjects?1:0,this.isSolid?1:0,this.parent?.2:.5),c=this.parent?rgb$$module$dist$littlejs_esm_min_js_tmp(1,1,1,.5):rgb$$module$dist$littlejs_esm_min_js_tmp(0,0,0,.8);drawRect$$module$dist$littlejs_esm_min_js_tmp(this.pos,a,b,this.angle,!1);drawRect$$module$dist$littlejs_esm_min_js_tmp(this.pos,a.scale(.8),c,this.angle,!1);this.parent&&drawLine$$module$dist$littlejs_esm_min_js_tmp(this.pos,this.parent.pos,.1,rgb$$module$dist$littlejs_esm_min_js_tmp(0,0,1,.5),!1)}}}let mainCanvas$$module$dist$littlejs_esm_min_js_tmp,mainContext$$module$dist$littlejs_esm_min_js_tmp,overlayCanvas$$module$dist$littlejs_esm_min_js_tmp,overlayContext$$module$dist$littlejs_esm_min_js_tmp,mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp=vec2$$module$dist$littlejs_esm_min_js_tmp(),textureInfos$$module$dist$littlejs_esm_min_js_tmp=[],drawCount$$module$dist$littlejs_esm_min_js_tmp;function tile$$module$dist$littlejs_esm_min_js_tmp(a=vec2$$module$dist$littlejs_esm_min_js_tmp(),b=tileSizeDefault$$module$dist$littlejs_esm_min_js_tmp,c=0,d=0){if(headlessMode$$module$dist$littlejs_esm_min_js_tmp)return new TileInfo$$module$dist$littlejs_esm_min_js_tmp;"number"===typeof b&&(ASSERT$$module$dist$littlejs_esm_min_js_tmp(0<b),b=vec2$$module$dist$littlejs_esm_min_js_tmp(b));var e=textureInfos$$module$dist$littlejs_esm_min_js_tmp[c];ASSERT$$module$dist$littlejs_esm_min_js_tmp(!!e,"Texture not loaded");const f=b.add(vec2$$module$dist$littlejs_esm_min_js_tmp(2*d));"number"===typeof a&&(e=e.size.x/f.x|0,a=0<e?vec2$$module$dist$littlejs_esm_min_js_tmp(a%e,a/e|0):vec2$$module$dist$littlejs_esm_min_js_tmp());a=vec2$$module$dist$littlejs_esm_min_js_tmp(a.x*f.x+d,a.y*f.y+d);return new TileInfo$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d)}class TileInfo$$module$dist$littlejs_esm_min_js_tmp{constructor(a=vec2$$module$dist$littlejs_esm_min_js_tmp(),b=tileSizeDefault$$module$dist$littlejs_esm_min_js_tmp,c=0,d=0){this.pos=a.copy();this.size=b.copy();this.textureIndex=c;this.padding=d}offset(a){return new TileInfo$$module$dist$littlejs_esm_min_js_tmp(this.pos.add(a),this.size,this.textureIndex)}frame(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp("number"==typeof a);return this.offset(vec2$$module$dist$littlejs_esm_min_js_tmp(a*(this.size.x+2*this.padding),0))}getTextureInfo(){return textureInfos$$module$dist$littlejs_esm_min_js_tmp[this.textureIndex]}}class TextureInfo$$module$dist$littlejs_esm_min_js_tmp{constructor(a){this.image=a;this.size=vec2$$module$dist$littlejs_esm_min_js_tmp(a.width,a.height);this.sizeInverse=vec2$$module$dist$littlejs_esm_min_js_tmp(1/a.width,1/a.height);this.glTexture=glEnable$$module$dist$littlejs_esm_min_js_tmp&&glCreateTexture$$module$dist$littlejs_esm_min_js_tmp(a)}}function screenToWorld$$module$dist$littlejs_esm_min_js_tmp(a){return new Vector2$$module$dist$littlejs_esm_min_js_tmp((a.x-mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp.x/2+.5)/cameraScale$$module$dist$littlejs_esm_min_js_tmp+cameraPos$$module$dist$littlejs_esm_min_js_tmp.x,(a.y-mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp.y/2+.5)/-cameraScale$$module$dist$littlejs_esm_min_js_tmp+cameraPos$$module$dist$littlejs_esm_min_js_tmp.y)}function worldToScreen$$module$dist$littlejs_esm_min_js_tmp(a){return new Vector2$$module$dist$littlejs_esm_min_js_tmp((a.x-cameraPos$$module$dist$littlejs_esm_min_js_tmp.x)*cameraScale$$module$dist$littlejs_esm_min_js_tmp+mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp.x/2-.5,(a.y-cameraPos$$module$dist$littlejs_esm_min_js_tmp.y)*-cameraScale$$module$dist$littlejs_esm_min_js_tmp+mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp.y/2-.5)}function getCameraSize$$module$dist$littlejs_esm_min_js_tmp(){return mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp.scale(1/cameraScale$$module$dist$littlejs_esm_min_js_tmp)}function drawTile$$module$dist$littlejs_esm_min_js_tmp(a,b=vec2$$module$dist$littlejs_esm_min_js_tmp(1),c,d=new Color$$module$dist$littlejs_esm_min_js_tmp,e=0,f,g,h=glEnable$$module$dist$littlejs_esm_min_js_tmp,k,n){ASSERT$$module$dist$littlejs_esm_min_js_tmp(!n||!h,"context only supported in canvas 2D mode");ASSERT$$module$dist$littlejs_esm_min_js_tmp("number"!==typeof c||!c,"this is an old style calls, to fix replace it with tile(tileIndex, tileSize)");ASSERT$$module$dist$littlejs_esm_min_js_tmp(isVector2$$module$dist$littlejs_esm_min_js_tmp(a)&&isVector2$$module$dist$littlejs_esm_min_js_tmp(b));ASSERT$$module$dist$littlejs_esm_min_js_tmp(isColor$$module$dist$littlejs_esm_min_js_tmp(d)&&(!g||isColor$$module$dist$littlejs_esm_min_js_tmp(g)));const l=c&&c.getTextureInfo();if(h)if(k&&(a=screenToWorld$$module$dist$littlejs_esm_min_js_tmp(a),b=b.scale(1/cameraScale$$module$dist$littlejs_esm_min_js_tmp)),l){var m=l.sizeInverse;h=c.pos.x*m.x;k=c.pos.y*m.y;n=c.size.x*m.x;const r=c.size.y*m.y;glSetTexture$$module$dist$littlejs_esm_min_js_tmp(l.glTexture);if(tileFixBleedScale$$module$dist$littlejs_esm_min_js_tmp){const p=m.x*tileFixBleedScale$$module$dist$littlejs_esm_min_js_tmp;m=m.y*tileFixBleedScale$$module$dist$littlejs_esm_min_js_tmp;glDraw$$module$dist$littlejs_esm_min_js_tmp(a.x,a.y,f?-b.x:b.x,b.y,e,h+p,k+m,h-p+n,k-m+r,d.rgbaInt(),g&&g.rgbaInt())}else glDraw$$module$dist$littlejs_esm_min_js_tmp(a.x,a.y,f?-b.x:b.x,b.y,e,h,k,h+n,k+r,d.rgbaInt(),g&&g.rgbaInt())}else glDraw$$module$dist$littlejs_esm_min_js_tmp(a.x,a.y,b.x,b.y,e,0,0,0,0,0,d.rgbaInt());else showWatermark$$module$dist$littlejs_esm_min_js_tmp&&++drawCount$$module$dist$littlejs_esm_min_js_tmp,b=vec2$$module$dist$littlejs_esm_min_js_tmp(b.x,-b.y),drawCanvas2D$$module$dist$littlejs_esm_min_js_tmp(a,b,e,f,r=>{if(l){const p=c.pos.x+tileFixBleedScale$$module$dist$littlejs_esm_min_js_tmp,q=c.pos.y+tileFixBleedScale$$module$dist$littlejs_esm_min_js_tmp,t=c.size.x-2*tileFixBleedScale$$module$dist$littlejs_esm_min_js_tmp,u=c.size.y-2*tileFixBleedScale$$module$dist$littlejs_esm_min_js_tmp;r.globalAlpha=d.a;r.drawImage(l.image,p,q,t,u,-.5,-.5,1,1);r.globalAlpha=1}else r.fillStyle=d.toString(),r.fillRect(-.5,-.5,1,1)},k,n)}function drawRect$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d,e,f,g){drawTile$$module$dist$littlejs_esm_min_js_tmp(a,b,void 0,c,d,!1,void 0,e,f,g)}function drawLine$$module$dist$littlejs_esm_min_js_tmp(a,b,c=.1,d,e,f,g){b=vec2$$module$dist$littlejs_esm_min_js_tmp((b.x-a.x)/2,(b.y-a.y)/2);c=vec2$$module$dist$littlejs_esm_min_js_tmp(c,2*b.length());drawRect$$module$dist$littlejs_esm_min_js_tmp(a.add(b),c,d,b.angle(),e,f,g)}function drawPoly$$module$dist$littlejs_esm_min_js_tmp(a,b=new Color$$module$dist$littlejs_esm_min_js_tmp,c=0,d=new Color$$module$dist$littlejs_esm_min_js_tmp(0,0,0),e,f=mainContext$$module$dist$littlejs_esm_min_js_tmp){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isColor$$module$dist$littlejs_esm_min_js_tmp(b)&&isColor$$module$dist$littlejs_esm_min_js_tmp(d));f.fillStyle=b.toString();f.beginPath();for(const g of e?a:a.map(worldToScreen$$module$dist$littlejs_esm_min_js_tmp))f.lineTo(g.x,g.y);f.closePath();f.fill();c&&(f.strokeStyle=d.toString(),f.lineWidth=e?c:c*cameraScale$$module$dist$littlejs_esm_min_js_tmp,f.stroke())}function drawEllipse$$module$dist$littlejs_esm_min_js_tmp(a,b=1,c=1,d=0,e=new Color$$module$dist$littlejs_esm_min_js_tmp,f=0,g=new Color$$module$dist$littlejs_esm_min_js_tmp(0,0,0),h,k=mainContext$$module$dist$littlejs_esm_min_js_tmp){ASSERT$$module$dist$littlejs_esm_min_js_tmp(isColor$$module$dist$littlejs_esm_min_js_tmp(e)&&isColor$$module$dist$littlejs_esm_min_js_tmp(g));h||(a=worldToScreen$$module$dist$littlejs_esm_min_js_tmp(a),b*=cameraScale$$module$dist$littlejs_esm_min_js_tmp,c*=cameraScale$$module$dist$littlejs_esm_min_js_tmp,f*=cameraScale$$module$dist$littlejs_esm_min_js_tmp);k.fillStyle=e.toString();k.beginPath();k.ellipse(a.x,a.y,b,c,d,0,9);k.fill();f&&(k.strokeStyle=g.toString(),k.lineWidth=f,k.stroke())}function drawCircle$$module$dist$littlejs_esm_min_js_tmp(a,b=1,c=new Color$$module$dist$littlejs_esm_min_js_tmp,d=0,e=new Color$$module$dist$littlejs_esm_min_js_tmp(0,0,0),f,g=mainContext$$module$dist$littlejs_esm_min_js_tmp){drawEllipse$$module$dist$littlejs_esm_min_js_tmp(a,b,b,0,c,d,e,f,g)}function drawCanvas2D$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d,e,f,g=mainContext$$module$dist$littlejs_esm_min_js_tmp){f||(a=worldToScreen$$module$dist$littlejs_esm_min_js_tmp(a),b=b.scale(cameraScale$$module$dist$littlejs_esm_min_js_tmp));g.save();g.translate(a.x+.5,a.y+.5);g.rotate(c);g.scale(d?-b.x:b.x,-b.y);e(g);g.restore()}function drawText$$module$dist$littlejs_esm_min_js_tmp(a,b,c=1,d,e=0,f,g,h,k,n=mainContext$$module$dist$littlejs_esm_min_js_tmp){drawTextScreen$$module$dist$littlejs_esm_min_js_tmp(a,worldToScreen$$module$dist$littlejs_esm_min_js_tmp(b),c*cameraScale$$module$dist$littlejs_esm_min_js_tmp,d,e*cameraScale$$module$dist$littlejs_esm_min_js_tmp,f,g,h,k,n)}function drawTextOverlay$$module$dist$littlejs_esm_min_js_tmp(a,b,c=1,d,e=0,f,g,h,k){drawText$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d,e,f,g,h,k,overlayContext$$module$dist$littlejs_esm_min_js_tmp)}function drawTextScreen$$module$dist$littlejs_esm_min_js_tmp(a,b,c=1,d=new Color$$module$dist$littlejs_esm_min_js_tmp,e=0,f=new Color$$module$dist$littlejs_esm_min_js_tmp(0,0,0),g="center",h=fontDefault$$module$dist$littlejs_esm_min_js_tmp,k,n=overlayContext$$module$dist$littlejs_esm_min_js_tmp){n.fillStyle=d.toString();n.strokeStyle=f.toString();n.lineWidth=e;n.textAlign=g;n.font=c+"px "+h;n.textBaseline="middle";n.lineJoin="round";a=(a+"").split("\n");b=b.copy();b.y-=(a.length-1)*c/2;a.forEach(l=>{e&&n.strokeText(l,b.x,b.y,k);n.fillText(l,b.x,b.y,k);b.y+=c})}function setBlendMode$$module$dist$littlejs_esm_min_js_tmp(a,b=glEnable$$module$dist$littlejs_esm_min_js_tmp,c){ASSERT$$module$dist$littlejs_esm_min_js_tmp(!c||!b,"context only supported in canvas 2D mode");b?glAdditive$$module$dist$littlejs_esm_min_js_tmp=a:(c||=mainContext$$module$dist$littlejs_esm_min_js_tmp,c.globalCompositeOperation=a?"lighter":"source-over")}function combineCanvases$$module$dist$littlejs_esm_min_js_tmp(){glCopyToContext$$module$dist$littlejs_esm_min_js_tmp(mainContext$$module$dist$littlejs_esm_min_js_tmp,!0);mainContext$$module$dist$littlejs_esm_min_js_tmp.drawImage(overlayCanvas$$module$dist$littlejs_esm_min_js_tmp,0,0);glClearCanvas$$module$dist$littlejs_esm_min_js_tmp();overlayCanvas$$module$dist$littlejs_esm_min_js_tmp.width|=0}let engineFontImage$$module$dist$littlejs_esm_min_js_tmp;class FontImage$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b=vec2$$module$dist$littlejs_esm_min_js_tmp(8),c=vec2$$module$dist$littlejs_esm_min_js_tmp(0,1),d=overlayContext$$module$dist$littlejs_esm_min_js_tmp){engineFontImage$$module$dist$littlejs_esm_min_js_tmp||(engineFontImage$$module$dist$littlejs_esm_min_js_tmp=new Image,engineFontImage$$module$dist$littlejs_esm_min_js_tmp.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAAYAQAAAAA9+x6JAAAAAnRSTlMAAHaTzTgAAAGiSURBVHjaZZABhxxBEIUf6ECLBdFY+Q0PMNgf0yCgsSAGZcT9sgIPtBWwIA5wgAPEoHUyJeeSlW+gjK+fegWwtROWpVQEyWh2npdpBmTUFVhb29RINgLIukoXr5LIAvYQ5ve+1FqWEMqNKTX3FAJHyQDRZvmKWubAACcv5z5Gtg2oyCWE+Yk/8JZQX1jTTCpKAFGIgza+dJCNBF2UskRlsgwitHbSV0QLgt9sTPtsRlvJjEr8C/FARWA2bJ/TtJ7lko34dNDn6usJUMzuErP89UUBJbWeozrwLLncXczd508deAjLWipLO4Q5XGPcJvPu92cNDaN0P5G1FL0nSOzddZOrJ6rNhbXGmeDvO3TF7DeJWl4bvaYQTNHCTeuqKZmbjHaSOFes+IX/+IhHrnAkXOAsfn24EM68XieIECoccD4KZLk/odiwzeo2rovYdhvb2HYFgyznJyDpYJdYOmfXgVdJTaUi4xA2uWYNYec9BLeqdl9EsoTw582mSFDX2DxVLbNt9U3YYoeatBad1c2Tj8t2akrjaIGJNywKB/7h75/gN3vCMSaadIUTAAAAAElFTkSuQmCC");this.image=a||engineFontImage$$module$dist$littlejs_esm_min_js_tmp;this.tileSize=b;this.paddingSize=c;this.context=d}drawText(a,b,c=1,d){this.drawTextScreen(a,worldToScreen$$module$dist$littlejs_esm_min_js_tmp(b).floor(),c*cameraScale$$module$dist$littlejs_esm_min_js_tmp|0,d)}drawTextScreen(a,b,c=4,d){const e=this.context;e.save();const f=this.tileSize,g=f.add(this.paddingSize).scale(c),h=this.image.width/this.tileSize.x|0;(a+"").split("\n").forEach((k,n)=>{const l=d?k.length*f.x*c/2|0:0;for(let p=k.length;p--;){var m=k[p].charCodeAt(0);if(32>m||127<m)m=127;var r=m-32;m=r%h;r=r/h|0;const q=b.add(vec2$$module$dist$littlejs_esm_min_js_tmp(p,n).multiply(g));e.drawImage(this.image,m*f.x,r*f.y,f.x,f.y,q.x-l,q.y,f.x*c,f.y*c)}});e.restore()}}function isFullscreen$$module$dist$littlejs_esm_min_js_tmp(){return!!document.fullscreenElement}function toggleFullscreen$$module$dist$littlejs_esm_min_js_tmp(){const a=mainCanvas$$module$dist$littlejs_esm_min_js_tmp.parentElement;isFullscreen$$module$dist$littlejs_esm_min_js_tmp()?document.exitFullscreen&&document.exitFullscreen():a.requestFullscreen&&a.requestFullscreen()}function setCursor$$module$dist$littlejs_esm_min_js_tmp(a="auto"){mainCanvas$$module$dist$littlejs_esm_min_js_tmp.parentElement.style.cursor=a}function keyIsDown$$module$dist$littlejs_esm_min_js_tmp(a,b=0){ASSERT$$module$dist$littlejs_esm_min_js_tmp(0<b||"number"!==typeof a||3>a,"use code string for keyboard");return inputData$$module$dist$littlejs_esm_min_js_tmp[b]&&!!(inputData$$module$dist$littlejs_esm_min_js_tmp[b][a]&1)}function keyWasPressed$$module$dist$littlejs_esm_min_js_tmp(a,b=0){ASSERT$$module$dist$littlejs_esm_min_js_tmp(0<b||"number"!==typeof a||3>a,"use code string for keyboard");return inputData$$module$dist$littlejs_esm_min_js_tmp[b]&&!!(inputData$$module$dist$littlejs_esm_min_js_tmp[b][a]&2)}function keyWasReleased$$module$dist$littlejs_esm_min_js_tmp(a,b=0){ASSERT$$module$dist$littlejs_esm_min_js_tmp(0<b||"number"!==typeof a||3>a,"use code string for keyboard");return inputData$$module$dist$littlejs_esm_min_js_tmp[b]&&!!(inputData$$module$dist$littlejs_esm_min_js_tmp[b][a]&4)}function keyDirection$$module$dist$littlejs_esm_min_js_tmp(a="ArrowUp",b="ArrowDown",c="ArrowLeft",d="ArrowRight"){return vec2$$module$dist$littlejs_esm_min_js_tmp((keyIsDown$$module$dist$littlejs_esm_min_js_tmp(d)?1:0)-(keyIsDown$$module$dist$littlejs_esm_min_js_tmp(c)?1:0),(keyIsDown$$module$dist$littlejs_esm_min_js_tmp(a)?1:0)-(keyIsDown$$module$dist$littlejs_esm_min_js_tmp(b)?1:0))}function clearInput$$module$dist$littlejs_esm_min_js_tmp(){inputData$$module$dist$littlejs_esm_min_js_tmp=[[]];touchGamepadButtons$$module$dist$littlejs_esm_min_js_tmp=[]}const mouseIsDown$$module$dist$littlejs_esm_min_js_tmp=keyIsDown$$module$dist$littlejs_esm_min_js_tmp,mouseWasPressed$$module$dist$littlejs_esm_min_js_tmp=keyWasPressed$$module$dist$littlejs_esm_min_js_tmp,mouseWasReleased$$module$dist$littlejs_esm_min_js_tmp=keyWasReleased$$module$dist$littlejs_esm_min_js_tmp;let mousePos$$module$dist$littlejs_esm_min_js_tmp=vec2$$module$dist$littlejs_esm_min_js_tmp(),mousePosScreen$$module$dist$littlejs_esm_min_js_tmp=vec2$$module$dist$littlejs_esm_min_js_tmp(),mouseWheel$$module$dist$littlejs_esm_min_js_tmp=0,isUsingGamepad$$module$dist$littlejs_esm_min_js_tmp=!1,inputPreventDefault$$module$dist$littlejs_esm_min_js_tmp=!0;function setInputPreventDefault$$module$dist$littlejs_esm_min_js_tmp(a){inputPreventDefault$$module$dist$littlejs_esm_min_js_tmp=a}function gamepadIsDown$$module$dist$littlejs_esm_min_js_tmp(a,b=0){return keyIsDown$$module$dist$littlejs_esm_min_js_tmp(a,b+1)}function gamepadWasPressed$$module$dist$littlejs_esm_min_js_tmp(a,b=0){return keyWasPressed$$module$dist$littlejs_esm_min_js_tmp(a,b+1)}function gamepadWasReleased$$module$dist$littlejs_esm_min_js_tmp(a,b=0){return keyWasReleased$$module$dist$littlejs_esm_min_js_tmp(a,b+1)}function gamepadStick$$module$dist$littlejs_esm_min_js_tmp(a,b=0){return gamepadStickData$$module$dist$littlejs_esm_min_js_tmp[b]?gamepadStickData$$module$dist$littlejs_esm_min_js_tmp[b][a]||vec2$$module$dist$littlejs_esm_min_js_tmp():vec2$$module$dist$littlejs_esm_min_js_tmp()}let inputData$$module$dist$littlejs_esm_min_js_tmp=[[]];function inputUpdate$$module$dist$littlejs_esm_min_js_tmp(){headlessMode$$module$dist$littlejs_esm_min_js_tmp||(touchInputEnable$$module$dist$littlejs_esm_min_js_tmp&&isTouchDevice$$module$dist$littlejs_esm_min_js_tmp||document.hasFocus()||clearInput$$module$dist$littlejs_esm_min_js_tmp(),mousePos$$module$dist$littlejs_esm_min_js_tmp=screenToWorld$$module$dist$littlejs_esm_min_js_tmp(mousePosScreen$$module$dist$littlejs_esm_min_js_tmp),gamepadsUpdate$$module$dist$littlejs_esm_min_js_tmp())}function inputUpdatePost$$module$dist$littlejs_esm_min_js_tmp(){if(!headlessMode$$module$dist$littlejs_esm_min_js_tmp){for(const a of inputData$$module$dist$littlejs_esm_min_js_tmp)for(const b in a)a[b]&=1;mouseWheel$$module$dist$littlejs_esm_min_js_tmp=0}}function inputInit$$module$dist$littlejs_esm_min_js_tmp(){function a(b){return inputWASDEmulateDirection$$module$dist$littlejs_esm_min_js_tmp?"KeyW"==b?"ArrowUp":"KeyS"==b?"ArrowDown":"KeyA"==b?"ArrowLeft":"KeyD"==b?"ArrowRight":b:b}headlessMode$$module$dist$littlejs_esm_min_js_tmp||(onkeydown=b=>{b.repeat||(isUsingGamepad$$module$dist$littlejs_esm_min_js_tmp=!1,inputData$$module$dist$littlejs_esm_min_js_tmp[0][b.code]=3,inputWASDEmulateDirection$$module$dist$littlejs_esm_min_js_tmp&&(inputData$$module$dist$littlejs_esm_min_js_tmp[0][a(b.code)]=3))},onkeyup=b=>{inputData$$module$dist$littlejs_esm_min_js_tmp[0][b.code]=4;inputWASDEmulateDirection$$module$dist$littlejs_esm_min_js_tmp&&(inputData$$module$dist$littlejs_esm_min_js_tmp[0][a(b.code)]=4)},onmousedown=b=>{soundEnable$$module$dist$littlejs_esm_min_js_tmp&&!headlessMode$$module$dist$littlejs_esm_min_js_tmp&&audioContext$$module$dist$littlejs_esm_min_js_tmp&&"running"!=audioContext$$module$dist$littlejs_esm_min_js_tmp.state&&audioContext$$module$dist$littlejs_esm_min_js_tmp.resume();isUsingGamepad$$module$dist$littlejs_esm_min_js_tmp=!1;inputData$$module$dist$littlejs_esm_min_js_tmp[0][b.button]=3;mousePosScreen$$module$dist$littlejs_esm_min_js_tmp=mouseEventToScreen$$module$dist$littlejs_esm_min_js_tmp(b);inputPreventDefault$$module$dist$littlejs_esm_min_js_tmp&&b.button&&b.preventDefault()},onmouseup=b=>inputData$$module$dist$littlejs_esm_min_js_tmp[0][b.button]=inputData$$module$dist$littlejs_esm_min_js_tmp[0][b.button]&2|4,onmousemove=b=>mousePosScreen$$module$dist$littlejs_esm_min_js_tmp=mouseEventToScreen$$module$dist$littlejs_esm_min_js_tmp(b),onwheel=b=>mouseWheel$$module$dist$littlejs_esm_min_js_tmp=b.ctrlKey?0:sign$$module$dist$littlejs_esm_min_js_tmp(b.deltaY),oncontextmenu=b=>!1,onblur=b=>clearInput$$module$dist$littlejs_esm_min_js_tmp(),isTouchDevice$$module$dist$littlejs_esm_min_js_tmp&&touchInputEnable$$module$dist$littlejs_esm_min_js_tmp&&touchInputInit$$module$dist$littlejs_esm_min_js_tmp())}function mouseEventToScreen$$module$dist$littlejs_esm_min_js_tmp(a){const b=mainCanvas$$module$dist$littlejs_esm_min_js_tmp.getBoundingClientRect(),c=percent$$module$dist$littlejs_esm_min_js_tmp(a.x,b.left,b.right);a=percent$$module$dist$littlejs_esm_min_js_tmp(a.y,b.top,b.bottom);return vec2$$module$dist$littlejs_esm_min_js_tmp(c*mainCanvas$$module$dist$littlejs_esm_min_js_tmp.width,a*mainCanvas$$module$dist$littlejs_esm_min_js_tmp.height)}const gamepadStickData$$module$dist$littlejs_esm_min_js_tmp=[];function gamepadsUpdate$$module$dist$littlejs_esm_min_js_tmp(){const a=g=>{const h=k=>.3<k?percent$$module$dist$littlejs_esm_min_js_tmp(k,.3,.8):-.3>k?-percent$$module$dist$littlejs_esm_min_js_tmp(-k,.3,.8):0;return vec2$$module$dist$littlejs_esm_min_js_tmp(h(g.x),h(-g.y)).clampLength()};if(touchGamepadEnable$$module$dist$littlejs_esm_min_js_tmp&&isTouchDevice$$module$dist$littlejs_esm_min_js_tmp&&(ASSERT$$module$dist$littlejs_esm_min_js_tmp(touchGamepadButtons$$module$dist$littlejs_esm_min_js_tmp,"set touchGamepadEnable before calling init!"),touchGamepadTimer$$module$dist$littlejs_esm_min_js_tmp.isSet())){var b=gamepadStickData$$module$dist$littlejs_esm_min_js_tmp[0]||(gamepadStickData$$module$dist$littlejs_esm_min_js_tmp[0]=[]);b[0]=vec2$$module$dist$littlejs_esm_min_js_tmp();touchGamepadAnalog$$module$dist$littlejs_esm_min_js_tmp?b[0]=a(touchGamepadStick$$module$dist$littlejs_esm_min_js_tmp):.3<touchGamepadStick$$module$dist$littlejs_esm_min_js_tmp.lengthSquared()&&(b[0].x=Math.round(touchGamepadStick$$module$dist$littlejs_esm_min_js_tmp.x),b[0].y=-Math.round(touchGamepadStick$$module$dist$littlejs_esm_min_js_tmp.y),b[0]=b[0].clampLength());b=inputData$$module$dist$littlejs_esm_min_js_tmp[1]||(inputData$$module$dist$littlejs_esm_min_js_tmp[1]=[]);for(var c=10;c--;){var d=3==c?2:2==c?3:c,e=gamepadIsDown$$module$dist$littlejs_esm_min_js_tmp(d,0);b[d]=touchGamepadButtons$$module$dist$littlejs_esm_min_js_tmp[c]?e?1:3:e?4:0}}if(gamepadsEnable$$module$dist$littlejs_esm_min_js_tmp&&navigator&&navigator.getGamepads&&(debug$$module$dist$littlejs_esm_min_js_tmp||document.hasFocus()))for(b=navigator.getGamepads(),c=b.length;c--;){e=b[c];const g=inputData$$module$dist$littlejs_esm_min_js_tmp[c+1]||(inputData$$module$dist$littlejs_esm_min_js_tmp[c+1]=[]);d=gamepadStickData$$module$dist$littlejs_esm_min_js_tmp[c]||(gamepadStickData$$module$dist$littlejs_esm_min_js_tmp[c]=[]);if(e){for(var f=0;f<e.axes.length-1;f+=2)d[f>>1]=a(vec2$$module$dist$littlejs_esm_min_js_tmp(e.axes[f],e.axes[f+1]));for(f=e.buttons.length;f--;){const h=e.buttons[f],k=gamepadIsDown$$module$dist$littlejs_esm_min_js_tmp(f,c);g[f]=h.pressed?k?1:3:k?4:0;isUsingGamepad$$module$dist$littlejs_esm_min_js_tmp||=!c&&h.pressed}gamepadDirectionEmulateStick$$module$dist$littlejs_esm_min_js_tmp&&(e=vec2$$module$dist$littlejs_esm_min_js_tmp((gamepadIsDown$$module$dist$littlejs_esm_min_js_tmp(15,c)&&1)-(gamepadIsDown$$module$dist$littlejs_esm_min_js_tmp(14,c)&&1),(gamepadIsDown$$module$dist$littlejs_esm_min_js_tmp(12,c)&&1)-(gamepadIsDown$$module$dist$littlejs_esm_min_js_tmp(13,c)&&1)),e.lengthSquared()&&(d[0]=e.clampLength()));touchGamepadEnable$$module$dist$littlejs_esm_min_js_tmp&&isUsingGamepad$$module$dist$littlejs_esm_min_js_tmp&&touchGamepadTimer$$module$dist$littlejs_esm_min_js_tmp.unset()}}}function vibrate$$module$dist$littlejs_esm_min_js_tmp(a=100){vibrateEnable$$module$dist$littlejs_esm_min_js_tmp&&!headlessMode$$module$dist$littlejs_esm_min_js_tmp&&navigator&&navigator.vibrate&&navigator.vibrate(a)}function vibrateStop$$module$dist$littlejs_esm_min_js_tmp(){vibrate$$module$dist$littlejs_esm_min_js_tmp(0)}const isTouchDevice$$module$dist$littlejs_esm_min_js_tmp=!headlessMode$$module$dist$littlejs_esm_min_js_tmp&&void 0!==window.ontouchstart;let touchGamepadTimer$$module$dist$littlejs_esm_min_js_tmp=new Timer$$module$dist$littlejs_esm_min_js_tmp,touchGamepadButtons$$module$dist$littlejs_esm_min_js_tmp,touchGamepadStick$$module$dist$littlejs_esm_min_js_tmp;function touchInputInit$$module$dist$littlejs_esm_min_js_tmp(){function a(e){soundEnable$$module$dist$littlejs_esm_min_js_tmp&&!headlessMode$$module$dist$littlejs_esm_min_js_tmp&&audioContext$$module$dist$littlejs_esm_min_js_tmp&&"running"!=audioContext$$module$dist$littlejs_esm_min_js_tmp.state&&audioContext$$module$dist$littlejs_esm_min_js_tmp.resume();const f=e.touches.length;if(f){const g=vec2$$module$dist$littlejs_esm_min_js_tmp(e.touches[0].clientX,e.touches[0].clientY);mousePosScreen$$module$dist$littlejs_esm_min_js_tmp=mouseEventToScreen$$module$dist$littlejs_esm_min_js_tmp(g);d?isUsingGamepad$$module$dist$littlejs_esm_min_js_tmp=touchGamepadEnable$$module$dist$littlejs_esm_min_js_tmp:inputData$$module$dist$littlejs_esm_min_js_tmp[0][0]=3}else d&&(inputData$$module$dist$littlejs_esm_min_js_tmp[0][0]=inputData$$module$dist$littlejs_esm_min_js_tmp[0][0]&2|4);d=f;inputPreventDefault$$module$dist$littlejs_esm_min_js_tmp&&document.hasFocus()&&e.preventDefault();return!0}function b(e){touchGamepadStick$$module$dist$littlejs_esm_min_js_tmp=vec2$$module$dist$littlejs_esm_min_js_tmp();touchGamepadButtons$$module$dist$littlejs_esm_min_js_tmp=[];isUsingGamepad$$module$dist$littlejs_esm_min_js_tmp=!0;if(e.touches.length&&(touchGamepadTimer$$module$dist$littlejs_esm_min_js_tmp.set(),paused$$module$dist$littlejs_esm_min_js_tmp&&!d)){touchGamepadButtons$$module$dist$littlejs_esm_min_js_tmp[9]=1;a(e);return}const f=vec2$$module$dist$littlejs_esm_min_js_tmp(touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp,mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp.y-touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp),g=mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp.subtract(vec2$$module$dist$littlejs_esm_min_js_tmp(touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp,touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp)),h=mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp.scale(.5);for(const n of e.touches){var k=mouseEventToScreen$$module$dist$littlejs_esm_min_js_tmp(vec2$$module$dist$littlejs_esm_min_js_tmp(n.clientX,n.clientY));k.distance(f)<touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp?touchGamepadStick$$module$dist$littlejs_esm_min_js_tmp=k.subtract(f).scale(2/touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp).clampLength():k.distance(g)<touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp?(k=k.subtract(g).direction(),touchGamepadButtons$$module$dist$littlejs_esm_min_js_tmp[k]=1):k.distance(h)<touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp&&!d&&(touchGamepadButtons$$module$dist$littlejs_esm_min_js_tmp[9]=1)}a(e);return!0}let c=a;touchGamepadEnable$$module$dist$littlejs_esm_min_js_tmp&&(c=b,touchGamepadButtons$$module$dist$littlejs_esm_min_js_tmp=[],touchGamepadStick$$module$dist$littlejs_esm_min_js_tmp=vec2$$module$dist$littlejs_esm_min_js_tmp());document.addEventListener("touchstart",e=>c(e),{passive:!1});document.addEventListener("touchmove",e=>c(e),{passive:!1});document.addEventListener("touchend",e=>c(e),{passive:!1});onmousedown=onmouseup=()=>0;let d}function touchGamepadRender$$module$dist$littlejs_esm_min_js_tmp(){if(touchInputEnable$$module$dist$littlejs_esm_min_js_tmp&&isTouchDevice$$module$dist$littlejs_esm_min_js_tmp&&!headlessMode$$module$dist$littlejs_esm_min_js_tmp&&touchGamepadEnable$$module$dist$littlejs_esm_min_js_tmp&&touchGamepadTimer$$module$dist$littlejs_esm_min_js_tmp.isSet()){var a=percent$$module$dist$littlejs_esm_min_js_tmp(touchGamepadTimer$$module$dist$littlejs_esm_min_js_tmp.get(),4,3);if(a&&!paused$$module$dist$littlejs_esm_min_js_tmp){var b=overlayContext$$module$dist$littlejs_esm_min_js_tmp;b.save();b.globalAlpha=a*touchGamepadAlpha$$module$dist$littlejs_esm_min_js_tmp;b.strokeStyle="#fff";b.lineWidth=3;b.fillStyle=0<touchGamepadStick$$module$dist$littlejs_esm_min_js_tmp.lengthSquared()?"#fff":"#000";b.beginPath();a=vec2$$module$dist$littlejs_esm_min_js_tmp(touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp,mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp.y-touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp);if(touchGamepadAnalog$$module$dist$littlejs_esm_min_js_tmp)b.arc(a.x,a.y,touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp/2,0,9),b.fill();else for(var c=10;c--;){var d=c*PI$$module$dist$littlejs_esm_min_js_tmp/4;b.arc(a.x,a.y,.6*touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp,d+PI$$module$dist$littlejs_esm_min_js_tmp/8,d+PI$$module$dist$littlejs_esm_min_js_tmp/8);c%2&&b.arc(a.x,a.y,.33*touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp,d,d);1==c&&b.fill()}b.stroke();a=vec2$$module$dist$littlejs_esm_min_js_tmp(mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp.x-touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp,mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp.y-touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp);for(c=4;c--;)d=a.add(vec2$$module$dist$littlejs_esm_min_js_tmp().setDirection(c,touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp/2)),b.fillStyle=touchGamepadButtons$$module$dist$littlejs_esm_min_js_tmp[c]?"#fff":"#000",b.beginPath(),b.arc(d.x,d.y,touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp/4,0,9),b.fill(),b.stroke();b.restore()}}}let audioContext$$module$dist$littlejs_esm_min_js_tmp=new AudioContext,audioMasterGain$$module$dist$littlejs_esm_min_js_tmp;function audioInit$$module$dist$littlejs_esm_min_js_tmp(){soundEnable$$module$dist$littlejs_esm_min_js_tmp&&!headlessMode$$module$dist$littlejs_esm_min_js_tmp&&(audioMasterGain$$module$dist$littlejs_esm_min_js_tmp=audioContext$$module$dist$littlejs_esm_min_js_tmp.createGain(),audioMasterGain$$module$dist$littlejs_esm_min_js_tmp.connect(audioContext$$module$dist$littlejs_esm_min_js_tmp.destination),audioMasterGain$$module$dist$littlejs_esm_min_js_tmp.gain.value=soundVolume$$module$dist$littlejs_esm_min_js_tmp)}class Sound$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b=soundDefaultRange$$module$dist$littlejs_esm_min_js_tmp,c=soundDefaultTaper$$module$dist$littlejs_esm_min_js_tmp){soundEnable$$module$dist$littlejs_esm_min_js_tmp&&!headlessMode$$module$dist$littlejs_esm_min_js_tmp&&(this.range=b,this.taper=c,this.randomness=0,a&&(this.randomness=void 0!=a[1]?a[1]:.05,a[1]=0,this.sampleChannels=[zzfxG$$module$dist$littlejs_esm_min_js_tmp(...a)],this.sampleRate=zzfxR$$module$dist$littlejs_esm_min_js_tmp))}play(a,b=1,c=1,d=1,e=!1){if(soundEnable$$module$dist$littlejs_esm_min_js_tmp&&!headlessMode$$module$dist$littlejs_esm_min_js_tmp&&this.sampleChannels){var f;if(a){if(f=this.range){const g=cameraPos$$module$dist$littlejs_esm_min_js_tmp.distanceSquared(a);if(g>f*f)return;b*=percent$$module$dist$littlejs_esm_min_js_tmp(g**.5,f,f*this.taper)}f=2*worldToScreen$$module$dist$littlejs_esm_min_js_tmp(a).x/mainCanvas$$module$dist$littlejs_esm_min_js_tmp.width-1}a=c+c*this.randomness*d*rand$$module$dist$littlejs_esm_min_js_tmp(-1,1);this.gainNode=audioContext$$module$dist$littlejs_esm_min_js_tmp.createGain();return this.source=playSamples$$module$dist$littlejs_esm_min_js_tmp(this.sampleChannels,b,a,f,e,this.sampleRate,this.gainNode)}}setVolume(a=1){this.gainNode&&(this.gainNode.gain.value=a)}stop(){this.source&&this.source.stop();this.source=void 0}getSource(){return this.source}playNote(a,b,c){return this.play(b,c,2**(a/12),0)}getDuration(){return this.sampleChannels&&this.sampleChannels[0].length/this.sampleRate}isLoading(){return!this.sampleChannels}}class SoundWave$$module$dist$littlejs_esm_min_js_tmp extends Sound$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b=0,c,d,e){super(void 0,c,d);soundEnable$$module$dist$littlejs_esm_min_js_tmp&&!headlessMode$$module$dist$littlejs_esm_min_js_tmp&&(this.randomness=b,fetch(a).then(f=>f.arrayBuffer()).then(f=>audioContext$$module$dist$littlejs_esm_min_js_tmp.decodeAudioData(f)).then(f=>{this.sampleChannels=[];for(let g=f.numberOfChannels;g--;)this.sampleChannels[g]=Array.from(f.getChannelData(g));this.sampleRate=f.sampleRate}).then(()=>e&&e(this)))}}function playAudioFile$$module$dist$littlejs_esm_min_js_tmp(a,b=1,c=!1){if(soundEnable$$module$dist$littlejs_esm_min_js_tmp&&!headlessMode$$module$dist$littlejs_esm_min_js_tmp)return new SoundWave$$module$dist$littlejs_esm_min_js_tmp(a,0,0,0,d=>d.play(void 0,b,1,1,c))}function speak$$module$dist$littlejs_esm_min_js_tmp(a,b="",c=1,d=1,e=1){if(soundEnable$$module$dist$littlejs_esm_min_js_tmp&&!headlessMode$$module$dist$littlejs_esm_min_js_tmp&&speechSynthesis)return a=new SpeechSynthesisUtterance(a),a.lang=b,a.volume=2*c*soundVolume$$module$dist$littlejs_esm_min_js_tmp,a.rate=d,a.pitch=e,speechSynthesis.speak(a),a}function speakStop$$module$dist$littlejs_esm_min_js_tmp(){speechSynthesis&&speechSynthesis.cancel()}function getNoteFrequency$$module$dist$littlejs_esm_min_js_tmp(a,b=220){return b*2**(a/12)}function playSamples$$module$dist$littlejs_esm_min_js_tmp(a,b=1,c=1,d=0,e=!1,f=zzfxR$$module$dist$littlejs_esm_min_js_tmp,g){if(soundEnable$$module$dist$littlejs_esm_min_js_tmp&&!headlessMode$$module$dist$littlejs_esm_min_js_tmp){var h=audioContext$$module$dist$littlejs_esm_min_js_tmp.createBuffer(a.length,a[0].length,f),k=audioContext$$module$dist$littlejs_esm_min_js_tmp.createBufferSource();a.forEach((n,l)=>h.getChannelData(l).set(n));k.buffer=h;k.playbackRate.value=c;k.loop=e;g=g||audioContext$$module$dist$littlejs_esm_min_js_tmp.createGain();g.gain.value=b;g.connect(audioMasterGain$$module$dist$littlejs_esm_min_js_tmp);a=new StereoPannerNode(audioContext$$module$dist$littlejs_esm_min_js_tmp,{pan:clamp$$module$dist$littlejs_esm_min_js_tmp(d,-1,1)});k.connect(a).connect(g);"running"!=audioContext$$module$dist$littlejs_esm_min_js_tmp.state?audioContext$$module$dist$littlejs_esm_min_js_tmp.resume().then(()=>k.start()):k.start();return k}}function zzfx$$module$dist$littlejs_esm_min_js_tmp(...a){return playSamples$$module$dist$littlejs_esm_min_js_tmp([zzfxG$$module$dist$littlejs_esm_min_js_tmp(...a)])}const zzfxR$$module$dist$littlejs_esm_min_js_tmp=44100;function zzfxG$$module$dist$littlejs_esm_min_js_tmp(a=1,b=.05,c=220,d=0,e=0,f=.1,g=0,h=1,k=0,n=0,l=0,m=0,r=0,p=0,q=0,t=0,u=0,A=1,y=0,C=0,B=0){var v=zzfxR$$module$dist$littlejs_esm_min_js_tmp;let w=2*PI$$module$dist$littlejs_esm_min_js_tmp,D=k*=500*w/v/v;b=c*=(1+rand$$module$dist$littlejs_esm_min_js_tmp(b,-b))*w/v;let G=0,J=0,H=0,E=1,K=[],F=0,x=0,z=0,O;var M=w*abs$$module$dist$littlejs_esm_min_js_tmp(B)*2/v,L=Math.cos(M),N=Math.sin(M)/2/2,I=1+N;M=-2*L/I;N=(1-N)/I;let P=(1+sign$$module$dist$littlejs_esm_min_js_tmp(B)*L)/2/I;L=-(sign$$module$dist$littlejs_esm_min_js_tmp(B)+L)/I;let Q=I=0,R=0,S=0;d=d*v||9;y*=v;e*=v;f*=v;u*=v;n*=500*w/v**3;q*=w/v;l*=w/v;m*=v;r=r*v|0;for(v=d+y+e+f+u|0;x<v;K[x++]=z*a)++H%(100*t|0)||(z=g?1<g?2<g?3<g?4<g?F/w%1<h/2?1:-1:Math.sin(F**3):Math.max(Math.min(Math.tan(F),1),-1):1-(2*F/w%2+2)%2:1-4*abs$$module$dist$littlejs_esm_min_js_tmp(Math.round(F/w)-F/w):Math.sin(F),z=(r?1-C+C*Math.sin(w*x/r):1)*(4<g?z:sign$$module$dist$littlejs_esm_min_js_tmp(z)*abs$$module$dist$littlejs_esm_min_js_tmp(z)**h)*(x<d?x/d:x<d+y?1-(x-d)/y*(1-A):x<d+y+e?A:x<v-u?(v-x-u)/f*A:0),z=u?z/2+(u>x?0:(x<v-u?1:(v-x)/u)*K[x-u|0]/2/a):z,B&&(z=S=P*I+L*(I=Q)+P*(Q=z)-N*R-M*(R=S))),O=(c+=k+=n)*Math.cos(q*G++),F+=O+O*p*Math.sin(x**5),E&&++E>m&&(c+=l,b+=l,E=0),!r||++J%r||(c=b,k=D,E||=1);return K}let tileCollision$$module$dist$littlejs_esm_min_js_tmp=[],tileCollisionSize$$module$dist$littlejs_esm_min_js_tmp=vec2$$module$dist$littlejs_esm_min_js_tmp();function initTileCollision$$module$dist$littlejs_esm_min_js_tmp(a){tileCollisionSize$$module$dist$littlejs_esm_min_js_tmp=a;tileCollision$$module$dist$littlejs_esm_min_js_tmp=[];for(a=tileCollision$$module$dist$littlejs_esm_min_js_tmp.length=tileCollisionSize$$module$dist$littlejs_esm_min_js_tmp.area();a--;)tileCollision$$module$dist$littlejs_esm_min_js_tmp[a]=0}function setTileCollisionData$$module$dist$littlejs_esm_min_js_tmp(a,b=0){a.arrayCheck(tileCollisionSize$$module$dist$littlejs_esm_min_js_tmp)&&(tileCollision$$module$dist$littlejs_esm_min_js_tmp[(a.y|0)*tileCollisionSize$$module$dist$littlejs_esm_min_js_tmp.x+a.x|0]=b)}function getTileCollisionData$$module$dist$littlejs_esm_min_js_tmp(a){return a.arrayCheck(tileCollisionSize$$module$dist$littlejs_esm_min_js_tmp)?tileCollision$$module$dist$littlejs_esm_min_js_tmp[(a.y|0)*tileCollisionSize$$module$dist$littlejs_esm_min_js_tmp.x+a.x|0]:0}function tileCollisionTest$$module$dist$littlejs_esm_min_js_tmp(a,b=vec2$$module$dist$littlejs_esm_min_js_tmp(),c){const d=max$$module$dist$littlejs_esm_min_js_tmp(a.x-b.x/2|0,0);var e=max$$module$dist$littlejs_esm_min_js_tmp(a.y-b.y/2|0,0);const f=min$$module$dist$littlejs_esm_min_js_tmp(a.x+b.x/2,tileCollisionSize$$module$dist$littlejs_esm_min_js_tmp.x);for(a=min$$module$dist$littlejs_esm_min_js_tmp(a.y+b.y/2,tileCollisionSize$$module$dist$littlejs_esm_min_js_tmp.y);e<a;++e)for(b=d;b<f;++b){const g=tileCollision$$module$dist$littlejs_esm_min_js_tmp[e*tileCollisionSize$$module$dist$littlejs_esm_min_js_tmp.x+b];if(g&&(!c||c.collideWithTile(g,vec2$$module$dist$littlejs_esm_min_js_tmp(b,e))))return!0}return!1}function tileCollisionRaycast$$module$dist$littlejs_esm_min_js_tmp(a,b,c){const d=b.subtract(a),e=d.length();var f=d.normalize();f=vec2$$module$dist$littlejs_esm_min_js_tmp(abs$$module$dist$littlejs_esm_min_js_tmp(1/f.x),abs$$module$dist$littlejs_esm_min_js_tmp(1/f.y));let g=a.floor(),h=f.x*(0>d.x?a.x-g.x:g.x-a.x+1),k=f.y*(0>d.y?a.y-g.y:g.y-a.y+1);for(;;){const n=getTileCollisionData$$module$dist$littlejs_esm_min_js_tmp(g);if(n&&(!c||c.collideWithTile(n,g)))return debugRaycast$$module$dist$littlejs_esm_min_js_tmp&&debugLine$$module$dist$littlejs_esm_min_js_tmp(a,b,"#f00",.02),debugRaycast$$module$dist$littlejs_esm_min_js_tmp&&debugPoint$$module$dist$littlejs_esm_min_js_tmp(g.add(vec2$$module$dist$littlejs_esm_min_js_tmp(.5)),"#ff0"),g.add(vec2$$module$dist$littlejs_esm_min_js_tmp(.5));if(h>e&&k>e)break;h>k?(g.y+=sign$$module$dist$littlejs_esm_min_js_tmp(d.y),k+=f.y):(g.x+=sign$$module$dist$littlejs_esm_min_js_tmp(d.x),h+=f.x)}debugRaycast$$module$dist$littlejs_esm_min_js_tmp&&debugLine$$module$dist$littlejs_esm_min_js_tmp(a,b,"#00f",.02)}class TileLayerData$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b=0,c=!1,d=new Color$$module$dist$littlejs_esm_min_js_tmp){this.tile=a;this.direction=b;this.mirror=c;this.color=d}clear(){this.tile=this.direction=0;this.mirror=!1;this.color=new Color$$module$dist$littlejs_esm_min_js_tmp}}class TileLayer$$module$dist$littlejs_esm_min_js_tmp extends EngineObject$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b=tileCollisionSize$$module$dist$littlejs_esm_min_js_tmp,c=tile$$module$dist$littlejs_esm_min_js_tmp(),d=vec2$$module$dist$littlejs_esm_min_js_tmp(1),e=0){super(a,b,c,0,void 0,e);this.canvas=document.createElement("canvas");this.context=this.canvas.getContext("2d");this.scale=d;this.isOverlay=!1;this.data=[];for(a=this.size.area();a--;)this.data.push(new TileLayerData$$module$dist$littlejs_esm_min_js_tmp);headlessMode$$module$dist$littlejs_esm_min_js_tmp&&(this.redraw=()=>{},this.render=()=>{},this.redrawStart=()=>{},this.redrawEnd=()=>{},this.drawTileData=()=>{},this.drawCanvas2D=()=>{})}setData(a,b,c=!1){a.arrayCheck(this.size)&&(this.data[(a.y|0)*this.size.x+a.x|0]=b,c&&this.drawTileData(a))}getData(a){return a.arrayCheck(this.size)&&this.data[(a.y|0)*this.size.x+a.x|0]}update(){}render(){ASSERT$$module$dist$littlejs_esm_min_js_tmp(mainContext$$module$dist$littlejs_esm_min_js_tmp!=this.context,"must call redrawEnd() after drawing tiles");glOverlay$$module$dist$littlejs_esm_min_js_tmp||this.isOverlay||glCopyToContext$$module$dist$littlejs_esm_min_js_tmp(mainContext$$module$dist$littlejs_esm_min_js_tmp);let a=worldToScreen$$module$dist$littlejs_esm_min_js_tmp(this.pos.add(vec2$$module$dist$littlejs_esm_min_js_tmp(0,this.size.y*this.scale.y)));a=a.floor();(this.isOverlay?overlayContext$$module$dist$littlejs_esm_min_js_tmp:mainContext$$module$dist$littlejs_esm_min_js_tmp).drawImage(this.canvas,a.x,a.y,cameraScale$$module$dist$littlejs_esm_min_js_tmp*this.size.x*this.scale.x,cameraScale$$module$dist$littlejs_esm_min_js_tmp*this.size.y*this.scale.y)}redraw(){this.redrawStart(!0);for(let a=this.size.x;a--;)for(let b=this.size.y;b--;)this.drawTileData(vec2$$module$dist$littlejs_esm_min_js_tmp(a,b),!1);this.redrawEnd()}redrawStart(a=!1){this.savedRenderSettings=[mainCanvas$$module$dist$littlejs_esm_min_js_tmp,mainContext$$module$dist$littlejs_esm_min_js_tmp,mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp,cameraPos$$module$dist$littlejs_esm_min_js_tmp,cameraScale$$module$dist$littlejs_esm_min_js_tmp];mainCanvas$$module$dist$littlejs_esm_min_js_tmp=this.canvas;mainContext$$module$dist$littlejs_esm_min_js_tmp=this.context;mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp=this.size.multiply(this.tileInfo.size);cameraPos$$module$dist$littlejs_esm_min_js_tmp=this.size.scale(.5);cameraScale$$module$dist$littlejs_esm_min_js_tmp=this.tileInfo.size.x;a&&(mainCanvas$$module$dist$littlejs_esm_min_js_tmp.width=mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp.x,mainCanvas$$module$dist$littlejs_esm_min_js_tmp.height=mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp.y);this.context.imageSmoothingEnabled=!tilesPixelated$$module$dist$littlejs_esm_min_js_tmp;glPreRender$$module$dist$littlejs_esm_min_js_tmp()}redrawEnd(){ASSERT$$module$dist$littlejs_esm_min_js_tmp(mainContext$$module$dist$littlejs_esm_min_js_tmp==this.context,"must call redrawStart() before drawing tiles");glCopyToContext$$module$dist$littlejs_esm_min_js_tmp(mainContext$$module$dist$littlejs_esm_min_js_tmp,!0);[mainCanvas$$module$dist$littlejs_esm_min_js_tmp,mainContext$$module$dist$littlejs_esm_min_js_tmp,mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp,cameraPos$$module$dist$littlejs_esm_min_js_tmp,cameraScale$$module$dist$littlejs_esm_min_js_tmp]=this.savedRenderSettings}drawTileData(a,b=!0){var c=this.tileInfo.size;b&&(b=a.multiply(c),this.context.clearRect(b.x,this.canvas.height-b.y,c.x,-c.y));b=this.getData(a);void 0!=b.tile&&(ASSERT$$module$dist$littlejs_esm_min_js_tmp(mainContext$$module$dist$littlejs_esm_min_js_tmp==this.context,"must call redrawStart() before drawing tiles"),a=a.add(vec2$$module$dist$littlejs_esm_min_js_tmp(.5)),c=tile$$module$dist$littlejs_esm_min_js_tmp(b.tile,c,this.tileInfo.textureIndex,this.tileInfo.padding),drawTile$$module$dist$littlejs_esm_min_js_tmp(a,vec2$$module$dist$littlejs_esm_min_js_tmp(1),c,b.color,b.direction*PI$$module$dist$littlejs_esm_min_js_tmp/2,b.mirror))}drawCanvas2D(a,b,c,d,e){const f=this.context;f.save();a=a.subtract(this.pos).multiply(this.tileInfo.size);b=b.multiply(this.tileInfo.size);f.translate(a.x,this.canvas.height-a.y);f.rotate(c);f.scale(d?-b.x:b.x,b.y);e(f);f.restore()}drawTile(a,b=vec2$$module$dist$littlejs_esm_min_js_tmp(1),c,d=new Color$$module$dist$littlejs_esm_min_js_tmp,e,f){this.drawCanvas2D(a,b,e,f,g=>{const h=c&&c.getTextureInfo();h?(g.globalAlpha=d.a,g.drawImage(h.image,c.pos.x,c.pos.y,c.size.x,c.size.y,-.5,-.5,1,1),g.globalAlpha=1):(g.fillStyle=d,g.fillRect(-.5,-.5,1,1))})}drawRect(a,b,c,d){this.drawTile(a,b,void 0,c,d)}}class ParticleEmitter$$module$dist$littlejs_esm_min_js_tmp extends EngineObject$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c=0,d=0,e=100,f=PI$$module$dist$littlejs_esm_min_js_tmp,g,h=new Color$$module$dist$littlejs_esm_min_js_tmp,k=new Color$$module$dist$littlejs_esm_min_js_tmp,n=new Color$$module$dist$littlejs_esm_min_js_tmp(1,1,1,0),l=new Color$$module$dist$littlejs_esm_min_js_tmp(1,1,1,0),m=.5,r=.1,p=1,q=.1,t=.05,u=1,A=1,y=0,C=PI$$module$dist$littlejs_esm_min_js_tmp,B=.1,v=.2,w=!1,D=!1,G=!0,J=D?1e9:0,H=!1){super(a,vec2$$module$dist$littlejs_esm_min_js_tmp(),g,b,void 0,J);this.emitSize=c;this.emitTime=d;this.emitRate=e;this.emitConeAngle=f;this.colorStartA=h;this.colorStartB=k;this.colorEndA=n;this.colorEndB=l;this.randomColorLinear=G;this.particleTime=m;this.sizeStart=r;this.sizeEnd=p;this.speed=q;this.angleSpeed=t;this.damping=u;this.angleDamping=A;this.gravityScale=y;this.particleConeAngle=C;this.fadeRate=B;this.randomness=v;this.collideTiles=w;this.additive=D;this.localSpace=H;this.trailScale=0;this.particleCreateCallback=this.particleDestroyCallback=void 0;this.emitTimeBuffer=0}update(){this.parent&&super.update();if(!this.emitTime||this.getAliveTime()<=this.emitTime){if(this.emitRate*particleEmitRateScale$$module$dist$littlejs_esm_min_js_tmp){var a=1/this.emitRate/particleEmitRateScale$$module$dist$littlejs_esm_min_js_tmp;for(this.emitTimeBuffer+=timeDelta$$module$dist$littlejs_esm_min_js_tmp;0<this.emitTimeBuffer;this.emitTimeBuffer-=a)this.emitParticle()}}else this.destroy();debugParticles$$module$dist$littlejs_esm_min_js_tmp&&(a="number"===typeof this.emitSize?vec2$$module$dist$littlejs_esm_min_js_tmp(this.emitSize):this.emitSize,debugRect$$module$dist$littlejs_esm_min_js_tmp(this.pos,a,"#0f0",0,this.angle))}emitParticle(){var a="number"===typeof this.emitSize?randInCircle$$module$dist$littlejs_esm_min_js_tmp(this.emitSize/2):vec2$$module$dist$littlejs_esm_min_js_tmp(rand$$module$dist$littlejs_esm_min_js_tmp(-.5,.5),rand$$module$dist$littlejs_esm_min_js_tmp(-.5,.5)).multiply(this.emitSize).rotate(this.angle);let b=rand$$module$dist$littlejs_esm_min_js_tmp(this.particleConeAngle,-this.particleConeAngle);this.localSpace||(a=this.pos.add(a),b+=this.angle);const c=this.randomness;var d=m=>m+m*rand$$module$dist$littlejs_esm_min_js_tmp(c,-c);const e=d(this.particleTime),f=d(this.sizeStart),g=d(this.sizeEnd),h=d(this.speed);d=d(this.angleSpeed)*randSign$$module$dist$littlejs_esm_min_js_tmp();var k=rand$$module$dist$littlejs_esm_min_js_tmp(this.emitConeAngle,-this.emitConeAngle);const n=randColor$$module$dist$littlejs_esm_min_js_tmp(this.colorStartA,this.colorStartB,this.randomColorLinear),l=randColor$$module$dist$littlejs_esm_min_js_tmp(this.colorEndA,this.colorEndB,this.randomColorLinear);k=this.localSpace?k:this.angle+k;a=new Particle$$module$dist$littlejs_esm_min_js_tmp(a,this.tileInfo,b,n,l,e,f,g,this.fadeRate,this.additive,this.trailScale,this.localSpace&&this,this.particleDestroyCallback);a.velocity=vec2$$module$dist$littlejs_esm_min_js_tmp().setAngle(k,h);a.angleVelocity=d;a.fadeRate=this.fadeRate;a.damping=this.damping;a.angleDamping=this.angleDamping;a.elasticity=this.elasticity;a.friction=this.friction;a.gravityScale=this.gravityScale;a.collideTiles=this.collideTiles;a.renderOrder=this.renderOrder;a.mirror=!!randInt$$module$dist$littlejs_esm_min_js_tmp(2);this.particleCreateCallback&&this.particleCreateCallback(a);return a}render(){}}class Particle$$module$dist$littlejs_esm_min_js_tmp extends EngineObject$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c,d,e,f,g,h,k,n,l,m,r){super(a,vec2$$module$dist$littlejs_esm_min_js_tmp(),b,c);this.colorStart=d;this.colorEndDelta=e.subtract(d);this.lifeTime=f;this.sizeStart=g;this.sizeEndDelta=h-g;this.fadeRate=k;this.additive=n;this.trailScale=l;this.localSpaceEmitter=m;this.destroyCallback=r;this.clampSpeedLinear=!1}render(){const a=0<this.lifeTime?min$$module$dist$littlejs_esm_min_js_tmp((time$$module$dist$littlejs_esm_min_js_tmp-this.spawnTime)/this.lifeTime,1):1,b=vec2$$module$dist$littlejs_esm_min_js_tmp(this.sizeStart+a*this.sizeEndDelta);var c=this.fadeRate/2;c=new Color$$module$dist$littlejs_esm_min_js_tmp(this.colorStart.r+a*this.colorEndDelta.r,this.colorStart.g+a*this.colorEndDelta.g,this.colorStart.b+a*this.colorEndDelta.b,(this.colorStart.a+a*this.colorEndDelta.a)*(a<c?a/c:a>1-c?(1-a)/c:1));this.additive&&setBlendMode$$module$dist$littlejs_esm_min_js_tmp(!0);let d=this.pos,e=this.angle;this.localSpaceEmitter&&(d=this.localSpaceEmitter.pos.add(d.rotate(-this.localSpaceEmitter.angle)),e+=this.localSpaceEmitter.angle);if(this.trailScale){var f=this.velocity;this.localSpaceEmitter&&(f=f.rotate(-this.localSpaceEmitter.angle));var g=f.length();g&&(f=f.scale(1/g),g*=this.trailScale,b.y=max$$module$dist$littlejs_esm_min_js_tmp(b.x,g),e=f.angle(),drawTile$$module$dist$littlejs_esm_min_js_tmp(d.add(f.multiply(vec2$$module$dist$littlejs_esm_min_js_tmp(0,-g/2))),b,this.tileInfo,c,e,this.mirror))}else drawTile$$module$dist$littlejs_esm_min_js_tmp(d,b,this.tileInfo,c,e,this.mirror);this.additive&&setBlendMode$$module$dist$littlejs_esm_min_js_tmp();debugParticles$$module$dist$littlejs_esm_min_js_tmp&&debugRect$$module$dist$littlejs_esm_min_js_tmp(d,b,"#f005",0,e);1==a&&(this.color=c,this.size=b,this.destroyCallback&&this.destroyCallback(this),this.destroyed=1)}}const medals$$module$dist$littlejs_esm_min_js_tmp={};let medalsDisplayQueue$$module$dist$littlejs_esm_min_js_tmp=[],medalsSaveName$$module$dist$littlejs_esm_min_js_tmp,medalsDisplayTimeLast$$module$dist$littlejs_esm_min_js_tmp;function medalsInit$$module$dist$littlejs_esm_min_js_tmp(a){medalsSaveName$$module$dist$littlejs_esm_min_js_tmp=a;debugMedals$$module$dist$littlejs_esm_min_js_tmp||medalsForEach$$module$dist$littlejs_esm_min_js_tmp(b=>b.unlocked=!!localStorage[b.storageKey()]);engineAddPlugin$$module$dist$littlejs_esm_min_js_tmp(void 0,function(){if(medalsDisplayQueue$$module$dist$littlejs_esm_min_js_tmp.length){var b=medalsDisplayQueue$$module$dist$littlejs_esm_min_js_tmp[0],c=timeReal$$module$dist$littlejs_esm_min_js_tmp-medalsDisplayTimeLast$$module$dist$littlejs_esm_min_js_tmp;if(medalsDisplayTimeLast$$module$dist$littlejs_esm_min_js_tmp)if(c>medalDisplayTime$$module$dist$littlejs_esm_min_js_tmp)medalsDisplayTimeLast$$module$dist$littlejs_esm_min_js_tmp=0,medalsDisplayQueue$$module$dist$littlejs_esm_min_js_tmp.shift();else{const d=medalDisplayTime$$module$dist$littlejs_esm_min_js_tmp-medalDisplaySlideTime$$module$dist$littlejs_esm_min_js_tmp;b.render(c<medalDisplaySlideTime$$module$dist$littlejs_esm_min_js_tmp?1-c/medalDisplaySlideTime$$module$dist$littlejs_esm_min_js_tmp:c>d?(c-d)/medalDisplaySlideTime$$module$dist$littlejs_esm_min_js_tmp:0)}else medalsDisplayTimeLast$$module$dist$littlejs_esm_min_js_tmp=timeReal$$module$dist$littlejs_esm_min_js_tmp}})}function medalsForEach$$module$dist$littlejs_esm_min_js_tmp(a){Object.values(medals$$module$dist$littlejs_esm_min_js_tmp).forEach(b=>a(b))}class Medal$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c="",d="🏆",e){ASSERT$$module$dist$littlejs_esm_min_js_tmp(0<=a&&!medals$$module$dist$littlejs_esm_min_js_tmp[a]);this.id=a;this.name=b;this.description=c;this.icon=d;this.unlocked=!1;e&&((this.image=new Image).src=e);medals$$module$dist$littlejs_esm_min_js_tmp[a]=this}unlock(){medalsPreventUnlock$$module$dist$littlejs_esm_min_js_tmp||this.unlocked||(ASSERT$$module$dist$littlejs_esm_min_js_tmp(medalsSaveName$$module$dist$littlejs_esm_min_js_tmp,"save name must be set"),localStorage[this.storageKey()]=this.unlocked=!0,medalsDisplayQueue$$module$dist$littlejs_esm_min_js_tmp.push(this))}render(a=0){const b=overlayContext$$module$dist$littlejs_esm_min_js_tmp;var c=min$$module$dist$littlejs_esm_min_js_tmp(medalDisplaySize$$module$dist$littlejs_esm_min_js_tmp.x,mainCanvas$$module$dist$littlejs_esm_min_js_tmp.width);const d=medalDisplaySize$$module$dist$littlejs_esm_min_js_tmp.y;var e=overlayCanvas$$module$dist$littlejs_esm_min_js_tmp.width-c;a*=-d;b.save();b.beginPath();b.fillStyle=new Color$$module$dist$littlejs_esm_min_js_tmp(.9,.9,.9).toString();b.strokeStyle=new Color$$module$dist$littlejs_esm_min_js_tmp(0,0,0).toString();b.lineWidth=3;b.rect(e,a,c,d);b.fill();b.stroke();b.clip();const f=vec2$$module$dist$littlejs_esm_min_js_tmp(.1,.05).scale(d),g=d-2*f.x;this.renderIcon(vec2$$module$dist$littlejs_esm_min_js_tmp(e+f.x+g/2,a+d/2),g);const h=.5*d,k=.3*d;e=vec2$$module$dist$littlejs_esm_min_js_tmp(e+g+2*f.x,a+2*f.y+h/2);c=c-g-3*f.x;drawTextScreen$$module$dist$littlejs_esm_min_js_tmp(this.name,e,h,new Color$$module$dist$littlejs_esm_min_js_tmp(0,0,0),0,void 0,"left",void 0,c);e.y=a+d-2*f.y-k/2;drawTextScreen$$module$dist$littlejs_esm_min_js_tmp(this.description,e,k,new Color$$module$dist$littlejs_esm_min_js_tmp(0,0,0),0,void 0,"left",void 0,c);b.restore()}renderIcon(a,b){this.image?overlayContext$$module$dist$littlejs_esm_min_js_tmp.drawImage(this.image,a.x-b/2,a.y-b/2,b,b):drawTextScreen$$module$dist$littlejs_esm_min_js_tmp(this.icon,a,.7*b,new Color$$module$dist$littlejs_esm_min_js_tmp(0,0,0))}storageKey(){return medalsSaveName$$module$dist$littlejs_esm_min_js_tmp+"_"+this.id}}let glCanvas$$module$dist$littlejs_esm_min_js_tmp,glContext$$module$dist$littlejs_esm_min_js_tmp,glAntialias$$module$dist$littlejs_esm_min_js_tmp=!0,glShader$$module$dist$littlejs_esm_min_js_tmp,glActiveTexture$$module$dist$littlejs_esm_min_js_tmp,glArrayBuffer$$module$dist$littlejs_esm_min_js_tmp,glGeometryBuffer$$module$dist$littlejs_esm_min_js_tmp,glPositionData$$module$dist$littlejs_esm_min_js_tmp,glColorData$$module$dist$littlejs_esm_min_js_tmp,glInstanceCount$$module$dist$littlejs_esm_min_js_tmp,glAdditive$$module$dist$littlejs_esm_min_js_tmp,glBatchAdditive$$module$dist$littlejs_esm_min_js_tmp;const gl_MAX_INSTANCES$$module$dist$littlejs_esm_min_js_tmp=1e4,gl_INDICES_PER_INSTANCE$$module$dist$littlejs_esm_min_js_tmp=11,gl_INSTANCE_BYTE_STRIDE$$module$dist$littlejs_esm_min_js_tmp=4*gl_INDICES_PER_INSTANCE$$module$dist$littlejs_esm_min_js_tmp,gl_INSTANCE_BUFFER_SIZE$$module$dist$littlejs_esm_min_js_tmp=gl_MAX_INSTANCES$$module$dist$littlejs_esm_min_js_tmp*gl_INSTANCE_BYTE_STRIDE$$module$dist$littlejs_esm_min_js_tmp;function glInit$$module$dist$littlejs_esm_min_js_tmp(){if(glEnable$$module$dist$littlejs_esm_min_js_tmp&&!headlessMode$$module$dist$littlejs_esm_min_js_tmp){glCanvas$$module$dist$littlejs_esm_min_js_tmp=document.createElement("canvas");glContext$$module$dist$littlejs_esm_min_js_tmp=glCanvas$$module$dist$littlejs_esm_min_js_tmp.getContext("webgl2",{antialias:glAntialias$$module$dist$littlejs_esm_min_js_tmp});var a=mainCanvas$$module$dist$littlejs_esm_min_js_tmp.parentElement;glOverlay$$module$dist$littlejs_esm_min_js_tmp&&a.appendChild(glCanvas$$module$dist$littlejs_esm_min_js_tmp);glShader$$module$dist$littlejs_esm_min_js_tmp=glCreateProgram$$module$dist$littlejs_esm_min_js_tmp("#version 300 es\nprecision highp float;uniform mat4 m;in vec2 g;in vec4 p,u,c,a;in float r;out vec2 v;out vec4 d,e;void main(){vec2 s=(g-.5)*p.zw;gl_Position=m*vec4(p.xy+s*cos(r)-vec2(-s.y,s)*sin(r),1,1);v=mix(u.xw,u.zy,g);d=c;e=a;}","#version 300 es\nprecision highp float;uniform sampler2D s;in vec2 v;in vec4 d,e;out vec4 c;void main(){c=texture(s,v)*d+e;}");a=new ArrayBuffer(gl_INSTANCE_BUFFER_SIZE$$module$dist$littlejs_esm_min_js_tmp);glPositionData$$module$dist$littlejs_esm_min_js_tmp=new Float32Array(a);glColorData$$module$dist$littlejs_esm_min_js_tmp=new Uint32Array(a);glArrayBuffer$$module$dist$littlejs_esm_min_js_tmp=glContext$$module$dist$littlejs_esm_min_js_tmp.createBuffer();glGeometryBuffer$$module$dist$littlejs_esm_min_js_tmp=glContext$$module$dist$littlejs_esm_min_js_tmp.createBuffer();a=new Float32Array([glInstanceCount$$module$dist$littlejs_esm_min_js_tmp=0,0,1,0,0,1,1,1]);glContext$$module$dist$littlejs_esm_min_js_tmp.bindBuffer(glContext$$module$dist$littlejs_esm_min_js_tmp.ARRAY_BUFFER,glGeometryBuffer$$module$dist$littlejs_esm_min_js_tmp);glContext$$module$dist$littlejs_esm_min_js_tmp.bufferData(glContext$$module$dist$littlejs_esm_min_js_tmp.ARRAY_BUFFER,a,glContext$$module$dist$littlejs_esm_min_js_tmp.STATIC_DRAW)}}function glPreRender$$module$dist$littlejs_esm_min_js_tmp(){if(glEnable$$module$dist$littlejs_esm_min_js_tmp&&!headlessMode$$module$dist$littlejs_esm_min_js_tmp){glClearCanvas$$module$dist$littlejs_esm_min_js_tmp();glContext$$module$dist$littlejs_esm_min_js_tmp.useProgram(glShader$$module$dist$littlejs_esm_min_js_tmp);glContext$$module$dist$littlejs_esm_min_js_tmp.activeTexture(glContext$$module$dist$littlejs_esm_min_js_tmp.TEXTURE0);textureInfos$$module$dist$littlejs_esm_min_js_tmp[0]&&glContext$$module$dist$littlejs_esm_min_js_tmp.bindTexture(glContext$$module$dist$littlejs_esm_min_js_tmp.TEXTURE_2D,glActiveTexture$$module$dist$littlejs_esm_min_js_tmp=textureInfos$$module$dist$littlejs_esm_min_js_tmp[0].glTexture);var a=glAdditive$$module$dist$littlejs_esm_min_js_tmp=glBatchAdditive$$module$dist$littlejs_esm_min_js_tmp=0,b=(d,e,f,g)=>{d=glContext$$module$dist$littlejs_esm_min_js_tmp.getAttribLocation(glShader$$module$dist$littlejs_esm_min_js_tmp,d);const h=f&&gl_INSTANCE_BYTE_STRIDE$$module$dist$littlejs_esm_min_js_tmp,k=f&&1,n=1==f;glContext$$module$dist$littlejs_esm_min_js_tmp.enableVertexAttribArray(d);glContext$$module$dist$littlejs_esm_min_js_tmp.vertexAttribPointer(d,g,e,n,h,a);glContext$$module$dist$littlejs_esm_min_js_tmp.vertexAttribDivisor(d,k);a+=g*f};glContext$$module$dist$littlejs_esm_min_js_tmp.bindBuffer(glContext$$module$dist$littlejs_esm_min_js_tmp.ARRAY_BUFFER,glGeometryBuffer$$module$dist$littlejs_esm_min_js_tmp);b("g",glContext$$module$dist$littlejs_esm_min_js_tmp.FLOAT,0,2);glContext$$module$dist$littlejs_esm_min_js_tmp.bindBuffer(glContext$$module$dist$littlejs_esm_min_js_tmp.ARRAY_BUFFER,glArrayBuffer$$module$dist$littlejs_esm_min_js_tmp);glContext$$module$dist$littlejs_esm_min_js_tmp.bufferData(glContext$$module$dist$littlejs_esm_min_js_tmp.ARRAY_BUFFER,gl_INSTANCE_BUFFER_SIZE$$module$dist$littlejs_esm_min_js_tmp,glContext$$module$dist$littlejs_esm_min_js_tmp.DYNAMIC_DRAW);b("p",glContext$$module$dist$littlejs_esm_min_js_tmp.FLOAT,4,4);b("u",glContext$$module$dist$littlejs_esm_min_js_tmp.FLOAT,4,4);b("c",glContext$$module$dist$littlejs_esm_min_js_tmp.UNSIGNED_BYTE,1,4);b("a",glContext$$module$dist$littlejs_esm_min_js_tmp.UNSIGNED_BYTE,1,4);b("r",glContext$$module$dist$littlejs_esm_min_js_tmp.FLOAT,4,1);b=vec2$$module$dist$littlejs_esm_min_js_tmp(2*cameraScale$$module$dist$littlejs_esm_min_js_tmp).divide(mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp);var c=vec2$$module$dist$littlejs_esm_min_js_tmp(-1).subtract(cameraPos$$module$dist$littlejs_esm_min_js_tmp.multiply(b));glContext$$module$dist$littlejs_esm_min_js_tmp.uniformMatrix4fv(glContext$$module$dist$littlejs_esm_min_js_tmp.getUniformLocation(glShader$$module$dist$littlejs_esm_min_js_tmp,"m"),!1,[b.x,0,0,0,0,b.y,0,0,1,1,1,1,c.x,c.y,0,0])}}function glClearCanvas$$module$dist$littlejs_esm_min_js_tmp(){glContext$$module$dist$littlejs_esm_min_js_tmp.viewport(0,0,glCanvas$$module$dist$littlejs_esm_min_js_tmp.width=mainCanvas$$module$dist$littlejs_esm_min_js_tmp.width,glCanvas$$module$dist$littlejs_esm_min_js_tmp.height=mainCanvas$$module$dist$littlejs_esm_min_js_tmp.height);glContext$$module$dist$littlejs_esm_min_js_tmp.clear(glContext$$module$dist$littlejs_esm_min_js_tmp.COLOR_BUFFER_BIT)}function glSetTexture$$module$dist$littlejs_esm_min_js_tmp(a){headlessMode$$module$dist$littlejs_esm_min_js_tmp||a==glActiveTexture$$module$dist$littlejs_esm_min_js_tmp||(glFlush$$module$dist$littlejs_esm_min_js_tmp(),glContext$$module$dist$littlejs_esm_min_js_tmp.bindTexture(glContext$$module$dist$littlejs_esm_min_js_tmp.TEXTURE_2D,glActiveTexture$$module$dist$littlejs_esm_min_js_tmp=a))}function glCompileShader$$module$dist$littlejs_esm_min_js_tmp(a,b){b=glContext$$module$dist$littlejs_esm_min_js_tmp.createShader(b);glContext$$module$dist$littlejs_esm_min_js_tmp.shaderSource(b,a);glContext$$module$dist$littlejs_esm_min_js_tmp.compileShader(b);if(debug$$module$dist$littlejs_esm_min_js_tmp&&!glContext$$module$dist$littlejs_esm_min_js_tmp.getShaderParameter(b,glContext$$module$dist$littlejs_esm_min_js_tmp.COMPILE_STATUS))throw glContext$$module$dist$littlejs_esm_min_js_tmp.getShaderInfoLog(b);return b}function glCreateProgram$$module$dist$littlejs_esm_min_js_tmp(a,b){const c=glContext$$module$dist$littlejs_esm_min_js_tmp.createProgram();glContext$$module$dist$littlejs_esm_min_js_tmp.attachShader(c,glCompileShader$$module$dist$littlejs_esm_min_js_tmp(a,glContext$$module$dist$littlejs_esm_min_js_tmp.VERTEX_SHADER));glContext$$module$dist$littlejs_esm_min_js_tmp.attachShader(c,glCompileShader$$module$dist$littlejs_esm_min_js_tmp(b,glContext$$module$dist$littlejs_esm_min_js_tmp.FRAGMENT_SHADER));glContext$$module$dist$littlejs_esm_min_js_tmp.linkProgram(c);if(debug$$module$dist$littlejs_esm_min_js_tmp&&!glContext$$module$dist$littlejs_esm_min_js_tmp.getProgramParameter(c,glContext$$module$dist$littlejs_esm_min_js_tmp.LINK_STATUS))throw glContext$$module$dist$littlejs_esm_min_js_tmp.getProgramInfoLog(c);return c}function glCreateTexture$$module$dist$littlejs_esm_min_js_tmp(a){const b=glContext$$module$dist$littlejs_esm_min_js_tmp.createTexture();glContext$$module$dist$littlejs_esm_min_js_tmp.bindTexture(glContext$$module$dist$littlejs_esm_min_js_tmp.TEXTURE_2D,b);a&&a.width?glSetTextureData$$module$dist$littlejs_esm_min_js_tmp(b,a):(a=new Uint8Array([255,255,255,255]),glContext$$module$dist$littlejs_esm_min_js_tmp.texImage2D(glContext$$module$dist$littlejs_esm_min_js_tmp.TEXTURE_2D,0,glContext$$module$dist$littlejs_esm_min_js_tmp.RGBA,1,1,0,glContext$$module$dist$littlejs_esm_min_js_tmp.RGBA,glContext$$module$dist$littlejs_esm_min_js_tmp.UNSIGNED_BYTE,a));a=tilesPixelated$$module$dist$littlejs_esm_min_js_tmp?glContext$$module$dist$littlejs_esm_min_js_tmp.NEAREST:glContext$$module$dist$littlejs_esm_min_js_tmp.LINEAR;glContext$$module$dist$littlejs_esm_min_js_tmp.texParameteri(glContext$$module$dist$littlejs_esm_min_js_tmp.TEXTURE_2D,glContext$$module$dist$littlejs_esm_min_js_tmp.TEXTURE_MIN_FILTER,a);glContext$$module$dist$littlejs_esm_min_js_tmp.texParameteri(glContext$$module$dist$littlejs_esm_min_js_tmp.TEXTURE_2D,glContext$$module$dist$littlejs_esm_min_js_tmp.TEXTURE_MAG_FILTER,a);return b}function glSetTextureData$$module$dist$littlejs_esm_min_js_tmp(a,b){ASSERT$$module$dist$littlejs_esm_min_js_tmp(!!b&&0<b.width,"Invalid image data.");glContext$$module$dist$littlejs_esm_min_js_tmp.bindTexture(glContext$$module$dist$littlejs_esm_min_js_tmp.TEXTURE_2D,a);glContext$$module$dist$littlejs_esm_min_js_tmp.texImage2D(glContext$$module$dist$littlejs_esm_min_js_tmp.TEXTURE_2D,0,glContext$$module$dist$littlejs_esm_min_js_tmp.RGBA,glContext$$module$dist$littlejs_esm_min_js_tmp.RGBA,glContext$$module$dist$littlejs_esm_min_js_tmp.UNSIGNED_BYTE,b)}function glFlush$$module$dist$littlejs_esm_min_js_tmp(){if(glInstanceCount$$module$dist$littlejs_esm_min_js_tmp){var a=glBatchAdditive$$module$dist$littlejs_esm_min_js_tmp?glContext$$module$dist$littlejs_esm_min_js_tmp.ONE:glContext$$module$dist$littlejs_esm_min_js_tmp.ONE_MINUS_SRC_ALPHA;glContext$$module$dist$littlejs_esm_min_js_tmp.blendFuncSeparate(glContext$$module$dist$littlejs_esm_min_js_tmp.SRC_ALPHA,a,glContext$$module$dist$littlejs_esm_min_js_tmp.ONE,a);glContext$$module$dist$littlejs_esm_min_js_tmp.enable(glContext$$module$dist$littlejs_esm_min_js_tmp.BLEND);glContext$$module$dist$littlejs_esm_min_js_tmp.bufferSubData(glContext$$module$dist$littlejs_esm_min_js_tmp.ARRAY_BUFFER,0,glPositionData$$module$dist$littlejs_esm_min_js_tmp);glContext$$module$dist$littlejs_esm_min_js_tmp.drawArraysInstanced(glContext$$module$dist$littlejs_esm_min_js_tmp.TRIANGLE_STRIP,0,4,glInstanceCount$$module$dist$littlejs_esm_min_js_tmp);showWatermark$$module$dist$littlejs_esm_min_js_tmp&&(drawCount$$module$dist$littlejs_esm_min_js_tmp+=glInstanceCount$$module$dist$littlejs_esm_min_js_tmp);glInstanceCount$$module$dist$littlejs_esm_min_js_tmp=0;glBatchAdditive$$module$dist$littlejs_esm_min_js_tmp=glAdditive$$module$dist$littlejs_esm_min_js_tmp}}function glCopyToContext$$module$dist$littlejs_esm_min_js_tmp(a,b=!1){glEnable$$module$dist$littlejs_esm_min_js_tmp&&(glInstanceCount$$module$dist$littlejs_esm_min_js_tmp||b)&&(glFlush$$module$dist$littlejs_esm_min_js_tmp(),glOverlay$$module$dist$littlejs_esm_min_js_tmp&&!b||a.drawImage(glCanvas$$module$dist$littlejs_esm_min_js_tmp,0,0))}function glSetAntialias$$module$dist$littlejs_esm_min_js_tmp(a=!0){ASSERT$$module$dist$littlejs_esm_min_js_tmp(!glCanvas$$module$dist$littlejs_esm_min_js_tmp,"must be called before engineInit");glAntialias$$module$dist$littlejs_esm_min_js_tmp=a}function glDraw$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d,e,f,g,h,k,n=-1,l=0){ASSERT$$module$dist$littlejs_esm_min_js_tmp("number"==typeof n&&"number"==typeof l,"invalid color");(glInstanceCount$$module$dist$littlejs_esm_min_js_tmp>=gl_MAX_INSTANCES$$module$dist$littlejs_esm_min_js_tmp||glBatchAdditive$$module$dist$littlejs_esm_min_js_tmp!=glAdditive$$module$dist$littlejs_esm_min_js_tmp)&&glFlush$$module$dist$littlejs_esm_min_js_tmp();let m=glInstanceCount$$module$dist$littlejs_esm_min_js_tmp++*gl_INDICES_PER_INSTANCE$$module$dist$littlejs_esm_min_js_tmp;glPositionData$$module$dist$littlejs_esm_min_js_tmp[m++]=a;glPositionData$$module$dist$littlejs_esm_min_js_tmp[m++]=b;glPositionData$$module$dist$littlejs_esm_min_js_tmp[m++]=c;glPositionData$$module$dist$littlejs_esm_min_js_tmp[m++]=d;glPositionData$$module$dist$littlejs_esm_min_js_tmp[m++]=f;glPositionData$$module$dist$littlejs_esm_min_js_tmp[m++]=g;glPositionData$$module$dist$littlejs_esm_min_js_tmp[m++]=h;glPositionData$$module$dist$littlejs_esm_min_js_tmp[m++]=k;glColorData$$module$dist$littlejs_esm_min_js_tmp[m++]=n;glColorData$$module$dist$littlejs_esm_min_js_tmp[m++]=l;glPositionData$$module$dist$littlejs_esm_min_js_tmp[m++]=e}const engineName$$module$dist$littlejs_esm_min_js_tmp="LittleJS",engineVersion$$module$dist$littlejs_esm_min_js_tmp="1.11.17",frameRate$$module$dist$littlejs_esm_min_js_tmp=60,timeDelta$$module$dist$littlejs_esm_min_js_tmp=1/frameRate$$module$dist$littlejs_esm_min_js_tmp;let engineObjects$$module$dist$littlejs_esm_min_js_tmp=[],engineObjectsCollide$$module$dist$littlejs_esm_min_js_tmp=[],frame$$module$dist$littlejs_esm_min_js_tmp=0,time$$module$dist$littlejs_esm_min_js_tmp=0,timeReal$$module$dist$littlejs_esm_min_js_tmp=0,paused$$module$dist$littlejs_esm_min_js_tmp=!1;function setPaused$$module$dist$littlejs_esm_min_js_tmp(a){paused$$module$dist$littlejs_esm_min_js_tmp=a}let frameTimeLastMS$$module$dist$littlejs_esm_min_js_tmp=0,frameTimeBufferMS$$module$dist$littlejs_esm_min_js_tmp=0,averageFPS$$module$dist$littlejs_esm_min_js_tmp=0;const pluginUpdateList$$module$dist$littlejs_esm_min_js_tmp=[],pluginRenderList$$module$dist$littlejs_esm_min_js_tmp=[];function engineAddPlugin$$module$dist$littlejs_esm_min_js_tmp(a,b){ASSERT$$module$dist$littlejs_esm_min_js_tmp(!pluginUpdateList$$module$dist$littlejs_esm_min_js_tmp.includes(a));ASSERT$$module$dist$littlejs_esm_min_js_tmp(!pluginRenderList$$module$dist$littlejs_esm_min_js_tmp.includes(b));a&&pluginUpdateList$$module$dist$littlejs_esm_min_js_tmp.push(a);b&&pluginRenderList$$module$dist$littlejs_esm_min_js_tmp.push(b)}function engineInit$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d,e,f=[],g=document.body){function h(l=0){var m=l-frameTimeLastMS$$module$dist$littlejs_esm_min_js_tmp;frameTimeLastMS$$module$dist$littlejs_esm_min_js_tmp=l;if(debug$$module$dist$littlejs_esm_min_js_tmp||showWatermark$$module$dist$littlejs_esm_min_js_tmp)averageFPS$$module$dist$littlejs_esm_min_js_tmp=lerp$$module$dist$littlejs_esm_min_js_tmp(.05,averageFPS$$module$dist$littlejs_esm_min_js_tmp,1e3/(m||1));l=debug$$module$dist$littlejs_esm_min_js_tmp&&keyIsDown$$module$dist$littlejs_esm_min_js_tmp("Equal");const r=debug$$module$dist$littlejs_esm_min_js_tmp&&keyIsDown$$module$dist$littlejs_esm_min_js_tmp("Minus");debug$$module$dist$littlejs_esm_min_js_tmp&&(m*=l?10:r?.1:1);timeReal$$module$dist$littlejs_esm_min_js_tmp+=m/1e3;frameTimeBufferMS$$module$dist$littlejs_esm_min_js_tmp+=paused$$module$dist$littlejs_esm_min_js_tmp?0:m;l||(frameTimeBufferMS$$module$dist$littlejs_esm_min_js_tmp=min$$module$dist$littlejs_esm_min_js_tmp(frameTimeBufferMS$$module$dist$littlejs_esm_min_js_tmp,50));debug$$module$dist$littlejs_esm_min_js_tmp&&debugVideoCaptureIsActive$$module$dist$littlejs_esm_min_js_tmp()&&(frameTimeBufferMS$$module$dist$littlejs_esm_min_js_tmp=0);k();if(paused$$module$dist$littlejs_esm_min_js_tmp){for(const q of engineObjects$$module$dist$littlejs_esm_min_js_tmp)q.parent||q.updateTransforms();inputUpdate$$module$dist$littlejs_esm_min_js_tmp();pluginUpdateList$$module$dist$littlejs_esm_min_js_tmp.forEach(q=>q());debugUpdate$$module$dist$littlejs_esm_min_js_tmp();c();inputUpdatePost$$module$dist$littlejs_esm_min_js_tmp()}else{m=0;0>frameTimeBufferMS$$module$dist$littlejs_esm_min_js_tmp&&-9<frameTimeBufferMS$$module$dist$littlejs_esm_min_js_tmp&&(m=frameTimeBufferMS$$module$dist$littlejs_esm_min_js_tmp,frameTimeBufferMS$$module$dist$littlejs_esm_min_js_tmp=0);for(;0<=frameTimeBufferMS$$module$dist$littlejs_esm_min_js_tmp;frameTimeBufferMS$$module$dist$littlejs_esm_min_js_tmp-=1e3/frameRate$$module$dist$littlejs_esm_min_js_tmp)time$$module$dist$littlejs_esm_min_js_tmp=frame$$module$dist$littlejs_esm_min_js_tmp++/frameRate$$module$dist$littlejs_esm_min_js_tmp,inputUpdate$$module$dist$littlejs_esm_min_js_tmp(),b(),pluginUpdateList$$module$dist$littlejs_esm_min_js_tmp.forEach(q=>q()),engineObjectsUpdate$$module$dist$littlejs_esm_min_js_tmp(),debugUpdate$$module$dist$littlejs_esm_min_js_tmp(),c(),inputUpdatePost$$module$dist$littlejs_esm_min_js_tmp();frameTimeBufferMS$$module$dist$littlejs_esm_min_js_tmp+=m}if(!headlessMode$$module$dist$littlejs_esm_min_js_tmp){mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp=vec2$$module$dist$littlejs_esm_min_js_tmp(mainCanvas$$module$dist$littlejs_esm_min_js_tmp.width,mainCanvas$$module$dist$littlejs_esm_min_js_tmp.height);overlayContext$$module$dist$littlejs_esm_min_js_tmp.imageSmoothingEnabled=mainContext$$module$dist$littlejs_esm_min_js_tmp.imageSmoothingEnabled=!tilesPixelated$$module$dist$littlejs_esm_min_js_tmp;glPreRender$$module$dist$littlejs_esm_min_js_tmp();d();engineObjects$$module$dist$littlejs_esm_min_js_tmp.sort((q,t)=>q.renderOrder-t.renderOrder);for(var p of engineObjects$$module$dist$littlejs_esm_min_js_tmp)p.destroyed||p.render();e();pluginRenderList$$module$dist$littlejs_esm_min_js_tmp.forEach(q=>q());touchGamepadRender$$module$dist$littlejs_esm_min_js_tmp();debugRender$$module$dist$littlejs_esm_min_js_tmp();glCopyToContext$$module$dist$littlejs_esm_min_js_tmp(mainContext$$module$dist$littlejs_esm_min_js_tmp);showWatermark$$module$dist$littlejs_esm_min_js_tmp&&(overlayContext$$module$dist$littlejs_esm_min_js_tmp.textAlign="right",overlayContext$$module$dist$littlejs_esm_min_js_tmp.textBaseline="top",overlayContext$$module$dist$littlejs_esm_min_js_tmp.font="1em monospace",overlayContext$$module$dist$littlejs_esm_min_js_tmp.fillStyle="#000",p=engineName$$module$dist$littlejs_esm_min_js_tmp+" v"+engineVersion$$module$dist$littlejs_esm_min_js_tmp+" / "+drawCount$$module$dist$littlejs_esm_min_js_tmp+" / "+engineObjects$$module$dist$littlejs_esm_min_js_tmp.length+" / "+averageFPS$$module$dist$littlejs_esm_min_js_tmp.toFixed(1)+(glEnable$$module$dist$littlejs_esm_min_js_tmp?" GL":" 2D"),overlayContext$$module$dist$littlejs_esm_min_js_tmp.fillText(p,mainCanvas$$module$dist$littlejs_esm_min_js_tmp.width-3,3),overlayContext$$module$dist$littlejs_esm_min_js_tmp.fillStyle="#fff",overlayContext$$module$dist$littlejs_esm_min_js_tmp.fillText(p,mainCanvas$$module$dist$littlejs_esm_min_js_tmp.width-2,2),drawCount$$module$dist$littlejs_esm_min_js_tmp=0)}debugVideoCaptureUpdate$$module$dist$littlejs_esm_min_js_tmp();requestAnimationFrame(h)}function k(){if(!headlessMode$$module$dist$littlejs_esm_min_js_tmp){if(canvasFixedSize$$module$dist$littlejs_esm_min_js_tmp.x){mainCanvas$$module$dist$littlejs_esm_min_js_tmp.width=canvasFixedSize$$module$dist$littlejs_esm_min_js_tmp.x;mainCanvas$$module$dist$littlejs_esm_min_js_tmp.height=canvasFixedSize$$module$dist$littlejs_esm_min_js_tmp.y;const l=innerWidth/innerHeight,m=mainCanvas$$module$dist$littlejs_esm_min_js_tmp.width/mainCanvas$$module$dist$littlejs_esm_min_js_tmp.height;(glCanvas$$module$dist$littlejs_esm_min_js_tmp||mainCanvas$$module$dist$littlejs_esm_min_js_tmp).style.width=mainCanvas$$module$dist$littlejs_esm_min_js_tmp.style.width=overlayCanvas$$module$dist$littlejs_esm_min_js_tmp.style.width=l<m?"100%":"";(glCanvas$$module$dist$littlejs_esm_min_js_tmp||mainCanvas$$module$dist$littlejs_esm_min_js_tmp).style.height=mainCanvas$$module$dist$littlejs_esm_min_js_tmp.style.height=overlayCanvas$$module$dist$littlejs_esm_min_js_tmp.style.height=l<m?"":"100%"}else mainCanvas$$module$dist$littlejs_esm_min_js_tmp.width=min$$module$dist$littlejs_esm_min_js_tmp(innerWidth,canvasMaxSize$$module$dist$littlejs_esm_min_js_tmp.x),mainCanvas$$module$dist$littlejs_esm_min_js_tmp.height=min$$module$dist$littlejs_esm_min_js_tmp(innerHeight,canvasMaxSize$$module$dist$littlejs_esm_min_js_tmp.y);overlayCanvas$$module$dist$littlejs_esm_min_js_tmp.width=mainCanvas$$module$dist$littlejs_esm_min_js_tmp.width;overlayCanvas$$module$dist$littlejs_esm_min_js_tmp.height=mainCanvas$$module$dist$littlejs_esm_min_js_tmp.height;mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp=vec2$$module$dist$littlejs_esm_min_js_tmp(mainCanvas$$module$dist$littlejs_esm_min_js_tmp.width,mainCanvas$$module$dist$littlejs_esm_min_js_tmp.height)}}function n(){new Promise(l=>l(a())).then(h)}ASSERT$$module$dist$littlejs_esm_min_js_tmp(!mainContext$$module$dist$littlejs_esm_min_js_tmp,"engine already initialized");ASSERT$$module$dist$littlejs_esm_min_js_tmp(Array.isArray(f),"pass in images as array");a||=()=>{};b||=()=>{};c||=()=>{};d||=()=>{};e||=()=>{};headlessMode$$module$dist$littlejs_esm_min_js_tmp?n():(g.style.cssText="margin:0;background:#000;"+(canvasPixelated$$module$dist$littlejs_esm_min_js_tmp?"image-rendering:pixelated;":"")+"user-select:none;-webkit-user-select:none;"+(touchInputEnable$$module$dist$littlejs_esm_min_js_tmp?"touch-action:none;-webkit-touch-callout:none":""),g.appendChild(mainCanvas$$module$dist$littlejs_esm_min_js_tmp=document.createElement("canvas")),mainContext$$module$dist$littlejs_esm_min_js_tmp=mainCanvas$$module$dist$littlejs_esm_min_js_tmp.getContext("2d"),inputInit$$module$dist$littlejs_esm_min_js_tmp(),audioInit$$module$dist$littlejs_esm_min_js_tmp(),debugInit$$module$dist$littlejs_esm_min_js_tmp(),glInit$$module$dist$littlejs_esm_min_js_tmp(),g.appendChild(overlayCanvas$$module$dist$littlejs_esm_min_js_tmp=document.createElement("canvas")),overlayContext$$module$dist$littlejs_esm_min_js_tmp=overlayCanvas$$module$dist$littlejs_esm_min_js_tmp.getContext("2d"),mainCanvas$$module$dist$littlejs_esm_min_js_tmp.style.cssText=overlayCanvas$$module$dist$littlejs_esm_min_js_tmp.style.cssText="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)",glCanvas$$module$dist$littlejs_esm_min_js_tmp&&(glCanvas$$module$dist$littlejs_esm_min_js_tmp.style.cssText="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)"),k(),g=f.map((l,m)=>new Promise(r=>{const p=new Image;p.onerror=p.onload=()=>{textureInfos$$module$dist$littlejs_esm_min_js_tmp[m]=new TextureInfo$$module$dist$littlejs_esm_min_js_tmp(p);r()};p.crossOrigin="anonymous";p.src=l})),f.length||g.push(new Promise(l=>{textureInfos$$module$dist$littlejs_esm_min_js_tmp[0]=new TextureInfo$$module$dist$littlejs_esm_min_js_tmp(new Image);l()})),showSplashScreen$$module$dist$littlejs_esm_min_js_tmp&&g.push(new Promise(l=>{function m(){clearInput$$module$dist$littlejs_esm_min_js_tmp();drawEngineSplashScreen$$module$dist$littlejs_esm_min_js_tmp(r+=.01);1<r?l():setTimeout(m,16)}let r=0;console.log(`${engineName$$module$dist$littlejs_esm_min_js_tmp} Engine v${engineVersion$$module$dist$littlejs_esm_min_js_tmp}`);m()})),Promise.all(g).then(n))}function engineObjectsUpdate$$module$dist$littlejs_esm_min_js_tmp(){function a(b){if(!b.destroyed){b.update();for(const c of b.children)a(c)}}engineObjectsCollide$$module$dist$littlejs_esm_min_js_tmp=engineObjects$$module$dist$littlejs_esm_min_js_tmp.filter(b=>b.collideSolidObjects);for(const b of engineObjects$$module$dist$littlejs_esm_min_js_tmp)b.parent||(a(b),b.updateTransforms());engineObjects$$module$dist$littlejs_esm_min_js_tmp=engineObjects$$module$dist$littlejs_esm_min_js_tmp.filter(b=>!b.destroyed)}function engineObjectsDestroy$$module$dist$littlejs_esm_min_js_tmp(){for(const a of engineObjects$$module$dist$littlejs_esm_min_js_tmp)a.parent||a.destroy();engineObjects$$module$dist$littlejs_esm_min_js_tmp=engineObjects$$module$dist$littlejs_esm_min_js_tmp.filter(a=>!a.destroyed)}function engineObjectsCollect$$module$dist$littlejs_esm_min_js_tmp(a,b,c=engineObjects$$module$dist$littlejs_esm_min_js_tmp){const d=[];if(a)if(b instanceof Vector2$$module$dist$littlejs_esm_min_js_tmp)for(const e of c)isOverlapping$$module$dist$littlejs_esm_min_js_tmp(a,b,e.pos,e.size)&&d.push(e);else{b*=b;for(const e of c)a.distanceSquared(e.pos)<b&&d.push(e)}else for(const e of c)d.push(e);return d}function engineObjectsCallback$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d=engineObjects$$module$dist$littlejs_esm_min_js_tmp){engineObjectsCollect$$module$dist$littlejs_esm_min_js_tmp(a,b,d).forEach(e=>c(e))}function engineObjectsRaycast$$module$dist$littlejs_esm_min_js_tmp(a,b,c=engineObjects$$module$dist$littlejs_esm_min_js_tmp){const d=[];for(const e of c)e.collideRaycast&&isIntersecting$$module$dist$littlejs_esm_min_js_tmp(a,b,e.pos,e.size)&&(debugRaycast$$module$dist$littlejs_esm_min_js_tmp&&debugRect$$module$dist$littlejs_esm_min_js_tmp(e.pos,e.size,"#f00"),d.push(e));debugRaycast$$module$dist$littlejs_esm_min_js_tmp&&debugLine$$module$dist$littlejs_esm_min_js_tmp(a,b,d.length?"#f00":"#00f",.02);return d}function drawEngineSplashScreen$$module$dist$littlejs_esm_min_js_tmp(a){const b=overlayContext$$module$dist$littlejs_esm_min_js_tmp;var c=overlayCanvas$$module$dist$littlejs_esm_min_js_tmp.width=innerWidth,d=overlayCanvas$$module$dist$littlejs_esm_min_js_tmp.height=innerHeight,e=percent$$module$dist$littlejs_esm_min_js_tmp(a,1,.8),f=percent$$module$dist$littlejs_esm_min_js_tmp(a,0,.5),g=b.createRadialGradient(c/2,d/2,0,c/2,d/2,.7*Math.hypot(c,d));g.addColorStop(0,hsl$$module$dist$littlejs_esm_min_js_tmp(0,0,lerp$$module$dist$littlejs_esm_min_js_tmp(f,0,e/2),e).toString());g.addColorStop(1,hsl$$module$dist$littlejs_esm_min_js_tmp(0,0,0,e).toString());b.save();b.fillStyle=g;b.fillRect(0,0,c,d);g=(k,n,l,m,r)=>{b.beginPath();b.rect(k,n,l,r?m*h:m);(b.fillStyle=r)?b.fill():b.stroke()};f=(k,n,l,m=0,r=2*PI$$module$dist$littlejs_esm_min_js_tmp,p,q)=>{const t=(m+r)/2;m=h*(r-m)/2;b.beginPath();q&&b.lineTo(k,n);b.arc(k,n,l,t-m,t+m);(b.fillStyle=p)?b.fill():b.stroke()};e=(k=0,n=0)=>hsl$$module$dist$littlejs_esm_min_js_tmp([.98,.3,.57,.14][k%4]-10,.8,[0,.3,.5,.8,.9][n]).toString();a=wave$$module$dist$littlejs_esm_min_js_tmp(1,1,a);const h=percent$$module$dist$littlejs_esm_min_js_tmp(a,.1,.5);b.translate(c/2,d/2);c=min$$module$dist$littlejs_esm_min_js_tmp(6,min$$module$dist$littlejs_esm_min_js_tmp(c,d)/99);b.scale(c,c);b.translate(-40,-35);b.lineJoin=b.lineCap="round";b.lineWidth=.1+1.9*h;c=percent$$module$dist$littlejs_esm_min_js_tmp(a,.1,1);b.setLineDash([99*c,99]);g(7,16,18,-8,e(2,2));g(7,8,18,4,e(2,3));g(25,8,8,8,e(2,1));g(25,8,-18,8);g(25,8,8,8);g(25,16,7,23,e());g(11,39,14,-23,e(1,1));g(11,16,14,18,e(1,2));g(11,16,14,8,e(1,3));g(25,16,-14,24);g(15,29,6,-9,e(2,2));f(15,21,5,0,PI$$module$dist$littlejs_esm_min_js_tmp/2,e(2,4),1);g(21,21,-6,9);g(37,14,9,6,e(3,2));g(37,14,4.5,6,e(3,3));g(37,14,9,6);g(50,20,10,-8,e(0,1));g(50,20,6.5,-8,e(0,2));g(50,20,3.5,-8,e(0,3));g(50,20,10,-8);f(55,2,11.4,.5,PI$$module$dist$littlejs_esm_min_js_tmp-.5,e(3,3));f(55,2,11.4,.5,PI$$module$dist$littlejs_esm_min_js_tmp/2,e(3,2),1);f(55,2,11.4,.5,PI$$module$dist$littlejs_esm_min_js_tmp-.5);g(45,7,20,-7,e(0,2));g(45,-1,20,4,e(0,3));g(45,-1,20,8);for(c=5;c--;)f(60-6*c,30,9.9,0,2*PI$$module$dist$littlejs_esm_min_js_tmp,e(c+2,3)),f(60-6*c,30,10,-.5,PI$$module$dist$littlejs_esm_min_js_tmp+.5,e(c+2,2)),f(60-6*c,30,10.1,.5,PI$$module$dist$littlejs_esm_min_js_tmp-.5,e(c+2,1));f(36,30,10,PI$$module$dist$littlejs_esm_min_js_tmp/2,3*PI$$module$dist$littlejs_esm_min_js_tmp/2);f(48,30,10,PI$$module$dist$littlejs_esm_min_js_tmp/2,3*PI$$module$dist$littlejs_esm_min_js_tmp/2);f(60,30,10);b.beginPath();b.lineTo(36,20);b.lineTo(60,20);b.stroke();f(60,30,4,PI$$module$dist$littlejs_esm_min_js_tmp,3*PI$$module$dist$littlejs_esm_min_js_tmp,e(3,2));f(60,30,4,PI$$module$dist$littlejs_esm_min_js_tmp,2*PI$$module$dist$littlejs_esm_min_js_tmp,e(3,3));f(60,30,4,PI$$module$dist$littlejs_esm_min_js_tmp,3*PI$$module$dist$littlejs_esm_min_js_tmp);for(c=6;c--;)b.beginPath(),b.lineTo(53,54),b.lineTo(53,40),b.lineTo(53+(1+2.9*c)*h,40),b.lineTo(53+(4+3.5*c)*h,54),b.fillStyle=e(0,c%2+2),b.fill(),c%2&&b.stroke();g(6,40,5,5);g(6,40,5,5,e());g(15,54,38,-14,e());for(g=3;g--;)for(c=2;c--;)f(15*g+15,47,c?7:1,PI$$module$dist$littlejs_esm_min_js_tmp,3*PI$$module$dist$littlejs_esm_min_js_tmp,e(g,3)),b.stroke(),f(15*g+15,47,c?7:1,0,PI$$module$dist$littlejs_esm_min_js_tmp,e(g,2)),b.stroke();b.beginPath();b.lineTo(6,40);b.lineTo(68,40);b.stroke();b.beginPath();b.lineTo(77,54);b.lineTo(4,54);b.stroke();f=engineName$$module$dist$littlejs_esm_min_js_tmp;b.font="900 16px arial";b.textAlign="center";b.textBaseline="top";b.lineWidth=.1+3.9*h;g=0;for(c=0;c<f.length;++c)g+=b.measureText(f[c]).width;for(c=2;c--;)for(let k=0,n=41-g/2;k<f.length;++k)b.fillStyle=e(k,2),d=b.measureText(f[k]).width,b[c?"strokeText":"fillText"](f[k],n+d/2,55.5,17*h),n+=d;b.restore()}"use strict";"use strict";let newgrounds$$module$dist$littlejs_esm_min_js_tmp;class NewgroundsMedal$$module$dist$littlejs_esm_min_js_tmp extends Medal$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c,d,e){super(a,b,c,d,e)}unlock(){super.unlock();newgrounds$$module$dist$littlejs_esm_min_js_tmp&&newgrounds$$module$dist$littlejs_esm_min_js_tmp.unlockMedal(this.id)}}class NewgroundsPlugin$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c){ASSERT$$module$dist$littlejs_esm_min_js_tmp(!newgrounds$$module$dist$littlejs_esm_min_js_tmp,"there can only be one newgrounds object");ASSERT$$module$dist$littlejs_esm_min_js_tmp(!b||c,"must provide cryptojs if there is a cipher");newgrounds$$module$dist$littlejs_esm_min_js_tmp=this;this.app_id=a;this.cipher=b;this.cryptoJS=c;this.host=location?location.hostname:"";if(this.session_id=new URL(location.href).searchParams.get("ngio_session_id")){this.medals=(a=this.call("Medal.getList"))?a.result.data.medals:[];debugMedals$$module$dist$littlejs_esm_min_js_tmp&&console.log(this.medals);for(var d of this.medals)if(a=medals$$module$dist$littlejs_esm_min_js_tmp[d.id])a.image=new Image,a.image.src=d.icon,a.name=d.name,a.description=d.description,a.unlocked=d.unlocked,a.difficulty=d.difficulty,a.value=d.value,a.value&&(a.description+=` (${a.value})`);this.scoreboards=(d=this.call("ScoreBoard.getBoards"))?d.result.data.scoreboards:[];debugMedals$$module$dist$littlejs_esm_min_js_tmp&&console.log(this.scoreboards);setInterval(()=>this.call("Gateway.ping",0,!0),6e4)}}unlockMedal(a){return this.call("Medal.unlock",{id:a},!0)}postScore(a,b){return this.call("ScoreBoard.postScore",{id:a,value:b},!0)}getScores(a,b,c=0,d=0,e=10){return this.call("ScoreBoard.getScores",{id:a,user:b,social:c,skip:d,limit:e})}logView(){return this.call("App.logView",{host:this.host},!0)}call(a,b,c=!1){a={component:a,parameters:b};if(this.cipher){b=this.cryptoJS;var d=b.enc.Base64.parse(this.cipher);const e=b.lib.WordArray.random(16);d=b.AES.encrypt(JSON.stringify(a),d,{iv:e});a.secure=b.enc.Base64.stringify(e.concat(d.ciphertext));a.parameters=0}b={app_id:this.app_id,session_id:this.session_id,call:a};a=new FormData;a.append("input",JSON.stringify(b));b=new XMLHttpRequest;b.open("POST","https://newgrounds.io/gateway_v3.php",!debugMedals$$module$dist$littlejs_esm_min_js_tmp&&c);try{b.send(a)}catch(e){debugMedals$$module$dist$littlejs_esm_min_js_tmp&&console.log("newgrounds call failed",e);return}debugMedals$$module$dist$littlejs_esm_min_js_tmp&&console.log(b.responseText);return b.responseText&&JSON.parse(b.responseText)}}"use strict";let postProcess$$module$dist$littlejs_esm_min_js_tmp;class PostProcessPlugin$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b=!1){ASSERT$$module$dist$littlejs_esm_min_js_tmp(!postProcess$$module$dist$littlejs_esm_min_js_tmp,"Post process already initialized");postProcess$$module$dist$littlejs_esm_min_js_tmp=this;headlessMode$$module$dist$littlejs_esm_min_js_tmp||(a||="void mainImage(out vec4 c,vec2 p){c=texture(iChannel0,p/iResolution.xy);}",this.shader=glCreateProgram$$module$dist$littlejs_esm_min_js_tmp("#version 300 es\nprecision highp float;in vec2 p;void main(){gl_Position=vec4(p+p-1.,1,1);}","#version 300 es\nprecision highp float;uniform sampler2D iChannel0;uniform vec3 iResolution;uniform float iTime;out vec4 c;\n"+a+"\nvoid main(){mainImage(c,gl_FragCoord.xy);c.a=1.;}"),this.texture=glCreateTexture$$module$dist$littlejs_esm_min_js_tmp(),this.includeOverlay=b,engineAddPlugin$$module$dist$littlejs_esm_min_js_tmp(void 0,function(){if(!headlessMode$$module$dist$littlejs_esm_min_js_tmp){glEnable$$module$dist$littlejs_esm_min_js_tmp?(glFlush$$module$dist$littlejs_esm_min_js_tmp(),mainContext$$module$dist$littlejs_esm_min_js_tmp.drawImage(glCanvas$$module$dist$littlejs_esm_min_js_tmp,0,0)):glContext$$module$dist$littlejs_esm_min_js_tmp.viewport(0,0,glCanvas$$module$dist$littlejs_esm_min_js_tmp.width=mainCanvas$$module$dist$littlejs_esm_min_js_tmp.width,glCanvas$$module$dist$littlejs_esm_min_js_tmp.height=mainCanvas$$module$dist$littlejs_esm_min_js_tmp.height);postProcess$$module$dist$littlejs_esm_min_js_tmp.includeOverlay&&(mainContext$$module$dist$littlejs_esm_min_js_tmp.drawImage(overlayCanvas$$module$dist$littlejs_esm_min_js_tmp,0,0),overlayCanvas$$module$dist$littlejs_esm_min_js_tmp.width|=0);glContext$$module$dist$littlejs_esm_min_js_tmp.useProgram(postProcess$$module$dist$littlejs_esm_min_js_tmp.shader);glContext$$module$dist$littlejs_esm_min_js_tmp.bindBuffer(glContext$$module$dist$littlejs_esm_min_js_tmp.ARRAY_BUFFER,glGeometryBuffer$$module$dist$littlejs_esm_min_js_tmp);glContext$$module$dist$littlejs_esm_min_js_tmp.pixelStorei(glContext$$module$dist$littlejs_esm_min_js_tmp.UNPACK_FLIP_Y_WEBGL,1);glContext$$module$dist$littlejs_esm_min_js_tmp.disable(glContext$$module$dist$littlejs_esm_min_js_tmp.BLEND);glContext$$module$dist$littlejs_esm_min_js_tmp.activeTexture(glContext$$module$dist$littlejs_esm_min_js_tmp.TEXTURE0);glContext$$module$dist$littlejs_esm_min_js_tmp.bindTexture(glContext$$module$dist$littlejs_esm_min_js_tmp.TEXTURE_2D,postProcess$$module$dist$littlejs_esm_min_js_tmp.texture);glContext$$module$dist$littlejs_esm_min_js_tmp.texImage2D(glContext$$module$dist$littlejs_esm_min_js_tmp.TEXTURE_2D,0,glContext$$module$dist$littlejs_esm_min_js_tmp.RGBA,glContext$$module$dist$littlejs_esm_min_js_tmp.RGBA,glContext$$module$dist$littlejs_esm_min_js_tmp.UNSIGNED_BYTE,mainCanvas$$module$dist$littlejs_esm_min_js_tmp);var c=glContext$$module$dist$littlejs_esm_min_js_tmp.getAttribLocation(postProcess$$module$dist$littlejs_esm_min_js_tmp.shader,"p");glContext$$module$dist$littlejs_esm_min_js_tmp.enableVertexAttribArray(c);glContext$$module$dist$littlejs_esm_min_js_tmp.vertexAttribPointer(c,2,glContext$$module$dist$littlejs_esm_min_js_tmp.FLOAT,!1,8,0);glContext$$module$dist$littlejs_esm_min_js_tmp.uniform1i(glContext$$module$dist$littlejs_esm_min_js_tmp.getUniformLocation(postProcess$$module$dist$littlejs_esm_min_js_tmp.shader,"iChannel0"),0);glContext$$module$dist$littlejs_esm_min_js_tmp.uniform1f(glContext$$module$dist$littlejs_esm_min_js_tmp.getUniformLocation(postProcess$$module$dist$littlejs_esm_min_js_tmp.shader,"iTime"),time$$module$dist$littlejs_esm_min_js_tmp);glContext$$module$dist$littlejs_esm_min_js_tmp.uniform3f(glContext$$module$dist$littlejs_esm_min_js_tmp.getUniformLocation(postProcess$$module$dist$littlejs_esm_min_js_tmp.shader,"iResolution"),mainCanvas$$module$dist$littlejs_esm_min_js_tmp.width,mainCanvas$$module$dist$littlejs_esm_min_js_tmp.height,1);glContext$$module$dist$littlejs_esm_min_js_tmp.drawArrays(glContext$$module$dist$littlejs_esm_min_js_tmp.TRIANGLE_STRIP,0,4)}}))}}"use strict";class ZzFXMusic$$module$dist$littlejs_esm_min_js_tmp extends Sound$$module$dist$littlejs_esm_min_js_tmp{constructor(a){super(void 0);soundEnable$$module$dist$littlejs_esm_min_js_tmp&&!headlessMode$$module$dist$littlejs_esm_min_js_tmp&&(this.randomness=0,this.sampleChannels=zzfxM$$module$dist$littlejs_esm_min_js_tmp(...a),this.sampleRate=zzfxR$$module$dist$littlejs_esm_min_js_tmp)}playMusic(a,b=!1){return super.play(void 0,a,1,1,b)}}function zzfxM$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d=125){let e,f,g,h,k,n,l,m,r,p,q,t,u,A=0,y,C=[],B=[],v=[],w=0,D=0,G=1,J={},H=zzfxR$$module$dist$littlejs_esm_min_js_tmp/d*60>>2;for(;G;w++)C=[G=m=t=0],c.forEach((E,K)=>{l=b[E][w]||[0,0,0];G|=b[E][w]&&1;y=t+(b[E][0].length-2-(m?0:1))*H;u=K==c.length-1;e=2;for(g=t;e<l.length+u;m=++e){k=l[e];r=e==l.length+u-1&&u||p!=(l[0]||0)||k|0;for(f=0;f<H&&m;f++>H-99&&r&&1>q?q+=1/99:0)n=(1-q)*C[A++]/2||0,B[g]=(B[g]||0)-n*D+n,v[g]=(v[g++]||0)+n*D+n;k&&(q=k%1,D=l[1]||0,k|=0)&&(C=J[[p=l[A=0]||0,k]]=J[[p,k]]||(h=[...a[p]],h[2]=(h[2]||220)*2**(k/12-1),0<k?zzfxG$$module$dist$littlejs_esm_min_js_tmp(...h):[]))}t=y});return[B,v]}"use strict";let uiSystem$$module$dist$littlejs_esm_min_js_tmp;class UISystemPlugin$$module$dist$littlejs_esm_min_js_tmp{constructor(a=overlayContext$$module$dist$littlejs_esm_min_js_tmp){ASSERT$$module$dist$littlejs_esm_min_js_tmp(!uiSystem$$module$dist$littlejs_esm_min_js_tmp,"UI system already initialized");uiSystem$$module$dist$littlejs_esm_min_js_tmp=this;this.defaultColor=WHITE$$module$dist$littlejs_esm_min_js_tmp;this.defaultTextColor=this.defaultLineColor=BLACK$$module$dist$littlejs_esm_min_js_tmp;this.defaultButtonColor=hsl$$module$dist$littlejs_esm_min_js_tmp(0,0,.5);this.defaultHoverColor=hsl$$module$dist$littlejs_esm_min_js_tmp(0,0,.7);this.defaultLineWidth=4;this.defaultFont="arial";this.uiObjects=[];this.uiContext=a;engineAddPlugin$$module$dist$littlejs_esm_min_js_tmp(function(){function b(c){if(c.visible){c.parent&&(c.pos=c.localPos.add(c.parent.pos));c.update();for(const d of c.children)b(d)}}uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiObjects.forEach(c=>c.parent||b(c))},function(){function b(c){if(c.visible){c.parent&&(c.pos=c.localPos.add(c.parent.pos));c.render();for(const d of c.children)b(d)}}uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiObjects.forEach(c=>c.parent||b(c))})}drawRect(a,b,c=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultColor,d=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultLineWidth,e=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultLineColor){uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiContext.fillStyle=c.toString();uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiContext.beginPath();uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiContext.rect(a.x-b.x/2,a.y-b.y/2,b.x,b.y);uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiContext.fill();d&&(uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiContext.strokeStyle=e.toString(),uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiContext.lineWidth=d,uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiContext.stroke())}drawLine(a,b,c=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultLineWidth,d=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultLineColor){uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiContext.strokeStyle=d.toString();uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiContext.lineWidth=c;uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiContext.beginPath();uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiContext.lineTo(a.x,a.y);uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiContext.lineTo(b.x,b.y);uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiContext.stroke()}drawTile(a,b,c,d=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultColor,e=0,f=!1){drawTile$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d,e,f,BLACK$$module$dist$littlejs_esm_min_js_tmp,!1,!0,uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiContext)}drawText(a,b,c,d=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultColor,e=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultLineWidth,f=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultLineColor,g="center",h=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultFont){drawTextScreen$$module$dist$littlejs_esm_min_js_tmp(a,b,c.y,d,e,f,g,h,c.x,uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiContext)}}class UIObject$$module$dist$littlejs_esm_min_js_tmp{constructor(a=vec2$$module$dist$littlejs_esm_min_js_tmp(),b=vec2$$module$dist$littlejs_esm_min_js_tmp()){this.localPos=a.copy();this.pos=a.copy();this.size=b.copy();this.color=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultColor;this.lineColor=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultLineColor;this.textColor=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultTextColor;this.hoverColor=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultHoverColor;this.lineWidth=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultLineWidth;this.font=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultFont;this.visible=!0;this.children=[];this.parent=void 0;uiSystem$$module$dist$littlejs_esm_min_js_tmp.uiObjects.push(this)}addChild(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(!a.parent&&!this.children.includes(a));this.children.push(a);a.parent=this}removeChild(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(a.parent==this&&this.children.includes(a));this.children.splice(this.children.indexOf(a),1);a.parent=void 0}update(){const a=this.mouseIsOver,b=keyIsDown$$module$dist$littlejs_esm_min_js_tmp(0);if(!b||isTouchDevice$$module$dist$littlejs_esm_min_js_tmp){this.mouseIsOver=isOverlapping$$module$dist$littlejs_esm_min_js_tmp(this.pos,this.size,mousePosScreen$$module$dist$littlejs_esm_min_js_tmp);!b&&isTouchDevice$$module$dist$littlejs_esm_min_js_tmp&&(this.mouseIsOver=!1);if(this.mouseIsOver&&!a)this.onEnter();if(!this.mouseIsOver&&a)this.onLeave()}keyWasPressed$$module$dist$littlejs_esm_min_js_tmp(0)&&this.mouseIsOver?(this.mouseIsHeld=!0,this.onPress(),isTouchDevice$$module$dist$littlejs_esm_min_js_tmp&&(this.mouseIsOver=!1)):this.mouseIsHeld&&!b&&(this.mouseIsHeld=!1,this.onRelease())}render(){this.size.x&&this.size.y&&uiSystem$$module$dist$littlejs_esm_min_js_tmp.drawRect(this.pos,this.size,this.color,this.lineWidth,this.lineColor)}onEnter(){}onLeave(){}onPress(){}onRelease(){}onChange(){}}class UIText$$module$dist$littlejs_esm_min_js_tmp extends UIObject$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c="",d="center",e=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultFont){super(a,b);this.text=c;this.align=d;this.font=e;this.lineWidth=0}render(){uiSystem$$module$dist$littlejs_esm_min_js_tmp.drawText(this.text,this.pos,this.size,this.textColor,this.lineWidth,this.lineColor,this.align,this.font)}}class UITile$$module$dist$littlejs_esm_min_js_tmp extends UIObject$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c,d=WHITE$$module$dist$littlejs_esm_min_js_tmp,e=0,f=!1){super(a,b);this.tileInfo=c;this.angle=e;this.mirror=f;this.color=d}render(){uiSystem$$module$dist$littlejs_esm_min_js_tmp.drawTile(this.pos,this.size,this.tileInfo,this.color,this.angle,this.mirror)}}class UIButton$$module$dist$littlejs_esm_min_js_tmp extends UIObject$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c="",d=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultButtonColor){super(a,b);this.text=c;this.color=d}render(){uiSystem$$module$dist$littlejs_esm_min_js_tmp.drawRect(this.pos,this.size,this.mouseIsOver?this.hoverColor:this.color,this.lineWidth,this.mouseIsHeld?this.color:this.lineColor);const a=vec2$$module$dist$littlejs_esm_min_js_tmp(this.size.x,.8*this.size.y);uiSystem$$module$dist$littlejs_esm_min_js_tmp.drawText(this.text,this.pos,a,this.textColor,0,void 0,this.align,this.font)}}class UICheckbox$$module$dist$littlejs_esm_min_js_tmp extends UIObject$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c=!1){super(a,b);this.checked=c}onPress(){this.checked=!this.checked;this.onChange()}render(){uiSystem$$module$dist$littlejs_esm_min_js_tmp.drawRect(this.pos,this.size,this.mouseIsOver?this.hoverColor:this.color,this.lineWidth,this.lineColor);this.checked&&(uiSystem$$module$dist$littlejs_esm_min_js_tmp.drawLine(this.pos.add(this.size.multiply(vec2$$module$dist$littlejs_esm_min_js_tmp(-.5,-.5))),this.pos.add(this.size.multiply(vec2$$module$dist$littlejs_esm_min_js_tmp(.5,.5))),this.lineWidth,this.lineColor),uiSystem$$module$dist$littlejs_esm_min_js_tmp.drawLine(this.pos.add(this.size.multiply(vec2$$module$dist$littlejs_esm_min_js_tmp(-.5,.5))),this.pos.add(this.size.multiply(vec2$$module$dist$littlejs_esm_min_js_tmp(.5,-.5))),this.lineWidth,this.lineColor))}}class UIScrollbar$$module$dist$littlejs_esm_min_js_tmp extends UIObject$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c=.5,d="",e=uiSystem$$module$dist$littlejs_esm_min_js_tmp.defaultButtonColor,f=WHITE$$module$dist$littlejs_esm_min_js_tmp){super(a,b);this.value=c;this.text=d;this.color=e;this.handleColor=f}update(){super.update();if(this.mouseIsHeld){var a=vec2$$module$dist$littlejs_esm_min_js_tmp(this.size.y);a=this.size.x-a.x;const b=this.value;this.value=percent$$module$dist$littlejs_esm_min_js_tmp(mousePosScreen$$module$dist$littlejs_esm_min_js_tmp.x,this.pos.x-a/2,this.pos.x+a/2);this.value==b||this.onChange()}}render(){uiSystem$$module$dist$littlejs_esm_min_js_tmp.drawRect(this.pos,this.size,this.mouseIsOver?this.hoverColor:this.color,this.lineWidth,this.mouseIsHeld?this.color:this.lineColor);var a=vec2$$module$dist$littlejs_esm_min_js_tmp(this.size.y),b=this.size.x-a.x;b=vec2$$module$dist$littlejs_esm_min_js_tmp(lerp$$module$dist$littlejs_esm_min_js_tmp(this.value,this.pos.x-b/2,this.pos.x+b/2),this.pos.y);uiSystem$$module$dist$littlejs_esm_min_js_tmp.drawRect(b,a,this.mouseIsHeld?this.color:this.handleColor,this.lineWidth,this.lineColor);a=vec2$$module$dist$littlejs_esm_min_js_tmp(this.size.x,.8*this.size.y);uiSystem$$module$dist$littlejs_esm_min_js_tmp.drawText(this.text,this.pos,a,this.textColor,0,void 0,this.align,this.font)}}"use strict";let box2d$$module$dist$littlejs_esm_min_js_tmp,box2dDebug$$module$dist$littlejs_esm_min_js_tmp=!1;class Box2dObject$$module$dist$littlejs_esm_min_js_tmp extends EngineObject$$module$dist$littlejs_esm_min_js_tmp{constructor(a=vec2$$module$dist$littlejs_esm_min_js_tmp(),b,c,d=0,e,f=box2d$$module$dist$littlejs_esm_min_js_tmp.bodyTypeDynamic,g=0){super(a,b,c,d,e,g);b=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2BodyDef;b.set_type(f);b.set_position(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a));b.set_angle(-d);this.body=box2d$$module$dist$littlejs_esm_min_js_tmp.world.CreateBody(b);this.body.object=this;this.outlineColor=BLACK$$module$dist$littlejs_esm_min_js_tmp}destroy(){this.body&&box2d$$module$dist$littlejs_esm_min_js_tmp.world.DestroyBody(this.body);this.body=0;super.destroy()}update(){this.pos=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.body.GetPosition());this.angle=-this.body.GetAngle()}render(){this.tileInfo?super.render():this.drawFixtures(this.color,this.outlineColor,this.lineWidth,mainContext$$module$dist$littlejs_esm_min_js_tmp)}renderDebugInfo(){var a=!this.getIsAwake();const b=this.getBodyType()==box2d$$module$dist$littlejs_esm_min_js_tmp.bodyTypeStatic;a=rgb$$module$dist$littlejs_esm_min_js_tmp(a?1:0,a?1:0,b?1:0,.5);this.drawFixtures(a)}drawFixtures(a=WHITE$$module$dist$littlejs_esm_min_js_tmp,b,c=.1,d){this.getFixtureList().forEach(e=>box2d$$module$dist$littlejs_esm_min_js_tmp.drawFixture(e,this.pos,this.angle,a,b,c,d))}beginContact(a){}endContact(a){}addShape(a,b=1,c=.2,d=0,e=!1){const f=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2FixtureDef;f.set_shape(a);f.set_density(b);f.set_friction(c);f.set_restitution(d);f.set_isSensor(e);return this.body.CreateFixture(f)}addBox(a=vec2$$module$dist$littlejs_esm_min_js_tmp(1),b=vec2$$module$dist$littlejs_esm_min_js_tmp(),c=0,d,e,f,g){const h=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2PolygonShape;h.SetAsBox(a.x/2,a.y/2,box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(b),c);return this.addShape(h,d,e,f,g)}addPoly(a,b,c,d,e){ASSERT$$module$dist$littlejs_esm_min_js_tmp(3<=a.length&&8>=a.length);const f=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2PolygonShape;var g=box2d$$module$dist$littlejs_esm_min_js_tmp.instance._malloc(8*a.length);for(let h=0,k=0;h<a.length;++h)box2d$$module$dist$littlejs_esm_min_js_tmp.instance.HEAPF32[g+k>>2]=a[h].x,k+=4,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.HEAPF32[g+k>>2]=a[h].y,k+=4;g=box2d$$module$dist$littlejs_esm_min_js_tmp.instance.wrapPointer(g,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Vec2);f.Set(g,a.length);return this.addShape(f,b,c,d,e)}addRegularPoly(a=1,b=8,c,d,e,f){const g=[];a/=2;for(let h=b;h--;)g.push(vec2$$module$dist$littlejs_esm_min_js_tmp(a,0).rotate((h+.5)/b*PI$$module$dist$littlejs_esm_min_js_tmp*2));return this.addPoly(g,c,d,e,f)}addRandomPoly(a=1,b,c,d,e){const f=randInt$$module$dist$littlejs_esm_min_js_tmp(3,9),g=[];a/=2;for(let h=f;h--;)g.push(vec2$$module$dist$littlejs_esm_min_js_tmp(rand$$module$dist$littlejs_esm_min_js_tmp(a/2,1.5*a),0).rotate(h/f*PI$$module$dist$littlejs_esm_min_js_tmp*2));return this.addPoly(g,b,c,d,e)}addCircle(a=1,b=vec2$$module$dist$littlejs_esm_min_js_tmp(),c,d,e,f){const g=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2CircleShape;g.set_m_p(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(b));g.set_m_radius(a/2);return this.addShape(g,c,d,e,f)}addEdge(a,b,c,d,e,f){const g=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2EdgeShape;g.Set(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a),box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(b));return this.addShape(g,c,d,e,f)}addEdgeLoop(a,b,c,d,e){const f=[];for(let h=0;h<a.length;++h){var g=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2EdgeShape;g.set_m_vertex0(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a[mod$$module$dist$littlejs_esm_min_js_tmp(h-1,a.length)]));g.set_m_vertex1(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a[mod$$module$dist$littlejs_esm_min_js_tmp(h+0,a.length)]));g.set_m_vertex2(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a[mod$$module$dist$littlejs_esm_min_js_tmp(h+1,a.length)]));g.set_m_vertex3(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a[mod$$module$dist$littlejs_esm_min_js_tmp(h+2,a.length)]));g=this.addShape(g,b,c,d,e);f.push(g)}return f}addEdgeList(a,b,c,d,e){const f=[];for(let h=0;h<a.length-1;++h){var g=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2EdgeShape;a[h-1]&&g.set_m_vertex0(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a[h-1]));a[h+0]&&g.set_m_vertex1(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a[h+0]));a[h+1]&&g.set_m_vertex2(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a[h+1]));a[h+2]&&g.set_m_vertex3(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a[h+2]));g=this.addShape(g,b,c,d,e);f.push(g)}return f}getCenterOfMass(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.body.GetWorldCenter())}getLinearVelocity(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.body.GetLinearVelocity())}getAngularVelocity(){return this.body.GetAngularVelocity()}getMass(){return this.body.GetMass()}getInertia(){return this.body.GetInertia()}getIsAwake(){return this.body.IsAwake()}getBodyType(){return this.body.GetType()}setTransform(a,b){this.pos=a;this.angle=b;this.body.SetTransform(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a),b)}setPosition(a){this.setTransform(a,this.body.GetAngle())}setAngle(a){this.setTransform(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.body.GetPosition()),-a)}setLinearVelocity(a){this.body.SetLinearVelocity(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a))}setAngularVelocity(a){this.body.SetAngularVelocity(a)}setLinearDamping(a){this.body.SetLinearDamping(a)}setAngularDamping(a){this.body.SetAngularDamping(a)}setGravityScale(a=1){this.body.SetGravityScale(this.gravityScale=a)}setBullet(a=!0){this.body.SetBullet(a)}setAwake(a=!0){this.body.SetAwake(a)}setBodyType(a){this.body.SetType(a)}setSleepingAllowed(a=!0){this.body.SetSleepingAllowed(a)}setFixedRotation(a=!0){this.body.SetFixedRotation(a)}setCenterOfMass(a){this.setMassData(a)}setMass(a){this.setMassData(void 0,a)}setMomentOfInertia(a){this.setMassData(void 0,void 0,a)}resetMassData(){this.body.ResetMassData()}setMassData(a,b,c){const d=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2MassData;this.body.GetMassData(d);a&&d.set_center(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a));b&&d.set_mass(b);c&&d.set_I(c);this.body.SetMassData(d)}setFilterData(a=0,b=0,c=0){this.getFixtureList().forEach(d=>{d=d.GetFilterData();d.set_categoryBits(a);d.set_maskBits(65535&~b);d.set_groupIndex(c)})}setSensor(a=!0){this.getFixtureList().forEach(b=>b.SetSensor(a))}applyForce(a,b){b||=this.getCenterOfMass();this.setAwake();this.body.ApplyForce(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a),box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(b))}applyAcceleration(a,b){b||=this.getCenterOfMass();this.setAwake();this.body.ApplyLinearImpulse(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a),box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(b))}applyTorque(a){this.setAwake();this.body.ApplyTorque(a)}applyAngularAcceleration(a){this.setAwake();this.body.ApplyAngularImpulse(a)}hasFixtures(){return!box2d$$module$dist$littlejs_esm_min_js_tmp.isNull(this.body.GetFixtureList())}getFixtureList(){const a=[];for(let b=this.body.GetFixtureList();!box2d$$module$dist$littlejs_esm_min_js_tmp.isNull(b);)a.push(b),b=b.GetNext();return a}hasJoints(){return!box2d$$module$dist$littlejs_esm_min_js_tmp.isNull(this.body.GetJointList())}getJointList(){const a=[];for(let b=this.body.GetJointList();!box2d$$module$dist$littlejs_esm_min_js_tmp.isNull(b);)a.push(b),b=b.get_next();return a}}class Box2dRaycastResult$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c,d){this.object=a.GetBody().object;this.fixture=a;this.point=b;this.normal=c;this.fraction=d}}class Box2dJoint$$module$dist$littlejs_esm_min_js_tmp{constructor(a){this.box2dJoint=box2d$$module$dist$littlejs_esm_min_js_tmp.castObjectType(box2d$$module$dist$littlejs_esm_min_js_tmp.world.CreateJoint(a))}destroy(){box2d$$module$dist$littlejs_esm_min_js_tmp.world.DestroyJoint(this.box2dJoint);this.box2dJoint=0}getObjectA(){return this.box2dJoint.GetBodyA().object}getObjectB(){return this.box2dJoint.GetBodyB().object}getAnchorA(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetAnchorA())}getAnchorB(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetAnchorB())}getReactionForce(a){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetReactionForce(1/a))}getReactionTorque(a){return this.box2dJoint.GetReactionTorque(1/a)}getCollideConnected(){return this.box2dJoint.getCollideConnected()}isActive(){return this.box2dJoint.IsActive()}}class Box2dTargetJoint$$module$dist$littlejs_esm_min_js_tmp extends Box2dJoint$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c){a.setAwake();const d=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2MouseJointDef;d.set_bodyA(b.body);d.set_bodyB(a.body);d.set_target(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(c));d.set_maxForce(2e3*a.getMass());super(d)}setTarget(a){this.box2dJoint.SetTarget(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a))}getTarget(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetTarget())}setMaxForce(a){this.box2dJoint.SetMaxForce(a)}getMaxForce(){return this.box2dJoint.GetMaxForce()}setFrequency(a){this.box2dJoint.SetFrequency(a)}getFrequency(){return this.box2dJoint.GetFrequency()}}class Box2dDistanceJoint$$module$dist$littlejs_esm_min_js_tmp extends Box2dJoint$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c,d,e=!1){c||=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(a.body.GetPosition());d||=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(b.body.GetPosition());const f=a.worldToLocal(c),g=b.worldToLocal(d),h=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2DistanceJointDef;h.set_bodyA(a.body);h.set_bodyB(b.body);h.set_localAnchorA(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(f));h.set_localAnchorB(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(g));h.set_length(c.distance(d));h.set_collideConnected(e);super(h)}getLocalAnchorA(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAnchorA())}getLocalAnchorB(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAnchorB())}setLength(a){this.box2dJoint.SetLength(a)}getLength(){return this.box2dJoint.GetLength()}setFrequency(a){this.box2dJoint.SetFrequency(a)}getFrequency(){return this.box2dJoint.GetFrequency()}setDampingRatio(a){this.box2dJoint.SetDampingRatio(a)}getDampingRatio(){return this.box2dJoint.GetDampingRatio()}}class Box2dPinJoint$$module$dist$littlejs_esm_min_js_tmp extends Box2dDistanceJoint$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c=a.pos,d=!1){super(a,b,void 0,c,d)}}class Box2dRopeJoint$$module$dist$littlejs_esm_min_js_tmp extends Box2dJoint$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c,d,e=0,f=!1){c||=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(a.body.GetPosition());d||=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(b.body.GetPosition());const g=a.worldToLocal(c),h=b.worldToLocal(d),k=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2RopeJointDef;k.set_bodyA(a.body);k.set_bodyB(b.body);k.set_localAnchorA(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(g));k.set_localAnchorB(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(h));k.set_maxLength(c.distance(d)+e);k.set_collideConnected(f);super(k)}getLocalAnchorA(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAnchorA())}getLocalAnchorB(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAnchorB())}setMaxLength(a){this.box2dJoint.SetMaxLength(a)}getMaxLength(){return this.box2dJoint.GetMaxLength()}}class Box2dRevoluteJoint$$module$dist$littlejs_esm_min_js_tmp extends Box2dJoint$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c,d=!1){c||=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(b.body.GetPosition());const e=a.worldToLocal(c);c=b.worldToLocal(c);const f=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2RevoluteJointDef;f.set_bodyA(a.body);f.set_bodyB(b.body);f.set_localAnchorA(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(e));f.set_localAnchorB(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(c));f.set_referenceAngle(a.body.GetAngle()-b.body.GetAngle());f.set_collideConnected(d);super(f)}getLocalAnchorA(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAnchorA())}getLocalAnchorB(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAnchorB())}getReferenceAngle(){return this.box2dJoint.GetReferenceAngle()}getJointAngle(){return this.box2dJoint.GetJointAngle()}getJointSpeed(){return this.box2dJoint.GetJointSpeed()}isLimitEnabled(){return this.box2dJoint.IsLimitEnabled()}enableLimit(a=!0){return this.box2dJoint.enableLimit(a)}getLowerLimit(){return this.box2dJoint.GetLowerLimit()}getUpperLimit(){return this.box2dJoint.GetUpperLimit()}setLimits(a,b){return this.box2dJoint.SetLimits(a,b)}isMotorEnabled(){return this.box2dJoint.IsMotorEnabled()}enableMotor(a=!0){return this.box2dJoint.EnableMotor(a)}setMotorSpeed(a){return this.box2dJoint.SetMotorSpeed(a)}getMotorSpeed(){return this.box2dJoint.GetMotorSpeed()}setMaxMotorTorque(a){return this.box2dJoint.SetMaxMotorTorque(a)}getMaxMotorTorque(){return this.box2dJoint.GetMaxMotorTorque()}getMotorTorque(a){return this.box2dJoint.GetMotorTorque(1/a)}}class Box2dGearJoint$$module$dist$littlejs_esm_min_js_tmp extends Box2dJoint$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c,d,e=1){const f=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2GearJointDef;f.set_bodyA(a.body);f.set_bodyB(b.body);f.set_joint1(c.box2dJoint);f.set_joint2(d.box2dJoint);f.set_ratio(e);super(f);this.joint1=c;this.joint2=d}getJoint1(){return this.joint1}getJoint2(){return this.joint2}setRatio(a){return this.box2dJoint.SetRatio(a)}getRatio(){return this.box2dJoint.GetRatio()}}class Box2dPrismaticJoint$$module$dist$littlejs_esm_min_js_tmp extends Box2dJoint$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c,d=vec2$$module$dist$littlejs_esm_min_js_tmp(0,1),e=!1){c||=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(b.body.GetPosition());const f=a.worldToLocal(c);c=b.worldToLocal(c);d=b.worldToLocalVector(d);const g=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2PrismaticJointDef;g.set_bodyA(a.body);g.set_bodyB(b.body);g.set_localAnchorA(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(f));g.set_localAnchorB(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(c));g.set_localAxisA(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(d));g.set_referenceAngle(a.body.GetAngle()-b.body.GetAngle());g.set_collideConnected(e);super(g)}getLocalAnchorA(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAnchorA())}getLocalAnchorB(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAnchorB())}getLocalAxisA(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAxisA())}getReferenceAngle(){return this.box2dJoint.GetReferenceAngle()}getJointTranslation(){return this.box2dJoint.GetJointTranslation()}getJointSpeed(){return this.box2dJoint.GetJointSpeed()}isLimitEnabled(){return this.box2dJoint.IsLimitEnabled()}enableLimit(a=!0){return this.box2dJoint.enableLimit(a)}getLowerLimit(){return this.box2dJoint.GetLowerLimit()}getUpperLimit(){return this.box2dJoint.GetUpperLimit()}setLimits(a,b){return this.box2dJoint.SetLimits(a,b)}isMotorEnabled(){return this.box2dJoint.IsMotorEnabled()}enableMotor(a=!0){return this.box2dJoint.EnableMotor(a)}setMotorSpeed(a){return this.box2dJoint.SetMotorSpeed(a)}getMotorSpeed(){return this.box2dJoint.GetMotorSpeed()}setMaxMotorForce(a){return this.box2dJoint.SetMaxMotorForce(a)}getMaxMotorForce(){return this.box2dJoint.GetMaxMotorForce()}getMotorForce(a){return this.box2dJoint.GetMotorForce(1/a)}}class Box2dWheelJoint$$module$dist$littlejs_esm_min_js_tmp extends Box2dJoint$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c,d=vec2$$module$dist$littlejs_esm_min_js_tmp(0,1),e=!1){c||=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(b.body.GetPosition());const f=a.worldToLocal(c);c=b.worldToLocal(c);d=b.worldToLocalVector(d);const g=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2WheelJointDef;g.set_bodyA(a.body);g.set_bodyB(b.body);g.set_localAnchorA(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(f));g.set_localAnchorB(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(c));g.set_localAxisA(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(d));g.set_collideConnected(e);super(g)}getLocalAnchorA(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAnchorA())}getLocalAnchorB(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAnchorB())}getLocalAxisA(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAxisA())}getJointTranslation(){return this.box2dJoint.GetJointTranslation()}getJointSpeed(){return this.box2dJoint.GetJointSpeed()}isMotorEnabled(){return this.box2dJoint.IsMotorEnabled()}enableMotor(a=!0){return this.box2dJoint.EnableMotor(a)}setMotorSpeed(a){return this.box2dJoint.SetMotorSpeed(a)}getMotorSpeed(){return this.box2dJoint.GetMotorSpeed()}setMaxMotorTorque(a){return this.box2dJoint.SetMaxMotorTorque(a)}getMaxMotorTorque(){return this.box2dJoint.GetMaxMotorTorque()}getMotorTorque(a){return this.box2dJoint.GetMotorTorque(1/a)}setSpringFrequencyHz(a){return this.box2dJoint.SetSpringFrequencyHz(a)}getSpringFrequencyHz(){return this.box2dJoint.GetSpringFrequencyHz()}setSpringDampingRatio(a){return this.box2dJoint.SetSpringDampingRatio(a)}getSpringDampingRatio(){return this.box2dJoint.GetSpringDampingRatio()}}class Box2dWeldJoint$$module$dist$littlejs_esm_min_js_tmp extends Box2dJoint$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c,d=!1){c||=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(b.body.GetPosition());const e=a.worldToLocal(c);c=b.worldToLocal(c);const f=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2WeldJointDef;f.set_bodyA(a.body);f.set_bodyB(b.body);f.set_localAnchorA(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(e));f.set_localAnchorB(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(c));f.set_referenceAngle(a.body.GetAngle()-b.body.GetAngle());f.set_collideConnected(d);super(f)}getLocalAnchorA(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAnchorA())}getLocalAnchorB(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAnchorB())}getReferenceAngle(){return this.box2dJoint.GetReferenceAngle()}setFrequency(a){return this.box2dJoint.SetFrequency(a)}getFrequency(){return this.box2dJoint.GetFrequency()}setSpringDampingRatio(a){return this.box2dJoint.SetSpringDampingRatio(a)}getSpringDampingRatio(){return this.box2dJoint.GetSpringDampingRatio()}}class Box2dFrictionJoint$$module$dist$littlejs_esm_min_js_tmp extends Box2dJoint$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c,d=!1){c||=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(b.body.GetPosition());const e=a.worldToLocal(c);c=b.worldToLocal(c);const f=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2FrictionJointDef;f.set_bodyA(a.body);f.set_bodyB(b.body);f.set_localAnchorA(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(e));f.set_localAnchorB(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(c));f.set_collideConnected(d);super(f)}getLocalAnchorA(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAnchorA())}getLocalAnchorB(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLocalAnchorB())}setMaxForce(a){this.box2dJoint.SetMaxForce(a)}getMaxForce(){return this.box2dJoint.GetMaxForce()}setMaxTorque(a){this.box2dJoint.SetMaxTorque(a)}getMaxTorque(){return this.box2dJoint.GetMaxTorque()}}class Box2dPulleyJoint$$module$dist$littlejs_esm_min_js_tmp extends Box2dJoint$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b,c,d,e,f,g=1,h=!1){e||=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(a.body.GetPosition());f||=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(b.body.GetPosition());const k=a.worldToLocal(e),n=b.worldToLocal(f),l=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2PulleyJointDef;l.set_bodyA(a.body);l.set_bodyB(b.body);l.set_groundAnchorA(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(c));l.set_groundAnchorB(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(d));l.set_localAnchorA(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(k));l.set_localAnchorB(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(n));l.set_ratio(g);l.set_lengthA(c.distance(e));l.set_lengthB(d.distance(f));l.set_collideConnected(h);super(l)}getGroundAnchorA(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetGroundAnchorA())}getGroundAnchorB(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetGroundAnchorB())}getLengthA(){return this.box2dJoint.GetLengthA()}getLengthB(){return this.box2dJoint.GetLengthB()}getRatio(){return this.box2dJoint.GetRatio()}getCurrentLengthA(){return this.box2dJoint.GetCurrentLengthA()}getCurrentLengthB(){return this.box2dJoint.GetCurrentLengthB()}}class Box2dMotorJoint$$module$dist$littlejs_esm_min_js_tmp extends Box2dJoint$$module$dist$littlejs_esm_min_js_tmp{constructor(a,b){const c=a.worldToLocal(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(b.body.GetPosition())),d=b.body.GetAngle()-a.body.GetAngle(),e=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2MotorJointDef;e.set_bodyA(a.body);e.set_bodyB(b.body);e.set_linearOffset(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(c));e.set_angularOffset(d);super(e)}setLinearOffset(a){this.box2dJoint.SetLinearOffset(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a))}getLinearOffset(){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(this.box2dJoint.GetLinearOffset())}setAngularOffset(a){this.box2dJoint.SetAngularOffset(a)}getAngularOffset(){return this.box2dJoint.GetAngularOffset()}setMaxForce(a){this.box2dJoint.SetMaxForce(a)}getMaxForce(){return this.box2dJoint.GetMaxForce()}setMaxTorque(a){this.box2dJoint.SetMaxTorque(a)}getMaxTorque(){return this.box2dJoint.GetMaxTorque()}setCorrectionFactor(a){this.box2dJoint.SetCorrectionFactor(a)}getCorrectionFactor(){return this.box2dJoint.GetCorrectionFactor()}}class Box2dPlugin$$module$dist$littlejs_esm_min_js_tmp{constructor(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(!box2d$$module$dist$littlejs_esm_min_js_tmp,"Box2D already initialized");box2d$$module$dist$littlejs_esm_min_js_tmp=this;this.instance=a;this.world=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2World;this.velocityIterations=8;this.positionIterations=3;this.bodyTypeStatic=a.b2_staticBody;this.bodyTypeKinematic=a.b2_kinematicBody;this.bodyTypeDynamic=a.b2_dynamicBody;a=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.JSContactListener;a.BeginContact=function(b){var c=box2d$$module$dist$littlejs_esm_min_js_tmp.instance.wrapPointer(b,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Contact);b=c.GetFixtureA();c=c.GetFixtureB();b=b.GetBody().object;c=c.GetBody().object;b.beginContact(c);c.beginContact(b)};a.EndContact=function(b){var c=box2d$$module$dist$littlejs_esm_min_js_tmp.instance.wrapPointer(b,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Contact);b=c.GetFixtureA();c=c.GetFixtureB();b=b.GetBody().object;c=c.GetBody().object;b.endContact(c);c.endContact(b)};a.PreSolve=function(){};a.PostSolve=function(){};box2d$$module$dist$littlejs_esm_min_js_tmp.world.SetContactListener(a)}step(a=1){for(box2d$$module$dist$littlejs_esm_min_js_tmp.world.SetGravity(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(vec2$$module$dist$littlejs_esm_min_js_tmp(0,gravity$$module$dist$littlejs_esm_min_js_tmp)));a--;)box2d$$module$dist$littlejs_esm_min_js_tmp.world.Step(timeDelta$$module$dist$littlejs_esm_min_js_tmp,this.velocityIterations,this.positionIterations)}raycastAll(a,b){const c=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.JSRayCastCallback;c.ReportFixture=function(e,f,g,h){e=box2d$$module$dist$littlejs_esm_min_js_tmp.instance.wrapPointer(e,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Fixture);f=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2FromPointer(f);g=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2FromPointer(g);d.push(new Box2dRaycastResult$$module$dist$littlejs_esm_min_js_tmp(e,f,g,h));return 1};const d=[];box2d$$module$dist$littlejs_esm_min_js_tmp.world.RayCast(c,box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a),box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(b));debugRaycast$$module$dist$littlejs_esm_min_js_tmp&&debugLine$$module$dist$littlejs_esm_min_js_tmp(a,b,d.length?"#f00":"#00f",.02);return d}raycast(a,b){a=box2d$$module$dist$littlejs_esm_min_js_tmp.raycastAll(a,b);if(a.length)return a.reduce((c,d)=>c.fraction<d.fraction?c:d)}boxCastAll(a,b){const c=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.JSQueryCallback;c.ReportFixture=function(f){f=box2d$$module$dist$littlejs_esm_min_js_tmp.instance.wrapPointer(f,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Fixture).GetBody().object;e.includes(f)||e.push(f);return!0};const d=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2AABB;d.set_lowerBound(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a.subtract(b.scale(.5))));d.set_upperBound(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a.add(b.scale(.5))));let e=[];box2d$$module$dist$littlejs_esm_min_js_tmp.world.QueryAABB(c,d);debugRaycast$$module$dist$littlejs_esm_min_js_tmp&&debugRect$$module$dist$littlejs_esm_min_js_tmp(a,b,e.length?"#f00":"#00f",.02);return e}boxCast(a,b){const c=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.JSQueryCallback;c.ReportFixture=function(f){e=box2d$$module$dist$littlejs_esm_min_js_tmp.instance.wrapPointer(f,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Fixture).GetBody().object;return!1};const d=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2AABB;d.set_lowerBound(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a.subtract(b.scale(.5))));d.set_upperBound(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a.add(b.scale(.5))));let e;box2d$$module$dist$littlejs_esm_min_js_tmp.world.QueryAABB(c,d);debugRaycast$$module$dist$littlejs_esm_min_js_tmp&&debugRect$$module$dist$littlejs_esm_min_js_tmp(a,b,e?"#f00":"#00f",.02);return e}circleCastAll(a,b){const c=(b/2)**2;return box2d$$module$dist$littlejs_esm_min_js_tmp.boxCastAll(a,vec2$$module$dist$littlejs_esm_min_js_tmp(b)).filter(d=>d.pos.distanceSquared(a)<c)}circleCast(a,b){const c=(b/2)**2;b=box2d$$module$dist$littlejs_esm_min_js_tmp.boxCastAll(a,vec2$$module$dist$littlejs_esm_min_js_tmp(b));let d,e;for(const f of b)b=f.pos.distanceSquared(a),b<c&&(!d||b<e)&&(d=f,e=b);return d}pointCast(a,b=!0){const c=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.JSQueryCallback;c.ReportFixture=function(f){f=box2d$$module$dist$littlejs_esm_min_js_tmp.instance.wrapPointer(f,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Fixture);if(b&&f.GetBody().GetType()!=box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2_dynamicBody||!f.TestPoint(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a)))return!0;e=f.GetBody().object;return!1};const d=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2AABB;d.set_lowerBound(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a));d.set_upperBound(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2dTo(a));let e;debugRaycast$$module$dist$littlejs_esm_min_js_tmp&&debugRect$$module$dist$littlejs_esm_min_js_tmp(a,vec2$$module$dist$littlejs_esm_min_js_tmp(),e?"#f00":"#00f",.02);box2d$$module$dist$littlejs_esm_min_js_tmp.world.QueryAABB(c,d);return e}drawFixture(a,b,c,d=WHITE$$module$dist$littlejs_esm_min_js_tmp,e=BLACK$$module$dist$littlejs_esm_min_js_tmp,f=.1,g=mainContext$$module$dist$littlejs_esm_min_js_tmp){a=box2d$$module$dist$littlejs_esm_min_js_tmp.castObjectType(a.GetShape());switch(a.GetType()){case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Shape.e_polygon:let h=[];for(let k=a.GetVertexCount();k--;)h.push(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(a.GetVertex(k)));box2d$$module$dist$littlejs_esm_min_js_tmp.drawPoly(b,c,h,d,e,f,g);break;case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Shape.e_circle:c=a.get_m_radius();box2d$$module$dist$littlejs_esm_min_js_tmp.drawCircle(b,c,d,e,f,g);break;case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Shape.e_edge:e=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(a.get_m_vertex1()),a=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(a.get_m_vertex2()),box2d$$module$dist$littlejs_esm_min_js_tmp.drawLine(b,c,e,a,d,f,g)}}drawCircle(a,b,c=WHITE$$module$dist$littlejs_esm_min_js_tmp,d=BLACK$$module$dist$littlejs_esm_min_js_tmp,e=.1,f=mainContext$$module$dist$littlejs_esm_min_js_tmp){drawCanvas2D$$module$dist$littlejs_esm_min_js_tmp(a,vec2$$module$dist$littlejs_esm_min_js_tmp(1),0,0,g=>{g.beginPath();g.arc(0,0,b,0,9);box2d$$module$dist$littlejs_esm_min_js_tmp.drawFillStroke(c,d,e,g)},0,f)}drawPoly(a,b,c,d=WHITE$$module$dist$littlejs_esm_min_js_tmp,e=BLACK$$module$dist$littlejs_esm_min_js_tmp,f=.1,g=mainContext$$module$dist$littlejs_esm_min_js_tmp){drawCanvas2D$$module$dist$littlejs_esm_min_js_tmp(a,vec2$$module$dist$littlejs_esm_min_js_tmp(1),b,0,h=>{h.beginPath();c.forEach(k=>h.lineTo(k.x,k.y));h.closePath();box2d$$module$dist$littlejs_esm_min_js_tmp.drawFillStroke(d,e,f,h)},0,g)}drawLine(a,b,c,d,e=WHITE$$module$dist$littlejs_esm_min_js_tmp,f=.1,g=mainContext$$module$dist$littlejs_esm_min_js_tmp){drawCanvas2D$$module$dist$littlejs_esm_min_js_tmp(a,vec2$$module$dist$littlejs_esm_min_js_tmp(1),b,0,h=>{h.beginPath();h.lineTo(c.x,c.y);h.lineTo(d.x,d.y);box2d$$module$dist$littlejs_esm_min_js_tmp.drawFillStroke(0,e,f,h)},0,g)}drawFillStroke(a=WHITE$$module$dist$littlejs_esm_min_js_tmp,b=BLACK$$module$dist$littlejs_esm_min_js_tmp,c=.1,d=mainContext$$module$dist$littlejs_esm_min_js_tmp){a&&(d.fillStyle=a.toString(),d.fill());b&&c&&(d.lineWidth=c,d.lineJoin=d.lineCap="round",d.strokeStyle=b.toString(),d.stroke())}vec2From(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(a instanceof box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Vec2);return new Vector2$$module$dist$littlejs_esm_min_js_tmp(a.get_x(),a.get_y())}vec2FromPointer(a){return box2d$$module$dist$littlejs_esm_min_js_tmp.vec2From(box2d$$module$dist$littlejs_esm_min_js_tmp.instance.wrapPointer(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Vec2))}vec2dTo(a){ASSERT$$module$dist$littlejs_esm_min_js_tmp(a instanceof Vector2$$module$dist$littlejs_esm_min_js_tmp);return new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Vec2(a.x,a.y)}isNull(a){return!box2d$$module$dist$littlejs_esm_min_js_tmp.instance.getPointer(a)}castObjectType(a){switch(a.GetType()){case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Shape.e_circle:return box2d$$module$dist$littlejs_esm_min_js_tmp.instance.castObject(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2CircleShape);case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Shape.e_edge:return box2d$$module$dist$littlejs_esm_min_js_tmp.instance.castObject(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2EdgeShape);case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Shape.e_polygon:return box2d$$module$dist$littlejs_esm_min_js_tmp.instance.castObject(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2PolygonShape);case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Shape.e_chain:return box2d$$module$dist$littlejs_esm_min_js_tmp.instance.castObject(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2ChainShape);case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.e_revoluteJoint:return box2d$$module$dist$littlejs_esm_min_js_tmp.instance.castObject(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2RevoluteJoint);case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.e_prismaticJoint:return box2d$$module$dist$littlejs_esm_min_js_tmp.instance.castObject(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2PrismaticJoint);case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.e_distanceJoint:return box2d$$module$dist$littlejs_esm_min_js_tmp.instance.castObject(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2DistanceJoint);case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.e_pulleyJoint:return box2d$$module$dist$littlejs_esm_min_js_tmp.instance.castObject(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2PulleyJoint);case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.e_mouseJoint:return box2d$$module$dist$littlejs_esm_min_js_tmp.instance.castObject(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2MouseJoint);case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.e_gearJoint:return box2d$$module$dist$littlejs_esm_min_js_tmp.instance.castObject(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2GearJoint);case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.e_wheelJoint:return box2d$$module$dist$littlejs_esm_min_js_tmp.instance.castObject(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2WheelJoint);case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.e_weldJoint:return box2d$$module$dist$littlejs_esm_min_js_tmp.instance.castObject(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2WeldJoint);case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.e_frictionJoint:return box2d$$module$dist$littlejs_esm_min_js_tmp.instance.castObject(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2FrictionJoint);case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.e_ropeJoint:return box2d$$module$dist$littlejs_esm_min_js_tmp.instance.castObject(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2RopeJoint);case box2d$$module$dist$littlejs_esm_min_js_tmp.instance.e_motorJoint:return box2d$$module$dist$littlejs_esm_min_js_tmp.instance.castObject(a,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2MotorJoint)}ASSERT$$module$dist$littlejs_esm_min_js_tmp(!1,"Unknown box2d object type")}}function box2dEngineInit$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d,e,f,g){function h(){paused$$module$dist$littlejs_esm_min_js_tmp||box2d$$module$dist$littlejs_esm_min_js_tmp.step()}function k(){(box2dDebug$$module$dist$littlejs_esm_min_js_tmp||debugPhysics$$module$dist$littlejs_esm_min_js_tmp&&debugOverlay$$module$dist$littlejs_esm_min_js_tmp)&&box2d$$module$dist$littlejs_esm_min_js_tmp.world.DrawDebugData()}function n(){const l=new box2d$$module$dist$littlejs_esm_min_js_tmp.instance.JSDraw,m=p=>{p=box2d$$module$dist$littlejs_esm_min_js_tmp.instance.wrapPointer(p,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Color);return new Color$$module$dist$littlejs_esm_min_js_tmp(p.get_r(),p.get_g(),p.get_b())},r=(p,q)=>{const t=[];for(;q--;)t.push(box2d$$module$dist$littlejs_esm_min_js_tmp.vec2FromPointer(p+8*q));return t};l.DrawSegment=function(p,q,t){t=m(t).scale(1,.8);p=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2FromPointer(p);q=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2FromPointer(q);box2d$$module$dist$littlejs_esm_min_js_tmp.drawLine(vec2$$module$dist$littlejs_esm_min_js_tmp(),0,p,q,t,void 0,overlayContext$$module$dist$littlejs_esm_min_js_tmp)};l.DrawPolygon=function(p,q,t){t=m(t).scale(1,.8);p=r(p,q);box2d$$module$dist$littlejs_esm_min_js_tmp.drawPoly(vec2$$module$dist$littlejs_esm_min_js_tmp(),0,p,void 0,t,void 0,overlayContext$$module$dist$littlejs_esm_min_js_tmp)};l.DrawSolidPolygon=function(p,q,t){t=m(t).scale(1,.8);p=r(p,q);box2d$$module$dist$littlejs_esm_min_js_tmp.drawPoly(vec2$$module$dist$littlejs_esm_min_js_tmp(),0,p,t,t,void 0,overlayContext$$module$dist$littlejs_esm_min_js_tmp)};l.DrawCircle=function(p,q,t){t=m(t).scale(1,.8);p=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2FromPointer(p);box2d$$module$dist$littlejs_esm_min_js_tmp.drawCircle(p,q,void 0,t,void 0,overlayContext$$module$dist$littlejs_esm_min_js_tmp)};l.DrawSolidCircle=function(p,q,t,u){u=m(u).scale(1,.8);p=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2FromPointer(p);t=box2d$$module$dist$littlejs_esm_min_js_tmp.vec2FromPointer(t).scale(q);box2d$$module$dist$littlejs_esm_min_js_tmp.drawCircle(p,q,u,u,void 0,overlayContext$$module$dist$littlejs_esm_min_js_tmp);box2d$$module$dist$littlejs_esm_min_js_tmp.drawLine(p,0,vec2$$module$dist$littlejs_esm_min_js_tmp(),t,u,void 0,overlayContext$$module$dist$littlejs_esm_min_js_tmp)};l.DrawTransform=function(p){p=box2d$$module$dist$littlejs_esm_min_js_tmp.instance.wrapPointer(p,box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Transform);const q=vec2$$module$dist$littlejs_esm_min_js_tmp(p.get_p());p=-p.get_q().GetAngle();const t=vec2$$module$dist$littlejs_esm_min_js_tmp(1,0),u=rgb$$module$dist$littlejs_esm_min_js_tmp(.75,0,0,.8),A=vec2$$module$dist$littlejs_esm_min_js_tmp(0,1),y=rgb$$module$dist$littlejs_esm_min_js_tmp(0,.75,0,.8);box2d$$module$dist$littlejs_esm_min_js_tmp.drawLine(q,p,vec2$$module$dist$littlejs_esm_min_js_tmp(),t,u,void 0,overlayContext$$module$dist$littlejs_esm_min_js_tmp);box2d$$module$dist$littlejs_esm_min_js_tmp.drawLine(q,p,vec2$$module$dist$littlejs_esm_min_js_tmp(),A,y,void 0,overlayContext$$module$dist$littlejs_esm_min_js_tmp)};l.AppendFlags(box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Draw.e_shapeBit);l.AppendFlags(box2d$$module$dist$littlejs_esm_min_js_tmp.instance.b2Draw.e_jointBit);box2d$$module$dist$littlejs_esm_min_js_tmp.world.SetDebugDraw(l)}Box2D().then(l=>{new Box2dPlugin$$module$dist$littlejs_esm_min_js_tmp(l);n();engineAddPlugin$$module$dist$littlejs_esm_min_js_tmp(h,k);engineInit$$module$dist$littlejs_esm_min_js_tmp(a,b,c,d,e,f,g)})}"use strict";var module$dist$littlejs_esm_min_js_tmp={get box2d(){return box2d$$module$dist$littlejs_esm_min_js_tmp},get cameraPos(){return cameraPos$$module$dist$littlejs_esm_min_js_tmp},get cameraScale(){return cameraScale$$module$dist$littlejs_esm_min_js_tmp},get canvasFixedSize(){return canvasFixedSize$$module$dist$littlejs_esm_min_js_tmp},get canvasMaxSize(){return canvasMaxSize$$module$dist$littlejs_esm_min_js_tmp},get canvasPixelated(){return canvasPixelated$$module$dist$littlejs_esm_min_js_tmp},get enablePhysicsSolver(){return enablePhysicsSolver$$module$dist$littlejs_esm_min_js_tmp},get engineFontImage(){return engineFontImage$$module$dist$littlejs_esm_min_js_tmp},get engineObjects(){return engineObjects$$module$dist$littlejs_esm_min_js_tmp},get fontDefault(){return fontDefault$$module$dist$littlejs_esm_min_js_tmp},get frame(){return frame$$module$dist$littlejs_esm_min_js_tmp},get gamepadDirectionEmulateStick(){return gamepadDirectionEmulateStick$$module$dist$littlejs_esm_min_js_tmp},get gamepadsEnable(){return gamepadsEnable$$module$dist$littlejs_esm_min_js_tmp},get glActiveTexture(){return glActiveTexture$$module$dist$littlejs_esm_min_js_tmp},get glAdditive(){return glAdditive$$module$dist$littlejs_esm_min_js_tmp},get glAntialias(){return glAntialias$$module$dist$littlejs_esm_min_js_tmp},get glArrayBuffer(){return glArrayBuffer$$module$dist$littlejs_esm_min_js_tmp},get glBatchAdditive(){return glBatchAdditive$$module$dist$littlejs_esm_min_js_tmp},get glCanvas(){return glCanvas$$module$dist$littlejs_esm_min_js_tmp},get glColorData(){return glColorData$$module$dist$littlejs_esm_min_js_tmp},get glContext(){return glContext$$module$dist$littlejs_esm_min_js_tmp},get glEnable(){return glEnable$$module$dist$littlejs_esm_min_js_tmp},get glGeometryBuffer(){return glGeometryBuffer$$module$dist$littlejs_esm_min_js_tmp},get glInstanceCount(){return glInstanceCount$$module$dist$littlejs_esm_min_js_tmp},get glOverlay(){return glOverlay$$module$dist$littlejs_esm_min_js_tmp},get glPositionData(){return glPositionData$$module$dist$littlejs_esm_min_js_tmp},get glShader(){return glShader$$module$dist$littlejs_esm_min_js_tmp},get gravity(){return gravity$$module$dist$littlejs_esm_min_js_tmp},get headlessMode(){return headlessMode$$module$dist$littlejs_esm_min_js_tmp},get inputPreventDefault(){return inputPreventDefault$$module$dist$littlejs_esm_min_js_tmp},get inputWASDEmulateDirection(){return inputWASDEmulateDirection$$module$dist$littlejs_esm_min_js_tmp},get isUsingGamepad(){return isUsingGamepad$$module$dist$littlejs_esm_min_js_tmp},get mainCanvas(){return mainCanvas$$module$dist$littlejs_esm_min_js_tmp},get mainCanvasSize(){return mainCanvasSize$$module$dist$littlejs_esm_min_js_tmp},get mainContext(){return mainContext$$module$dist$littlejs_esm_min_js_tmp},get medalDisplaySize(){return medalDisplaySize$$module$dist$littlejs_esm_min_js_tmp},get medalDisplaySlideTime(){return medalDisplaySlideTime$$module$dist$littlejs_esm_min_js_tmp},get medalDisplayTime(){return medalDisplayTime$$module$dist$littlejs_esm_min_js_tmp},get medalsPreventUnlock(){return medalsPreventUnlock$$module$dist$littlejs_esm_min_js_tmp},get mousePos(){return mousePos$$module$dist$littlejs_esm_min_js_tmp},get mousePosScreen(){return mousePosScreen$$module$dist$littlejs_esm_min_js_tmp},get mouseWheel(){return mouseWheel$$module$dist$littlejs_esm_min_js_tmp},get newgrounds(){return newgrounds$$module$dist$littlejs_esm_min_js_tmp},get objectDefaultAngleDamping(){return objectDefaultAngleDamping$$module$dist$littlejs_esm_min_js_tmp},get objectDefaultDamping(){return objectDefaultDamping$$module$dist$littlejs_esm_min_js_tmp},get objectDefaultElasticity(){return objectDefaultElasticity$$module$dist$littlejs_esm_min_js_tmp},get objectDefaultFriction(){return objectDefaultFriction$$module$dist$littlejs_esm_min_js_tmp},get objectDefaultMass(){return objectDefaultMass$$module$dist$littlejs_esm_min_js_tmp},get objectMaxSpeed(){return objectMaxSpeed$$module$dist$littlejs_esm_min_js_tmp},get overlayCanvas(){return overlayCanvas$$module$dist$littlejs_esm_min_js_tmp},get overlayContext(){return overlayContext$$module$dist$littlejs_esm_min_js_tmp},get particleEmitRateScale(){return particleEmitRateScale$$module$dist$littlejs_esm_min_js_tmp},get paused(){return paused$$module$dist$littlejs_esm_min_js_tmp},get postProcess(){return postProcess$$module$dist$littlejs_esm_min_js_tmp},get showSplashScreen(){return showSplashScreen$$module$dist$littlejs_esm_min_js_tmp},get showWatermark(){return showWatermark$$module$dist$littlejs_esm_min_js_tmp},get soundDefaultRange(){return soundDefaultRange$$module$dist$littlejs_esm_min_js_tmp},get soundDefaultTaper(){return soundDefaultTaper$$module$dist$littlejs_esm_min_js_tmp},get soundEnable(){return soundEnable$$module$dist$littlejs_esm_min_js_tmp},get soundVolume(){return soundVolume$$module$dist$littlejs_esm_min_js_tmp},get tileCollision(){return tileCollision$$module$dist$littlejs_esm_min_js_tmp},get tileCollisionSize(){return tileCollisionSize$$module$dist$littlejs_esm_min_js_tmp},get tileFixBleedScale(){return tileFixBleedScale$$module$dist$littlejs_esm_min_js_tmp},get tileSizeDefault(){return tileSizeDefault$$module$dist$littlejs_esm_min_js_tmp},get tilesPixelated(){return tilesPixelated$$module$dist$littlejs_esm_min_js_tmp},get time(){return time$$module$dist$littlejs_esm_min_js_tmp},get timeReal(){return timeReal$$module$dist$littlejs_esm_min_js_tmp},get touchGamepadAlpha(){return touchGamepadAlpha$$module$dist$littlejs_esm_min_js_tmp},get touchGamepadAnalog(){return touchGamepadAnalog$$module$dist$littlejs_esm_min_js_tmp},get touchGamepadEnable(){return touchGamepadEnable$$module$dist$littlejs_esm_min_js_tmp},get touchGamepadSize(){return touchGamepadSize$$module$dist$littlejs_esm_min_js_tmp},get uiSystem(){return uiSystem$$module$dist$littlejs_esm_min_js_tmp},get vibrateEnable(){return vibrateEnable$$module$dist$littlejs_esm_min_js_tmp}};module$dist$littlejs_esm_min_js_tmp.ASSERT=ASSERT$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.BLACK=BLACK$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.BLUE=BLUE$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dDistanceJoint=Box2dDistanceJoint$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dFrictionJoint=Box2dFrictionJoint$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dGearJoint=Box2dGearJoint$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dJoint=Box2dJoint$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dMotorJoint=Box2dMotorJoint$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dObject=Box2dObject$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dPinJoint=Box2dPinJoint$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dPlugin=Box2dPlugin$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dPrismaticJoint=Box2dPrismaticJoint$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dPulleyJoint=Box2dPulleyJoint$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dRaycastResult=Box2dRaycastResult$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dRevoluteJoint=Box2dRevoluteJoint$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dRopeJoint=Box2dRopeJoint$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dTargetJoint=Box2dTargetJoint$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dWeldJoint=Box2dWeldJoint$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Box2dWheelJoint=Box2dWheelJoint$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.CYAN=CYAN$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Color=Color$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.EngineObject=EngineObject$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.FontImage=FontImage$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.GRAY=GRAY$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.GREEN=GREEN$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.MAGENTA=MAGENTA$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Medal=Medal$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.NewgroundsMedal=NewgroundsMedal$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.NewgroundsPlugin=NewgroundsPlugin$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.ORANGE=ORANGE$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.PI=PI$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.PURPLE=PURPLE$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Particle=Particle$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.ParticleEmitter=ParticleEmitter$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.PostProcessPlugin=PostProcessPlugin$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.RED=RED$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.RandomGenerator=RandomGenerator$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Sound=Sound$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.SoundWave=SoundWave$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.TextureInfo=TextureInfo$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.TileInfo=TileInfo$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.TileLayer=TileLayer$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.TileLayerData=TileLayerData$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Timer=Timer$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.UIButton=UIButton$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.UICheckbox=UICheckbox$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.UIObject=UIObject$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.UIScrollbar=UIScrollbar$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.UISystemPlugin=UISystemPlugin$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.UIText=UIText$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.UITile=UITile$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.Vector2=Vector2$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.WHITE=WHITE$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.YELLOW=YELLOW$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.ZzFXMusic=ZzFXMusic$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.abs=abs$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.audioContext=audioContext$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.box2dDebug=box2dDebug$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.box2dEngineInit=box2dEngineInit$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.clamp=clamp$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.clearInput=clearInput$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.combineCanvases=combineCanvases$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debug=debug$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugCircle=debugCircle$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugClear=debugClear$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugLine=debugLine$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugOverlap=debugOverlap$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugOverlay=debugOverlay$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugPoint=debugPoint$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugPoly=debugPoly$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugRect=debugRect$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugSaveCanvas=debugSaveCanvas$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugSaveDataURL=debugSaveDataURL$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugSaveText=debugSaveText$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugScreenshot=debugScreenshot$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugShowErrors=debugShowErrors$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugText=debugText$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugVideoCaptureIsActive=debugVideoCaptureIsActive$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugVideoCaptureStart=debugVideoCaptureStart$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.debugVideoCaptureStop=debugVideoCaptureStop$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.distanceAngle=distanceAngle$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.distanceWrap=distanceWrap$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.drawCanvas2D=drawCanvas2D$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.drawCircle=drawCircle$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.drawEllipse=drawEllipse$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.drawLine=drawLine$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.drawPoly=drawPoly$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.drawRect=drawRect$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.drawText=drawText$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.drawTextOverlay=drawTextOverlay$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.drawTextScreen=drawTextScreen$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.drawTile=drawTile$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.engineAddPlugin=engineAddPlugin$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.engineInit=engineInit$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.engineName=engineName$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.engineObjectsCallback=engineObjectsCallback$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.engineObjectsCollect=engineObjectsCollect$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.engineObjectsDestroy=engineObjectsDestroy$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.engineObjectsRaycast=engineObjectsRaycast$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.engineObjectsUpdate=engineObjectsUpdate$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.engineVersion=engineVersion$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.formatTime=formatTime$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.frameRate=frameRate$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.gamepadIsDown=gamepadIsDown$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.gamepadStick=gamepadStick$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.gamepadWasPressed=gamepadWasPressed$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.gamepadWasReleased=gamepadWasReleased$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.gamepadsUpdate=gamepadsUpdate$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.getCameraSize=getCameraSize$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.getNoteFrequency=getNoteFrequency$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.getTileCollisionData=getTileCollisionData$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.glClearCanvas=glClearCanvas$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.glCompileShader=glCompileShader$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.glCopyToContext=glCopyToContext$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.glCreateProgram=glCreateProgram$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.glCreateTexture=glCreateTexture$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.glDraw=glDraw$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.glFlush=glFlush$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.glSetAntialias=glSetAntialias$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.glSetTexture=glSetTexture$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.glSetTextureData=glSetTextureData$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.hsl=hsl$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.initTileCollision=initTileCollision$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.isColor=isColor$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.isFullscreen=isFullscreen$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.isIntersecting=isIntersecting$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.isOverlapping=isOverlapping$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.isTouchDevice=isTouchDevice$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.keyDirection=keyDirection$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.keyIsDown=keyIsDown$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.keyWasPressed=keyWasPressed$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.keyWasReleased=keyWasReleased$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.lerp=lerp$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.lerpAngle=lerpAngle$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.lerpWrap=lerpWrap$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.max=max$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.medals=medals$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.medalsInit=medalsInit$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.min=min$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.mod=mod$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.mouseIsDown=keyIsDown$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.mouseWasPressed=keyWasPressed$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.mouseWasReleased=keyWasReleased$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.nearestPowerOfTwo=nearestPowerOfTwo$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.percent=percent$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.playAudioFile=playAudioFile$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.playSamples=playSamples$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.rand=rand$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.randColor=randColor$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.randInCircle=randInCircle$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.randInt=randInt$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.randSign=randSign$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.randVector=randVector$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.rgb=rgb$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.screenToWorld=screenToWorld$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setBlendMode=setBlendMode$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setCameraPos=setCameraPos$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setCameraScale=setCameraScale$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setCanvasFixedSize=setCanvasFixedSize$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setCanvasMaxSize=setCanvasMaxSize$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setCanvasPixelated=setCanvasPixelated$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setCursor=setCursor$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setDebugKey=setDebugKey$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setEnablePhysicsSolver=setEnablePhysicsSolver$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setFontDefault=setFontDefault$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setGamepadDirectionEmulateStick=setGamepadDirectionEmulateStick$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setGamepadsEnable=setGamepadsEnable$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setGlEnable=setGlEnable$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setGlOverlay=setGlOverlay$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setGravity=setGravity$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setHeadlessMode=setHeadlessMode$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setInputPreventDefault=setInputPreventDefault$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setInputWASDEmulateDirection=setInputWASDEmulateDirection$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setMedalDisplaySize=setMedalDisplaySize$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setMedalDisplaySlideTime=setMedalDisplaySlideTime$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setMedalDisplayTime=setMedalDisplayTime$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setMedalsPreventUnlock=setMedalsPreventUnlock$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setObjectDefaultAngleDamping=setObjectDefaultAngleDamping$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setObjectDefaultDamping=setObjectDefaultDamping$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setObjectDefaultElasticity=setObjectDefaultElasticity$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setObjectDefaultFriction=setObjectDefaultFriction$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setObjectDefaultMass=setObjectDefaultMass$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setObjectMaxSpeed=setObjectMaxSpeed$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setParticleEmitRateScale=setParticleEmitRateScale$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setPaused=setPaused$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setShowSplashScreen=setShowSplashScreen$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setShowWatermark=setShowWatermark$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setSoundDefaultRange=setSoundDefaultRange$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setSoundDefaultTaper=setSoundDefaultTaper$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setSoundEnable=setSoundEnable$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setSoundVolume=setSoundVolume$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setTileCollisionData=setTileCollisionData$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setTileFixBleedScale=setTileFixBleedScale$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setTileSizeDefault=setTileSizeDefault$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setTilesPixelated=setTilesPixelated$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setTouchGamepadAlpha=setTouchGamepadAlpha$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setTouchGamepadAnalog=setTouchGamepadAnalog$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setTouchGamepadEnable=setTouchGamepadEnable$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setTouchGamepadSize=setTouchGamepadSize$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setTouchInputEnable=setTouchInputEnable$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.setVibrateEnable=setVibrateEnable$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.sign=sign$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.smoothStep=smoothStep$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.speak=speak$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.speakStop=speakStop$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.textureInfos=textureInfos$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.tile=tile$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.tileCollisionRaycast=tileCollisionRaycast$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.tileCollisionTest=tileCollisionTest$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.timeDelta=timeDelta$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.toggleFullscreen=toggleFullscreen$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.vec2=vec2$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.vibrate=vibrate$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.vibrateStop=vibrateStop$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.wave=wave$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.worldToScreen=worldToScreen$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.zzfx=zzfx$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.zzfxG=zzfxG$$module$dist$littlejs_esm_min_js_tmp;module$dist$littlejs_esm_min_js_tmp.zzfxR=zzfxR$$module$dist$littlejs_esm_min_js_tmp;
|