nexus-2d 0.0.1 → 0.0.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/engine/core.js","../../node_modules/tessera.js/dist/esm/index.js"],"sourcesContent":["import { PixelBuffer } from \"tessera.js\";\r\n\r\n\r\nexport function vec2(x = 0, y = 0) {\r\n return { x, y };\r\n}\r\n\r\n/**\r\n * local transforms are relative to an object's parent or its own origin (like moving along its own \"front\"), while global transforms are relative to the fixed world origin (0,0,0)\r\n */\r\nexport class Transform2D {\r\n constructor() {\r\n this.position = vec2();\r\n this.rotation = 0; // radians\r\n this.scale = vec2(1, 1);\r\n }\r\n\r\n copy(other) {\r\n this.position.x = other.position.x;\r\n this.position.y = other.position.y;\r\n this.rotation = other.rotation;\r\n this.scale.x = other.scale.x;\r\n this.scale.y = other.scale.y;\r\n }\r\n}\r\n\r\n\r\n/**\r\n * \r\n * Node - base class for all scene objects\r\n * \r\n * Why this design:\r\n * - Children array for hierarchy\r\n * - Dirty flags prevent redundant transform calculations\r\n * - Lifecycle hooks (_ready, _process, _draw) give clear entry points\r\n * - World transform cached for performance\r\n */\r\n\r\nexport class Node {\r\n constructor(name = \"node\") {\r\n this.name = name;\r\n this.parent = null;\r\n this.children = [];\r\n\r\n // relative to parent\r\n this.position = vec2();\r\n this.rotation = 0;\r\n this.scale = vec2(1, 1);\r\n\r\n // world transform absolute, cached\r\n this.worldPosition = vec2();\r\n this.worldRotation = 0;\r\n this.worldScale = vec2(1, 1);\r\n\r\n\r\n this.transformDirty = true; // needs recalculation?\r\n this.visible = true;\r\n this.active = true; // if false, skip _process\r\n\r\n // lifecycle state\r\n this.ready = false;\r\n\r\n }\r\n /**\r\n * \r\n * @param {Node} node \r\n * @returns \r\n */\r\n addChild(node) {\r\n if (node.parent) {\r\n node.parent.removeChild(node);\r\n }\r\n node.parent = this;\r\n node.transformDirty = true;\r\n this.children.push(node);\r\n return node;\r\n }\r\n /**\r\n * \r\n * @param {Node} node \r\n * @returns \r\n */\r\n removeChild(node) {\r\n\r\n const idx = this.children.indexOf(node);\r\n if (idx !== -1) {\r\n this.children.splice(idx, 1);\r\n node.parent = null;\r\n }\r\n }\r\n\r\n\r\n markDirty() {\r\n this.transformDirty = true;\r\n for (let i = 0; i < this.children.length; i++) {\r\n this.children[i].markDirty();\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Calculate world transform from local + parent\r\n * \r\n * Why this order:\r\n * 1. Scale the local position\r\n * 2. Rotate it\r\n * 3. Add parent's world position\r\n * \r\n * This gives proper transform inheritance (child orbits parent)\r\n */\r\n updateWorldTransform() {\r\n\r\n if (!this.transformDirty) return;\r\n\r\n if (this.parent) {\r\n // transform relative to parent \r\n // ensure parent is up to date\r\n this.parent.updateWorldTransform();\r\n\r\n // apply parent's transform to our local transform\r\n const cos = Math.cos(this.parent.worldRotation);\r\n const sin = Math.sin(this.parent.worldRotation);\r\n\r\n // scale local position by parent scale\r\n const scaledX = this.position.x * this.parent.worldScale.x;\r\n const scaledY = this.position.y * this.parent.worldScale.y;\r\n\r\n // rotate scaled position\r\n const rotatedX = scaledX * cos - scaledY * sin;\r\n const rotatedY = scaledX * sin + scaledY * cos;\r\n\r\n // translate by parent world position\r\n this.worldPosition.x = this.parent.worldPosition.x + rotatedX;\r\n this.worldPosition.y = this.parent.worldPosition.y + rotatedY;\r\n\r\n // inherit rotation and scale\r\n this.worldRotation = this.parent.worldRotation + this.rotation;\r\n this.worldScale.x = this.parent.worldScale.x * this.scale.x;\r\n this.worldScale.y = this.parent.worldScale.y * this.scale.y;\r\n } else {\r\n // root node - world = local\r\n this.worldPosition.x = this.position.x;\r\n this.worldPosition.y = this.position.y;\r\n this.worldRotation = this.rotation;\r\n this.worldScale.x = this.scale.x;\r\n this.worldScale.y = this.scale.y;\r\n }\r\n\r\n }\r\n\r\n\r\n _ready() {\r\n // Called once when node enters scene tree\r\n }\r\n\r\n _process(delta) {\r\n // Called every frame with time delta\r\n }\r\n\r\n _draw(canvas, camera) {\r\n // Called every frame for rendering\r\n }\r\n\r\n\r\n /**\r\n * internal tree traversal - don't override these\r\n */\r\n propagateReady() {\r\n if (!this.ready) {\r\n this._ready();\r\n this.ready = true;\r\n }\r\n for (let i = 0; i < this.children.length; i++) {\r\n this.children[i].propagateReady();\r\n }\r\n }\r\n\r\n propagateProcess(delta) {\r\n if (this.active) {\r\n this._process(delta);\r\n }\r\n for (let i = 0; i < this.children.length; i++) {\r\n this.children[i].propagateProcess(delta);\r\n }\r\n }\r\n\r\n propagateDraw(canvas, camera) {\r\n if (!this.visible) return;\r\n\r\n this.updateWorldTransform();\r\n this._draw(canvas, camera);\r\n\r\n for (let i = 0; i < this.children.length; i++) {\r\n this.children[i].propagateDraw(canvas, camera);\r\n }\r\n }\r\n\r\n\r\n /**\r\n * utility: find child by name (recursive)\r\n */\r\n findChild(name, recursive = true) {\r\n for (let i = 0; i < this.children.length; i++) {\r\n if (this.children[i].name === name) {\r\n return this.children[i];\r\n }\r\n if (recursive) {\r\n const found = this.children[i].findChild(name, true);\r\n if (found) return found;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * utility: get full path (e.g., \"Root/Player/Sprite\")\r\n */\r\n getPath() {\r\n if (!this.parent) return this.name;\r\n return this.parent.getPath() + \"/\" + this.name;\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n/**\r\n * Scene - root container + game loop coordinator\r\n * \r\n * why Scene:\r\n * - single entry point for update/draw\r\n * - manages lifecycle (ready propagation)\r\n * - can pause/unpause entire tree\r\n * - scene loading/unloading\r\n */\r\n\r\nexport class Scene {\r\n /**\r\n * \r\n * @param {PixelBuffer} canvas \r\n */\r\n constructor(canvas) {\r\n this.canvas = canvas;\r\n this.root = new Node(\"Root\");\r\n this.paused = false;\r\n this.timeScale = 1.0; // slow-mo or fast-forward\r\n this.camera = null; \r\n\r\n // trigger _ready on root\r\n this.root.propagateReady();\r\n }\r\n\r\n addChild(node) {\r\n return this.root.addChild(node);\r\n }\r\n\r\n process(delta) {\r\n if (this.paused) return;\r\n const scaledDelta = delta * this.timeScale;\r\n this.root.propagateProcess(scaledDelta);\r\n }\r\n\r\n draw() {\r\n this.root.propagateDraw(this.canvas, this.camera);\r\n }\r\n\r\n /**\r\n * find node by path (e.g., \"Player/Weapon\")\r\n */\r\n getNode(path) {\r\n const parts = path.split('/');\r\n let current = this.root;\r\n\r\n for (let i = 0; i < parts.length; i++) {\r\n if (parts[i] === 'Root' || parts[i] === '') continue;\r\n current = current.findChild(parts[i], false);\r\n if (!current) return null;\r\n }\r\n\r\n return current;\r\n }\r\n\r\n /**\r\n * debug: print tree structure\r\n */\r\n printTree(node = this.root, indent = 0) {\r\n const prefix = ' '.repeat(indent);\r\n const pos = `(${node.worldPosition.x.toFixed(1)}, ${node.worldPosition.y.toFixed(1)})`;\r\n console.log(`${prefix}${node.name} ${pos}`);\r\n for (let i = 0; i < node.children.length; i++) {\r\n this.printTree(node.children[i], indent + 1);\r\n }\r\n }\r\n}","import{fileURLToPath as t}from\"url\";import{dirname as e,join as i}from\"path\";import{createRequire as s}from\"module\";const r=e(t(import.meta.url));class h{constructor(){}isKeyDown(t){}isKeyReleased(t){}onKeyDown(t,e){}onKeyUp(t,e){}onMouseDown(t,e){}onMouseUp(t,e){}onMouseMove(t){}onMouseWheel(t){}}class a{constructor(){this.input=new h,this.targetFPS=60}initialize(t,e,i){}shutdown(){}beginFrame(){}endFrame(){}clear(t){}drawRectangle(t,e,i){}drawCircle(t,e,i){}drawLine(t,e,i,s){}drawText(t,e,i,s){}loadTexture(t){return 0}unloadTexture(t){}drawTexture(t,e,i,s){}createRenderTexture(t,e){return 0}destroyRenderTexture(t){}setRenderTarget(t){}createSharedBuffer(t,e,i){return 0}markBufferDirty(t){}markBufferRegionDirty(t,e,i,s,r){}isBufferDirty(t){return!1}getBufferData(t){return new Uint8Array(0)}updateBufferData(t,e,i=0,s=0,r=0,h=0){}updateTextureFromBuffer(t,e){}loadTextureFromBuffer(t,e,i){return 0}drawTextureSized(t,e,i,s,r,h){}drawTexturePro(t,e,i,s,r){}get width(){return 0}get height(){return 0}get WindowShouldClose(){return!1}onRender(t){}step(){return!1}get input(){return new h}get FPS(){return 0}set onResize(t){}set targetFPS(t){}setWindowState(t){}loadImage(t){}GetInput(){}}function o(){const t=s(import.meta.url);try{return t(\"node-gyp-build\")(i(r,\"..\"))}catch(e){console.log(\"method 1 failed:\",e.message);try{return t(i(r,\"..\",\"prebuilds\",process.platform+\"-\"+process.arch,\"renderer.node\"))}catch(e){console.log(\"method 2 failed:\",e.message);try{return t(i(r,\"..\",\"prebuilds\",process.platform+\"-\"+process.arch,\"renderer.node\"))}catch(t){throw console.log(\"method 3 failed:\",t.message),new Error(\"all methods to load the native module failed: please open an issue\")}}}}class n{constructor(t){this.canvas=t,this.width=t.width,this.height=t.height,this.reset()}reset(){this.minX=this.width,this.minY=this.height,this.maxX=-1,this.maxY=-1,this.modified=!1}markRect(t,e,i,s){const r=0|t,h=0|e,a=t+i-1|0,o=e+s-1|0;r<this.minX&&(this.minX=r),h<this.minY&&(this.minY=h),a>this.maxX&&(this.maxX=a),o>this.maxY&&(this.maxY=o),this.modified=!0}mark(t,e){this.markRect(t,e,1,1)}flush(){if(!this.modified)return null;const t=Math.max(0,this.minX),e=Math.max(0,this.minY),i=Math.min(this.width-1,this.maxX),s=Math.min(this.height-1,this.maxY);if(t>i||e>s)return this.reset(),null;const r=i-t+1,h=s-e+1,a=this._extractRegion(t,e,r,h);this.canvas.renderer.updateBufferData(this.canvas.bufferId,a,t,e,r,h),this.canvas.needsUpload=!0;const o={minX:t,minY:e,regionWidth:r,regionHeight:h};return this.reset(),o}_extractRegion(t,e,i,s){const r=this.canvas.data,h=this.width,a=new Uint8Array(i*s*4);for(let o=0;o<s;o++){const s=4*((e+o)*h+t),n=o*i*4;a.set(r.subarray(s,s+4*i),n)}return a}}class l{constructor(t,e,i){this.renderer=t,this.size=e*i*4,this.bufferId=t.createSharedBuffer(this.size,e,i),this.dirty=!1}markDirty(){this.renderer.markBufferDirty(this.bufferId),this.dirty=!0}isDirty(){return this.renderer.isBufferDirty(this.bufferId)}getData(){return this.dirty=!1,this.renderer.getBufferData(this.bufferId)}updateData(t){if(!(t instanceof Uint8Array))throw new Error(\"Data must be Uint8Array\");if(t.length!==this.size)throw new Error(`Data size mismatch: expected ${this.size}, got ${t.length}`);this.renderer.updateBufferData(this.bufferId,t),this.dirty=!0}}class c{constructor(t,e,i,s){this.renderer=t,this.textureId=t.loadTextureFromBuffer(e,i,s),this.width=i,this.height=s,this.bufferId=e}draw(t,e){this.renderer.drawTexture(this.textureId,t,e)}drawTexturePro(t,e,i,s){this.renderer.drawTextureSized(this.textureId,t,e,i,s)}drawTexturePro(t,e,i,s,r){this.renderer.drawTextureSized(this.textureId,t,e,i,s,r)}unload(){this.renderer.unloadTexture(this.textureId)}update(){this.renderer.isBufferDirty(this.bufferId)&&this.renderer.updateTextureFromBuffer(this.textureId,this.bufferId)}}class d{constructor(t,e,i,s){this.canvasX=t,this.canvasY=e,this.canvasWidth=i,this.canvasHeight=s,this.scale=1}screenToCanvas(t,e){return{x:Math.floor((t-this.canvasX)/this.scale),y:Math.floor((e-this.canvasY)/this.scale)}}canvasToScreen(t,e){return{x:Math.floor(t*this.scale+this.canvasX),y:Math.floor(e*this.scale+this.canvasY)}}isPointInCanvas(t,e){const i=this.screenToCanvas(t,e);return i.x>=0&&i.x<this.canvasWidth&&i.y>=0&&i.y<this.canvasHeight}setScale(t){this.scale=Math.max(.1,Math.min(5,t))}}class u{constructor(t){this.canvas=t}drawLine(t,e,i,s,r){const h=Math.abs(i-t),a=-Math.abs(s-e),o=t<i?1:-1,n=e<s?1:-1;let l=h+a;for(;this.canvas.setPixelColor(t,e,r),t!==i||e!==s;){const i=2*l;i>=a&&(l+=a,t+=o),i<=h&&(l+=h,e+=n)}this.canvas.sharedBuffer.markDirty()}drawRectangle(t,e,i,s,r,h=!0){if(h)for(let h=e;h<e+s;h++)for(let e=t;e<t+i;e++)this.canvas.setPixelColor(e,h,r);else this.drawLine(t,e,t+i,e,r),this.drawLine(t+i,e,t+i,e+s,r),this.drawLine(t+i,e+s,t,e+s,r),this.drawLine(t,e+s,t,e,r);this.canvas.sharedBuffer.markDirty()}drawCircle(t,e,i,s,r=!0){let h=i,a=0,o=0;for(;h>=a;)r?(this.drawLine(t-h,e+a,t+h,e+a,s),this.drawLine(t-h,e-a,t+h,e-a,s),this.drawLine(t-a,e+h,t+a,e+h,s),this.drawLine(t-a,e-h,t+a,e-h,s)):(this.canvas.setPixelColor(t+h,e+a,s),this.canvas.setPixelColor(t+a,e+h,s),this.canvas.setPixelColor(t-a,e+h,s),this.canvas.setPixelColor(t-h,e+a,s),this.canvas.setPixelColor(t-h,e-a,s),this.canvas.setPixelColor(t-a,e-h,s),this.canvas.setPixelColor(t+a,e-h,s),this.canvas.setPixelColor(t+h,e-a,s)),a+=1,o+=1+2*a,2*(o-h)+1>0&&(h-=1,o+=1-2*h);this.canvas.sharedBuffer.markDirty()}}class f{static RGBtoHSV(t,e,i){t/=255,e/=255,i/=255;const s=Math.max(t,e,i),r=s-Math.min(t,e,i);let h=0,a=0;return 0!==r&&(a=r/s,h=t===s?(e-i)/r:e===s?2+(i-t)/r:4+(t-e)/r,h*=60,h<0&&(h+=360)),{h:h,s:100*a,v:100*s}}static HSVtoRGB(t,e,i){const s=(i/=100)*(e/=100),r=s*(1-Math.abs(t/60%2-1)),h=i-s;let a,o,n;return[a,o,n]=t>=0&&t<60?[s,r,0]:t<120?[r,s,0]:t<180?[0,s,r]:t<240?[0,r,s]:t<300?[r,0,s]:[s,0,r],{r:Math.floor(255*(a+h)),g:Math.floor(255*(o+h)),b:Math.floor(255*(n+h))}}static complementary(t){const e=this.RGBtoHSV(t.r,t.g,t.b);return e.h=(e.h+180)%360,this.HSVtoRGB(e.h,e.s,e.v)}static analogous(t,e=30){const i=this.RGBtoHSV(t.r,t.g,t.b);return[this.HSVtoRGB((i.h-e+360)%360,i.s,i.v),t,this.HSVtoRGB((i.h+e)%360,i.s,i.v)]}}class m{constructor(){this.metrics=new Map,this.frameTimes=[],this.samples=60}start(t){this.metrics.set(t,{start:performance.now(),calls:(this.metrics.get(t)?.calls||0)+1})}end(t){const e=this.metrics.get(t);if(e){const t=performance.now()-e.start;e.total=(e.total||0)+t,e.max=Math.max(e.max||0,t),e.min=Math.min(e.min||1/0,t)}}recordFrameTime(t){const e=performance.now()-t;this.frameTimes.push(e),this.frameTimes.length>this.samples&&this.frameTimes.shift()}logMetrics(){console.log(\"Performance Report:\");for(const[t,e]of this.metrics){const i=e.total/e.calls;console.log(` ${t}: ${i.toFixed(2)}ms avg (${e.min.toFixed(2)}-${e.max.toFixed(2)}ms)`)}const t=this.frameTimes.reduce((t,e)=>t+e)/this.frameTimes.length;console.log(` Frame Time: ${t.toFixed(2)}ms (${(1e3/t).toFixed(1)} FPS)`)}}function x(t,e,i,s){const r={r:t/255,g:e/255,b:i/255};return null!=s&&(r.a=s/255),r}function p(t,e,i=\"bilinear\",s=e.width,r=e.height){const h=new n(e),a=e.data,o=t.data,l=t.width,c=t.height,d=l/s,u=c/r;for(let t=0;t<r;t++)for(let e=0;e<s;e++){const r=4*(t*s+e);if(\"nn\"===i){const i=Math.floor((e+.5)*d),s=Math.floor((t+.5)*u),h=Math.max(0,Math.min(i,l-1)),n=Math.max(0,Math.min(s,c-1));for(let t=0;t<4;t++)a[r+t]=o[4*(n*l+h)+t]}else{const i=(e+.5)*d-.5,s=(t+.5)*u-.5,h=Math.floor(i),n=Math.floor(s),f=Math.min(h+1,l-1),m=Math.min(n+1,c-1),x=i-h,p=s-n;for(let t=0;t<4;t++){const e=(o[4*(n*l+h)+t]*(1-x)+o[4*(n*l+f)+t]*x)*(1-p)+(o[4*(m*l+h)+t]*(1-x)+o[4*(m*l+f)+t]*x)*p;a[r+t]=Math.round(e)}}}h.markRect(0,0,s,r),h.flush()}function M(t,e,i,s,r=\"bilinear\"){const h=new n(i),a=i.data,o=t.data,l=t.width,c=e.width,d=e.height,u=s.width,f=s.height,m=c/u,x=d/f;for(let h=0;h<f;h++)for(let n=0;n<u;n++){const u=4*((h+s.y)*i.width+(n+s.x));if(\"nn\"===r){const t=e.x+Math.floor((n+.5)*m),i=e.y+Math.floor((h+.5)*x),s=Math.max(e.x,Math.min(t,e.x+c-1)),r=Math.max(e.y,Math.min(i,e.y+d-1));for(let t=0;t<4;t++)a[u+t]=o[4*(r*l+s)+t]}else{const i=e.x+(n+.5)*m-.5,s=e.y+(h+.5)*x-.5,r=Math.floor(i),c=Math.floor(s),d=Math.min(r+1,l-1),f=Math.min(c+1,t.height-1),p=i-r,M=s-c;for(let t=0;t<4;t++){const e=(o[4*(c*l+r)+t]*(1-p)+o[4*(c*l+d)+t]*p)*(1-M)+(o[4*(f*l+r)+t]*(1-p)+o[4*(f*l+d)+t]*p)*M;a[u+t]=Math.round(e)}}}h.markRect(s.x,s.y,s.width,s.height),h.flush()}function g(t,e,i,s,r){const h=[];for(let a=0;a<t;a++)for(let t=0;t<e;t++)h.push({offset:{x:i+t*r,y:s+a*r}});return h}class y{constructor(t){this.input=t,this.actions=new Map,this.mouseActions=new Map,this.callbackIds=[]}mapAction(t,e){\"string\"==typeof e&&(e=[e]),this.actions.set(t,e)}MapMouseAction(t,e){\"string\"==typeof e&&(e=[e]),this.mouseActions.set(t,e)}isMouseActionActive(t){const e=this.mouseActions.get(t);return!!e&&e.some(t=>this.input.isMouseButtonDown(t))}isMousePressed(t){const e=this.mouseActions.get(t);return!!e&&e.some(t=>this.input.isMouseButtonPressed(t))}IsMouseActionReleased(t){const e=this.mouseActions.get(t);return!!e&&e.some(t=>this.input.isMouseButtonReleased(t))}get mousePosition(){return this.input.getMousePosition()}get mouseDelta(){return this.input.getMouseDelta()}get mouseWheelDelta(){return this.input.getMouseWheelDelta()}isActionActive(t){const e=this.actions.get(t);return!!e&&e.some(t=>this.input.isKeyDown(t))}wasActionTriggered(t){const e=this.actions.get(t);return!!e&&e.some(t=>this.input.isKeyPressed(t))}isActionReleased(t){const e=this.actions.get(t);return!!e&&e.some(t=>this.input.isKeyReleased(t))}onActionDown(t,e){const i=this.actions.get(t);i?i.forEach(i=>{const s=this.input.onKeyDown(i,i=>{e(t,i)});this.callbackIds.push(s)}):console.warn(`Action '${t}' not mapped`)}onActionUp(t,e){const i=this.actions.get(t);i?i.forEach(i=>{const s=this.input.onKeyUp(i,i=>{e(t,i)});this.callbackIds.push(s)}):console.warn(`Action '${t}' not mapped`)}onMouseDown(t,e){const i=this.mouseActions.get(t);i?i.forEach(i=>{const s=this.input.onMouseDown(i,i=>{e(t,i)});this.callbackIds.push(s)}):console.warn(`Action '${t}' not mapped`)}onMouseUp(t,e){const i=this.mouseActions.get(t);i?i.forEach(i=>{const s=this.input.onMouseUp(i,i=>{e(t,i)});this.callbackIds.push(s)}):console.warn(`Action '${t}' not mapped`)}onMouseMove(t){const e=this.input.onMouseMove(e=>{t(e)});this.callbackIds.push(e)}onMouseWheel(t,e){const i=this.input.onMouseWheel(t=>{e(t)});this.callbackIds.push(i)}cleanup(){this.callbackIds.forEach(t=>{this.input.removeCallback(t)}),this.callbackIds=[]}}class w{constructor(t=60){this.maxSize=t,this.buffer=[]}recordInput(t,e){this.buffer.push({input:t,timestamp:e}),this.buffer.length>this.maxSize&&this.buffer.shift()}checkSequence(t,e=1e3){if(0===t.length||this.buffer.length<t.length)return!1;const i=performance.now();let s=0;for(let r=this.buffer.length-1;r>=0&&s<t.length;r--){const h=this.buffer[r];if(i-h.timestamp>e)break;h.input===t[t.length-1-s]&&s++}return s===t.length}}class b{constructor(t,e,i,s=!1){this.renderer=t,this.width=e,this.height=i,this.DEBUG=s;const r=e*i*4;this.bufferId=t.createSharedBuffer(r,e,i);{let e=t.getBufferData(this.bufferId);this.data=new Uint8Array(new SharedArrayBuffer(r)),this.data.set(new Uint8Array(e)),e=null}this.textureId=t.loadTextureFromBuffer(this.bufferId,e,i),this.needsUpload=!1,this.DEBUG&&console.log(`Created ${e}x${i} buffer (${r} bytes)`)}coordToIndex(t,e){return t<0||t>=this.width||e<0||e>=this.height?-1:4*(e*this.width+t)}setPixel(t,e,i,s,r,h=255){const a=this.coordToIndex(t,e);-1!==a&&(this.data[a+0]=i,this.data[a+1]=s,this.data[a+2]=r,this.data[a+3]=h,this.renderer.updateBufferData(this.bufferId,this.data.subarray(a,a+4),t,e,1,1),this.needsUpload=!0)}getPixel(t,e){const i=this.coordToIndex(t,e);return-1===i?null:{r:this.data[i+0],g:this.data[i+1],b:this.data[i+2],a:this.data[i+3]}}clear(t,e,i,s=255){const r=performance.now(),h=(255&s)<<24|(255&i)<<16|(255&e)<<8|255&t;new Uint32Array(this.data.buffer).fill(h),this.renderer.updateBufferData(this.bufferId,this.data),this.needsUpload=!0;const a=performance.now()-r;this.DEBUG&&console.log(`Clear (${this.width}x${this.height}): ${a.toFixed(2)}ms`)}upload(){this.needsUpload&&(this.renderer.updateTextureFromBuffer(this.textureId,this.bufferId),this.needsUpload=!1)}draw(t,e){this.renderer.drawTexture(this.textureId,{x:t,y:e})}grow(t,e){if(t<=this.width&&e<=this.height)return;const i=t*e*4,s=this.renderer.createSharedBuffer(i,t,e),r=this.renderer.getBufferData(s),h=new Uint8Array(new SharedArrayBuffer(i));h.set(new Uint8Array(r));const a=this.renderer.loadTextureFromBuffer(s,t,e),o=Math.min(this.width,t),n=Math.min(this.height,e);for(let e=0;e<n;e++){const i=e*this.width*4,s=i+4*o,r=e*t*4;h.set(this.data.subarray(i,s),r)}this.renderer.updateBufferData(s,h);try{this.renderer.unloadTexture(this.textureId)}catch(t){this.DEBUG&&console.warn(\"unloadTexture failed while growing buffer:\",t.message||t)}this.bufferId=s,this.data=h,this.textureId=a,this.width=t,this.height=e,this.needsUpload=!0,this.DEBUG&&console.log(`Grew buffer to ${t}x${e} (${i} bytes)`)}destroy(){this.renderer.unloadTexture(this.textureId)}}function v(t,e,i,s){return!(t<0||t>=i.width||e<0||e>=i.height)&&!(s&&s.viewport&&s.viewport.shouldClip(t,e))}class T{constructor(t=0,e=0,i=800,s=600){this.x=t,this.y=e,this.width=i,this.height=s,this.viewport=null}worldToScreen(t,e){const i=t-this.x,s=e-this.y,r=i+this.width/2,h=s+this.height/2;if(this.viewport){const t=this.viewport.width/this.width,e=this.viewport.height/this.height;return{x:r*t+this.viewport.x,y:h*e+this.viewport.y}}return{x:r,y:h}}setViewport(t){this.viewport=t}screenToWorld(t,e){let i,s;if(this.viewport){const r=this.width/this.viewport.width,h=this.height/this.viewport.height;i=(t-this.viewport.x)*r,s=(e-this.viewport.y)*h}else i=t,s=e;return{x:i-this.width/2+this.x,y:s-this.height/2+this.y}}isVisible(t,e){const i=this.worldToScreen(t,e);return this.viewport?this.viewport.contains(i.x,i.y):i.x>=0&&i.x<this.width&&i.y>=0&&i.y<this.height}getVisibleBounds(){const t=this.width/2,e=this.height/2;return{left:this.x-t,right:this.x+t,top:this.y-e,bottom:this.y+e}}move(t,e){this.x+=t,this.y+=e}setPosition(t,e){this.x=t,this.y=e}}class C{constructor(t,e,i,s){this.x=t,this.y=e,this.width=i,this.height=s,this.scissorEnabled=!0}contains(t,e){return t>=this.x&&t<this.x+this.width&&e>=this.y&&e<this.y+this.height}toCanvas(t,e){return{x:t+this.x,y:e+this.y}}toLocal(t,e){return{x:t-this.x,y:e-this.y}}getAspectRatio(){return this.width/this.height}setScissor(t){this.scissorEnabled=t}shouldClip(t,e){return!!this.scissorEnabled&&(t<this.x||t>=this.x+this.width||e<this.y||e>=this.y+this.height)}}function A(t,e,i){let s,r,h,a;return t/e>i?(a=e,h=e*i,s=(t-h)/2,r=0):(h=t,a=t/i,s=0,r=(e-a)/2),new C(s,r,h,a)}function P(t,e){if(e.y>0)for(let i=0;i<e.y;i++)for(let e=0;e<t.width;e++)t.setPixel(e,i,0,0,0,255);const i=e.y+e.height;if(i<t.height)for(let e=i;e<t.height;e++)for(let i=0;i<t.width;i++)t.setPixel(i,e,0,0,0,255);if(e.x>0)for(let i=0;i<t.height;i++)for(let s=0;s<e.x;s++)t.setPixel(s,i,0,0,0,255);const s=e.x+e.width;if(s<t.width)for(let e=0;e<t.height;e++)for(let i=s;i<t.width;i++)t.setPixel(i,e,0,0,0,255)}class k{static drawLine(t,e,i,s,r,h,a,o,n=255,l=void 0){const c=performance.now();e=Math.floor(e),i=Math.floor(i),s=Math.floor(s),r=Math.floor(r);const d=Math.abs(s-e),u=Math.abs(r-i),f=e<s?1:-1,m=i<r?1:-1;let x=d-u,p=e,M=i,g=1/0,y=1/0,w=-1/0,b=-1/0;const T=t.data,C=t.width;t.height;let A=0;for(;;){if(v(p,M,t,l)){const t=4*(M*C+p);T[t+0]=h,T[t+1]=a,T[t+2]=o,T[t+3]=n,A++,g=Math.min(g,p),y=Math.min(y,M),w=Math.max(w,p),b=Math.max(b,M)}if(p===s&&M===r)break;const e=2*x;e>-u&&(x-=u,p+=f),e<d&&(x+=d,M+=m)}if(0===A)return{pixels:0,time:0,regionSize:0};const P=w-g+1,B=b-y+1,R=k._extractRegion(T,C,g,y,P,B);t.renderer.updateBufferData(t.bufferId,R,g,y,P,B),t.needsUpload=!0;return{pixels:A,time:performance.now()-c,regionSize:P*B}}static drawThickLine(t,e,i,s,r,h,a,o,n,l=255,c=void 0){e=Math.floor(e),i=Math.floor(i),s=Math.floor(s),r=Math.floor(r),h=Math.max(1,Math.floor(h));const d=performance.now(),u=Math.ceil(h/2),f=k._createBrushStamp(u,a,o,n,l),m=k._bresenhamPoints(e,i,s,r);let x=1/0,p=1/0,M=-1/0,g=-1/0;const y=t.data,w=t.width,b=t.height;let v=0;for(const{x:t,y:e}of m){const i=k._stampBrush(y,w,b,t,e,u,f,c);v+=i.pixels,i.pixels>0&&(x=Math.min(x,i.minX),p=Math.min(p,i.minY),M=Math.max(M,i.maxX),g=Math.max(g,i.maxY))}if(0===v)return{pixels:0,linePoints:m.length,regionSize:0};const T=M-x+1,C=g-p+1,A=k._extractRegion(y,w,x,p,T,C);t.renderer.updateBufferData(t.bufferId,A,x,p,T,C),t.needsUpload=!0;const P=performance.now()-d;return{pixels:v,linePoints:m.length,time:P,regionSize:T*C}}static _bresenhamPoints(t,e,i,s){const r=[],h=Math.abs(i-t),a=Math.abs(s-e),o=t<i?1:-1,n=e<s?1:-1;let l=h-a,c=t,d=e;for(;r.push({x:c,y:d}),c!==i||d!==s;){const t=2*l;t>-a&&(l-=a,c+=o),t<h&&(l+=h,d+=n)}return r}static _createBrushStamp(t,e,i,s,r){const h=[];for(let a=-t;a<=t;a++)for(let o=-t;o<=t;o++){const n=Math.sqrt(o*o+a*a);if(n<=t){const l=Math.max(0,1-n/t),c=Math.floor(r*l);h.push({dx:o,dy:a,r:e,g:i,b:s,a:c})}}return h}static _stampBrush(t,e,i,s,r,h,a,o){let n=0,l=1/0,c=1/0,d=-1/0,u=-1/0;for(const{dx:h,dy:f,r:m,g:x,b:p,a:M}of a){const a=s+h,g=r+f;if(!v(a,g,{width:e,height:i,data:t},o))continue;const y=4*(g*e+a),w=M/255,b=1-w;t[y+0]=Math.floor(m*w+t[y+0]*b),t[y+1]=Math.floor(x*w+t[y+1]*b),t[y+2]=Math.floor(p*w+t[y+2]*b),t[y+3]=255,n++,l=Math.min(l,a),c=Math.min(c,g),d=Math.max(d,a),u=Math.max(u,g)}return{pixels:n,minX:l,minY:c,maxX:d,maxY:u}}static _extractRegion(t,e,i,s,r,h){const a=new Uint8Array(r*h*4);for(let o=0;o<h;o++){const h=4*((s+o)*e+i),n=o*r*4,l=4*r;a.set(t.subarray(h,h+l),n)}return a}}class B{static fillRect(t,e,i,s,r,h,a,o,n=255,l=void 0){const c=function(t,e,i,s,r,h){const a=Math.max(0,Math.floor(t)),o=Math.max(0,Math.floor(e)),n=Math.min(r,Math.ceil(t+i))-a,l=Math.min(h,Math.ceil(e+s))-o;return n<=0||l<=0?null:{x:a,y:o,width:n,height:l}}(e,i,s,r,t.width,t.height);if(!c)return{pixels:0};let{x:d,y:u,width:f,height:m}=c;const x=t.data,p=t.width;let M=1/0,g=1/0,y=-1/0,w=-1/0,b=0;for(let e=u;e<u+m;e++)for(let i=d;i<d+f;i++){if(!v(i,e,t,l))continue;const s=4*(e*p+i);x[s+0]=h,x[s+1]=a,x[s+2]=o,x[s+3]=n,b++,M=Math.min(M,i),g=Math.min(g,e),y=Math.max(y,i),w=Math.max(w,e)}if(0===b)return{pixels:0};const T=y-M+1,C=w-g+1,A=B._extractRegion(x,p,M,g,T,C);return t.renderer.updateBufferData(t.bufferId,A,M,g,T,C),t.needsUpload=!0,{pixels:b}}static strokeRect(t,e,i,s,r,h,a,o,n,l=255,c=void 0){e=Math.floor(e),i=Math.floor(i),s=Math.ceil(s),r=Math.ceil(r),h=Math.max(1,Math.floor(h)),k.drawThickLine(t,e,i,e+s,i,h,a,o,n,l,c),k.drawThickLine(t,e+s,i,e+s,i+r,h,a,o,n,l,c),k.drawThickLine(t,e+s,i+r,e,i+r,h,a,o,n,l,c),k.drawThickLine(t,e,i+r,e,i,h,a,o,n,l,c)}static fillCircle(t,e,i,s,r,h,a,o=255,n=void 0){const l=Math.floor(e),c=Math.floor(i),d=Math.floor(s);if(d<=0)return{pixels:0,time:0};let u=1/0,f=1/0,m=-1/0,x=-1/0;const p=t.data,M=t.width;t.height;let g=d,y=0,w=1-d,b=0;const T=(e,i,s)=>{for(let l=i;l<=s;l++){if(!v(l,e,t,n))continue;const i=4*(e*M+l);p[i+0]=r,p[i+1]=h,p[i+2]=a,p[i+3]=o,b++,u=Math.min(u,l),f=Math.min(f,e),m=Math.max(m,l),x=Math.max(x,e)}};for(T(c,l-g,l+g);g>y;)y++,w<0?w+=2*y+1:(g--,w+=2*(y-g)+1),T(c+y,l-g,l+g),T(c+g,l-y,l+y),T(c-y,l-g,l+g),T(c-g,l-y,l+y);if(0===b)return{pixels:0};const C=m-u+1,A=x-f+1,P=B._extractRegion(p,M,u,f,C,A);t.renderer.updateBufferData(t.bufferId,P,u,f,C,A),t.needsUpload=!0}static strokeCircle(t,e,i,s,r,h,a,o,n=255,l=void 0){const c=Math.floor(e),d=Math.floor(i),u=Math.floor(s);if(u<=0)return{pixels:0,time:0};if(r>1)return B._strokeCircleThick(t,c,d,u,r,h,a,o,n);const f=t.data,m=t.width;t.height;let x=1/0,p=1/0,M=-1/0,g=-1/0,y=u,w=0,b=1-u,T=0;const C=(e,i)=>{if(!v(e,i,t,l))return;const s=4*(i*m+e);f[s+0]=h,f[s+1]=a,f[s+2]=o,f[s+3]=n,T++,x=Math.min(x,e),p=Math.min(p,i),M=Math.max(M,e),g=Math.max(g,i)};for(;y>=w;)C(c+y,d+w),C(c+w,d+y),C(c-y,d+w),C(c-w,d+y),C(c-y,d-w),C(c-w,d-y),C(c+y,d-w),C(c+w,d-y),w++,b<0?b+=2*w+1:(y--,b+=2*(w-y)+1);if(0===T)return{pixels:0};const A=M-x+1,P=g-p+1,k=B._extractRegion(f,m,x,p,A,P);t.renderer.updateBufferData(t.bufferId,k,x,p,A,P),t.needsUpload=!0}static _strokeCircleThick(t,e,i,s,r,h,a,o,n,l){const c=s,d=Math.max(0,s-r),u=t.data,f=t.width,m=t.height;let x=1/0,p=1/0,M=-1/0,g=-1/0,y=0;const w=c*c,b=d*d,T=Math.max(0,e-c),C=Math.max(0,i-c),A=Math.min(f-1,e+c),P=Math.min(m-1,i+c);for(let s=C;s<=P;s++)for(let r=T;r<=A;r++){const c=r-e,d=s-i,m=c*c+d*d;if(m<=w&&m>=b){if(!v(r,s,t,l))continue;const e=4*(s*f+r);u[e+0]=h,u[e+1]=a,u[e+2]=o,u[e+3]=n,y++,x=Math.min(x,r),p=Math.min(p,s),M=Math.max(M,r),g=Math.max(g,s)}}if(0===y)return{pixels:0};const k=M-x+1,R=g-p+1,S=B._extractRegion(u,f,x,p,k,R);t.renderer.updateBufferData(t.bufferId,S,x,p,k,R),t.needsUpload=!0}static _extractRegion(t,e,i,s,r,h){const a=new Uint8Array(r*h*4);for(let o=0;o<h;o++){const h=4*((s+o)*e+i),n=o*r*4,l=4*r;a.set(t.subarray(h,h+l),n)}return a}}class R{static fillPolygon(t,e,i,s,r,h=255,a=void 0){if(e.length<3)return{pixels:0};const o=R._buildEdgeTable(e);if(0===o.length)return{pixels:0};let n=1/0,l=-1/0;for(const t of o)n=Math.min(n,t.yMin),l=Math.max(l,t.yMax);n=Math.max(0,Math.floor(n)),l=Math.min(t.height-1,Math.ceil(l));const c=t.data,d=t.width;t.height;let u=1/0,f=1/0,m=-1/0,x=-1/0,p=0;for(let e=n;e<=l;e++){const n=[];for(const t of o)if(e>=t.yMin&&e<t.yMax){const i=t.x+(e-t.yMin)*t.dx;n.push(i)}n.sort((t,e)=>t-e);for(let o=0;o<n.length-1;o+=2){const l=Math.floor(n[o]),M=Math.ceil(n[o+1]);for(let o=l;o<=M;o++){if(!v(o,e,t,a))continue;const n=4*(e*d+o);c[n+0]=i,c[n+1]=s,c[n+2]=r,c[n+3]=h,p++,u=Math.min(u,o),f=Math.min(f,e),m=Math.max(m,o),x=Math.max(x,e)}}}if(0===p)return{pixels:0};const M=m-u+1,g=x-f+1,y=R._extractRegion(c,d,u,f,M,g);return t.renderer.updateBufferData(t.bufferId,y,u,f,M,g),t.needsUpload=!0,{pixels:p,vertices:e.length,scanlines:x-f+1}}static _buildEdgeTable(t){const e=[],i=t.length;for(let s=0;s<i;s++){const r=t[s],h=t[(s+1)%i];if(Math.abs(r.y-h.y)<.001)continue;let a=r.x,o=r.y,n=h.x,l=h.y;o>l&&([a,n]=[n,a],[o,l]=[l,o]);const c=(n-a)/(l-o);e.push({yMin:o,yMax:l,x:a,dx:c})}return e}static strokePolygon(t,e,i,s,r,h,a=255,o=void 0){if(!(e.length<2))for(let n=0;n<e.length;n++){const l=e[n],c=e[(n+1)%e.length];k.drawThickLine(t,l.x,l.y,c.x,c.y,i,s,r,h,a,o)}}static createRegularPolygon(t,e,i,s){const r=[],h=2*Math.PI/s;for(let a=0;a<s;a++){const s=a*h-Math.PI/2;r.push({x:t+Math.cos(s)*i,y:e+Math.sin(s)*i})}return r}static createStar(t,e,i,s,r){const h=[],a=2*Math.PI/(2*r);for(let o=0;o<2*r;o++){const r=o*a-Math.PI/2,n=o%2==0?i:s;h.push({x:t+Math.cos(r)*n,y:e+Math.sin(r)*n})}return h}static createRoundedRect(t,e,i,s,r){const h=[],a=(t,e,i,s,r)=>{for(let a=0;a<=8;a++){const o=s+(r-s)*(a/8);h.push({x:t+Math.cos(o)*i,y:e+Math.sin(o)*i})}},o=Math.min(r,i/2,s/2);return a(t+i-o,e+o,o,-Math.PI/2,0),a(t+i-o,e+s-o,o,0,Math.PI/2),a(t+o,e+s-o,o,Math.PI/2,Math.PI),a(t+o,e+o,o,Math.PI,1.5*Math.PI),h}static _extractRegion(t,e,i,s,r,h){const a=new Uint8Array(r*h*4);for(let o=0;o<h;o++){const h=4*((s+o)*e+i),n=o*r*4,l=4*r;a.set(t.subarray(h,h+l),n)}return a}}class S{static drawLineAA(t,e,i,s,r,h,a,o,n=255,l=void 0){let c=1/0,d=1/0,u=-1/0,f=-1/0,m=0;const x=t.data,p=t.width;if(t.height,e===s&&i===r){if(S._setPixelAA(t,e,i,h,a,o,n,l)){const t=Math.floor(e),s=Math.floor(i);m=1,c=Math.min(c,t),d=Math.min(d,s),u=Math.max(u,t),f=Math.max(f,s)}}else{const x=Math.abs(r-i)>Math.abs(s-e);x&&([e,i]=[i,e],[s,r]=[r,s]),e>s&&([e,s]=[s,e],[i,r]=[r,i]);const p=s-e,M=0===p?1:(r-i)/p;let g=Math.round(e),y=i+M*(g-e),w=1-(e+.5-Math.floor(e+.5)),b=g,v=Math.floor(y),T=!1;x?(T=S._setPixelAA(t,v,b,h,a,o,n*(1-(y-v))*w,l),T&&(m++,c=Math.min(c,v),d=Math.min(d,b),u=Math.max(u,v),f=Math.max(f,b)),T=S._setPixelAA(t,v+1,b,h,a,o,n*(y-v)*w,l),T&&(m++,c=Math.min(c,v+1),d=Math.min(d,b),u=Math.max(u,v+1),f=Math.max(f,b))):(T=S._setPixelAA(t,b,v,h,a,o,n*(1-(y-v))*w,l),T&&(m++,c=Math.min(c,b),d=Math.min(d,v),u=Math.max(u,b),f=Math.max(f,v)),T=S._setPixelAA(t,b,v+1,h,a,o,n*(y-v)*w,l),T&&(m++,c=Math.min(c,b),d=Math.min(d,v+1),u=Math.max(u,b),f=Math.max(f,v+1)));let C=y+M;g=Math.round(s),y=r+M*(g-s),w=s+.5-Math.floor(s+.5);let A=g,P=Math.floor(y);if(x?(T=S._setPixelAA(t,P,A,h,a,o,n*(1-(y-P))*w,l),T&&(m++,c=Math.min(c,P),d=Math.min(d,A),u=Math.max(u,P),f=Math.max(f,A)),T=S._setPixelAA(t,P+1,A,h,a,o,n*(y-P)*w,l),T&&(m++,c=Math.min(c,P+1),d=Math.min(d,A),u=Math.max(u,P+1),f=Math.max(f,A))):(T=S._setPixelAA(t,A,P,h,a,o,n*(1-(y-P))*w,l),T&&(m++,c=Math.min(c,A),d=Math.min(d,P),u=Math.max(u,A),f=Math.max(f,P)),T=S._setPixelAA(t,A,P+1,h,a,o,n*(y-P)*w,l),T&&(m++,c=Math.min(c,A),d=Math.min(d,P+1),u=Math.max(u,A),f=Math.max(f,P+1))),x)for(let e=b+1;e<A;e++){const i=Math.floor(C),s=C-i;T=S._setPixelAA(t,i,e,h,a,o,n*(1-s),l),T&&(m++,c=Math.min(c,i),d=Math.min(d,e),u=Math.max(u,i),f=Math.max(f,e)),T=S._setPixelAA(t,i+1,e,h,a,o,n*s,l),T&&(m++,c=Math.min(c,i+1),d=Math.min(d,e),u=Math.max(u,i+1),f=Math.max(f,e)),C+=M}else for(let e=b+1;e<A;e++){const i=Math.floor(C),s=C-i;T=S._setPixelAA(t,e,i,h,a,o,n*(1-s),l),T&&(m++,c=Math.min(c,e),d=Math.min(d,i),u=Math.max(u,e),f=Math.max(f,i)),T=S._setPixelAA(t,e,i+1,h,a,o,n*s,l),T&&(m++,c=Math.min(c,e),d=Math.min(d,i+1),u=Math.max(u,e),f=Math.max(f,i+1)),C+=M}}if(0===m)return;const M=u-c+1,g=f-d+1,y=S._extractRegion(x,p,c,d,M,g);t.renderer.updateBufferData(t.bufferId,y,c,d,M,g),t.needsUpload=!0}static _setPixelAA(t,e,i,s,r,h,a,o){if(!v(e=Math.floor(e),i=Math.floor(i),t,o))return!1;const n=Math.max(0,Math.min(1,a/255));if(n<=0)return!1;const l=4*(i*t.width+e),c=t.data,d=1-n;return c[l+0]=Math.floor(s*n+c[l+0]*d),c[l+1]=Math.floor(r*n+c[l+1]*d),c[l+2]=Math.floor(h*n+c[l+2]*d),c[l+3]=255,!0}static drawCircleAA(t,e,i,s,r,h,a,o=255,n=void 0){const l=Math.floor(e),c=Math.floor(i),d=s;if(d<=0)return;const u=(d-.5)*(d-.5),f=(d+.5)*(d+.5),m=Math.max(0,l-Math.ceil(d)-1),x=Math.max(0,c-Math.ceil(d)-1),p=Math.min(t.width-1,l+Math.ceil(d)+1),M=Math.min(t.height-1,c+Math.ceil(d)+1);let g=1/0,y=1/0,w=-1/0,b=-1/0,v=0;for(let s=x;s<=M;s++){const l=s-i;for(let i=m;i<=p;i++){const c=i-e,m=c*c+l*l;if(m<u||m>f)continue;const x=Math.sqrt(m),p=1-Math.abs(x-d)/.5;S._setPixelAA(t,i,s,r,h,a,o*p,n)&&(v++,g=Math.min(g,i),y=Math.min(y,s),w=Math.max(w,i),b=Math.max(b,s))}}if(0===v)return;const T=w-g+1,C=b-y+1,A=S._extractRegion(t.data,t.width,g,y,T,C);t.renderer.updateBufferData(t.bufferId,A,g,y,T,C),t.needsUpload=!0}static fillCircleAA(t,e,i,s,r,h,a,o=255,n=void 0){const l=Math.floor(e),c=Math.floor(i),d=s;if(d<=0)return{pixels:0,time:0};const u=Math.max(0,l-Math.ceil(d)-1),f=Math.max(0,c-Math.ceil(d)-1),m=Math.min(t.width-1,l+Math.ceil(d)+1),x=Math.min(t.height-1,c+Math.ceil(d)+1);let p=1/0,M=1/0,g=-1/0,y=-1/0,w=0;for(let s=f;s<=x;s++)for(let l=u;l<=m;l++){const c=l-e,u=s-i,f=Math.sqrt(c*c+u*u);if(f>d+.5)continue;const m=f<=d-.5?1:d+.5-f;S._setPixelAA(t,l,s,r,h,a,o*m,n)&&(w++,p=Math.min(p,l),M=Math.min(M,s),g=Math.max(g,l),y=Math.max(y,s))}if(0===w)return;const b=g-p+1,v=y-M+1,T=S._extractRegion(t.data,t.width,p,M,b,v);t.renderer.updateBufferData(t.bufferId,T,p,M,b,v),t.needsUpload=!0}static _extractRegion(t,e,i,s,r,h){const a=new Uint8Array(r*h*4);for(let o=0;o<h;o++){const h=4*((s+o)*e+i),n=o*r*4,l=4*r;a.set(t.subarray(h,h+l),n)}return a}}const D={NORMAL:0,MULTIPLY:1,SCREEN:2,OVERLAY:3,ADD:4,SUBTRACT:5,DARKEN:6,LIGHTEN:7,DIFFERENCE:8,COLOR_DODGE:9,COLOR_BURN:10};class I{static tempCanvas=void 0;static drawWithBlend(t,e,i=D.NORMAL){const s=t.width,r=t.height,h=t.data;this.tempCanvas||(this.tempCanvas=new b(t.renderer,s,r)),this.tempCanvas.clear(0,0,0,0),e(this.tempCanvas);const a=this.tempCanvas.data,o=h.length,n=this._getBlendFunction(i);for(let t=0;t<o;t+=16)0!==a[t+3]&&n(a[t],a[t+1],a[t+2],a[t+3],h[t],h[t+1],h[t+2],h[t+3],h,t),0!==a[t+7]&&n(a[t+4],a[t+5],a[t+6],a[t+7],h[t+4],h[t+5],h[t+6],h[t+7],h,t+4),0!==a[t+11]&&n(a[t+8],a[t+9],a[t+10],a[t+11],h[t+8],h[t+9],h[t+10],h[t+11],h,t+8),0!==a[t+15]&&n(a[t+12],a[t+13],a[t+14],a[t+15],h[t+12],h[t+13],h[t+14],h[t+15],h,t+12);t.renderer.updateBufferData(t.bufferId,h),t.needsUpload=!0}static _getBlendFunction(t){switch(t){case D.MULTIPLY:return this._blendMultiply;case D.SCREEN:return this._blendScreen;case D.OVERLAY:return this._blendOverlay;case D.ADD:return this._blendAdd;case D.SUBTRACT:return this._blendSubtract;case D.DARKEN:return this._blendDarken;case D.LIGHTEN:return this._blendLighten;case D.DIFFERENCE:return this._blendDifference;case D.COLOR_DODGE:return this._blendColorDodge;case D.COLOR_BURN:return this._blendColorBurn;default:return this._blendNormal}}static _blendNormal(t,e,i,s,r,h,a,o,n,l){if(255===s)return n[l]=t,n[l+1]=e,n[l+2]=i,void(n[l+3]=255);if(0===s)return;const c=.00392156862745098*s,d=.00392156862745098*o,u=c+d*(1-c);if(u<.001)return n[l]=0,n[l+1]=0,n[l+2]=0,void(n[l+3]=0);const f=1/u;n[l]=(t*c+r*d*(1-c))*f,n[l+1]=(e*c+h*d*(1-c))*f,n[l+2]=(i*c+a*d*(1-c))*f,n[l+3]=255*u}static _blendMultiply(t,e,i,s,r,h,a,o,n,l){if(0===s)return;const c=.00392156862745098*s,d=.00392156862745098*o,u=c+d*(1-c);if(u<.001)return n[l]=0,n[l+1]=0,n[l+2]=0,void(n[l+3]=0);const f=1/u,m=t*r*.00392156862745098,x=e*h*.00392156862745098,p=i*a*.00392156862745098;n[l]=(m*c+r*d*(1-c))*f,n[l+1]=(x*c+h*d*(1-c))*f,n[l+2]=(p*c+a*d*(1-c))*f,n[l+3]=255*u}static _blendScreen(t,e,i,s,r,h,a,o,n,l){if(0===s)return;const c=.00392156862745098*s,d=.00392156862745098*o,u=c+d*(1-c);if(u<.001)return n[l]=0,n[l+1]=0,n[l+2]=0,void(n[l+3]=0);const f=1/u,m=255-(255-t)*(255-r)*.00392156862745098,x=255-(255-e)*(255-h)*.00392156862745098,p=255-(255-i)*(255-a)*.00392156862745098;n[l]=(m*c+r*d*(1-c))*f,n[l+1]=(x*c+h*d*(1-c))*f,n[l+2]=(p*c+a*d*(1-c))*f,n[l+3]=255*u}static _blendOverlay(t,e,i,s,r,h,a,o,n,l){if(0===s)return;const c=.00392156862745098*s,d=.00392156862745098*o,u=c+d*(1-c);if(u<.001)return n[l]=0,n[l+1]=0,n[l+2]=0,void(n[l+3]=0);const f=1/u,m=r<128?2*t*r*.00392156862745098:255-2*(255-t)*(255-r)*.00392156862745098,x=h<128?2*e*h*.00392156862745098:255-2*(255-e)*(255-h)*.00392156862745098,p=a<128?2*i*a*.00392156862745098:255-2*(255-i)*(255-a)*.00392156862745098;n[l]=(m*c+r*d*(1-c))*f,n[l+1]=(x*c+h*d*(1-c))*f,n[l+2]=(p*c+a*d*(1-c))*f,n[l+3]=255*u}static _blendAdd(t,e,i,s,r,h,a,o,n,l){if(0===s)return;const c=.00392156862745098*s,d=.00392156862745098*o,u=c+d*(1-c);if(u<.001)return n[l]=0,n[l+1]=0,n[l+2]=0,void(n[l+3]=0);const f=1/u;let m=t+r;m>255&&(m=255);let x=e+h;x>255&&(x=255);let p=i+a;p>255&&(p=255),n[l]=(m*c+r*d*(1-c))*f,n[l+1]=(x*c+h*d*(1-c))*f,n[l+2]=(p*c+a*d*(1-c))*f,n[l+3]=255*u}static _blendSubtract(t,e,i,s,r,h,a,o,n,l){if(0===s)return;const c=.00392156862745098*s,d=.00392156862745098*o,u=c+d*(1-c);if(u<.001)return n[l]=0,n[l+1]=0,n[l+2]=0,void(n[l+3]=0);const f=1/u;let m=r-t;m<0&&(m=0);let x=h-e;x<0&&(x=0);let p=a-i;p<0&&(p=0),n[l]=(m*c+r*d*(1-c))*f,n[l+1]=(x*c+h*d*(1-c))*f,n[l+2]=(p*c+a*d*(1-c))*f,n[l+3]=255*u}static _blendDarken(t,e,i,s,r,h,a,o,n,l){if(0===s)return;const c=.00392156862745098*s,d=.00392156862745098*o,u=c+d*(1-c);if(u<.001)return n[l]=0,n[l+1]=0,n[l+2]=0,void(n[l+3]=0);const f=1/u,m=t<r?t:r,x=e<h?e:h,p=i<a?i:a;n[l]=(m*c+r*d*(1-c))*f,n[l+1]=(x*c+h*d*(1-c))*f,n[l+2]=(p*c+a*d*(1-c))*f,n[l+3]=255*u}static _blendLighten(t,e,i,s,r,h,a,o,n,l){if(0===s)return;const c=.00392156862745098*s,d=.00392156862745098*o,u=c+d*(1-c);if(u<.001)return n[l]=0,n[l+1]=0,n[l+2]=0,void(n[l+3]=0);const f=1/u,m=t>r?t:r,x=e>h?e:h,p=i>a?i:a;n[l]=(m*c+r*d*(1-c))*f,n[l+1]=(x*c+h*d*(1-c))*f,n[l+2]=(p*c+a*d*(1-c))*f,n[l+3]=255*u}static _blendDifference(t,e,i,s,r,h,a,o,n,l){if(0===s)return;const c=.00392156862745098*s,d=.00392156862745098*o,u=c+d*(1-c);if(u<.001)return n[l]=0,n[l+1]=0,n[l+2]=0,void(n[l+3]=0);const f=1/u,m=Math.abs(t-r),x=Math.abs(e-h),p=Math.abs(i-a);n[l]=(m*c+r*d*(1-c))*f,n[l+1]=(x*c+h*d*(1-c))*f,n[l+2]=(p*c+a*d*(1-c))*f,n[l+3]=255*u}static _blendColorDodge(t,e,i,s,r,h,a,o,n,l){if(0===s)return;const c=.00392156862745098*s,d=.00392156862745098*o,u=c+d*(1-c);if(u<.001)return n[l]=0,n[l+1]=0,n[l+2]=0,void(n[l+3]=0);const f=1/u,m=255===t?255:Math.min(255,255*r/(255-t)),x=255===e?255:Math.min(255,255*h/(255-e)),p=255===i?255:Math.min(255,255*a/(255-i));n[l]=(m*c+r*d*(1-c))*f,n[l+1]=(x*c+h*d*(1-c))*f,n[l+2]=(p*c+a*d*(1-c))*f,n[l+3]=255*u}static _blendColorBurn(t,e,i,s,r,h,a,o,n,l){if(0===s)return;const c=.00392156862745098*s,d=.00392156862745098*o,u=c+d*(1-c);if(u<.001)return n[l]=0,n[l+1]=0,n[l+2]=0,void(n[l+3]=0);const f=1/u,m=0===t?0:Math.max(0,255-255*(255-r)/t),x=0===e?0:Math.max(0,255-255*(255-h)/e),p=0===i?0:Math.max(0,255-255*(255-a)/i);n[l]=(m*c+r*d*(1-c))*f,n[l+1]=(x*c+h*d*(1-c))*f,n[l+2]=(p*c+a*d*(1-c))*f,n[l+3]=255*u}static setPixelBlended(t,e,i,s,r,h,a,o=D.NORMAL){if(e<0||e>=t.width||i<0||i>=t.height||0===a)return;const n=4*(i*t.width+e),l=t.data,c=l[n],d=l[n+1],u=l[n+2],f=l[n+3];if(o===D.NORMAL){if(255===a)return l[n]=s,l[n+1]=r,l[n+2]=h,void(l[n+3]=255);const t=.00392156862745098*a,e=.00392156862745098*f,i=t+e*(1-t);if(i<.001)return l[n]=0,l[n+1]=0,l[n+2]=0,void(l[n+3]=0);const o=1/i;return l[n]=(s*t+c*e*(1-t))*o,l[n+1]=(r*t+d*e*(1-t))*o,l[n+2]=(h*t+u*e*(1-t))*o,void(l[n+3]=255*i)}this._getBlendFunction(o)(s,r,h,a,c,d,u,f,l,n)}static createTestGradient(t){const e=t.width,i=t.height,s=t.data;for(let t=0;t<i;t++){const r=t/i*255;for(let i=0;i<e;i++){const h=4*(t*e+i);s[h]=i/e*255,s[h+1]=r,s[h+2]=128,s[h+3]=255}}t.upload()}}class _{constructor(t,e,i,s){this.x=t,this.y=e,this.width=i,this.height=s}intersects(t,e,i,s){return!(t+i<this.x||t>this.x+this.width||e+s<this.y||e>this.y+this.height)}contains(t,e){return t>=this.x&&t<this.x+this.width&&e>=this.y&&e<this.y+this.height}intersect(t){const e=Math.max(this.x,t.x),i=Math.max(this.y,t.y),s=Math.min(this.x+this.width,t.x+t.width),r=Math.min(this.y+this.height,t.y+t.height);return s<=e||r<=i?null:new _(e,i,s-e,r-i)}computeOutcode(t,e){let i=0;return t<this.x&&(i|=1),t>=this.x+this.width&&(i|=2),e<this.y&&(i|=4),e>=this.y+this.height&&(i|=8),i}}class L{constructor(t=0,e=0,i=1,s=1,r=0){this.translateX=t,this.translateY=e,this.scaleX=i,this.scaleY=s,this.rotation=r}apply(t,e){if(0!==this.rotation){const i=Math.cos(this.rotation),s=Math.sin(this.rotation),r=t*s+e*i;t=t*i-e*s,e=r}return{x:t*this.scaleX+this.translateX,y:e*this.scaleY+this.translateY}}applyRect(t,e,i,s){const r=[this.apply(t,e),this.apply(t+i,e),this.apply(t,e+s),this.apply(t+i,e+s)];let h=1/0,a=1/0,o=-1/0,n=-1/0;for(const t of r)h=Math.min(h,t.x),a=Math.min(a,t.y),o=Math.max(o,t.x),n=Math.max(n,t.y);return{x:h,y:a,width:o-h,height:n-a}}compose(t){return new L(this.translateX+t.translateX*this.scaleX,this.translateY+t.translateY*this.scaleY,this.scaleX*t.scaleX,this.scaleY*t.scaleY,this.rotation+t.rotation)}static identity(){return new L(0,0,1,1,0)}}class U{constructor(){this.clipStack=[],this.transformStack=[L.identity()],this.globalAlpha=1,this.fillStyle={r:0,g:0,b:0,a:255},this.strokeStyle={r:0,g:0,b:0,a:255},this.lineWidth=1}get currentClip(){return this.clipStack.length>0?this.clipStack[this.clipStack.length-1]:null}get currentTransform(){return this.transformStack[this.transformStack.length-1]}pushClip(t){this.clipStack.push(t)}popClip(){return this.clipStack.pop()}pushTransform(t){const e=this.currentTransform;this.transformStack.push(e.compose(t))}popTransform(){return this.transformStack.length>1?this.transformStack.pop():this.currentTransform}save(){return{clipStack:[...this.clipStack],transformStack:[...this.transformStack],globalAlpha:this.globalAlpha,fillStyle:{...this.fillStyle},strokeStyle:{...this.strokeStyle},lineWidth:this.lineWidth}}restore(t){this.clipStack=t.clipStack,this.transformStack=t.transformStack,this.globalAlpha=t.globalAlpha,this.fillStyle=t.fillStyle,this.strokeStyle=t.strokeStyle,this.lineWidth=t.lineWidth}}class F{constructor(t){this.canvas=t,this.state=new U,this.state.pushClip(new _(0,0,t.width,t.height))}save(){return this.state.save()}restore(t){this.state.restore(t)}pushClipRect(t,e,i,s){const r=this.state.currentTransform.applyRect(t,e,i,s),h=new _(r.x,r.y,r.width,r.height),a=this.state.currentClip;if(a){const t=a.intersect(h);t?this.state.pushClip(t):this.state.pushClip(new _(0,0,0,0))}else this.state.pushClip(h)}popClipRect(){this.state.popClip()}pushTransform(t=0,e=0,i=1,s=1,r=0){const h=new L(t,e,i,s,r);this.state.pushTransform(h)}popTransform(){this.state.popTransform()}isRectVisible(t,e,i,s){const r=this.state.currentTransform.applyRect(t,e,i,s),h=this.state.currentClip;return!h||h.intersects(r.x,r.y,r.width,r.height)}transformPoint(t,e){return this.state.currentTransform.apply(t,e)}clipLine(t,e,i,s){const r=this.state.currentClip;if(!r)return{x1:t,y1:e,x2:i,y2:s};const h=this.state.currentTransform;let a=h.apply(t,e),o=h.apply(i,s),n=r.computeOutcode(a.x,a.y),l=r.computeOutcode(o.x,o.y),c=!1;for(;;){if(0===(n|l)){c=!0;break}if(0!==(n&l))break;{let t,e;const i=0!==n?n:l;8&i?(t=a.x+(o.x-a.x)*(r.y+r.height-a.y)/(o.y-a.y),e=r.y+r.height):4&i?(t=a.x+(o.x-a.x)*(r.y-a.y)/(o.y-a.y),e=r.y):2&i?(e=a.y+(o.y-a.y)*(r.x+r.width-a.x)/(o.x-a.x),t=r.x+r.width):1&i&&(e=a.y+(o.y-a.y)*(r.x-a.x)/(o.x-a.x),t=r.x),i===n?(a.x=t,a.y=e,n=r.computeOutcode(a.x,a.y)):(o.x=t,o.y=e,l=r.computeOutcode(o.x,o.y))}}return c?{x1:a.x,y1:a.y,x2:o.x,y2:o.y}:null}fillRect(t,e,i,s,r,h,a,o=255){if(!this.isRectVisible(t,e,i,s))return;const n=this.state.currentTransform.applyRect(t,e,i,s),l=this.state.currentClip,c=Math.max(l.x,n.x),d=Math.max(l.y,n.y),u=Math.min(l.x+l.width,n.x+n.width),f=Math.min(l.y+l.height,n.y+n.height);if(u>c&&f>d){const t=o*this.state.globalAlpha;B.fillRect(this.canvas,c,d,u-c,f-d,r,h,a,t)}}strokeRect(t,e,i,s,r,h,a,o,n=255){if(!this.isRectVisible(t,e,i,s))return;const l=n*this.state.globalAlpha,c=this.state.currentTransform,d=c.apply(t,e),u=c.apply(t+i,e),f=c.apply(t+i,e+s),m=c.apply(t,e+s);this._drawClippedLine(d.x,d.y,u.x,u.y,r,h,a,o,l),this._drawClippedLine(u.x,u.y,f.x,f.y,r,h,a,o,l),this._drawClippedLine(f.x,f.y,m.x,m.y,r,h,a,o,l),this._drawClippedLine(m.x,m.y,d.x,d.y,r,h,a,o,l)}drawLine(t,e,i,s,r,h,a,o,n=255){const l=this.clipLine(t,e,i,s);if(!l)return;const c=n*this.state.globalAlpha;1===r?LineDrawer.drawLine(this.canvas,l.x1,l.y1,l.x2,l.y2,h,a,o,c):LineDrawer.drawThickLine(this.canvas,l.x1,l.y1,l.x2,l.y2,r,h,a,o,c)}fillCircle(t,e,i,s,r,h,a=255){if(!this.isRectVisible(t-i,e-i,2*i,2*i))return;const o=this.state.currentTransform,n=o.apply(t,e),l=i*(Math.abs(o.scaleX)+Math.abs(o.scaleY))/2,c=a*this.state.globalAlpha;this._fillCircleClipped(n.x,n.y,l,s,r,h,c)}_drawClippedLine(t,e,i,s,r,h,a,o,n){const l=this.clipLine(t,e,i,s);l&&(1===r?LineDrawer.drawLine(this.canvas,l.x1,l.y1,l.x2,l.y2,h,a,o,n):LineDrawer.drawThickLine(this.canvas,l.x1,l.y1,l.x2,l.y2,r,h,a,o,n))}_fillCircleClipped(t,e,i,s,r,h,a){const o=this.state.currentClip,n=this.canvas.data,l=this.canvas.width,c=this.canvas.height,d=Math.max(0,Math.floor(t-i)),u=Math.min(l-1,Math.ceil(t+i)),f=Math.max(0,Math.floor(e-i)),m=Math.min(c-1,Math.ceil(e+i));for(let c=f;c<=m;c++)for(let f=d;f<=u;f++){if(o&&!o.contains(f,c))continue;const d=f-t,u=c-e;if(Math.sqrt(d*d+u*u)<=i){const t=4*(c*l+f);n[t+0]=s,n[t+1]=r,n[t+2]=h,n[t+3]=a}}this.canvas.renderer.updateBufferData(this.canvas.bufferId,this.canvas.data.subarray(0,l*c*4),d,f,u-d+1,m-f+1),this.canvas.needsUpload=!0}setFillStyle(t,e,i,s=255){this.state.fillStyle={r:t,g:e,b:i,a:s}}setStrokeStyle(t,e,i,s=255){this.state.strokeStyle={r:t,g:e,b:i,a:s}}setLineWidth(t){this.state.lineWidth=t}setGlobalAlpha(t){this.state.globalAlpha=Math.max(0,Math.min(1,t))}}class E{constructor(t,e,i,s,r,h,a,o){this.char=t,this.x=e,this.y=i,this.width=s,this.height=r,this.xOffset=h,this.yOffset=a,this.xAdvance=o}}class H{constructor(t,e,i={}){this.renderer=t,this.atlasImage=t.loadImage(e),this.atlasImage.data||console.warn(\"image data empty\"),this.config={bitmapWidth:i.bitmapWidth||this.atlasImage.width,bitmapHeight:i.bitmapHeight||this.atlasImage.height,cellsPerRow:i.cellsPerRow||16,cellsPerColumn:i.cellsPerColumn||16,cellWidth:i.cellWidth||32,cellHeight:i.cellHeight||32,fontSize:i.fontSize||16,offsetX:i.offsetX||0,offsetY:i.offsetY||0,charOrder:i.charOrder||this.getDefaultCharOrder()},this.glyphs=new Map,this.buildGlyphMap(),this.lineHeight=this.config.cellHeight,this.baseline=Math.floor(.8*this.lineHeight)}getDefaultCharOrder(){return\" ☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{¦}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■□\"}buildGlyphMap(){const{cellsPerRow:t,cellsPerColumn:e,cellWidth:i,cellHeight:s,offsetX:r,offsetY:h,charOrder:a}=this.config;let o=0;for(let n=0;n<e;n++)for(let e=0;e<t&&!(o>=a.length);e++){const t=a[o],l=new E(t,e*i+r,n*s+h,i,s,0,0,i);this.glyphs.set(t,l),o++}console.log(`Built ${this.glyphs.size} glyphs from atlas`)}getGlyph(t){let e=this.glyphs.get(t);if(!e){if(\"\\n\"==e)return this.glyphs.get(\" \");e=this.glyphs.get(\"?\")||this.glyphs.get(\" \")||this.glyphs.values().next().value}return e}measureText(t){let e=0;for(let i=0;i<t.length;i++){e+=this.getGlyph(t[i]).xAdvance}return{width:e,height:this.lineHeight}}drawText(t,e,i,s,r={r:255,g:255,b:255,a:255},h=void 0){let a=i;const o=s,n=this.atlasImage.data,l=this.atlasImage.width,c=t.data,d=t.width,u=t.height;let f=1/0,m=1/0,x=-1/0,p=-1/0;for(let i=0;i<e.length;i++){const s=e[i];if(\" \"===s){a+=this.getGlyph(s).xAdvance;continue}const M=this.getGlyph(s),g=Math.floor(a+M.xOffset),y=Math.floor(o+M.yOffset);for(let e=0;e<M.height;e++)for(let i=0;i<M.width;i++){const s=g+i,a=y+e;if(s<0||s>=d||a<0||a>=u)continue;if(!v(s,a,t,h))continue;const o=M.x+i,w=4*((M.y+e)*l+o),b=n[w+0],T=n[w+1],C=n[w+2],A=n[w+3];if(0===A)continue;const P=(b+T+C)/3/255*(A/255)*(r.a/255);if(P<.01)continue;const k=4*(a*d+s),B=1-P;c[k+0]=Math.floor(r.r*P+c[k+0]*B),c[k+1]=Math.floor(r.g*P+c[k+1]*B),c[k+2]=Math.floor(r.b*P+c[k+2]*B),c[k+3]=255,f=Math.min(f,s),m=Math.min(m,a),x=Math.max(x,s),p=Math.max(p,a)}a+=M.xAdvance}if(f!==1/0){const e=x-f,i=p-m,s=new Uint8Array(e*i*4);for(let t=0;t<i;t++){const i=4*((m+t)*d+f),r=t*e*4,h=4*e;s.set(c.subarray(i,i+h),r)}t.renderer.updateBufferData(t.bufferId,s,f,m,e,i),t.needsUpload=!0,t.upload()}}drawTextWithTint(t,e,i,s,r,h,a,o=255,n=void 0){return this.drawText(t,e,i,s,{r:r,g:h,b:a,a:o},n)}wrapText(t,e){const i=t.split(\" \"),s=[];let r=\"\";return i.forEach(t=>{const i=r+(r?\" \":\"\")+t;this.measureText(i).width>e&&r?(s.push(r),r=t):r=i}),r&&s.push(r),s}drawMultilineText(t,e,i,s,r,h=\"left\",a={r:255,g:255,b:255,a:255},o=void 0){const n=this.wrapText(e,r);let l=s;return n.forEach(e=>{const s=this.measureText(e);let n=i;\"center\"===h?n=i+(r-s.width)/2:\"right\"===h&&(n=i+r-s.width),this.drawText(t,e,n,l,a,o),l+=this.lineHeight}),{width:r,height:n.length*this.lineHeight}}}class O{constructor(t,e,i,s){this.x=t,this.y=e,this.width=i,this.height=s,this.visible=!0,this.enabled=!0}contains(t,e){return t>=this.x&&t<this.x+this.width&&e>=this.y&&e<this.y+this.height}update(t){}draw(t,e){}}class Y extends O{constructor(t,e,i,s,r,h){super(t,e,i,s),this.text=r,this.onClick=h,this.isHovered=!1,this.isPressed=!1,this.normalColor={r:70,g:80,b:100},this.hoverColor={r:90,g:100,b:120},this.pressedColor={r:50,g:60,b:80},this.textColor={r:255,g:255,b:255,a:255},this.borderRadius=8}update(t){if(!this.enabled)return;const e=t.mousePosition;this.isHovered,this.isHovered=this.contains(e.x,e.y),this.isHovered&&t.isMousePressed(\"click\")&&(this.isPressed=!0),this.isPressed&&t.IsMouseActionReleased(\"click\")&&(this.isHovered&&this.onClick&&this.onClick(),this.isPressed=!1)}draw(t,e){if(!this.visible)return;let i=this.normalColor;this.enabled?this.isPressed?i=this.pressedColor:this.isHovered&&(i=this.hoverColor):i={r:40,g:45,b:50};const s=R.createRoundedRect(this.x,this.y,this.width,this.height,this.borderRadius);if(R.fillPolygon(t,s,i.r,i.g,i.b,255),R.strokePolygon(t,s,2,this.isHovered?120:80,this.isHovered?140:100,this.isHovered?160:120,255),e&&this.text){const i=e.measureText(this.text),s=this.x+(this.width-i.width)/2,r=this.y+(this.height-i.height)/2;e.drawText(t,this.text,s,r,this.textColor)}}}class V extends O{constructor(t,e,i,s,r=\"\"){super(t,e,i,s),this.text=\"\",this.placeholder=r,this.isFocused=!1,this.cursorPosition=0,this.cursorBlinkTime=0,this.cursorVisible=!0,this.backgroundColor={r:40,g:45,b:55},this.focusedBackgroundColor={r:50,g:55,b:65},this.borderColor={r:80,g:90,b:110},this.focusedBorderColor={r:100,g:150,b:200},this.textColor={r:255,g:255,b:255,a:255},this.placeholderColor={r:120,g:130,b:140,a:255},this.cursorColor={r:255,g:255,b:255,a:255},this.padding=8,this.borderRadius=6,this.onTextChange=null,this.onSubmit=null}update(t,e=16){if(!this.enabled)return;const i=t.mousePosition;if(t.isMousePressed(\"click\")){const t=this.contains(i.x,i.y);t&&!this.isFocused?this.focus():!t&&this.isFocused&&this.blur()}this.isFocused&&(this.cursorBlinkTime+=e,this.cursorBlinkTime>=530&&(this.cursorVisible=!this.cursorVisible,this.cursorBlinkTime=0))}focus(){this.isFocused=!0,this.cursorPosition=this.text.length,this.cursorVisible=!0,this.cursorBlinkTime=0}blur(){this.isFocused=!1,this.cursorVisible=!1}handleChar(t){this.isFocused&&(this.text=this.text.slice(0,this.cursorPosition)+t+this.text.slice(this.cursorPosition),this.cursorPosition++,this.cursorVisible=!0,this.cursorBlinkTime=0,this.onTextChange&&this.onTextChange(this.text))}handleBackspace(){this.isFocused&&0!==this.cursorPosition&&(this.text=this.text.slice(0,this.cursorPosition-1)+this.text.slice(this.cursorPosition),this.cursorPosition--,this.cursorVisible=!0,this.cursorBlinkTime=0,this.onTextChange&&this.onTextChange(this.text))}handleDelete(){!this.isFocused||this.cursorPosition>=this.text.length||(this.text=this.text.slice(0,this.cursorPosition)+this.text.slice(this.cursorPosition+1),this.cursorVisible=!0,this.cursorBlinkTime=0,this.onTextChange&&this.onTextChange(this.text))}handleSubmit(){this.isFocused&&this.onSubmit&&this.onSubmit(this.text)}moveCursorLeft(){this.isFocused&&0!==this.cursorPosition&&(this.cursorPosition--,this.cursorVisible=!0,this.cursorBlinkTime=0)}moveCursorRight(){!this.isFocused||this.cursorPosition>=this.text.length||(this.cursorPosition++,this.cursorVisible=!0,this.cursorBlinkTime=0)}setText(t){this.text=t,this.cursorPosition=t.length,this.cursorVisible=!0,this.cursorBlinkTime=0}getText(){return this.text}clear(){this.text=\"\",this.cursorPosition=0,this.cursorVisible=!0,this.cursorBlinkTime=0}draw(t,e){if(!this.visible)return;const i=this.isFocused?this.focusedBackgroundColor:this.backgroundColor,s=R.createRoundedRect(this.x,this.y,this.width,this.height,this.borderRadius);R.fillPolygon(t,s,i.r,i.g,i.b,255);const r=this.isFocused?this.focusedBorderColor:this.borderColor;if(R.strokePolygon(t,s,this.isFocused?2:1,r.r,r.g,r.b,255),!e)return;const h=this.text||this.placeholder,a=this.text?this.textColor:this.placeholderColor;if(h){const i=this.x+this.padding,s=this.y+(this.height-e.lineHeight)/2;e.drawText(t,h,i,s,a)}if(this.isFocused&&this.cursorVisible){const i=this.text.slice(0,this.cursorPosition),s=e.measureText(i).width,r=this.x+this.padding+s,h=this.y+this.padding,a=this.y+this.height-this.padding;B.fillRect(t,r,h,2,a-h,this.cursorColor.r,this.cursorColor.g,this.cursorColor.b,this.cursorColor.a)}}}class X extends O{constructor(t,e,i,s={r:255,g:255,b:255,a:255}){super(t,e,0,0),this.text=i,this.color=s}draw(t,e){this.visible&&e&&e.drawText(t,this.text,this.x,this.y,this.color)}}class G{constructor(t,e,i){this.canvas=t,this.font=e,this.inputMap=i,this.elements=[],this.focusedElement=null,this.lastFrameTime=performance.now()}add(t){return this.elements.push(t),t}remove(t){const e=this.elements.indexOf(t);e>-1&&this.elements.splice(e,1)}clear(){this.elements=[],this.focusedElement=null}update(){const t=performance.now(),e=t-this.lastFrameTime;this.lastFrameTime=t,this.elements.forEach(t=>{t.enabled&&t.update(this.inputMap,e)})}draw(){this.elements.forEach(t=>{t.visible&&t.draw(this.canvas,this.font)})}}export{S as AADrawer,H as BitmapFont,D as BlendMode,Y as Button,T as Camera,_ as ClipRect,F as ClippingContext,f as ColorTheory,I as Compositor,d as CoordinateSystem,n as DirtyRegionTracker,u as DrawingTools,U as GraphicsState,w as InputBuffer,y as InputMap,X as Label,k as LineDrawer,m as PerformanceMonitor,b as PixelBuffer,R as PolygonDrawer,a as Renderer,B as ShapeDrawer,l as SharedBuffer,V as TextInput,c as Texture,L as Transform,O as UIElement,G as UIManager,C as Viewport,A as createLetterboxedViewport,M as drawAtlasRegionToCanvas,P as drawLetterboxBars,g as genFrames,p as imageToCanvas,o as loadRenderer,x as normalizeRGBA};\n//# sourceMappingURL=index.js.map\n"],"names":["vec2","x","y","e","t","url","Transform2D","constructor","this","position","rotation","scale","copy","other","Node","name","parent","children","worldPosition","worldRotation","worldScale","transformDirty","visible","active","ready","addChild","node","removeChild","push","idx","indexOf","splice","markDirty","i","length","updateWorldTransform","cos","Math","sin","scaledX","scaledY","rotatedX","rotatedY","_ready","_process","delta","_draw","canvas","camera","propagateReady","propagateProcess","propagateDraw","findChild","recursive","found","getPath","Scene","root","paused","timeScale","process","scaledDelta","draw","getNode","path","parts","split","current","printTree","indent","prefix","repeat","pos","toFixed","console","log"],"mappings":"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","x_google_ignoreList":[1]}
1
+ {"version":3,"file":"index.js","sources":["../../node_modules/tessera.js/dist/esm/index.js","../../src/engine/lib.js","../../src/engine/core.js","../../src/engine/cam.js","../../src/engine/lerp.js","../../src/engine/controllers.js","../../src/engine/audio.js","../../node_modules/planck/dist/planck.mjs","../../src/engine/vec2pool.js","../../src/engine/physicsv2.js","../../src/engine/Charactercontrollerv2.js","../../src/engine/particles.js","../../src/engine/sprite.js","../../src/engine/tiled.js"],"sourcesContent":["import { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\nimport { createRequire } from 'module';\nimport os from 'node:os';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n// Use a function to safely get these values\nconst getModulePaths = () => {\n try {\n // Try ESM first\n if (typeof import.meta !== 'undefined' && import.meta.url) {\n const filename = fileURLToPath(import.meta.url);\n return {\n __filename: filename,\n __dirname: dirname(filename),\n require: createRequire(import.meta.url)\n };\n }\n } catch (e) {\n // Fall through to CJS\n }\n\n // CJS fallback\n return {\n __filename: typeof __filename !== 'undefined' ? __filename : '',\n __dirname: typeof __dirname !== 'undefined' ? __dirname : '',\n require: typeof require !== 'undefined' ? require : () => { throw new Error('require not available'); }\n };\n};\n\nconst { __filename: moduleFilename, __dirname: moduleDirname } = getModulePaths();\nconst __filename = moduleFilename;\nconst __dirname = moduleDirname;\n\n\nfunction bufferFromAsset(a) {\n if (!a) return null;\n if (Buffer.isBuffer(a)) return a;\n if (a instanceof ArrayBuffer) return Buffer.from(a);\n if (ArrayBuffer.isView(a)) return Buffer.from(a.buffer, a.byteOffset, a.byteLength);\n if (typeof a === 'string') return Buffer.from(a, 'utf8');\n throw new TypeError('Unsupported asset type: ' + typeof a);\n}\n\nfunction writeFileAtomicSync(dest, buf) {\n const tmp = `${dest}.${crypto.randomUUID()}.tmp`;\n fs.writeFileSync(tmp, buf);\n fs.renameSync(tmp, dest);\n}\n\nfunction ensureDirSync(dir) {\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });\n}\n\nfunction prependPathForLibraries(dir) {\n if (process.platform === 'win32') {\n process.env.PATH = `${dir};${process.env.PATH || ''}`;\n } else if (process.platform === 'linux') {\n process.env.LD_LIBRARY_PATH = `${dir}:${process.env.LD_LIBRARY_PATH || ''}`;\n } else if (process.platform === 'darwin') {\n process.env.DYLD_LIBRARY_PATH = `${dir}:${process.env.DYLD_LIBRARY_PATH || ''}`;\n }\n\n}\n\nfunction createRunTempDir(prefix = 'assets-extract') {\n const root = path.join(os.tmpdir(), prefix);\n ensureDirSync(root);\n // reuse per-process id so repeated requires in same process reuse files:\n const runId = process.env.ASSETS_EXTRACT_RUN_ID || (process.env.ASSETS_EXTRACT_RUN_ID = `${process.pid}-${crypto.randomUUID()}`);\n const dir = path.join(root, runId);\n ensureDirSync(dir);\n return dir;\n}\n\nfunction cleanupDirBestEffort(dir) {\n try {\n // attempt to remove files first (ignore failures)\n if (fs.existsSync(dir)) {\n console.log(`trying to clean temp: ${dir}`);\n for (const f of fs.readdirSync(dir)) {\n const p = path.join(dir, f);\n try { fs.unlinkSync(p); } catch (e) { /* ignore */ }\n }\n try { fs.rmdirSync(dir); } catch (e) { /* ignore */ }\n }\n } catch (e) {\n // ignore\n console.log(e);\n }\n}\n\n\nfunction cleanupOldTempDirs(prefix = 'assets-extract', maxAgeMs = 24 * 60 * 60 * 1000) {\n try {\n const root = path.join(os.tmpdir(), prefix);\n if (!fs.existsSync(root)) return;\n\n const now = Date.now();\n for (const entry of fs.readdirSync(root)) {\n const dirPath = path.join(root, entry);\n // Skip current process ID\n if (entry.startsWith(`${process.pid}-`)) continue;\n\n try {\n const stats = fs.statSync(dirPath);\n if (now - stats.mtimeMs > maxAgeMs) {\n cleanupDirBestEffort(dirPath);\n }\n } catch (e) { /* ignore */ }\n }\n } catch (e) { /* ignore */ }\n}\n\n\n/**\n * @typedef {{ x: number, y: number }} Vec2\n */\n\n/**\n * @typedef {{ r: number, g: number, b: number, a: number }} Color4\n */\n\n/**\n * @typedef {{ data: ArrayBuffer, width: number, height: number, mipmaps: number, format: number }} Image\n */\n\n/**\n * @typedef {number} TextureId\n */\n\n\n\n\n\nclass Input_ {\n constructor() { }\n\n /**\n * @param {string} key\n * @returns {boolean}\n */\n isKeyDown(key) { }\n\n /**\n * @param {string} key\n * @returns {boolean}\n */\n isKeyReleased(key) { }\n\n /**\n * @param {string} key\n * @param {(actionName: string, event: {type: string, keyCode: number, keyName: string, mouseButton: number, mousePosition: {x:number,y:number}, mouseDelta: {x:number,y:number}, wheelDelta: number, timestamp: number}) => void} callback\n */\n onKeyDown(key, callback) { }\n\n /**\n * @param {string} key\n * @param {(actionName: string, event: {type: string, keyCode: number, keyName: string, mouseButton: number, mousePosition: {x:number,y:number}, mouseDelta: {x:number,y:number}, wheelDelta: number, timestamp: number}) => void} callback\n */\n onKeyUp(key, callback) { }\n\n /**\n * @param {number} button\n * @param {(actionName: string, event: {type: string, keyCode: number, keyName: string, mouseButton: number, mousePosition: {x:number,y:number}, mouseDelta: {x:number,y:number}, wheelDelta: number, timestamp: number}) => void} callback\n */\n onMouseDown(button, callback) { }\n\n /**\n * @param {number} button\n * @param {(actionName: string, event: {type: string, keyCode: number, keyName: string, mouseButton: number, mousePosition: {x:number,y:number}, mouseDelta: {x:number,y:number}, wheelDelta: number, timestamp: number}) => void} callback\n */\n onMouseUp(button, callback) { }\n\n /**\n * @param {(actionName: string, event: {type: string, keyCode: number, keyName: string, mouseButton: number, mousePosition: {x:number,y:number}, mouseDelta: {x:number,y:number}, wheelDelta: number, timestamp: number}) => void} callback\n */\n onMouseMove(callback) { }\n\n /**\n * @param {(actionName: string, event: {type: string, keyCode: number, keyName: string, mouseButton: number, mousePosition: {x:number,y:number}, mouseDelta: {x:number,y:number}, wheelDelta: number, timestamp: number}) => void} callback\n */\n onMouseWheel(callback) { }\n}\n\n\n\nclass Audio_ {\n constructor() { }\n\n /**\n * Initialize audio device\n * @returns {boolean}\n */\n initialize() { }\n\n /**\n * Shutdown audio device and free resources\n * @returns {void}\n */\n shutdown() { }\n\n /**\n * Load sound from disk\n * @param {string} filePath\n * @returns {number} handle (0 on failure)\n */\n loadSound(filePath) { }\n\n /**\n * Load sound from memory buffer\n * @param {string} fileType - e.g. '.wav' or '.ogg' (leading dot accepted/required by backend)\n * @param {Buffer|ArrayBuffer|TypedArray|SharedArrayBuffer} buffer\n * @returns {number} handle (0 on failure)\n */\n loadSoundFromMemory(fileType, buffer) { }\n\n /**\n * Play a loaded sound (one-shot)\n * @param {number} handle\n * @returns {void}\n */\n playSound(handle) { }\n\n /**\n * Stop a sound\n * @param {number} handle\n * @returns {void}\n */\n stopSound(handle) { }\n\n /**\n * Pause a sound\n * @param {number} handle\n * @returns {void}\n */\n pauseSound(handle) { }\n\n /**\n * Resume a paused sound\n * @param {number} handle\n * @returns {void}\n */\n resumeSound(handle) { }\n\n /**\n * Set per-sound volume (0..1) multiplied by master volume internally\n * @param {number} handle\n * @param {number} volume\n * @returns {void}\n */\n setSoundVolume(handle, volume) { }\n\n /**\n * Query whether a sound is playing\n * @param {number} handle\n * @returns {boolean}\n */\n isSoundPlaying(handle) { }\n\n /**\n * Unload sound and free resources\n * @param {number} handle\n * @returns {void}\n */\n unloadSound(handle) { }\n\n /**\n * Register callback for sound end (fired once when the sound finishes)\n * @param {number} handle\n * @param {(handle: number) => void} callback\n * @returns {void}\n */\n onSoundEnd(handle, callback) { }\n\n /**\n * Load music (streamed) from disk\n * @param {string} filePath\n * @param {boolean} loop \n * @returns {number} handle (0 on failure)\n */\n loadMusic(filePath, loop) { }\n\n /**\n * Load music (streamed) from memory\n * @param {string} fileType\n * @param {Buffer|ArrayBuffer|TypedArray|SharedArrayBuffer} buffer\n * @returns {number} handle (0 on failure)\n */\n loadMusicFromMemory(fileType, buffer) { }\n\n /**\n * Play music stream\n * @param {number} handle\n * @returns {void}\n */\n playMusic(handle) { }\n\n /**\n * Stop music stream\n * @param {number} handle\n * @returns {void}\n */\n stopMusic(handle) { }\n\n /**\n * Pause music stream\n * @param {number} handle\n * @returns {void}\n */\n pauseMusic(handle) { }\n\n /**\n * Resume music stream\n * @param {number} handle\n * @returns {void}\n */\n resumeMusic(handle) { }\n\n /**\n * Set music volume (0..1) multiplied by master volume\n * @param {number} handle\n * @param {number} volume\n * @returns {void}\n */\n setMusicVolume(handle, volume) { }\n\n /**\n * Query whether music is playing\n * @param {number} handle\n * @returns {boolean}\n */\n isMusicPlaying(handle) { }\n\n /**\n * Unload music stream and free resources\n * @param {number} handle\n * @returns {void}\n */\n unloadMusic(handle) { }\n\n /**\n * Register callback fired when music stream ends\n * @param {number} handle\n * @param {(handle: number) => void} callback\n * @returns {void}\n */\n onMusicEnd(handle, callback) { }\n\n /**\n * Create a low-level audio stream for procedural audio\n * @param {number} sampleRate\n * @param {number} sampleSizeBits\n * @param {number} channels\n * @returns {number} streamHandle\n */\n loadAudioStream(sampleRate, sampleSizeBits, channels) { }\n\n /**\n * Update an audio stream by pushing PCM frames (interleaved)\n * @param {number} streamHandle\n * @param {Buffer|Float32Array|Int16Array} data - frames * channels samples\n * @param {number} frameCount\n * @returns {void}\n */\n updateAudioStream(streamHandle, data, frameCount) { }\n\n /**\n * Play an audio stream\n * @param {number} streamHandle\n * @returns {void}\n */\n playAudioStream(streamHandle) { }\n\n /**\n * Pause an audio stream\n * @param {number} streamHandle\n * @returns {void}\n */\n pauseAudioStream(streamHandle) { }\n\n /**\n * Resume an audio stream\n * @param {number} streamHandle\n * @returns {void}\n */\n resumeAudioStream(streamHandle) { }\n\n /**\n * Stop an audio stream\n * @param {number} streamHandle\n * @returns {void}\n */\n stopAudioStream(streamHandle) { }\n\n /**\n * Set per-stream volume\n * @param {number} streamHandle\n * @param {number} volume\n * @returns {void}\n */\n setAudioStreamVolume(streamHandle, volume) { }\n\n /**\n * Attach a processor callback to a specific stream\n * @param {number} streamHandle\n * @param {(bufferData: Float32Array, frames: number) => void} processor\n * @returns {void}\n */\n attachAudioStreamProcessor(streamHandle, processor) { }\n\n /**\n * Detach a previously attached stream processor\n * @param {number} streamHandle\n * @param {(bufferData: Float32Array, frames: number) => void} processor\n * @returns {void}\n */\n detachAudioStreamProcessor(streamHandle, processor) { }\n\n /**\n * Attach a global mixed audio processor (receives mixed frames)\n * @param {(bufferData: Float32Array, frames: number) => void} processor\n * @returns {void}\n */\n attachAudioMixedProcessor(processor) { }\n\n /**\n * Detach a global mixed audio processor\n * @param {(bufferData: Float32Array, frames: number) => void} processor\n * @returns {void}\n */\n detachAudioMixedProcessor(processor) { }\n\n /**\n * Set default buffer size (frames) for new audio streams\n * @param {number} size\n * @returns {void}\n */\n setAudioStreamBufferSizeDefault(size) { }\n\n /**\n * Set master volume (0..1)\n * @param {number} volume\n * @returns {void}\n */\n setMasterVolume(volume) { }\n\n /**\n * Get master volume\n * @returns {number}\n */\n getMasterVolume() { }\n}\n\n\n\nclass Renderer {\n\n constructor() {\n /** @type {Input_} */\n this.input = new Input_();\n\n /** @type {Audio_} */\n this.audio = new Audio_();\n /** @type {number} */\n this.targetFPS = 60;\n }\n /**\n * \n * @param {string} title - window title\n * @param {number} width \n * @param {number} height \n * @param {boolean} isSea - is running in single executable context \n * @param {()=> void} assetGetterSync - function to load assets\n * @returns {[Renderer, {RESIZABLE: number, UNDECORATED: number, ALWAYS_RUN: number, VSYNC_HINT: number, MSAA_4X_HINT: number, hideConsole: ()=> void, showConsole: ()=> void}]}\n */\n static create(title, width, height, isSea = false, assetGetterSync = undefined) {\n\n\n // * @returns {{\n // * Renderer: new(...args: any[]) => Renderer,\n // * FULLSCREEN: number,\n // * RESIZABLE: number,\n // * UNDECORATED: number,\n // * ALWAYS_RUN: number,\n // * VSYNC_HINT: number,\n // * MSAA_4X_HINT: number,\n // * hideConsole: ()=> void,\n // * showConsole: () => void,\n // * }}\n const { Renderer, RESIZABLE, UNDECORATED, ALWAYS_RUN, VSYNC_HINT, MSAA_4X_HINT, hideConsole, showConsole } = isSea ? loadRendererSea({ assetGetterSync }) : loadRenderer();\n this.ops = {\n RESIZABLE,\n UNDECORATED,\n ALWAYS_RUN,\n VSYNC_HINT,\n MSAA_4X_HINT,\n hideConsole,\n showConsole\n };\n const renderer = new Renderer();\n if (!renderer.initialize(width, height, title)) {\n console.error(\"Failed to initialize renderer\");\n process.exit(1);\n }\n\n return [renderer, this.ops]\n\n }\n\n /**\n * Boot up the renderer & create the window.\n * @param {number} width\n * @param {number} height\n * @param {string} title\n * @returns {boolean} success\n */\n initialize(width, height, title) { }\n\n /**\n * Tear down renderer & input\n * @returns {void}\n */\n shutdown() { }\n\n /**\n * Call before drawing a frame\n * @returns {void}\n */\n beginFrame() { }\n\n /**\n * Call after drawing a frame\n * @returns {void}\n */\n endFrame() { }\n\n /**\n * Clear the screen with optional color\n * @param {Color4=} color\n * @returns {void}\n */\n clear(color) { }\n\n /**\n * Draw rectangle\n * @param {Vec2} position\n * @param {Vec2} size\n * @param {Color4} color\n * @returns {void}\n */\n drawRectangle(position, size, color) { }\n\n /**\n * Draw circle.\n * @param {Vec2} center\n * @param {number} radius\n * @param {Color4} color\n * @returns {void}\n */\n drawCircle(center, radius, color) { }\n\n /**\n * Draw line.\n * @param {Vec2} start\n * @param {Vec2} end\n * @param {Color4} color\n * @param {number=} thickness\n * @returns {void}\n */\n drawLine(start, end, color, thickness) { }\n\n /**\n * Draw text.\n * @param {string} text\n * @param {Vec2} position\n * @param {number} fontSize\n * @param {Color4} color\n * @returns {void}\n */\n drawText(text, position, fontSize, color) { }\n\n // texture related\n\n /**\n * Load a texture from disk path.\n * @param {string} path\n * @returns {TextureId}\n */\n loadTexture(path) { return 0; }\n\n /**\n * Unload a previously loaded texture.\n * @param {TextureId} textureId\n * @returns {void}\n */\n unloadTexture(textureId) { }\n\n /**\n * Draw texture at a position. Optional size and tint.\n * @param {TextureId} textureId\n * @param {Vec2} position\n * @param {Vec2=} size\n * @param {Color4=} color\n * @returns {void}\n */\n drawTexture(textureId, position, size, color) { }\n\n /**\n * Create an offscreen render texture, returns id.\n * @param {number} width\n * @param {number} height\n * @returns {TextureId}\n */\n createRenderTexture(width, height) { return 0; }\n\n /**\n * Destroy a render texture ID.\n * @param {TextureId} textureId\n * @returns {void}\n */\n destroyRenderTexture(textureId) { }\n\n /**\n * Set a render target (texture id) or 0 for screen.\n * @param {TextureId} textureId\n * @returns {void}\n */\n setRenderTarget(textureId) { }\n\n /**\n * Create a shared buffer for CPU->GPU uploads.\n * @param {number} size\n * @param {number} width - for dirty region tracking and update\n * @param {number} height - for dirty region tracking and update\n *\n * @returns {number} bufferId\n */\n createSharedBuffer(size, width, height) { return 0; }\n\n /**\n * Mark a shared buffer as dirty.\n * @param {number} bufferId\n * @returns {void}\n */\n markBufferDirty(bufferId) { }\n\n\n /**\n * \n * @param {number} bufferId \n *\n * @param {number} x \n * @param {number} y \n * @param {number} width \n * @param {number} height\n * */\n markBufferRegionDirty(bufferId, x, y, width, height) { }\n\n /**\n * Is the shared buffer dirty?\n * @param {number} bufferId\n * @returns {boolean}\n */\n isBufferDirty(bufferId) { return false; }\n\n /**\n * Get buffer bytes as Uint8Array\n * @param {number} bufferId\n * @returns {Uint8Array}\n */\n getBufferData(bufferId) { return new Uint8Array(0); }\n\n /**\n * Update buffer bytes from a TypedArray (Uint8Array)\n * @param {number} bufferId\n * @param {Uint8Array} data\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {void}\n */\n updateBufferData(bufferId, data, x = 0, y = 0, width = 0, height = 0) { }\n\n /**\n * Upload an existing shared buffer to a GPU texture.\n * @param {TextureId} textureId\n * @param {number} bufferId\n * @returns {void}\n */\n updateTextureFromBuffer(textureId, bufferId) { }\n\n /**\n * Load a texture directly from an existing shared buffer (RGBA)\n * @param {number} bufferId\n * @param {number} width\n * @param {number} height\n * @returns {TextureId}\n */\n loadTextureFromBuffer(bufferId, width, height) { return 0; }\n\n /**\n * Draw a texture sized to a destination rectangle\n * @param {TextureId} textureId\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {Object=} colorObj\n * @returns {void}\n */\n drawTextureSized(textureId, x, y, width, height, colorObj) { }\n\n\n /**\n * Draw a texture sized to a destination rectangle\n * @param {TextureId} textureId\n * @param {{x:number, y: number}} srcPos\n * @param {{x: number, y: number}} srcSize\n * @param {{x: number, y: number}} destPos\n * @param {{x: number, y: number}} destSize\n * @param {Object=} colorObj optional\n * @returns {void}\n */\n drawTexturePro(textureId, srcPos, srcSize, destPos, destSize) { }\n\n /**\n * Returns current width.\n * @returns {number}\n */\n get width() { return 0; }\n\n /**\n * Returns current height.\n * @returns {number}\n */\n get height() { return 0; }\n\n /**\n * @returns {boolean}\n */\n get WindowShouldClose() { return false; }\n\n /**\n * onRender(callback) register a JS callback to be fired each frame.\n * @param {Function} callback\n * @returns {void}\n */\n onRender(callback) { }\n\n /**\n * step the renderer loop once (returns whether to continue)\n * @returns {boolean}\n */\n step() { return false; }\n\n /**\n * Get a JS Input object wrapper\n * @returns {Input_}\n */\n get input() { return new Input_(); }\n\n /**\n * Current FPS readout\n * @returns {number}\n */\n get FPS() { return 0; }\n\n\n /**\n * On resize callback\n */\n set onResize(cb) { }\n\n\n /**\n * Set target fps \n */\n set targetFPS(fps) { }\n /**\n * Set various window states, e.g. flags.\n * @param {number} state\n * @returns {void}\n */\n setWindowState(state) { }\n\n\n /**\n * \n * @param {string} path\n * @returns {{width: number, height: number, format: number, data: Uint8Array}} \n */\n loadImage(path) { }\n\n /**\n * poll for input\n */\n GetInput() { }\n}\n\n/**\n * Load the native renderer module.\n * The JSDoc return type tells Rollup/TS that the native exports include a constructor `Renderer`.\n * @deprecated - use const [renderer, ops] = Renderer.create(\"Image\", 800, 600)\n * @returns {{\n * Renderer: new(...args: any[]) => Renderer,\n * FULLSCREEN: number,\n * RESIZABLE: number,\n * UNDECORATED: number,\n * ALWAYS_RUN: number,\n * VSYNC_HINT: number,\n * MSAA_4X_HINT: number\n * }}\n */\nfunction loadRenderer() {\n const require = createRequire(import.meta.url);\n try {\n return require('node-gyp-build')(join(__dirname, '..'));\n } catch (error) {\n console.log('method 1 failed:', error.message);\n try {\n return require(join(__dirname, '..', 'prebuilds', process.platform + '-' + process.arch, 'renderer.node'));\n } catch (error2) {\n console.log('method 2 failed:', error2.message);\n try {\n const rendererPath = join(__dirname, '..', 'prebuilds', process.platform + '-' + process.arch, 'renderer.node');\n return require(rendererPath);\n } catch (error3) {\n console.log('method 3 failed:', error3.message);\n throw new Error('all methods to load the native module failed: please open an issue');\n }\n }\n }\n}\n\n\n/**\n * Load the native renderer module.\n * The JSDoc return type tells Rollup/TS that the native exports include a constructor `Renderer`.\n * @deprecated - use const [renderer, ops] = Renderer.create(\"Image\", 800, 600)\n * @returns {{\n * Renderer: new(...args: any[]) => Renderer,\n * FULLSCREEN: number,\n * RESIZABLE: number,\n * UNDECORATED: number,\n * ALWAYS_RUN: number,\n * VSYNC_HINT: number,\n * MSAA_4X_HINT: number,\n * hideConsole: ()=> void,\n * showConsole: () => void,\n * }}\n */\nfunction loadRendererSea({ assetGetterSync = null } = {}) {\n const require = createRequire(__filename || import.meta.url);\n\n cleanupOldTempDirs('assets-extract');\n\n // 1) dev: node-gyp-build\n try {\n return require('node-gyp-build')(path.join(__dirname, '..'));\n } catch (e) { /* fall through */ }\n\n // 2) dev: on-disk prebuild path\n try {\n const platformTag = `${process.platform}-${process.arch}`;\n const p = path.join(__dirname, '..', 'prebuilds', platformTag, 'renderer.node');\n return require(p);\n } catch (e) { /* fall through */ }\n\n // 3) embedded assets extraction path (synchronous)\n // if assetGetterSync not provided, try node:sea synchronously\n let getter = assetGetterSync;\n if (!getter) {\n try {\n const sea = require('node:sea');\n if (sea && typeof sea.getAsset === 'function') {\n // node:sea.getAsset is usually sync; wrap to unify return value\n getter = (name) => {\n try {\n return sea.getAsset(name); // may return string or ArrayBuffer\n } catch (err) {\n return null;\n }\n };\n }\n } catch (err) {\n // no node:sea available - we can't extract assets\n getter = null;\n }\n }\n\n if (!getter) {\n throw new Error('Could not locate renderer native module: tried node-gyp-build, prebuilds on disk, and no asset getter available for embedded assets.');\n }\n\n // platform-specific asset names\n const platformTag = `${process.platform}-${process.arch}`;\n const nodeAssetName = path.posix.join('prebuilds', platformTag, 'renderer.node');\n const dllAssetName1 = process.platform === 'win32' ? path.posix.join('prebuilds', platformTag, 'glfw3.dll') : null;\n const dllAssetName2 = process.platform === 'win32' ? path.posix.join('prebuilds', platformTag, 'raylib.dll') : null;\n\n\n // get assets\n const nodeAsset = getter(nodeAssetName);\n if (!nodeAsset) {\n throw new Error(`Embedded asset not found: ${nodeAssetName}`);\n }\n const nodeBuf = bufferFromAsset(nodeAsset);\n if (!nodeBuf) throw new Error('Failed to convert node asset to Buffer');\n\n // prepare temp\n const tempDir = createRunTempDir('assets-extract');\n const nodeDestName = `renderer.node`;\n const nodeDest = path.join(tempDir, nodeDestName);\n\n // extract node\n writeFileAtomicSync(nodeDest, nodeBuf);\n try { fs.chmodSync(nodeDest, 0o755); } catch (e) { /* ignore */ }\n\n // extract dll if present and prepend to PATH/LD...\n if (dllAssetName1) {\n const dllAsset = getter(dllAssetName1);\n const dllAsset2 = getter(dllAssetName2);\n if (dllAsset) {\n const dllBuf = bufferFromAsset(dllAsset);\n const dllDestName = dllAssetName1.split(\"/\").pop();\n const dllDest = path.join(tempDir, dllDestName);\n writeFileAtomicSync(dllDest, dllBuf);\n prependPathForLibraries(tempDir);\n // do not chmod DLL; Windows doesn't use exec bits\n } else {\n // Not fatal but warn (dependent DLL missing)\n console.warn(`Warning: embedded DLL not found: ${dllAssetName1}`);\n }\n\n if (dllAsset2) {\n const dllBuf = bufferFromAsset(dllAsset2);\n const dllDestName = dllAssetName2.split(\"/\").pop();\n const dllDest = path.join(tempDir, dllDestName);\n writeFileAtomicSync(dllDest, dllBuf);\n prependPathForLibraries(tempDir);\n // do not chmod DLL; Windows doesn't use exec bits\n } else {\n // Not fatal but warn (dependent DLL missing)\n console.warn(`Warning: embedded DLL not found: ${dllAssetName2}`);\n }\n } else {\n // On linux/darwin we still add tempDir to dynamic loader search paths as a best-effort\n prependPathForLibraries(tempDir);\n }\n\n // schedule best-effort cleanup at process exit (ignore errors)\n // process.on('exit', () => {\n // try { cleanupDirBestEffort(tempDir); } catch (e) { /* ignore */ }\n // });\n\n // console.log(nodeDest);\n\n return require(nodeDest);\n}\n\nconst CTRL_JS_WRITE_IDX = 0;\r\nconst CTRL_DIRTY_FLAG = 3;\r\nconst CTRL_DIRTY_COUNT = 4;\r\nconst CTRL_DIRTY_REGIONS = 5;\r\nconst MAX_DIRTY_REGIONS = 256;\r\n\r\n// control buffer size in bytes\r\nconst CONTROL_BUFFER_SIZE = (5 + MAX_DIRTY_REGIONS * 4) * 4; // 4116 bytes\n\nclass PixelBuffer {\r\n /**\r\n * Create a pixel buffer - our fundamental drawing surface\r\n * @param {Renderer} renderer - The rendering backend (C++/NAPI)\r\n * @param {number} width - Buffer width in pixels\r\n * @param {number} height - Buffer height in pixels\r\n */\r\n constructor(renderer, width, height, debug = false) {\r\n this.renderer = renderer;\r\n this.width = width;\r\n this.height = height;\r\n this.DEBUG = debug;\r\n\r\n\r\n // const size = width * height * 4; // RGBA = 4 bytes per pixel\r\n\r\n // // get's copy of buffer from C++, not shared because of ownership complexity and double buffering in c++ side\r\n // this.bufferId = renderer.createSharedBuffer(size, width, height);\r\n\r\n // {\r\n // /**\r\n // * @type {Uint8Array}\r\n // */\r\n // let temp = renderer.getBufferData(this.bufferId);\r\n // /**\r\n // * @type {Uint8Array}\r\n // */\r\n // this.data = new Uint8Array(new SharedArrayBuffer(size));\r\n // this.data.set(new Uint8Array(temp));\r\n // temp = null;\r\n // }\r\n\r\n\r\n // // Create GPU texture for this buffer\r\n // this.textureId = renderer.loadTextureFromBuffer(this.bufferId, width, height);\r\n // this.needsUpload = false;\r\n // new: createa zero copy buffer \r\n\r\n // triple buffering\r\n const bufferSize = width * height * 4;\r\n this.buffers = [\r\n new ArrayBuffer(bufferSize),\r\n new ArrayBuffer(bufferSize),\r\n new ArrayBuffer(bufferSize)\r\n ];\r\n\r\n\r\n this.controlBuffer = new Uint32Array(new ArrayBuffer(CONTROL_BUFFER_SIZE));\r\n\r\n // iinitialize zero copy shared memory in C++\r\n this.textureId = renderer.initSharedBuffers(\r\n this.buffers[0],\r\n this.buffers[1],\r\n this.buffers[2],\r\n this.controlBuffer.buffer,\r\n width,\r\n height\r\n );\r\n\r\n // console.log(this.textureId)\r\n this.views = [\r\n new Uint8ClampedArray(this.buffers[0]),\r\n new Uint8ClampedArray(this.buffers[1]),\r\n new Uint8ClampedArray(this.buffers[2])\r\n ];\r\n\r\n this.dirtyTracker = new DirtyRegionTracker(this.controlBuffer);\r\n this.data = this.getCurrentBuffer();\r\n\r\n if (this.DEBUG)\r\n console.log(`Created ${width}x${height} buffer (${width * height * 4} bytes)`);\r\n }\r\n\r\n /**\r\n * \r\n * @param {number} x \r\n * @param {number} y \r\n * @param {number} w \r\n * @param {number} h \r\n */\r\n markRegion(x, y , w = 1, h = 1){\r\n this.dirtyTracker.addRegion(x, y, w, h);\r\n this.needsUpload = true;\r\n }\r\n\r\n getCurrentBuffer() {\r\n const idx = Atomics.load(this.controlBuffer, CTRL_JS_WRITE_IDX);\r\n return this.views[idx];\r\n }\r\n\r\n setPixel(x, y, r, g, b, a = 255) {\r\n const buffer = this.getCurrentBuffer();\r\n const idx = (y * this.width + x) * 4;\r\n\r\n buffer[idx] = r;\r\n buffer[idx + 1] = g;\r\n buffer[idx + 2] = b;\r\n buffer[idx + 3] = a;\r\n\r\n this.dirtyTracker.addRegion(x, y, 1, 1);\r\n }\r\n\r\n getPixel(x, y) {\r\n const buffer = this.getCurrentBuffer();\r\n const idx = (y * this.width + x) * 4;\r\n return {\r\n r: buffer[idx],\r\n g: buffer[idx + 1],\r\n b: buffer[idx + 2],\r\n a: buffer[idx + 3]\r\n };\r\n }\r\n\r\n\r\n\r\n /**\r\n * Convert 2D coordinate to 1D memory index\r\n * This is THE fundamental operation - understand this and you understand pixel buffers\r\n * @param {number} x \r\n * @param {number} y \r\n */\r\n coordToIndex(x, y) {\r\n // Bounds checking is critical - out of bounds = memory corruption or crash (nasty segfault)\r\n if (x < 0 || x >= this.width || y < 0 || y >= this.height) {\r\n return -1; // Invalid coordinate\r\n }\r\n return (y * this.width + x) * 4;\r\n }\r\n\r\n /**\r\n * Fill entire buffer with a color\r\n * \r\n * @param {number} r \r\n * @param {number} g \r\n * @param {number} b \r\n * @param {number} a \r\n */\r\n clear(r, g, b, a = 255) {\r\n\r\n const startTime = performance.now();\r\n\r\n\r\n // Pack RGBA into a single 32-bit value: (A << 24) | (B << 16) | (G << 8) | R\r\n const color = ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((g & 0xFF) << 8) | (r & 0xFF);\r\n\r\n // const uint32View = new Uint32Array(this.data.buffer); old way \r\n const uint32View = new Uint32Array(this.data.buffer); // new way\r\n\r\n // Native fill - much faster than JS loop\r\n uint32View.fill(color);\r\n this.dirtyTracker.addRegion(0, 0, this.width, this.height); // proc the control buffer dirty region count\r\n\r\n // this.renderer.updateBufferData(this.bufferId, this.data);\r\n this.needsUpload = true;\r\n\r\n const elapsed = performance.now() - startTime;\r\n if (this.DEBUG)\r\n console.log(`Clear (${this.width}x${this.height}): ${elapsed.toFixed(2)}ms`);\r\n }\r\n\r\n /**\r\n * Upload buffer changes to GPU texture\r\n * Call this after all your pixel operations are done\r\n *\r\n */\r\n upload() {\r\n if (!this.needsUpload) return;\r\n\r\n this.dirtyTracker.markDirty();\r\n // const startTime = performance.now();\r\n // this.renderer.updateTextureFromBuffer(this.textureId, this.bufferId);\r\n\r\n\r\n // const elapsed = performance.now() - startTime;\r\n // if (this.DEBUG) \r\n // console.log(`GPU upload: ${elapsed.toFixed(2)}ms`);\r\n }\r\n\r\n /**\r\n * Draw this buffer to the screen at specified position\r\n * @param {number} x \r\n * @param {number} y \r\n */\r\n draw(x, y) {\r\n\r\n this.renderer.drawTexture(this.textureId, { x, y });\r\n if (this.needsUpload) {\r\n this.needsUpload = false;\r\n this.data = this.getCurrentBuffer(); // rotate\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Grow the buffer to a larger size, preserving existing pixels.\r\n * If the requested size is smaller or equal, this is a no-op.\r\n * @param {number} newWidth\r\n * @param {number} newHeight\r\n */\r\n grow(newWidth, newHeight) {\r\n // TODO: implement\r\n }\r\n\r\n /**\r\n * Clean up resources\r\n */\r\n destroy() {\r\n // TODO: implement\r\n }\r\n\r\n\r\n /**\r\n * Copy from cache buffer to canvas\r\n * @param {CacheBuffer|PixelBuffer} source - Source buffer\r\n * @param {number} sx - Source X\r\n * @param {number} sy - Source Y \r\n * @param {number} sw - Source width (or full width)\r\n * @param {number} sh - Source height (or full height)\r\n * @param {number} dx - Dest X (default 0)\r\n * @param {number} dy - Dest Y (default 0)\r\n */\r\nblitFrom(source, sx = 0, sy = 0, sw = source.width, sh = source.height, dx = 0, dy = 0) {\r\n const srcData = source.data;\r\n const dstData = this.data;\r\n\r\n // Clamp to bounds\r\n sw = Math.min(sw, source.width - sx, this.width - dx);\r\n sh = Math.min(sh, source.height - sy, this.height - dy);\r\n\r\n if (sw <= 0 || sh <= 0) return;\r\n\r\n // Fast path: full-width copy (can use set() directly)\r\n if (sx === 0 && dx === 0 && sw === source.width && sw === this.width) {\r\n const srcStart = sy * source.width * 4;\r\n const dstStart = dy * this.width * 4;\r\n const length = sh * this.width * 4;\r\n dstData.set(srcData.subarray(srcStart, srcStart + length), dstStart);\r\n } else {\r\n // Row-by-row copy\r\n for (let row = 0; row < sh; row++) {\r\n const srcOffset = ((sy + row) * source.width + sx) * 4;\r\n const dstOffset = ((dy + row) * this.width + dx) * 4;\r\n const rowBytes = sw * 4;\r\n dstData.set(srcData.subarray(srcOffset, srcOffset + rowBytes), dstOffset);\r\n }\r\n }\r\n\r\n // Mark region dirty\r\n this.dirtyTracker.addRegion(dx, dy, sw, sh);\r\n this.needsUpload = true;\r\n }\r\n\r\n /**\r\n * Shorthand: blit entire source to (0,0)\r\n */\r\n blit(source) {\r\n this.blitFrom(source, 0, 0, source.width, source.height, 0, 0);\r\n }\r\n}\r\n\r\n\r\n\r\nclass CacheBuffer {\r\n constructor(width, height) {\r\n this.width = width;\r\n this.height = height;\r\n this.data = new Uint8ClampedArray(width * height * 4);\r\n this.needsUpload = false; // TODO: remove, use for now to trick primitives to think they are writing to a pixel buffer\r\n }\r\n\r\n clear(r, g, b, a = 255) {\r\n const color = ((a & 0xFF) << 24) | ((b & 0xFF) << 16) |\r\n ((g & 0xFF) << 8) | (r & 0xFF);\r\n new Uint32Array(this.data.buffer).fill(color);\r\n }\r\n}\n\n// new zero copy control bufer tracker \r\n\r\nclass DirtyRegionTracker {\r\n constructor(controlBuffer) {\r\n // controlBuffer is the Uint32Array pixel_buffer passed to C++\r\n this.control = controlBuffer;\r\n this.maxRegions = 256;\r\n }\r\n\r\n addRegion(x, y, w, h) {\r\n const count = Atomics.load(this.control, CTRL_DIRTY_COUNT); // CTRL_DIRTY_COUNT offset\r\n\r\n if (count >= this.maxRegions) {\r\n this.control[CTRL_DIRTY_REGIONS + 0] = 0;\r\n this.control[CTRL_DIRTY_REGIONS + 1] = 0;\r\n this.control[CTRL_DIRTY_REGIONS + 2] = 9999;\r\n this.control[CTRL_DIRTY_REGIONS + 3] = 9999;\r\n Atomics.store(this.control, CTRL_DIRTY_COUNT, 1);\r\n return\r\n }\r\n\r\n const offset = 5 + (count * 4);\r\n this.control[offset + 0] = x | 0; // Ensure u32\r\n this.control[offset + 1] = y | 0;\r\n this.control[offset + 2] = w | 0;\r\n this.control[offset + 3] = h | 0;\r\n\r\n // Increment count\r\n Atomics.store(this.control, CTRL_DIRTY_COUNT, count + 1);\r\n }\r\n\r\n markDirty() {\r\n Atomics.store(this.control, CTRL_DIRTY_FLAG, 1); // CTRL_DIRTY_FLAG\r\n }\r\n\r\n clear() {\r\n Atomics.store(this.control, CTRL_DIRTY_COUNT, 0);\r\n }\r\n\r\n optimize() {\r\n const count = Atomics.load(this.control, CTRL_DIRTY_COUNT);\r\n if (count <= 1) return;\r\n\r\n // Simple optimization: merge regions that overlap\r\n let writeIdx = 0;\r\n for (let i = 0; i < count; i++) {\r\n const offset = 5 + (i * 4);\r\n let x = this.control[offset + 0];\r\n let y = this.control[offset + 1];\r\n let w = this.control[offset + 2];\r\n let h = this.control[offset + 3];\r\n\r\n // Check if this region overlaps with any previous\r\n let merged = false;\r\n for (let j = 0; j < writeIdx; j++) {\r\n const prevOffset = 5 + (j * 4);\r\n const px = this.control[prevOffset + 0];\r\n const py = this.control[prevOffset + 1];\r\n const pw = this.control[prevOffset + 2];\r\n const ph = this.control[prevOffset + 3];\r\n\r\n // Check overlap\r\n if (!(x > px + pw || x + w < px || y > py + ph || y + h < py)) {\r\n // Merge: expand previous region to contain both\r\n const minX = Math.min(px, x);\r\n const minY = Math.min(py, y);\r\n const maxX = Math.max(px + pw, x + w);\r\n const maxY = Math.max(py + ph, y + h);\r\n\r\n this.control[prevOffset + 0] = minX;\r\n this.control[prevOffset + 1] = minY;\r\n this.control[prevOffset + 2] = maxX - minX;\r\n this.control[prevOffset + 3] = maxY - minY;\r\n\r\n merged = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!merged) {\r\n // Copy region to write position\r\n if (writeIdx !== i) {\r\n const writeOffset = 5 + (writeIdx * 4);\r\n this.control[writeOffset + 0] = x;\r\n this.control[writeOffset + 1] = y;\r\n this.control[writeOffset + 2] = w;\r\n this.control[writeOffset + 3] = h;\r\n }\r\n writeIdx++;\r\n }\r\n }\r\n\r\n Atomics.store(this.control, CTRL_DIRTY_COUNT, writeIdx);\r\n }\r\n\r\n}\r\n\r\n\r\nclass BatchedDirtyTracker extends DirtyRegionTracker {\r\n constructor(controlBuffer) {\r\n super(controlBuffer);\r\n this.pendingFlush = false;\r\n }\r\n\r\n addRegion(x, y, w, h) {\r\n super.addRegion(x, y, w, h);\r\n\r\n // schedule flush if not already scheduled\r\n if (!this.pendingFlush) {\r\n this.pendingFlush = true;\r\n queueMicrotask(() => this.flush());\r\n }\r\n }\r\n\r\n flush() {\r\n this.pendingFlush = false;\r\n this.optimize();\r\n this.markDirty();\r\n }\r\n}\r\n\r\n\r\n\r\nclass CoordinateSystem {\r\n constructor(canvasX, canvasY, canvasWidth, canvasHeight) {\r\n this.canvasX = canvasX;\r\n this.canvasY = canvasY;\r\n this.canvasWidth = canvasWidth;\r\n this.canvasHeight = canvasHeight;\r\n this.scale = 1.0;\r\n }\r\n\r\n screenToCanvas(screenX, screenY) {\r\n return {\r\n x: Math.floor((screenX - this.canvasX) / this.scale),\r\n y: Math.floor((screenY - this.canvasY) / this.scale)\r\n };\r\n }\r\n\r\n canvasToScreen(canvasX, canvasY) {\r\n return {\r\n x: Math.floor(canvasX * this.scale + this.canvasX),\r\n y: Math.floor(canvasY * this.scale + this.canvasY)\r\n };\r\n }\r\n\r\n isPointInCanvas(screenX, screenY) {\r\n const canvasPos = this.screenToCanvas(screenX, screenY);\r\n return canvasPos.x >= 0 && canvasPos.x < this.canvasWidth &&\r\n canvasPos.y >= 0 && canvasPos.y < this.canvasHeight;\r\n }\r\n\r\n setScale(newScale) {\r\n this.scale = Math.max(0.1, Math.min(5.0, newScale));\r\n }\r\n}\r\n\r\n\r\n\r\n\r\nclass ColorTheory {\r\n static RGBtoHSV(r, g, b) {\r\n r /= 255; g /= 255; b /= 255;\r\n const max = Math.max(r, g, b);\r\n const min = Math.min(r, g, b);\r\n const delta = max - min;\r\n\r\n let h = 0, s = 0, v = max;\r\n\r\n if (delta !== 0) {\r\n s = delta / max;\r\n if (r === max) h = (g - b) / delta;\r\n else if (g === max) h = 2 + (b - r) / delta;\r\n else h = 4 + (r - g) / delta;\r\n\r\n h *= 60;\r\n if (h < 0) h += 360;\r\n }\r\n\r\n return { h, s: s * 100, v: v * 100 };\r\n }\r\n\r\n static HSVtoRGB(h, s, v) {\r\n s /= 100; v /= 100;\r\n const c = v * s;\r\n const x = c * (1 - Math.abs((h / 60) % 2 - 1));\r\n const m = v - c;\r\n\r\n let r, g, b;\r\n if (h >= 0 && h < 60) [r, g, b] = [c, x, 0];\r\n else if (h < 120) [r, g, b] = [x, c, 0];\r\n else if (h < 180) [r, g, b] = [0, c, x];\r\n else if (h < 240) [r, g, b] = [0, x, c];\r\n else if (h < 300) [r, g, b] = [x, 0, c];\r\n else [r, g, b] = [c, 0, x];\r\n\r\n return {\r\n r: Math.floor((r + m) * 255),\r\n g: Math.floor((g + m) * 255),\r\n b: Math.floor((b + m) * 255)\r\n };\r\n }\r\n\r\n\r\n static complementary(color) {\r\n const hsv = this.RGBtoHSV(color.r, color.g, color.b);\r\n hsv.h = (hsv.h + 180) % 360;\r\n return this.HSVtoRGB(hsv.h, hsv.s, hsv.v);\r\n }\r\n\r\n static analogous(color, spread = 30) {\r\n const hsv = this.RGBtoHSV(color.r, color.g, color.b);\r\n return [\r\n this.HSVtoRGB((hsv.h - spread + 360) % 360, hsv.s, hsv.v),\r\n color,\r\n this.HSVtoRGB((hsv.h + spread) % 360, hsv.s, hsv.v)\r\n ];\r\n }\r\n}\r\n\r\n\r\n\r\nclass PerformanceMonitor {\r\n constructor() {\r\n this.metrics = new Map();\r\n this.frameTimes = [];\r\n this.samples = 60; // Keep last 60 frames\r\n }\r\n\r\n start(name) {\r\n this.metrics.set(name, {\r\n start: performance.now(),\r\n calls: (this.metrics.get(name)?.calls || 0) + 1\r\n });\r\n }\r\n\r\n end(name) {\r\n const metric = this.metrics.get(name);\r\n if (metric) {\r\n const duration = performance.now() - metric.start;\r\n metric.total = (metric.total || 0) + duration;\r\n metric.max = Math.max(metric.max || 0, duration);\r\n metric.min = Math.min(metric.min || Infinity, duration);\r\n }\r\n }\r\n\r\n recordFrameTime(startTime) {\r\n const frameTime = performance.now() - startTime;\r\n this.frameTimes.push(frameTime);\r\n if (this.frameTimes.length > this.samples) {\r\n this.frameTimes.shift();\r\n }\r\n }\r\n\r\n logMetrics() {\r\n console.log('Performance Report:');\r\n for (const [name, metric] of this.metrics) {\r\n const avg = metric.total / metric.calls;\r\n console.log(` ${name}: ${avg.toFixed(2)}ms avg (${metric.min.toFixed(2)}-${metric.max.toFixed(2)}ms)`);\r\n }\r\n\r\n const avgFrameTime = this.frameTimes.reduce((a, b) => a + b) / this.frameTimes.length;\r\n console.log(` Frame Time: ${avgFrameTime.toFixed(2)}ms (${(1000 / avgFrameTime).toFixed(1)} FPS)`);\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n/**\r\n * Normalizes RGB(A) color components to the range of 0.0 to 1.0.\r\n * \r\n * @param {number} r The red component (0-255).\r\n * @param {number} g The green component (0-255).\r\n * @param {number} b The blue component (0-255).\r\n * @param {number} [a] The optional alpha component (0.0-1.0).\r\n * @returns {{r: number, g: number, b: number, a?: number}} An object with normalized values.\r\n */\r\nfunction normalizeRGBA(r, g, b, a) {\r\n const normalized = {\r\n r: r / 255.0,\r\n g: g / 255.0,\r\n b: b / 255.0\r\n };\r\n\r\n // If the 'a' parameter is provided, add the alpha channel (which is already 0.0-1.0 in standard usage)\r\n if (typeof a !== 'undefined' && a !== null) {\r\n normalized.a = a / 255;\r\n }\r\n\r\n return normalized;\r\n}\r\n\r\n\r\n\r\n// /**\r\n// * \r\n// * @param {{data: Uint8Array, width: number, height: number}} img \r\n// * @param {} canvas \r\n// */\r\n// export function imageToCanvasNN(img, canvas) {\r\n// const tracker = new DirtyRegionTracker(canvas)\r\n// const cdata = canvas.data;\r\n// const idata = img.data;\r\n// const srcWidth = img.width;\r\n// const srcHeight = img.height;\r\n// const destWidth = canvas.width\r\n// const destHeight = canvas.height\r\n// const scaleX = srcWidth / destWidth;\r\n// const scaleY = srcHeight / destHeight;\r\n\r\n// for (let y = 0; y < destHeight; y++) {\r\n// for (let x = 0; x < destWidth; x++) {\r\n// const srcX = Math.min(Math.floor(x * scaleX), srcWidth - 1);\r\n// const srcY = Math.min(Math.floor(y * scaleY), srcHeight - 1);\r\n// const idxSrc = (srcY * srcWidth + srcX) * 4;\r\n// const idxDest = (y * destWidth + x) * 4;\r\n\r\n// cdata[idxDest] = idata[idxSrc];\r\n// cdata[idxDest + 1] = idata[idxSrc + 1];\r\n// cdata[idxDest + 2] = idata[idxSrc + 2];\r\n// cdata[idxDest + 3] = idata[idxSrc + 3];\r\n// }\r\n// }\r\n\r\n// tracker.markRect(0, 0, canvas.width, canvas.height);\r\n// tracker.flush();\r\n// canvas.upload();\r\n// }\r\n\r\n\r\n/**\r\n * @param {PixelBuffer} canvas\r\n * @param {{data: Uint8Array, width: number, height: number}} img \r\n * @param {{data: Uint8Array, width: number, height: number}} canvas \r\n * @param {\"bilinear\" | \"nn\"} algorithm - The resizing algorithm: 'bilinear' for bilinear interpolation or 'nn' for nearest neighbor. Defaults to 'bi'.\r\n * @param {number} destWidth - The destination width. Defaults to canvas.width.\r\n * @param {number} destHeight - The destination height. Defaults to canvas.height.\r\n */\r\nfunction imageToCanvas(img, canvas, algorithm = 'bilinear', destWidth = canvas.width, destHeight = canvas.height) {\r\n const tracker = canvas.dirtyTracker;\r\n const cdata = canvas.data;\r\n const idata = img.data;\r\n const srcWidth = img.width;\r\n const srcHeight = img.height;\r\n const scaleX = srcWidth / destWidth;\r\n const scaleY = srcHeight / destHeight;\r\n\r\n for (let y = 0; y < destHeight; y++) {\r\n for (let x = 0; x < destWidth; x++) {\r\n const idxDest = (y * destWidth + x) * 4;\r\n\r\n if (algorithm === 'nn') {\r\n\r\n const srcX = Math.floor((x + 0.5) * scaleX);\r\n const srcY = Math.floor((y + 0.5) * scaleY);\r\n const clampedX = Math.max(0, Math.min(srcX, srcWidth - 1));\r\n const clampedY = Math.max(0, Math.min(srcY, srcHeight - 1));\r\n for (let c = 0; c < 4; c++) {\r\n cdata[idxDest + c] = idata[(clampedY * srcWidth + clampedX) * 4 + c];\r\n }\r\n } else {\r\n\r\n const srcX = (x + 0.5) * scaleX - 0.5;\r\n const srcY = (y + 0.5) * scaleY - 0.5;\r\n const x1 = Math.floor(srcX);\r\n const y1 = Math.floor(srcY);\r\n const x2 = Math.min(x1 + 1, srcWidth - 1);\r\n const y2 = Math.min(y1 + 1, srcHeight - 1);\r\n const dx = srcX - x1;\r\n const dy = srcY - y1;\r\n\r\n for (let c = 0; c < 4; c++) {\r\n const p11 = idata[(y1 * srcWidth + x1) * 4 + c];\r\n const p12 = idata[(y1 * srcWidth + x2) * 4 + c];\r\n const p21 = idata[(y2 * srcWidth + x1) * 4 + c];\r\n const p22 = idata[(y2 * srcWidth + x2) * 4 + c];\r\n const interpX1 = p11 * (1 - dx) + p12 * dx;\r\n const interpX2 = p21 * (1 - dx) + p22 * dx;\r\n const interp = interpX1 * (1 - dy) + interpX2 * dy;\r\n cdata[idxDest + c] = Math.round(interp);\r\n }\r\n }\r\n }\r\n }\r\n // writing to real canvas not cache\r\n if (tracker) {\r\n tracker.addRegion(0, 0, destWidth, destHeight);\r\n canvas.needsUpload = true;\r\n }\r\n\r\n // tracker.flush();\r\n // canvas.upload();\r\n}\r\n\r\n\r\n/**\r\n * @param {PixelBuffer} canvas\r\n * @param {{data: Uint8Array, width: number, height: number}} atlas \r\n * @param {{x: number, y: number, width: number, height: number}} srcRect \r\n * @param {{data: Uint8Array, width: number, height: number}} canvas \r\n * @param {{x: number, y: number, width: number, height: number}} destRect \r\n * @param {\"bilinear\" | \"nn\"} algorithm - The resizing algorithm: 'bi' for bilinear interpolation or 'nn' for nearest neighbor. Defaults to 'bi'.\r\n */\r\nfunction drawAtlasRegionToCanvas(atlas, srcRect, canvas, destRect, algorithm = 'bilinear') {\r\n const tracker = canvas.dirtyTracker;\r\n const cdata = canvas.data;\r\n const adata = atlas.data;\r\n const atlasWidth = atlas.width;\r\n const srcWidth = srcRect.width;\r\n const srcHeight = srcRect.height;\r\n const destWidth = destRect.width;\r\n const destHeight = destRect.height;\r\n const scaleX = srcWidth / destWidth;\r\n const scaleY = srcHeight / destHeight;\r\n\r\n for (let dy = 0; dy < destHeight; dy++) {\r\n for (let dx = 0; dx < destWidth; dx++) {\r\n const idxDest = ((dy + destRect.y) * canvas.width + (dx + destRect.x)) * 4;\r\n\r\n if (algorithm === 'nn') {\r\n // Nearest neighbor interpolation\r\n const srcX = srcRect.x + Math.floor((dx + 0.5) * scaleX);\r\n const srcY = srcRect.y + Math.floor((dy + 0.5) * scaleY);\r\n const clampedX = Math.max(srcRect.x, Math.min(srcX, srcRect.x + srcWidth - 1));\r\n const clampedY = Math.max(srcRect.y, Math.min(srcY, srcRect.y + srcHeight - 1));\r\n for (let c = 0; c < 4; c++) { // RGBA channels\r\n cdata[idxDest + c] = adata[(clampedY * atlasWidth + clampedX) * 4 + c];\r\n }\r\n } else {\r\n // Bilinear interpolation (default)\r\n const srcX = srcRect.x + (dx + 0.5) * scaleX - 0.5;\r\n const srcY = srcRect.y + (dy + 0.5) * scaleY - 0.5;\r\n const x1 = Math.floor(srcX);\r\n const y1 = Math.floor(srcY);\r\n const x2 = Math.min(x1 + 1, atlasWidth - 1);\r\n const y2 = Math.min(y1 + 1, atlas.height - 1);\r\n const dxFrac = srcX - x1;\r\n const dyFrac = srcY - y1;\r\n\r\n for (let c = 0; c < 4; c++) { // RGBA channels\r\n const p11 = adata[(y1 * atlasWidth + x1) * 4 + c];\r\n const p12 = adata[(y1 * atlasWidth + x2) * 4 + c];\r\n const p21 = adata[(y2 * atlasWidth + x1) * 4 + c];\r\n const p22 = adata[(y2 * atlasWidth + x2) * 4 + c];\r\n const interpX1 = p11 * (1 - dxFrac) + p12 * dxFrac;\r\n const interpX2 = p21 * (1 - dxFrac) + p22 * dxFrac;\r\n const interp = interpX1 * (1 - dyFrac) + interpX2 * dyFrac;\r\n cdata[idxDest + c] = Math.round(interp);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (tracker) {\r\n tracker.addRegion(destRect.x, destRect.y, destRect.width, destRect.height);\r\n canvas.needsUpload = true;\r\n }\r\n\r\n\r\n\r\n // tracker.flush();\r\n // canvas.upload();\r\n}\r\n\r\n\r\n/**\r\n * utility for spritesheet to frames\r\n * @param {number} rows \r\n * @param {number} cols \r\n * @param {number} startX \r\n * @param {number} startY \r\n * @param {number} tileSize \r\n * @returns {Array<{offset: {x: number, y: number}>}\r\n */\r\nfunction genFrames(rows, cols, startX, startY, tileSize) {\r\n const frames = [];\r\n for (let r = 0; r < rows; r++) {\r\n for (let c = 0; c < cols; c++) {\r\n frames.push({ offset: { x: startX + c * tileSize, y: startY + r * tileSize } });\r\n }\r\n }\r\n return frames;\r\n}\n\nclass InputMap {\r\n /**\r\n * \r\n * @param {*} input - renderer.input \r\n */\r\n constructor(input) {\r\n this.input = input;\r\n this.actions = new Map();\r\n this.mouseActions = new Map();\r\n this.callbackIds = [];\r\n }\r\n\r\n\r\n /**\r\n * \r\n * @param {string} actionName \r\n * @param {Array<string>} keys \r\n */\r\n mapAction(actionName, keys) {\r\n if (typeof keys === 'string') {\r\n keys = [keys];\r\n }\r\n this.actions.set(actionName, keys);\r\n }\r\n\r\n /**\r\n * \r\n * @param {string} actionName \r\n * @param {Array<string>} keys \r\n */\r\n MapMouseAction(actionName, keys) {\r\n if (typeof keys === 'string') {\r\n keys = [keys];\r\n }\r\n this.mouseActions.set(actionName, keys);\r\n }\r\n\r\n /**\r\n * \r\n * @param {string} actionName \r\n * @returns {bool}\r\n */\r\n isMouseActionActive(actionName) {\r\n const keys = this.mouseActions.get(actionName);\r\n if (!keys) return false;\r\n\r\n // console.log(\"checking mouse: \", keys)\r\n\r\n return keys.some(key => this.input.isMouseButtonDown(key));\r\n }\r\n /**\r\n * \r\n * @param {string} actionName \r\n * @returns {bool}\r\n */\r\n isMousePressed(actionName) {\r\n const keys = this.mouseActions.get(actionName);\r\n if (!keys) return false;\r\n\r\n // console.log(\"checking mouse: \", keys)\r\n\r\n return keys.some(key => this.input.isMouseButtonPressed(key));\r\n }\r\n\r\n /**\r\n * \r\n * @param {string} actionName \r\n * @returns {bool}\r\n */\r\n IsMouseActionReleased(actionName) {\r\n const keys = this.mouseActions.get(actionName);\r\n if (!keys) return false;\r\n\r\n // console.log(\"checking mouse: \", keys)\r\n\r\n return keys.some(key => this.input.isMouseButtonReleased(key));\r\n }\r\n\r\n /**\r\n * @returns {{x: number, y: number}}\r\n */\r\n get mousePosition() {\r\n return this.input.getMousePosition();\r\n }\r\n\r\n\r\n /**\r\n * @returns {{x: number, y: number}}\r\n */\r\n get mouseDelta() {\r\n return this.input.getMouseDelta();\r\n }\r\n\r\n /**\r\n * @returns {number}\r\n */\r\n get mouseWheelDelta() {\r\n return this.input.getMouseWheelDelta();\r\n }\r\n\r\n /**\r\n * \r\n * @param {string} actionName - isKeyDown \r\n * @returns \r\n */\r\n isActionActive(actionName) {\r\n const keys = this.actions.get(actionName);\r\n if (!keys) return false;\r\n\r\n return keys.some(key => this.input.isKeyDown(key));\r\n }\r\n\r\n\r\n /**\r\n * \r\n * @param {string} actionName - isKeyPressed\r\n * @returns \r\n */\r\n wasActionTriggered(actionName) {\r\n const keys = this.actions.get(actionName);\r\n if (!keys) return false;\r\n\r\n return keys.some(key => this.input.isKeyPressed(key));\r\n }\r\n\r\n /**\r\n * \r\n * @param {string} actionName - isKeyReleased \r\n * @returns \r\n */\r\n isActionReleased(actionName) {\r\n const keys = this.actions.get(actionName);\r\n if (!keys) return false;\r\n\r\n return keys.some(key => this.input.isKeyReleased(key));\r\n }\r\n\r\n\r\n /**\r\n * \r\n * @param {string} actionName \r\n * @param {(actionName: string,event: {type: string, keyCode: number, keyName: string, mouseButton: number,mousePosition: {x: number, y: number}, mouseDelta: {x:number, y: number}, wheelDelta: number, timestamp: number })=> void} callback \r\n * @returns \r\n */\r\n onActionDown(actionName, callback) {\r\n const keys = this.actions.get(actionName);\r\n if (!keys) {\r\n console.warn(`Action '${actionName}' not mapped`);\r\n return;\r\n }\r\n\r\n keys.forEach(key => {\r\n const id = this.input.onKeyDown(key, (event) => {\r\n callback(actionName, event);\r\n });\r\n this.callbackIds.push(id);\r\n });\r\n\r\n }\r\n\r\n /**\r\n * \r\n * @param {string} actionName \r\n * @param {(actionName: string,event: {type: string, keyCode: number, keyName: string, mouseButton: number,mousePosition: {x: number, y: number}, mouseDelta: {x:number, y: number}, wheelDelta: number, timestamp: number })=> void} callback \r\n * @returns \r\n */\r\n onActionUp(actionName, callback) {\r\n const keys = this.actions.get(actionName);\r\n if (!keys) {\r\n console.warn(`Action '${actionName}' not mapped`);\r\n return;\r\n }\r\n\r\n keys.forEach(key => {\r\n const id = this.input.onKeyUp(key, (event) => {\r\n callback(actionName, event);\r\n });\r\n this.callbackIds.push(id);\r\n });\r\n }\r\n\r\n\r\n /**\r\n * \r\n * @param {string} actionName \r\n * @param {(actionName: string,event: {type: string, keyCode: number, keyName: string, mouseButton: number,mousePosition: {x: number, y: number}, mouseDelta: {x:number, y: number}, wheelDelta: number, timestamp: number })=> void} callback \r\n * @returns \r\n */\r\n onMouseDown(actionName, callback) {\r\n const keys = this.mouseActions.get(actionName);\r\n if (!keys) {\r\n console.warn(`Action '${actionName}' not mapped`);\r\n return;\r\n }\r\n\r\n keys.forEach(key => {\r\n const id = this.input.onMouseDown(key, (event) => {\r\n callback(actionName, event);\r\n });\r\n this.callbackIds.push(id);\r\n });\r\n }\r\n\r\n /**\r\n * \r\n * @param {string} actionName \r\n * @param {(actionName: string,event: {type: string, keyCode: number, keyName: string, mouseButton: number,mousePosition: {x: number, y: number}, mouseDelta: {x:number, y: number}, wheelDelta: number, timestamp: number })=> void} callback \r\n * @returns \r\n */\r\n onMouseUp(actionName, callback) {\r\n const keys = this.mouseActions.get(actionName);\r\n if (!keys) {\r\n console.warn(`Action '${actionName}' not mapped`);\r\n return;\r\n }\r\n\r\n keys.forEach(key => {\r\n const id = this.input.onMouseUp(key, (event) => {\r\n callback(actionName, event);\r\n });\r\n this.callbackIds.push(id);\r\n });\r\n }\r\n\r\n /**\r\n * \r\n *\r\n * @param {(event: {type: string, keyCode: number, keyName: string, mouseButton: number,mousePosition: {x: number, y: number}, mouseDelta: {x:number, y: number}, wheelDelta: number, timestamp: number })=> void} callback \r\n * @returns \r\n */\r\n onMouseMove(callback) {\r\n\r\n const id = this.input.onMouseMove((event) => {\r\n callback(event);\r\n });\r\n this.callbackIds.push(id);\r\n }\r\n\r\n /**\r\n * \r\n *\r\n * @param {(event: {type: string, keyCode: number, keyName: string, mouseButton: number,mousePosition: {x: number, y: number}, mouseDelta: {x:number, y: number}, wheelDelta: number, timestamp: number })=> void} callback \r\n * @returns \r\n */\r\n onMouseWheel(actionName, callback) {\r\n\r\n\r\n const id = this.input.onMouseWheel((event) => {\r\n callback(event);\r\n });\r\n this.callbackIds.push(id);\r\n\r\n }\r\n cleanup() {\r\n this.callbackIds.forEach(id => {\r\n this.input.removeCallback(id);\r\n });\r\n this.callbackIds = [];\r\n }\r\n}\r\n\r\nclass InputBuffer {\r\n constructor(maxSize = 60) { // 1 second at 60 FPS\r\n this.maxSize = maxSize;\r\n this.buffer = [];\r\n }\r\n\r\n recordInput(inputRecord) {\r\n this.buffer.unshift(inputRecord); // Add to beginning (most recent first)\r\n\r\n if (this.buffer.length > this.maxSize) {\r\n this.buffer.pop(); // Remove oldest\r\n }\r\n }\r\n\r\n\r\n // check for input sequences (useful for combos, cheats, etc.)\r\n checkSequence(sequence, timeWindow = 1000) {\r\n if (sequence.length === 0 || this.buffer.length < sequence.length) {\r\n return false;\r\n }\r\n\r\n const now = Date.now();\r\n let sequenceIndex = 0;\r\n\r\n // Work backwards through buffer (most recent to oldest)\r\n for (let i = 0; i < this.buffer.length && sequenceIndex < sequence.length; i++) {\r\n const record = this.buffer[i];\r\n\r\n // Check if this record is too old\r\n if (now - record.timestamp > timeWindow) {\r\n break;\r\n }\r\n\r\n // Check if this matches the next expected input in sequence\r\n // Compare key names (ignore case for letters)\r\n const recordKey = record.key.toUpperCase();\r\n const sequenceKey = sequence[sequence.length - 1 - sequenceIndex].toUpperCase();\r\n\r\n if (recordKey === sequenceKey && record.type === 'down') {\r\n sequenceIndex++;\r\n }\r\n }\r\n\r\n return sequenceIndex === sequence.length;\r\n }\r\n\r\n // Clear the entire buffer\r\n clear() {\r\n this.buffer = [];\r\n }\r\n\r\n // Clear recent N events\r\n clearRecent(count) {\r\n this.buffer = this.buffer.slice(count);\r\n }\r\n\r\n // Get buffer as string (for debugging)\r\n toString() {\r\n return this.buffer.map(record =>\r\n `${record.key}(${record.type})[${record.modifiers?.join(',') || ''}]`\r\n ).join(' → ');\r\n }\r\n\r\n // Find patterns in buffer\r\n findPattern(pattern, timeWindow = 2000) {\r\n // Pattern is an array of key names or objects with key and optional modifiers\r\n const matches = [];\r\n\r\n for (let i = 0; i <= this.buffer.length - pattern.length; i++) {\r\n let match = true;\r\n const matchedEvents = [];\r\n\r\n for (let j = 0; j < pattern.length; j++) {\r\n const bufferEvent = this.buffer[i + j];\r\n const patternStep = pattern[j];\r\n\r\n // Check time window\r\n if (this.buffer[i].timestamp - bufferEvent.timestamp > timeWindow) {\r\n match = false;\r\n break;\r\n }\r\n\r\n // Check key match\r\n if (typeof patternStep === 'string') {\r\n if (bufferEvent.key !== patternStep || bufferEvent.type !== 'down') {\r\n match = false;\r\n break;\r\n }\r\n } else {\r\n // Object pattern\r\n if (bufferEvent.key !== patternStep.key ||\r\n bufferEvent.type !== (patternStep.type || 'down')) {\r\n match = false;\r\n break;\r\n }\r\n\r\n // Check modifiers if specified\r\n if (patternStep.modifiers) {\r\n const hasAllModifiers = patternStep.modifiers.every(mod =>\r\n bufferEvent.modifiers?.includes(mod)\r\n );\r\n if (!hasAllModifiers) {\r\n match = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n matchedEvents.push(bufferEvent);\r\n }\r\n\r\n if (match) {\r\n matches.push({\r\n pattern,\r\n events: matchedEvents,\r\n startIndex: i,\r\n timestamp: matchedEvents[0].timestamp\r\n });\r\n }\r\n }\r\n\r\n return matches;\r\n }\r\n}\r\n\r\n\r\n\r\nclass Input {\r\n /**\r\n * \r\n * @param {*} input \r\n * @param {number} maxBufferSize - default 120 = 2 seconds at 60 fps \r\n */\r\n constructor(input, maxBufferSize = 120) { // 2 seconds at 60 FPS\r\n this.input = input;\r\n this.buffer = new InputBuffer(maxBufferSize);\r\n this.sequences = new Map(); // Map of sequence names to config\r\n this.comboSequences = new Map();\r\n this.globalKeyCallbacks = {\r\n onKeyDown: new Map(),\r\n onKeyUp: new Map()\r\n };\r\n this.currentModifiers = new Set();\r\n this.capsLockActive = false;\r\n this.callbackIds = [];\r\n\r\n this.startRecording();\r\n }\r\n\r\n static printKeyMappings() {\r\n const mappings = Input.getAllKeyMappings();\r\n\r\n console.group('Key Mappings:');\r\n\r\n console.group('Letters:');\r\n mappings.letters.forEach(key => console.log(key));\r\n console.groupEnd();\r\n\r\n console.group('Numbers:');\r\n mappings.numbers.forEach(key => console.log(key));\r\n console.groupEnd();\r\n\r\n console.group('Special Keys:');\r\n mappings.special.forEach(key => console.log(key));\r\n console.groupEnd();\r\n\r\n console.group('Function Keys:');\r\n mappings.function.forEach(key => console.log(key));\r\n console.groupEnd();\r\n\r\n console.group('Punctuation Keys:');\r\n mappings.punctuation.forEach(key => console.log(key));\r\n console.groupEnd();\r\n\r\n console.group('Additional Special Keys:');\r\n mappings.additionalSpecial.forEach(key => console.log(key));\r\n console.groupEnd();\r\n\r\n console.group('Right Modifier Keys:');\r\n mappings.rightModifiers.forEach(key => console.log(key));\r\n console.groupEnd();\r\n\r\n console.group('Keypad Keys:');\r\n mappings.keypad.forEach(key => console.log(key));\r\n console.groupEnd();\r\n\r\n console.group('Menu Keys:');\r\n mappings.menu.forEach(key => console.log(key));\r\n console.groupEnd();\r\n\r\n console.groupEnd();\r\n\r\n return mappings;\r\n }\r\n\r\n\r\n static getAllKeyMappings() {\r\n const mappings = {\r\n letters: [],\r\n numbers: [],\r\n special: [],\r\n function: [],\r\n punctuation: [],\r\n additionalSpecial: [],\r\n rightModifiers: [],\r\n keypad: [],\r\n menu: []\r\n };\r\n\r\n // Letters\r\n for (let c = 'A'.charCodeAt(0); c <= 'Z'.charCodeAt(0); c++) {\r\n mappings.letters.push(String.fromCharCode(c));\r\n }\r\n\r\n // Numbers\r\n for (let c = '0'.charCodeAt(0); c <= '9'.charCodeAt(0); c++) {\r\n mappings.numbers.push(String.fromCharCode(c));\r\n }\r\n\r\n // Special keys\r\n mappings.special = [\r\n \"Space\", \"Enter\", \"Escape\", \"Backspace\", \"Tab\",\r\n \"Shift\", \"Control\", \"Alt\",\r\n \"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"\r\n ];\r\n\r\n // Function keys\r\n mappings.function = [];\r\n for (let i = 1; i <= 12; i++) {\r\n mappings.function.push(`F${i}`);\r\n }\r\n\r\n // Punctuation keys\r\n mappings.punctuation = [\",\", \".\", \"/\", \";\", \"'\", \"[\", \"]\", \"\\\\\", \"-\", \"=\", \"`\"];\r\n\r\n // Additional special keys\r\n mappings.additionalSpecial = [\r\n \"Insert\", \"Delete\", \"Home\", \"End\", \"PageUp\", \"PageDown\",\r\n \"CapsLock\", \"ScrollLock\", \"NumLock\", \"PrintScreen\", \"Pause\"\r\n ];\r\n\r\n // Right modifier keys\r\n mappings.rightModifiers = [\"RightShift\", \"RightControl\", \"RightAlt\", \"RightSuper\"];\r\n\r\n // Keypad keys\r\n for (let i = 0; i <= 9; i++) {\r\n mappings.keypad.push(`Keypad${i}`);\r\n }\r\n mappings.keypad.push(\"KeypadDecimal\", \"KeypadDivide\", \"KeypadMultiply\", \"KeypadSubtract\", \"KeypadAdd\", \"KeypadEnter\", \"KeypadEqual\");\r\n\r\n // Menu\r\n mappings.menu = [\"Menu\"];\r\n\r\n return mappings;\r\n }\r\n\r\n\r\n startRecording() {\r\n if (this.recording) return;\r\n\r\n\r\n const allKeys = this.getAllKeyNames();\r\n\r\n\r\n allKeys.forEach(key => {\r\n\r\n const downId = this.input.onKeyDown(key, (event) => {\r\n this.handleKeyEvent('down', key, event);\r\n });\r\n this.callbackIds.push(downId);\r\n\r\n\r\n const upId = this.input.onKeyUp(key, (event) => {\r\n this.handleKeyEvent('up', key, event);\r\n });\r\n this.callbackIds.push(upId);\r\n });\r\n\r\n this.recording = true;\r\n console.log('InputHelper: Started recording all keyboard events');\r\n }\r\n\r\n stopRecording() {\r\n if (!this.recording) return;\r\n\r\n // Remove all callbacks\r\n this.callbackIds.forEach(id => {\r\n this.input.removeCallback(id);\r\n });\r\n this.callbackIds = [];\r\n\r\n this.recording = false;\r\n }\r\n\r\n handleKeyEvent(type, key, event) {\r\n const timestamp = event.timestamp || Date.now();\r\n\r\n const modifierMap = {\r\n 'Shift': 'Shift',\r\n 'RightShift': 'Shift',\r\n 'Control': 'Control',\r\n 'RightControl': 'Control',\r\n 'Alt': 'Alt',\r\n 'RightAlt': 'Alt'\r\n };\r\n\r\n if (modifierMap[key]) {\r\n const mod = modifierMap[key];\r\n if (type === 'down') {\r\n this.currentModifiers.add(mod);\r\n } else {\r\n this.currentModifiers.delete(mod);\r\n }\r\n }\r\n\r\n if (key === 'CapsLock' && type === 'down' && !event.repeat) {\r\n this.capsLockActive = !this.capsLockActive;\r\n }\r\n\r\n const inputRecord = {\r\n key,\r\n type,\r\n modifiers: Array.from(this.currentModifiers),\r\n timestamp\r\n };\r\n this.buffer.recordInput(inputRecord);\r\n\r\n const callbacks = this.globalKeyCallbacks[`onKey${type === 'down' ? 'Down' : 'Up'}`];\r\n if (callbacks.has(key)) {\r\n callbacks.get(key).forEach(callback => callback(event));\r\n }\r\n\r\n\r\n this.checkSequences();\r\n\r\n\r\n this.checkCombos();\r\n }\r\n\r\n\r\n onAnyKeyDown(callback) {\r\n return this.onSpecificKeyDown('*any*', callback);\r\n }\r\n\r\n onAnyKeyUp(callback) {\r\n return this.onSpecificKeyUp('*any*', callback);\r\n }\r\n\r\n\r\n onSpecificKeyDown(key, callback) {\r\n return this.registerGlobalCallback('onKeyDown', key, callback);\r\n }\r\n\r\n onSpecificKeyUp(key, callback) {\r\n return this.registerGlobalCallback('onKeyUp', key, callback);\r\n }\r\n\r\n registerGlobalCallback(type, key, callback) {\r\n if (!this.globalKeyCallbacks[type].has(key)) {\r\n this.globalKeyCallbacks[type].set(key, []);\r\n }\r\n\r\n this.globalKeyCallbacks[type].get(key).push(callback);\r\n\r\n\r\n return () => {\r\n const callbacks = this.globalKeyCallbacks[type].get(key);\r\n if (callbacks) {\r\n const index = callbacks.indexOf(callback);\r\n if (index !== -1) {\r\n callbacks.splice(index, 1);\r\n }\r\n }\r\n };\r\n }\r\n\r\n\r\n /**\r\n * Register a sequence to watch for\r\n * @param {string} name - Sequence name\r\n * @param {Array} sequence - Array of key names to match\r\n * @param {Function} callback - Called when sequence is matched\r\n * @param {Object} options - Additional options\r\n */\r\n registerSequence(name, sequence, callback, options = {}) {\r\n const config = {\r\n sequence,\r\n callback,\r\n timeWindow: options.timeWindow || 2000, // 2 seconds default\r\n requireExactModifiers: options.requireExactModifiers || false,\r\n clearOnMatch: options.clearOnMatch !== false, // Clear buffer on match by default\r\n description: options.description || ''\r\n };\r\n\r\n this.sequences.set(name, config);\r\n console.log(`🎹 InputHelper: Registered sequence \"${name}\" - ${config.description}`);\r\n\r\n // Return deregister function\r\n return () => {\r\n this.sequences.delete(name);\r\n };\r\n }\r\n\r\n /**\r\n * Register a combo sequence (like Shift+6 for ^)\r\n * @param {string} name - Combo name\r\n * @param {Array} modifiers - Modifier keys (e.g., ['Shift'])\r\n * @param {string} key - Main key (e.g., '6')\r\n * @param {string} output - Output character/action (e.g., '^')\r\n * @param {Function} callback - Called when combo is matched\r\n */\r\n registerCombo(name, modifiers, key, output, callback) {\r\n const config = {\r\n modifiers,\r\n key,\r\n output,\r\n callback,\r\n description: `${modifiers.join('+')}+${key} → ${output}`\r\n };\r\n\r\n this.comboSequences.set(name, config);\r\n console.log(`🎹 InputHelper: Registered combo \"${name}\" - ${config.description}`);\r\n\r\n // Return deregister function\r\n return () => {\r\n this.comboSequences.delete(name);\r\n };\r\n }\r\n\r\n /**\r\n * Register common special character combos\r\n */\r\n registerCommonCombos() {\r\n // Shift + Number combos\r\n const shiftNumberCombos = [\r\n { num: '1', output: '!' },\r\n { num: '2', output: '@' },\r\n { num: '3', output: '#' },\r\n { num: '4', output: '$' },\r\n { num: '5', output: '%' },\r\n { num: '6', output: '^' },\r\n { num: '7', output: '&' },\r\n { num: '8', output: '*' },\r\n { num: '9', output: '(' },\r\n { num: '0', output: ')' }\r\n ];\r\n\r\n shiftNumberCombos.forEach(combo => {\r\n this.registerCombo(\r\n `Shift+${combo.num}`,\r\n ['Shift'],\r\n combo.num,\r\n combo.output,\r\n (event) => console.log(`Typed: ${combo.output}`)\r\n );\r\n });\r\n\r\n // Other common combos\r\n const commonCombos = [\r\n { mods: ['Shift'], key: '`', output: '~', name: 'Tilde' },\r\n { mods: ['Shift'], key: '-', output: '_', name: 'Underscore' },\r\n { mods: ['Shift'], key: '=', output: '+', name: 'Plus' },\r\n { mods: ['Shift'], key: '[', output: '{', name: 'OpenBrace' },\r\n { mods: ['Shift'], key: ']', output: '}', name: 'CloseBrace' },\r\n { mods: ['Shift'], key: '\\\\', output: '|', name: 'Pipe' },\r\n { mods: ['Shift'], key: ';', output: ':', name: 'Colon' },\r\n { mods: ['Shift'], key: \"'\", output: '\"', name: 'Quote' },\r\n { mods: ['Shift'], key: ',', output: '<', name: 'LessThan' },\r\n { mods: ['Shift'], key: '.', output: '>', name: 'GreaterThan' },\r\n { mods: ['Shift'], key: '/', output: '?', name: 'Question' }\r\n ];\r\n\r\n commonCombos.forEach(combo => {\r\n this.registerCombo(\r\n combo.name,\r\n combo.mods,\r\n combo.key,\r\n combo.output,\r\n (event) => console.log(`Typed: ${combo.output}`)\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Check registered sequences\r\n */\r\n checkSequences() {\r\n for (const [name, config] of this.sequences) {\r\n // Extract just the key names for sequence checking\r\n const keySequence = config.sequence.map(step =>\r\n typeof step === 'string' ? step : step.key\r\n );\r\n\r\n if (this.buffer.checkSequence(keySequence, config.timeWindow)) {\r\n // Get the actual events that matched\r\n const matchedEvents = this.getLastEvents(keySequence.length);\r\n\r\n // Call the callback\r\n config.callback({\r\n name,\r\n sequence: config.sequence,\r\n matchedEvents,\r\n timestamp: Date.now()\r\n });\r\n\r\n // Clear buffer if configured\r\n if (config.clearOnMatch) {\r\n this.buffer.clear();\r\n }\r\n\r\n console.log(`🎹 Sequence matched: \"${name}\"`);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Check for combo sequences (simultaneous key presses)\r\n */\r\n checkCombos() {\r\n const recentEvents = this.getLastEvents(10); // Check last 10 events\r\n\r\n // Find key down events that happened very close together\r\n const recentDowns = recentEvents.filter(e =>\r\n e.type === 'down' &&\r\n Date.now() - e.timestamp < 100 // Within 100ms\r\n );\r\n\r\n if (recentDowns.length >= 2) {\r\n for (const [name, combo] of this.comboSequences) {\r\n // Check if all required modifiers are pressed\r\n const hasAllModifiers = combo.modifiers.every(mod =>\r\n recentDowns.some(e => e.key === mod) ||\r\n this.currentModifiers.has(mod)\r\n );\r\n\r\n // Check if the main key is pressed\r\n const hasMainKey = recentDowns.some(e => e.key === combo.key);\r\n\r\n if (hasAllModifiers && hasMainKey) {\r\n // Found a combo!\r\n combo.callback({\r\n name,\r\n combo: combo.output,\r\n modifiers: combo.modifiers,\r\n key: combo.key,\r\n timestamp: Date.now()\r\n });\r\n\r\n console.log(`🎹 Combo detected: ${name} (${combo.output})`);\r\n\r\n // Clear these events from recent history to prevent retrigger\r\n this.buffer.clearRecent(3);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get the last N events from buffer\r\n */\r\n getLastEvents(count) {\r\n // Assuming buffer stores events with most recent first\r\n return this.buffer.buffer.slice(0, count);\r\n }\r\n\r\n /**\r\n * Get all key names available in the system\r\n */\r\n getAllKeyNames() {\r\n const mappings = Input.getAllKeyMappings();\r\n return [\r\n ...mappings.letters,\r\n ...mappings.numbers,\r\n ...mappings.special,\r\n ...mappings.function,\r\n ...mappings.punctuation,\r\n ...mappings.additionalSpecial,\r\n ...mappings.rightModifiers,\r\n ...mappings.keypad,\r\n ...mappings.menu\r\n ];\r\n }\r\n\r\n /**\r\n * Check if a specific key is currently held down\r\n */\r\n isKeyHeld(key) {\r\n const recent = this.getLastEvents(5);\r\n const lastDown = recent.find(e => e.key === key && e.type === 'down');\r\n const lastUp = recent.find(e => e.key === key && e.type === 'up');\r\n\r\n // Key is held if:\r\n // 1. There's a recent down event\r\n // 2. No recent up event OR up event was before down event\r\n if (!lastDown) return false;\r\n if (!lastUp) return true;\r\n\r\n return lastDown.timestamp > lastUp.timestamp;\r\n }\r\n\r\n /**\r\n * Get currently held keys\r\n */\r\n getHeldKeys() {\r\n const allKeys = this.getAllKeyNames();\r\n return allKeys.filter(key => this.isKeyHeld(key));\r\n }\r\n\r\n /**\r\n * Get current modifier state\r\n */\r\n getModifierState() {\r\n return {\r\n shift: this.currentModifiers.has('Shift'),\r\n control: this.currentModifiers.has('Control'),\r\n alt: this.currentModifiers.has('Alt'),\r\n capsLock: this.capsLockActive,\r\n any: this.currentModifiers.size > 0\r\n };\r\n }\r\n\r\n /**\r\n * Register cheat code sequences\r\n */\r\n registerCheatCode(name, sequence, onActivate) {\r\n return this.registerSequence(\r\n `cheat_${name}`,\r\n sequence,\r\n (match) => {\r\n console.log(`🎮 Cheat activated: ${name}`);\r\n onActivate(match);\r\n },\r\n {\r\n timeWindow: 3000, // 3 seconds for cheat codes\r\n description: `Cheat code: ${name}`,\r\n clearOnMatch: true\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Register common cheat codes\r\n */\r\n registerCommonCheatCodes() {\r\n // Konami Code\r\n this.registerCheatCode('konami', [\r\n 'ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown',\r\n 'ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight',\r\n 'B', 'A', 'Enter'\r\n ], () => {\r\n console.log('⬆️⬆️⬇️⬇️⬅️➡️⬅️➡️🅱️🅰️ - Konami Code Activated!');\r\n });\r\n\r\n // God mode\r\n this.registerCheatCode('godmode', ['G', 'O', 'D'], () => {\r\n console.log('👑 God Mode Activated!');\r\n });\r\n\r\n // Infinite ammo\r\n this.registerCheatCode('ammo', ['I', 'D', 'D', 'Q', 'D'], () => {\r\n console.log('🔫 Infinite Ammo!');\r\n });\r\n }\r\n\r\n /**\r\n * Create a typing buffer for text input\r\n */\r\n createTypingBuffer(options = {}) {\r\n const typingBuffer = {\r\n text: '',\r\n cursor: 0,\r\n maxLength: options.maxLength || 100,\r\n onTextChange: options.onTextChange || (() => { }),\r\n onEnter: options.onEnter || (() => { })\r\n };\r\n\r\n const shiftMap = {\r\n '1': '!',\r\n '2': '@',\r\n '3': '#',\r\n '4': '$',\r\n '5': '%',\r\n '6': '^',\r\n '7': '&',\r\n '8': '*',\r\n '9': '(',\r\n '0': ')',\r\n '`': '~',\r\n '-': '_',\r\n '=': '+',\r\n '[': '{',\r\n ']': '}',\r\n '\\\\': '|',\r\n ';': ':',\r\n \"'\": '\"',\r\n ',': '<',\r\n '.': '>',\r\n '/': '?'\r\n };\r\n\r\n // Setup typing listeners\r\n const unsubscribers = [];\r\n\r\n // Letter, number, and punctuation keys\r\n const mappings = Input.getAllKeyMappings();\r\n const typeableKeys = [...mappings.letters, ...mappings.numbers, ...mappings.punctuation];\r\n typeableKeys.forEach(key => {\r\n const unsub = this.onSpecificKeyDown(key, (event) => {\r\n if (typingBuffer.text.length < typingBuffer.maxLength) {\r\n const isShiftPressed = this.currentModifiers.has('Shift');\r\n let char = key;\r\n\r\n if (mappings.letters.includes(key)) {\r\n // Handle letters with shift and caps lock (XOR behavior)\r\n const shouldUpper = isShiftPressed !== this.capsLockActive;\r\n char = shouldUpper ? key.toUpperCase() : key.toLowerCase();\r\n } else if (isShiftPressed) {\r\n // Handle shifted numbers and punctuation\r\n char = shiftMap[key] || char;\r\n }\r\n\r\n typingBuffer.text = typingBuffer.text.slice(0, typingBuffer.cursor) + char + typingBuffer.text.slice(typingBuffer.cursor);\r\n typingBuffer.cursor += 1;\r\n typingBuffer.onTextChange(typingBuffer.text);\r\n }\r\n });\r\n unsubscribers.push(unsub);\r\n });\r\n\r\n // Space\r\n unsubscribers.push(this.onSpecificKeyDown('Space', () => {\r\n if (typingBuffer.text.length < typingBuffer.maxLength) {\r\n typingBuffer.text = typingBuffer.text.slice(0, typingBuffer.cursor) + ' ' + typingBuffer.text.slice(typingBuffer.cursor);\r\n typingBuffer.cursor += 1;\r\n typingBuffer.onTextChange(typingBuffer.text);\r\n }\r\n }));\r\n\r\n // Backspace\r\n unsubscribers.push(this.onSpecificKeyDown('Backspace', () => {\r\n if (typingBuffer.cursor > 0) {\r\n typingBuffer.text = typingBuffer.text.slice(0, typingBuffer.cursor - 1) + typingBuffer.text.slice(typingBuffer.cursor);\r\n typingBuffer.cursor -= 1;\r\n typingBuffer.onTextChange(typingBuffer.text);\r\n }\r\n }));\r\n\r\n // Enter\r\n unsubscribers.push(this.onSpecificKeyDown('Enter', () => {\r\n typingBuffer.onEnter(typingBuffer.text);\r\n typingBuffer.text = '';\r\n typingBuffer.cursor = 0;\r\n typingBuffer.onTextChange(typingBuffer.text);\r\n }));\r\n\r\n // Arrow keys for cursor navigation\r\n unsubscribers.push(this.onSpecificKeyDown('ArrowLeft', () => {\r\n typingBuffer.cursor = Math.max(0, typingBuffer.cursor - 1);\r\n }));\r\n\r\n unsubscribers.push(this.onSpecificKeyDown('ArrowRight', () => {\r\n typingBuffer.cursor = Math.min(typingBuffer.text.length, typingBuffer.cursor + 1);\r\n }));\r\n\r\n // Return buffer with cleanup\r\n return {\r\n buffer: typingBuffer,\r\n cleanup: () => unsubscribers.forEach(unsub => unsub())\r\n };\r\n }\r\n\r\n /**\r\n * Clean up all resources\r\n */\r\n cleanup() {\r\n this.stopRecording();\r\n this.sequences.clear();\r\n this.comboSequences.clear();\r\n this.globalKeyCallbacks.onKeyDown.clear();\r\n this.globalKeyCallbacks.onKeyUp.clear();\r\n this.currentModifiers.clear();\r\n this.buffer.clear();\r\n console.log('🎹 InputHelper: Cleaned up all resources');\r\n }\r\n\r\n /**\r\n * Get statistics about input usage\r\n */\r\n getStats() {\r\n const events = this.buffer.buffer;\r\n const keyCounts = {};\r\n const modifierUsage = {};\r\n\r\n events.forEach(event => {\r\n // Count key usage\r\n keyCounts[event.key] = (keyCounts[event.key] || 0) + 1;\r\n\r\n // Count modifier usage\r\n if (event.modifiers) {\r\n event.modifiers.forEach(mod => {\r\n modifierUsage[mod] = (modifierUsage[mod] || 0) + 1;\r\n });\r\n }\r\n });\r\n\r\n // Find most used key\r\n let mostUsedKey = null;\r\n let maxCount = 0;\r\n for (const [key, count] of Object.entries(keyCounts)) {\r\n if (count > maxCount) {\r\n mostUsedKey = key;\r\n maxCount = count;\r\n }\r\n }\r\n\r\n return {\r\n totalEvents: events.length,\r\n mostUsedKey,\r\n mostUsedCount: maxCount,\r\n keyCounts,\r\n modifierUsage,\r\n sequencesRegistered: this.sequences.size,\r\n combosRegistered: this.comboSequences.size\r\n };\r\n }\r\n}\n\n/**\r\n * Clamp a rectangle to canvas bounds\r\n * Returns null if completely outside canvas\r\n */\r\nfunction clampRectToCanvas(x, y, width, height, canvasWidth, canvasHeight) {\r\n const x1 = Math.max(0, Math.floor(x));\r\n const y1 = Math.max(0, Math.floor(y));\r\n const x2 = Math.min(canvasWidth, Math.ceil(x + width));\r\n const y2 = Math.min(canvasHeight, Math.ceil(y + height));\r\n \r\n const clampedWidth = x2 - x1;\r\n const clampedHeight = y2 - y1;\r\n \r\n if (clampedWidth <= 0 || clampedHeight <= 0) {\r\n return null; // Completely outside canvas\r\n }\r\n \r\n return { x: x1, y: y1, width: clampedWidth, height: clampedHeight };\r\n}\r\n\r\n/**\r\n * Check if a pixel should be drawn (canvas + viewport clipping)\r\n */\r\nfunction shouldDrawPixel(x, y, canvas, camera) {\r\n // Canvas bounds check\r\n if (x < 0 || x >= canvas.width || y < 0 || y >= canvas.height) {\r\n return false;\r\n }\r\n \r\n // Viewport clipping (if camera has viewport)\r\n if (camera && camera.viewport && camera.viewport.shouldClip(x, y)) {\r\n return false;\r\n }\r\n \r\n return true;\r\n}\n\nclass Camera {\r\n constructor(x = 0, y = 0, width = 800, height = 600) {\r\n this.x = x; // Camera position in world space\r\n this.y = y;\r\n this.width = width; // Viewport size\r\n this.height = height;\r\n this.viewport = null;\r\n }\r\n\r\n // World → Screen\r\n worldToScreen(worldX, worldY) {\r\n // Step 1: World to camera space\r\n const camX = worldX - this.x;\r\n const camY = worldY - this.y;\r\n\r\n // Step 2: Camera to screen (center of viewport)\r\n const screenX = camX + this.width / 2;\r\n const screenY = camY + this.height / 2;\r\n\r\n\r\n // Step 2: Apply viewport transform if set\r\n if (this.viewport) {\r\n // Scale to viewport size (if different from camera size)\r\n const scaleX = this.viewport.width / this.width;\r\n const scaleY = this.viewport.height / this.height;\r\n\r\n return {\r\n x: screenX * scaleX + this.viewport.x,\r\n y: screenY * scaleY + this.viewport.y\r\n };\r\n }\r\n\r\n return { x: screenX, y: screenY };\r\n }\r\n /**\r\n * \r\n * @param {Viewport} viewport \r\n */\r\n setViewport(viewport) {\r\n this.viewport = viewport;\r\n }\r\n\r\n // Screen → World \r\n screenToWorld(screenX, screenY) {\r\n // // Inverse: remove centering, then add camera position\r\n // const camX = screenX - this.width / 2;\r\n // const camY = screenY - this.height / 2;\r\n\r\n // const worldX = camX + this.x;\r\n // const worldY = camY + this.y;\r\n\r\n // return { x: worldX, y: worldY };\r\n\r\n let camX, camY;\r\n\r\n // Step 1: Remove viewport offset if set\r\n if (this.viewport) {\r\n const scaleX = this.width / this.viewport.width;\r\n const scaleY = this.height / this.viewport.height;\r\n\r\n camX = (screenX - this.viewport.x) * scaleX;\r\n camY = (screenY - this.viewport.y) * scaleY;\r\n } else {\r\n camX = screenX;\r\n camY = screenY;\r\n }\r\n\r\n // Step 2: Camera to world space\r\n const worldX = camX - this.width / 2 + this.x;\r\n const worldY = camY - this.height / 2 + this.y;\r\n\r\n return { x: worldX, y: worldY };\r\n }\r\n\r\n isVisible(worldX, worldY) {\r\n const screen = this.worldToScreen(worldX, worldY);\r\n\r\n if (this.viewport) {\r\n return this.viewport.contains(screen.x, screen.y);\r\n }\r\n\r\n return screen.x >= 0 && screen.x < this.width &&\r\n screen.y >= 0 && screen.y < this.height;\r\n }\r\n // Get world-space bounds of what's visible\r\n getVisibleBounds() {\r\n const halfW = this.width / 2;\r\n const halfH = this.height / 2;\r\n\r\n return {\r\n left: this.x - halfW,\r\n right: this.x + halfW,\r\n top: this.y - halfH,\r\n bottom: this.y + halfH\r\n };\r\n }\r\n\r\n // Move camera (with bounds checking optional)\r\n move(dx, dy) {\r\n this.x += dx;\r\n this.y += dy;\r\n }\r\n\r\n setPosition(x, y) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n}\r\n\r\n\r\n\r\nclass Viewport {\r\n constructor(x, y, width, height) {\r\n this.x = x; // Position on canvas\r\n this.y = y;\r\n this.width = width; // Size of viewport\r\n this.height = height;\r\n this.scissorEnabled = true;\r\n }\r\n\r\n // Check if a point is inside viewport\r\n contains(screenX, screenY) {\r\n return screenX >= this.x && screenX < this.x + this.width &&\r\n screenY >= this.y && screenY < this.y + this.height;\r\n }\r\n\r\n // Convert viewport-local coords to canvas coords\r\n toCanvas(localX, localY) {\r\n return {\r\n x: localX + this.x,\r\n y: localY + this.y\r\n };\r\n }\r\n\r\n // Convert canvas coords to viewport-local coords\r\n toLocal(canvasX, canvasY) {\r\n return {\r\n x: canvasX - this.x,\r\n y: canvasY - this.y\r\n };\r\n }\r\n\r\n // Get aspect ratio\r\n getAspectRatio() {\r\n return this.width / this.height;\r\n }\r\n\r\n // Enable/disable scissor clipping\r\n setScissor(enabled) {\r\n this.scissorEnabled = enabled;\r\n }\r\n\r\n // Check if should clip a pixel (used during rendering)\r\n shouldClip(canvasX, canvasY) {\r\n if (!this.scissorEnabled) return false;\r\n\r\n return canvasX < this.x || canvasX >= this.x + this.width ||\r\n canvasY < this.y || canvasY >= this.y + this.height;\r\n }\r\n}\r\n\r\n\r\n\r\nfunction createLetterboxedViewport(canvasWidth, canvasHeight, targetAspect) {\r\n const canvasAspect = canvasWidth / canvasHeight;\r\n \r\n let vpX, vpY, vpWidth, vpHeight;\r\n \r\n if (canvasAspect > targetAspect) {\r\n // Canvas is wider - add side bars\r\n vpHeight = canvasHeight;\r\n vpWidth = canvasHeight * targetAspect;\r\n vpX = (canvasWidth - vpWidth) / 2;\r\n vpY = 0;\r\n } else {\r\n // Canvas is taller - add top/bottom bars\r\n vpWidth = canvasWidth;\r\n vpHeight = canvasWidth / targetAspect;\r\n vpX = 0;\r\n vpY = (canvasHeight - vpHeight) / 2;\r\n }\r\n \r\n return new Viewport(vpX, vpY, vpWidth, vpHeight);\r\n}\r\n\r\n\r\nfunction drawLetterboxBars(canvas, viewport) {\r\n // Top bar\r\n if (viewport.y > 0) {\r\n for (let y = 0; y < viewport.y; y++) {\r\n for (let x = 0; x < canvas.width; x++) {\r\n canvas.setPixel(x, y, 0, 0, 0, 255);\r\n }\r\n }\r\n }\r\n \r\n // Bottom bar\r\n const bottomY = viewport.y + viewport.height;\r\n if (bottomY < canvas.height) {\r\n for (let y = bottomY; y < canvas.height; y++) {\r\n for (let x = 0; x < canvas.width; x++) {\r\n canvas.setPixel(x, y, 0, 0, 0, 255);\r\n }\r\n }\r\n }\r\n \r\n // Left bar\r\n if (viewport.x > 0) {\r\n for (let y = 0; y < canvas.height; y++) {\r\n for (let x = 0; x < viewport.x; x++) {\r\n canvas.setPixel(x, y, 0, 0, 0, 255);\r\n }\r\n }\r\n }\r\n \r\n // Right bar\r\n const rightX = viewport.x + viewport.width;\r\n if (rightX < canvas.width) {\r\n for (let y = 0; y < canvas.height; y++) {\r\n for (let x = rightX; x < canvas.width; x++) {\r\n canvas.setPixel(x, y, 0, 0, 0, 255);\r\n }\r\n }\r\n }\r\n}\n\nclass LineDrawer$1 {\n /**\n * * Draw a line using Bresenham's algorithm\n * @param {PixelBuffer} canvas \n * @param {*} x1 \n * @param {*} y1 \n * @param {*} x2 \n * @param {*} y2 \n * @param {*} r \n * @param {*} g \n * @param {*} b \n * @param {*} a \n * @param {Camera}\n * @returns \n */\n static drawLine(canvas, x1, y1, x2, y2, r, g, b, a = 255, camera = undefined) {\n // const startTime = performance.now();\n\n // Convert to integers\n x1 = Math.floor(x1); y1 = Math.floor(y1);\n x2 = Math.floor(x2); y2 = Math.floor(y2);\n\n const dx = Math.abs(x2 - x1);\n const dy = Math.abs(y2 - y1);\n const sx = x1 < x2 ? 1 : -1; // Step direction for x\n const sy = y1 < y2 ? 1 : -1; // Step direction for y\n\n let err = dx - dy; // Initial error term\n let x = x1;\n let y = y1;\n\n\n // Track actual drawn region\n let minX = Infinity, minY = Infinity;\n let maxX = -Infinity, maxY = -Infinity;\n\n // Direct buffer access for performance\n const data = canvas.data;\n const width = canvas.width;\n canvas.height;\n\n let pixelCount = 0;\n\n // Bresenham's main loop - all integer operations\n while (true) {\n // Draw current pixel if within bounds\n if (shouldDrawPixel(x, y, canvas, camera)) {\n const idx = (y * width + x) * 4;\n data[idx + 0] = r;\n data[idx + 1] = g;\n data[idx + 2] = b;\n data[idx + 3] = a;\n pixelCount++;\n\n // Track bounds\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n\n // Reached end point?\n if (x === x2 && y === y2) break;\n\n // Calculate error for next step\n const e2 = err * 2;\n\n // Step horizontally?\n if (e2 > -dy) {\n err -= dy;\n x += sx;\n }\n\n // Step vertically?\n if (e2 < dx) {\n err += dx;\n y += sy;\n }\n }\n\n if (pixelCount === 0) {\n return { pixels: 0, time: 0, regionSize: 0 };\n }\n\n const tracker = canvas.dirtyTracker;\n if (tracker) {\n tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n }\n canvas.needsUpload = true;\n }\n\n /**\n * Draw thick line using circular brush - pre-calculate brush stamp, stamp along line path\n * @param {*} canvas \n * @param {*} x1 \n * @param {*} y1 \n * @param {*} x2 \n * @param {*} y2 \n * @param {*} thickness \n * @param {*} r \n * @param {*} g \n * @param {*} b \n * @param {*} a \n * @param {Camera}\n * @returns \n */\n static drawThickLine(canvas, x1, y1, x2, y2, thickness, r, g, b, a = 255, camera = undefined) {\n x1 = Math.floor(x1); y1 = Math.floor(y1);\n x2 = Math.floor(x2); y2 = Math.floor(y2);\n thickness = Math.max(1, Math.floor(thickness));\n // const startTime = performance.now();\n\n // Create circular brush stamp (once per thickness)\n const radius = Math.ceil(thickness / 2);\n const brushStamp = LineDrawer$1._createBrushStamp(radius, r, g, b, a);\n\n // Calculate extended bounding box (includes brush radius)\n // const minX = Math.max(0, Math.min(x1, x2) - radius);\n // const minY = Math.max(0, Math.min(y1, y2) - radius);\n // const maxX = Math.min(canvas.width - 1, Math.max(x1, x2) + radius);\n // const maxY = Math.min(canvas.height - 1, Math.max(y1, y2) + radius);\n\n\n\n // Get all points along the line using Bresenham\n const points = LineDrawer$1._bresenhamPoints(x1, y1, x2, y2);\n\n let minX = Infinity, minY = Infinity;\n let maxX = -Infinity, maxY = -Infinity;\n // Direct buffer manipulation for performance\n const data = canvas.data;\n const width = canvas.width;\n const height = canvas.height;\n\n // Stamp brush at each point along the line\n let pixelsDrawn = 0;\n for (const { x, y } of points) {\n const result = LineDrawer$1._stampBrush(\n data, width, height,\n x, y, radius, brushStamp,\n camera\n );\n\n pixelsDrawn += result.pixels;\n\n if (result.pixels > 0) {\n minX = Math.min(minX, result.minX);\n minY = Math.min(minY, result.minY);\n maxX = Math.max(maxX, result.maxX);\n maxY = Math.max(maxY, result.maxY);\n }\n }\n\n if (pixelsDrawn === 0) {\n return;\n }\n\n const tracker = canvas.dirtyTracker;\n if (tracker) {\n tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n }\n canvas.needsUpload = true;\n }\n\n /**\n * Get all points along a line (Bresenham)\n * Useful for collision detection, path following, etc.\n */\n static _bresenhamPoints(x1, y1, x2, y2) {\n const points = [];\n const dx = Math.abs(x2 - x1);\n const dy = Math.abs(y2 - y1);\n const sx = x1 < x2 ? 1 : -1;\n const sy = y1 < y2 ? 1 : -1;\n\n let err = dx - dy;\n let x = x1;\n let y = y1;\n\n while (true) {\n points.push({ x, y });\n if (x === x2 && y === y2) break;\n\n const e2 = err * 2;\n if (e2 > -dy) {\n err -= dy;\n x += sx;\n }\n if (e2 < dx) {\n err += dx;\n y += sy;\n }\n }\n\n return points;\n }\n\n /**\n * Create a circular brush stamp\n * Pre-calculated, reusable across multiple stamps\n */\n static _createBrushStamp(radius, r, g, b, a) {\n const stamp = [];\n\n for (let dy = -radius; dy <= radius; dy++) {\n for (let dx = -radius; dx <= radius; dx++) {\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist <= radius) {\n // Edge fading for smooth brush\n const edgeFade = Math.max(0, 1 - (dist / radius));\n const finalAlpha = Math.floor(a * edgeFade);\n\n stamp.push({\n dx, dy,\n r, g, b,\n a: finalAlpha\n });\n }\n }\n }\n\n return stamp;\n }\n\n /**\n * Stamp brush at position with alpha blending\n */\n static _stampBrush(data, width, height, cx, cy, radius, stamp, camera) {\n let pixelsDrawn = 0;\n let minX = Infinity, minY = Infinity;\n let maxX = -Infinity, maxY = -Infinity;\n\n for (const { dx, dy, r, g, b, a } of stamp) {\n const x = cx + dx;\n const y = cy + dy;\n\n if (!shouldDrawPixel(x, y, { width, height, data }, camera)) continue;\n\n const idx = (y * width + x) * 4;\n\n const alpha = a / 255;\n const invAlpha = 1 - alpha;\n\n data[idx + 0] = Math.floor(r * alpha + data[idx + 0] * invAlpha);\n data[idx + 1] = Math.floor(g * alpha + data[idx + 1] * invAlpha);\n data[idx + 2] = Math.floor(b * alpha + data[idx + 2] * invAlpha);\n data[idx + 3] = 255;\n\n pixelsDrawn++;\n\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n\n return { pixels: pixelsDrawn, minX, minY, maxX, maxY };\n }\n\n /**\n * Extract a rectangular region from buffer\n * Critical for region-based updates\n */\n // static _extractRegion(data, bufferWidth, x, y, width, height) {\n // const region = new Uint8Array(width * height * 4);\n\n // for (let row = 0; row < height; row++) {\n // const srcOffset = ((y + row) * bufferWidth + x) * 4;\n // const dstOffset = row * width * 4;\n // const rowBytes = width * 4;\n\n // // Fast copy: use TypedArray.set instead of loop\n // region.set(\n // data.subarray(srcOffset, srcOffset + rowBytes),\n // dstOffset\n // );\n // }\n\n // return region;\n // }\n}\n\nclass ShapeDrawer {\n /**\n * Fill a rectangle - optimized scanline approach\n * This is the fastest primitive \n * @param {PixelBuffer} canvas \n * @param {number} x \n * @param {number} y \n * @param {number} width \n * @param {number} height \n * @param {number} r \n * @param {number} g \n * @param {number} b \n * @param {number} a \n * @param {Camera}\n * @returns \n */\n static fillRect(canvas, x, y, width, height, r, g, b, a = 255, camera = undefined) {\n // const startTime = performance.now();\n const clamped = clampRectToCanvas(x, y, width, height, canvas.width, canvas.height);\n if (!clamped) return { pixels: 0 };\n // Clamp to canvas bounds - CRITICAL for safety!\n // const x1 = Math.max(0, Math.floor(x));\n // const y1 = Math.max(0, Math.floor(y));\n // const x2 = Math.min(canvas.width, Math.ceil(x + width));\n // const y2 = Math.min(canvas.height, Math.ceil(y + height));\n\n let { x: x1, y: y1, width: actualWidth, height: actualHeight } = clamped;\n\n // const actualWidth = x2 - x1;\n // const actualHeight = y2 - y1;\n\n // if (actualWidth <= 0 || actualHeight <= 0) {\n // return { pixels: 0, time: 0 }; // Nothing to draw\n // }\n\n\n const data = canvas.data;\n const bufferWidth = canvas.width;\n let minX = Infinity, minY = Infinity;\n let maxX = -Infinity, maxY = -Infinity;\n // Write scanlines\n let pixelsDrawn = 0;\n for (let py = y1; py < y1 + actualHeight; py++) {\n for (let px = x1; px < x1 + actualWidth; px++) {\n if (!shouldDrawPixel(px, py, canvas, camera)) continue;\n\n const idx = (py * bufferWidth + px) * 4;\n data[idx + 0] = r;\n data[idx + 1] = g;\n data[idx + 2] = b;\n data[idx + 3] = a;\n pixelsDrawn++;\n\n minX = Math.min(minX, px);\n minY = Math.min(minY, py);\n maxX = Math.max(maxX, px);\n maxY = Math.max(maxY, py);\n }\n }\n\n if (pixelsDrawn === 0) return { pixels: 0 };\n\n const tracker = canvas.dirtyTracker;\n if (tracker) {\n tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n }\n canvas.needsUpload = true;\n }\n\n /**\n * * Stroke a rectangle outline\n * Draws 4 lines - could be optimized further but this is clear\n * @param {PixelBuffer} canvas \n * @param {number} x \n * @param {number} y \n * @param {number} width \n * @param {number} height \n * @param {number} thickness \n * @param {number} r \n * @param {number} g \n * @param {number} b \n * @param {number} a \n * @param {Camera}\n * @returns \n */\n static strokeRect(canvas, x, y, width, height, thickness, r, g, b, a = 255, camera = undefined) {\n // const startTime = performance.now();\n\n x = Math.floor(x);\n y = Math.floor(y);\n width = Math.ceil(width);\n height = Math.ceil(height);\n\n thickness = Math.max(1, Math.floor(thickness));\n\n // Top edge\n LineDrawer$1.drawThickLine(canvas, x, y, x + width, y, thickness, r, g, b, a, camera);\n // Right edge \n LineDrawer$1.drawThickLine(canvas, x + width, y, x + width, y + height, thickness, r, g, b, a, camera);\n // Bottom edge\n LineDrawer$1.drawThickLine(canvas, x + width, y + height, x, y + height, thickness, r, g, b, a, camera);\n // Left edge\n LineDrawer$1.drawThickLine(canvas, x, y + height, x, y, thickness, r, g, b, a, camera);\n\n // const elapsed = performance.now() - startTime;\n // return { time: elapsed };\n }\n\n /**\n * Fill a circle using midpoint algorithm with scanline filling\n * This is THE way to draw filled circles efficiently\n * @param {PixelBuffer} canvas \n * @param {number} cx \n * @param {number} cy \n * @param {number} radius \n * @param {number} r \n * @param {number} g \n * @param {number} b \n * @param {number} a \n * @param {Camera}\n * @returns \n */\n static fillCircle(canvas, cx, cy, radius, r, g, b, a = 255, camera = undefined) {\n // const startTime = performance.now();\n\n // Convert to integers and validate\n const x = Math.floor(cx);\n const y = Math.floor(cy);\n const rad = Math.floor(radius);\n\n if (rad <= 0) return { pixels: 0, time: 0 };\n\n\n let minX = Infinity, minY = Infinity;\n let maxX = -Infinity, maxY = -Infinity;\n\n\n const data = canvas.data;\n const width = canvas.width;\n canvas.height;\n\n // Midpoint circle algorithm - calculate horizontal spans\n let px = rad;\n let py = 0;\n let d = 1 - rad; // Decision parameter\n\n let pixelsDrawn = 0;\n\n // Helper to draw horizontal span - this is the key optimization!\n const drawSpan = (y, x1, x2) => {\n for (let px = x1; px <= x2; px++) {\n if (!shouldDrawPixel(px, y, canvas, camera)) continue;\n\n const idx = (y * width + px) * 4;\n data[idx + 0] = r;\n data[idx + 1] = g;\n data[idx + 2] = b;\n data[idx + 3] = a;\n pixelsDrawn++;\n\n minX = Math.min(minX, px);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, px);\n maxY = Math.max(maxY, y);\n }\n };\n\n // Special case: initial horizontal spans\n drawSpan(y, x - px, x + px); // Middle horizontal\n\n // Main circle algorithm loop\n while (px > py) {\n py++;\n\n // Update decision parameter\n if (d < 0) {\n d += 2 * py + 1;\n } else {\n px--;\n d += 2 * (py - px) + 1;\n }\n\n // Draw 4 horizontal spans (using 8-way symmetry)\n // Top half\n drawSpan(y + py, x - px, x + px); // Octants 1 & 4\n drawSpan(y + px, x - py, x + py); // Octants 2 & 3\n\n // Bottom half \n drawSpan(y - py, x - px, x + px); // Octants 5 & 8\n drawSpan(y - px, x - py, x + py); // Octants 6 & 7\n }\n\n if (pixelsDrawn === 0) return { pixels: 0 };\n\n const tracker = canvas.dirtyTracker;\n if (tracker) {\n tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n }\n canvas.needsUpload = true;\n }\n\n /**\n * Stroke a circle outline using midpoint algorithm\n * Draws the circle perimeter without filling\n * @param {PixelBuffer} canvas \n * @param {number} cx \n * @param {number} cy \n * @param {number} radius \n * @param {number} thickness \n * @param {number} r \n * @param {number} g \n * @param {number} b \n * @param {number} a \n * @param {Camera}\n * @returns \n */\n static strokeCircle(canvas, cx, cy, radius, thickness, r, g, b, a = 255, camera = undefined) {\n // const startTime = performance.now();\n\n const x = Math.floor(cx);\n const y = Math.floor(cy);\n const rad = Math.floor(radius);\n\n if (rad <= 0) return { pixels: 0, time: 0 };\n\n // For thick strokes, draw filled circles with inner cutout\n if (thickness > 1) {\n return ShapeDrawer._strokeCircleThick(canvas, x, y, rad, thickness, r, g, b, a);\n }\n\n // Thin stroke: just the perimeter points\n const data = canvas.data;\n const width = canvas.width;\n canvas.height;\n let minX = Infinity, minY = Infinity;\n let maxX = -Infinity, maxY = -Infinity;\n let px = rad;\n let py = 0;\n let d = 1 - rad;\n\n let pixelsDrawn = 0;\n\n const setPixelSafe = (x, y) => {\n if (!shouldDrawPixel(x, y, canvas, camera)) return;\n\n const idx = (y * width + x) * 4;\n data[idx + 0] = r;\n data[idx + 1] = g;\n data[idx + 2] = b;\n data[idx + 3] = a;\n pixelsDrawn++;\n\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n };\n\n // 8-way symmetry for perimeter - only draw outline\n while (px >= py) {\n setPixelSafe(x + px, y + py);\n setPixelSafe(x + py, y + px);\n setPixelSafe(x - px, y + py);\n setPixelSafe(x - py, y + px);\n setPixelSafe(x - px, y - py);\n setPixelSafe(x - py, y - px);\n setPixelSafe(x + px, y - py);\n setPixelSafe(x + py, y - px);\n\n py++;\n\n if (d < 0) {\n d += 2 * py + 1;\n } else {\n px--;\n d += 2 * (py - px) + 1;\n }\n }\n\n\n if (pixelsDrawn === 0) return { pixels: 0 };\n\n const tracker = canvas.dirtyTracker;\n if (tracker) {\n tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n }\n canvas.needsUpload = true;\n }\n\n /**\n * Thick circle stroke - draw outer circle, cut out inner circle\n */\n static _strokeCircleThick(canvas, cx, cy, radius, thickness, r, g, b, a, camera) {\n const outerRad = radius;\n const innerRad = Math.max(0, radius - thickness);\n\n const data = canvas.data;\n const width = canvas.width;\n const height = canvas.height;\n\n let minX = Infinity, minY = Infinity;\n let maxX = -Infinity, maxY = -Infinity;\n\n let pixelsDrawn = 0;\n\n const outerRadSq = outerRad * outerRad;\n const innerRadSq = innerRad * innerRad;\n\n const checkMinX = Math.max(0, cx - outerRad);\n const checkMinY = Math.max(0, cy - outerRad);\n const checkMaxX = Math.min(width - 1, cx + outerRad);\n const checkMaxY = Math.min(height - 1, cy + outerRad);\n\n for (let py = checkMinY; py <= checkMaxY; py++) {\n for (let px = checkMinX; px <= checkMaxX; px++) {\n const dx = px - cx;\n const dy = py - cy;\n const distSq = dx * dx + dy * dy;\n\n if (distSq <= outerRadSq && distSq >= innerRadSq) {\n if (!shouldDrawPixel(px, py, canvas, camera)) continue;\n\n const idx = (py * width + px) * 4;\n data[idx + 0] = r;\n data[idx + 1] = g;\n data[idx + 2] = b;\n data[idx + 3] = a;\n pixelsDrawn++;\n\n minX = Math.min(minX, px);\n minY = Math.min(minY, py);\n maxX = Math.max(maxX, px);\n maxY = Math.max(maxY, py);\n }\n }\n }\n\n if (pixelsDrawn === 0) return { pixels: 0 };\n\n const tracker = canvas.dirtyTracker;\n if (tracker) {\n tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n }\n canvas.needsUpload = true;\n }\n\n\n /**\n * Extract rectangular region from buffer\n */\n // static _extractRegion(data, bufferWidth, x, y, width, height) {\n // const region = new Uint8Array(width * height * 4);\n\n // for (let row = 0; row < height; row++) {\n // const srcOffset = ((y + row) * bufferWidth + x) * 4;\n // const dstOffset = row * width * 4;\n // const rowBytes = width * 4;\n\n // region.set(\n // data.subarray(srcOffset, srcOffset + rowBytes),\n // dstOffset\n // );\n // }\n\n // return region;\n // }\n}\n\n// polygon.js\n\nclass PolygonDrawer {\n /**\n * * Fill a polygon defined by an array of points\n * Uses scanline algorithm with edge table\n * Handles convex, concave, and self-intersecting polygons\n * @param {PixelBuffer} canvas \n * @param {Array<{x: number, y: number}>} points \n * @param {number} r \n * @param {number} g \n * @param {number} b \n * @param {number} a \n * @param {Camera} camera \n * @returns \n */\n static fillPolygon(canvas, points, r, g, b, a = 255, camera = undefined) {\n if (points.length < 3) return { pixels: 0 };\n\n const edges = PolygonDrawer._buildEdgeTable(points);\n if (edges.length === 0) return { pixels: 0 };\n\n let yMin = Infinity, yMax = -Infinity;\n for (const edge of edges) {\n yMin = Math.min(yMin, edge.yMin);\n yMax = Math.max(yMax, edge.yMax);\n }\n\n yMin = Math.max(0, Math.floor(yMin));\n yMax = Math.min(canvas.height - 1, Math.ceil(yMax));\n\n const data = canvas.data;\n const width = canvas.width;\n canvas.height;\n\n let minX = Infinity, minY = Infinity;\n let maxX = -Infinity, maxY = -Infinity;\n\n let pixelsDrawn = 0;\n\n for (let y = yMin; y <= yMax; y++) {\n const intersections = [];\n\n for (const edge of edges) {\n if (y >= edge.yMin && y < edge.yMax) {\n const x = edge.x + (y - edge.yMin) * edge.dx;\n intersections.push(x);\n }\n }\n\n intersections.sort((a, b) => a - b);\n\n for (let i = 0; i < intersections.length - 1; i += 2) {\n const x1 = Math.floor(intersections[i]);\n const x2 = Math.ceil(intersections[i + 1]);\n\n for (let x = x1; x <= x2; x++) {\n if (!shouldDrawPixel(x, y, canvas, camera)) continue;\n\n const idx = (y * width + x) * 4;\n data[idx + 0] = r;\n data[idx + 1] = g;\n data[idx + 2] = b;\n data[idx + 3] = a;\n pixelsDrawn++;\n\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n }\n }\n\n if (pixelsDrawn === 0) return { pixels: 0 };\n\n const tracker = canvas.dirtyTracker;\n if (tracker) {\n tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n }\n canvas.needsUpload = true;\n }\n\n /**\n * Build edge table from vertices\n * Each edge stores: yMin, yMax, x at yMin, and dx (inverse slope)\n */\n static _buildEdgeTable(points) {\n const edges = [];\n const n = points.length;\n\n for (let i = 0; i < n; i++) {\n const p1 = points[i];\n const p2 = points[(i + 1) % n];\n\n if (Math.abs(p1.y - p2.y) < 0.001) continue;\n\n let x1 = p1.x, y1 = p1.y;\n let x2 = p2.x, y2 = p2.y;\n\n if (y1 > y2) {\n [x1, x2] = [x2, x1];\n [y1, y2] = [y2, y1];\n }\n\n const dx = (x2 - x1) / (y2 - y1);\n\n edges.push({\n yMin: y1,\n yMax: y2,\n x: x1,\n dx: dx\n });\n }\n\n return edges;\n }\n\n /**\n * \n * @param {PixelBuffer} canvas \n * @param {Array<{x: number, y: number}>} points \n * @param {number} thickness \n * @param {number} r \n * @param {number} g \n * @param {number} b \n * @param {number} a \n * @param {Camera} camera \n * @returns \n */\n static strokePolygon(canvas, points, thickness, r, g, b, a = 255, camera = undefined) {\n if (points.length < 2) return;\n\n for (let i = 0; i < points.length; i++) {\n const p1 = points[i];\n const p2 = points[(i + 1) % points.length];\n\n LineDrawer$1.drawThickLine(\n canvas,\n p1.x, p1.y,\n p2.x, p2.y,\n thickness,\n r, g, b, a,\n camera\n );\n }\n }\n\n /**\n * \n * @param {number} cx \n * @param {number} cy \n * @param {number} radius \n * @param {number} sides \n * @returns \n */\n static createRegularPolygon(cx, cy, radius, sides) {\n const points = [];\n const angleStep = (Math.PI * 2) / sides;\n\n for (let i = 0; i < sides; i++) {\n const angle = i * angleStep - Math.PI / 2;\n points.push({\n x: cx + Math.cos(angle) * radius,\n y: cy + Math.sin(angle) * radius\n });\n }\n\n return points;\n }\n\n /**\n * \n * @param {number} cx \n * @param {number} cy \n * @param {number} outerRadius \n * @param {number} innerRadius \n * @param {number} points \n * @returns \n */\n static createStar(cx, cy, outerRadius, innerRadius, points) {\n const verts = [];\n const angleStep = (Math.PI * 2) / (points * 2);\n\n for (let i = 0; i < points * 2; i++) {\n const angle = i * angleStep - Math.PI / 2;\n const radius = i % 2 === 0 ? outerRadius : innerRadius;\n\n verts.push({\n x: cx + Math.cos(angle) * radius,\n y: cy + Math.sin(angle) * radius\n });\n }\n\n return verts;\n }\n\n /**\n * \n * @param {number} x \n * @param {number} y \n * @param {number} width \n * @param {number} height \n * @param {number} radius \n * @returns \n */\n static createRoundedRect(x, y, width, height, radius) {\n const segments = 8;\n const points = [];\n\n const addArc = (cx, cy, r, startAngle, endAngle) => {\n for (let i = 0; i <= segments; i++) {\n const t = i / segments;\n const angle = startAngle + (endAngle - startAngle) * t;\n points.push({\n x: cx + Math.cos(angle) * r,\n y: cy + Math.sin(angle) * r\n });\n }\n };\n\n const r = Math.min(radius, width / 2, height / 2);\n\n addArc(x + width - r, y + r, r, -Math.PI / 2, 0);\n addArc(x + width - r, y + height - r, r, 0, Math.PI / 2);\n addArc(x + r, y + height - r, r, Math.PI / 2, Math.PI);\n addArc(x + r, y + r, r, Math.PI, Math.PI * 1.5);\n\n return points;\n }\n\n // static _extractRegion(data, bufferWidth, x, y, width, height) {\n // const region = new Uint8Array(width * height * 4);\n\n // for (let row = 0; row < height; row++) {\n // const srcOffset = ((y + row) * bufferWidth + x) * 4;\n // const dstOffset = row * width * 4;\n // const rowBytes = width * 4;\n\n // region.set(\n // data.subarray(srcOffset, srcOffset + rowBytes),\n // dstOffset\n // );\n // }\n\n // return region;\n // }\n}\n\n// TODO: add region tracker for all primitives\nclass AADrawer {\n /**\n * Wu's line algorithm - anti-aliased line drawing\n * Handles all slopes, all directions\n * @param {PixelBuffer} canvas\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} r\n * @param {number} g\n * @param {number} b\n * @param {number} a\n * @param {Camera}\n * @returns\n */\n static drawLineAA(canvas, x1, y1, x2, y2, r, g, b, a = 255, camera = undefined) {\n // const startTime = performance.now(); TODO: make a optional scoped profiler\n // Track actual drawn region\n let minX = Infinity, minY = Infinity;\n let maxX = -Infinity, maxY = -Infinity;\n let pixelsDrawn = 0;\n canvas.data;\n canvas.width;\n canvas.height;\n // edge cases\n if (x1 === x2 && y1 === y2) {\n if (AADrawer._setPixelAA(canvas, x1, y1, r, g, b, a, camera)) {\n const px = Math.floor(x1);\n const py = Math.floor(y1);\n pixelsDrawn = 1;\n minX = Math.min(minX, px);\n minY = Math.min(minY, py);\n maxX = Math.max(maxX, px);\n maxY = Math.max(maxY, py);\n }\n } else {\n const steep = Math.abs(y2 - y1) > Math.abs(x2 - x1);\n // For steep lines, swap x and y\n if (steep) {\n [x1, y1] = [y1, x1];\n [x2, y2] = [y2, x2];\n }\n // Ensure left-to-right drawing\n if (x1 > x2) {\n [x1, x2] = [x2, x1];\n [y1, y2] = [y2, y1];\n }\n const dx = x2 - x1;\n const dy = y2 - y1;\n const gradient = dx === 0 ? 1 : dy / dx;\n // First endpoint with anti-aliasing\n let xEnd = Math.round(x1);\n let yEnd = y1 + gradient * (xEnd - x1);\n let xGap = 1 - (x1 + 0.5 - Math.floor(x1 + 0.5));\n let xPx1 = xEnd;\n let yPx1 = Math.floor(yEnd);\n let drew = false;\n if (steep) {\n drew = AADrawer._setPixelAA(\n canvas,\n yPx1,\n xPx1,\n r,\n g,\n b,\n a * (1 - (yEnd - yPx1)) * xGap,\n camera,\n );\n if (drew) {\n pixelsDrawn++;\n minX = Math.min(minX, yPx1);\n minY = Math.min(minY, xPx1);\n maxX = Math.max(maxX, yPx1);\n maxY = Math.max(maxY, xPx1);\n }\n drew = AADrawer._setPixelAA(\n canvas,\n yPx1 + 1,\n xPx1,\n r,\n g,\n b,\n a * (yEnd - yPx1) * xGap,\n camera,\n );\n if (drew) {\n pixelsDrawn++;\n minX = Math.min(minX, yPx1 + 1);\n minY = Math.min(minY, xPx1);\n maxX = Math.max(maxX, yPx1 + 1);\n maxY = Math.max(maxY, xPx1);\n }\n } else {\n drew = AADrawer._setPixelAA(\n canvas,\n xPx1,\n yPx1,\n r,\n g,\n b,\n a * (1 - (yEnd - yPx1)) * xGap,\n camera,\n );\n if (drew) {\n pixelsDrawn++;\n minX = Math.min(minX, xPx1);\n minY = Math.min(minY, yPx1);\n maxX = Math.max(maxX, xPx1);\n maxY = Math.max(maxY, yPx1);\n }\n drew = AADrawer._setPixelAA(\n canvas,\n xPx1,\n yPx1 + 1,\n r,\n g,\n b,\n a * (yEnd - yPx1) * xGap,\n camera,\n );\n if (drew) {\n pixelsDrawn++;\n minX = Math.min(minX, xPx1);\n minY = Math.min(minY, yPx1 + 1);\n maxX = Math.max(maxX, xPx1);\n maxY = Math.max(maxY, yPx1 + 1);\n }\n }\n let interY = yEnd + gradient;\n // Second endpoint with anti-aliasing\n xEnd = Math.round(x2);\n yEnd = y2 + gradient * (xEnd - x2);\n xGap = x2 + 0.5 - Math.floor(x2 + 0.5);\n let xPx2 = xEnd;\n let yPx2 = Math.floor(yEnd);\n if (steep) {\n drew = AADrawer._setPixelAA(\n canvas,\n yPx2,\n xPx2,\n r,\n g,\n b,\n a * (1 - (yEnd - yPx2)) * xGap,\n camera,\n );\n if (drew) {\n pixelsDrawn++;\n minX = Math.min(minX, yPx2);\n minY = Math.min(minY, xPx2);\n maxX = Math.max(maxX, yPx2);\n maxY = Math.max(maxY, xPx2);\n }\n drew = AADrawer._setPixelAA(\n canvas,\n yPx2 + 1,\n xPx2,\n r,\n g,\n b,\n a * (yEnd - yPx2) * xGap,\n camera,\n );\n if (drew) {\n pixelsDrawn++;\n minX = Math.min(minX, yPx2 + 1);\n minY = Math.min(minY, xPx2);\n maxX = Math.max(maxX, yPx2 + 1);\n maxY = Math.max(maxY, xPx2);\n }\n } else {\n drew = AADrawer._setPixelAA(\n canvas,\n xPx2,\n yPx2,\n r,\n g,\n b,\n a * (1 - (yEnd - yPx2)) * xGap,\n camera,\n );\n if (drew) {\n pixelsDrawn++;\n minX = Math.min(minX, xPx2);\n minY = Math.min(minY, yPx2);\n maxX = Math.max(maxX, xPx2);\n maxY = Math.max(maxY, yPx2);\n }\n drew = AADrawer._setPixelAA(\n canvas,\n xPx2,\n yPx2 + 1,\n r,\n g,\n b,\n a * (yEnd - yPx2) * xGap,\n camera,\n );\n if (drew) {\n pixelsDrawn++;\n minX = Math.min(minX, xPx2);\n minY = Math.min(minY, yPx2 + 1);\n maxX = Math.max(maxX, xPx2);\n maxY = Math.max(maxY, yPx2 + 1);\n }\n }\n // draw between endpoints\n if (steep) {\n for (let x = xPx1 + 1; x < xPx2; x++) {\n const iPart = Math.floor(interY);\n const fPart = interY - iPart;\n drew = AADrawer._setPixelAA(canvas, iPart, x, r, g, b, a * (1 - fPart), camera);\n if (drew) {\n pixelsDrawn++;\n minX = Math.min(minX, iPart);\n minY = Math.min(minY, x);\n maxX = Math.max(maxX, iPart);\n maxY = Math.max(maxY, x);\n }\n drew = AADrawer._setPixelAA(canvas, iPart + 1, x, r, g, b, a * fPart, camera);\n if (drew) {\n pixelsDrawn++;\n minX = Math.min(minX, iPart + 1);\n minY = Math.min(minY, x);\n maxX = Math.max(maxX, iPart + 1);\n maxY = Math.max(maxY, x);\n }\n interY += gradient;\n }\n } else {\n for (let x = xPx1 + 1; x < xPx2; x++) {\n const iPart = Math.floor(interY);\n const fPart = interY - iPart;\n drew = AADrawer._setPixelAA(canvas, x, iPart, r, g, b, a * (1 - fPart), camera);\n if (drew) {\n pixelsDrawn++;\n minX = Math.min(minX, x);\n minY = Math.min(minY, iPart);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, iPart);\n }\n drew = AADrawer._setPixelAA(canvas, x, iPart + 1, r, g, b, a * fPart, camera);\n if (drew) {\n pixelsDrawn++;\n minX = Math.min(minX, x);\n minY = Math.min(minY, iPart + 1);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, iPart + 1);\n }\n interY += gradient;\n }\n }\n }\n if (pixelsDrawn === 0) {\n return;\n }\n const tracker = canvas.dirtyTracker;\n if (tracker) {\n tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n }\n canvas.needsUpload = true;\n }\n /**\n * Set pixel with alpha blending\n * This is CRITICAL - without proper blending, AA looks terrible\n */\n static _setPixelAA(canvas, x, y, r, g, b, a, camera) {\n x = Math.floor(x);\n y = Math.floor(y);\n if (!shouldDrawPixel(x, y, canvas, camera)) return false;\n const alpha = Math.max(0, Math.min(1, a / 255));\n if (alpha <= 0) return false;\n const idx = (y * canvas.width + x) * 4;\n const data = canvas.data;\n // alpha blending formula: dst = src*alpha + dst*(1-alpha)\n const invAlpha = 1 - alpha;\n data[idx + 0] = Math.floor(r * alpha + data[idx + 0] * invAlpha);\n data[idx + 1] = Math.floor(g * alpha + data[idx + 1] * invAlpha);\n data[idx + 2] = Math.floor(b * alpha + data[idx + 2] * invAlpha);\n // keep existing alpha (or set to 255 for opaque canvas)\n data[idx + 3] = 255;\n return true;\n }\n /**\n * Anti-aliased circle using analytical coverage\n * For each pixel on the circle's edge, calculate exact coverage\n * @param {PixelBuffer} canvas\n * @param {number} cx\n * @param {number} cy\n * @param {number} radius\n * @param {number} r\n * @param {number} g\n * @param {number} b\n * @param {number} a\n * @param {Camera}\n * @returns\n */\n static drawCircleAA(canvas, cx, cy, radius, r, g, b, a = 255, camera = undefined) {\n // const startTime = performance.now();\n const x = Math.floor(cx);\n const y = Math.floor(cy);\n const rad = radius;\n if (rad <= 0) return;\n const inner2 = (rad - 0.5) * (rad - 0.5);\n const outer2 = (rad + 0.5) * (rad + 0.5);\n const minXLoop = Math.max(0, x - Math.ceil(rad) - 1);\n const minYLoop = Math.max(0, y - Math.ceil(rad) - 1);\n const maxXLoop = Math.min(canvas.width - 1, x + Math.ceil(rad) + 1);\n const maxYLoop = Math.min(canvas.height - 1, y + Math.ceil(rad) + 1);\n let minX = Infinity, minY = Infinity;\n let maxX = -Infinity, maxY = -Infinity;\n let pixelsDrawn = 0;\n for (let py = minYLoop; py <= maxYLoop; py++) {\n const dy = py - cy;\n for (let px = minXLoop; px <= maxXLoop; px++) {\n const dx = px - cx;\n const dist2 = dx * dx + dy * dy;\n if (dist2 < inner2 || dist2 > outer2) {\n // outside the 1px-wide annulus: either well inside or well outside\n continue;\n }\n // inside the annulus — compute exact dist once\n const dist = Math.sqrt(dist2);\n const delta = Math.abs(dist - rad); // 0..0.5\n const coverage = 1.0 - delta / 0.5;\n if (AADrawer._setPixelAA(canvas, px, py, r, g, b, a * coverage, camera)) {\n pixelsDrawn++;\n minX = Math.min(minX, px);\n minY = Math.min(minY, py);\n maxX = Math.max(maxX, px);\n maxY = Math.max(maxY, py);\n }\n }\n }\n if (pixelsDrawn === 0) {\n return;\n }\n const tracker = canvas.dirtyTracker;\n if (tracker) {\n tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n }\n canvas.needsUpload = true;\n }\n /**\n * * Anti-aliased filled circle\n * Uses distance field for smooth edges\n * @param {PixelBuffer} canvas\n * @param {number} cx\n * @param {number} cy\n * @param {number} radius\n * @param {number} r\n * @param {number} g\n * @param {number} b\n * @param {number} a\n * @param {Camera}\n * @returns\n */\n static fillCircleAA(canvas, cx, cy, radius, r, g, b, a = 255, camera = undefined) {\n // const startTime = performance.now();\n const x = Math.floor(cx);\n const y = Math.floor(cy);\n const rad = radius;\n if (rad <= 0) return { pixels: 0, time: 0 };\n const minXLoop = Math.max(0, x - Math.ceil(rad) - 1);\n const minYLoop = Math.max(0, y - Math.ceil(rad) - 1);\n const maxXLoop = Math.min(canvas.width - 1, x + Math.ceil(rad) + 1);\n const maxYLoop = Math.min(canvas.height - 1, y + Math.ceil(rad) + 1);\n let minX = Infinity, minY = Infinity;\n let maxX = -Infinity, maxY = -Infinity;\n let pixelsDrawn = 0;\n for (let py = minYLoop; py <= maxYLoop; py++) {\n for (let px = minXLoop; px <= maxXLoop; px++) {\n const dx = px - cx;\n const dy = py - cy;\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist > rad + 0.5) continue;\n const coverage = (dist <= rad - 0.5) ? 1.0 : (rad + 0.5 - dist);\n if (AADrawer._setPixelAA(canvas, px, py, r, g, b, a * coverage, camera)) {\n pixelsDrawn++;\n minX = Math.min(minX, px);\n minY = Math.min(minY, py);\n maxX = Math.max(maxX, px);\n maxY = Math.max(maxY, py);\n }\n }\n }\n if (pixelsDrawn === 0) {\n return;\n }\n const tracker = canvas.dirtyTracker;\n if (tracker) {\n tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n }\n canvas.needsUpload = true;\n }\n}\n\n// blending.js\r\n\r\n/** @enum {number} */\r\nconst BlendMode = {\r\n NORMAL: 0,\r\n MULTIPLY: 1,\r\n SCREEN: 2,\r\n OVERLAY: 3,\r\n ADD: 4,\r\n SUBTRACT: 5,\r\n DARKEN: 6,\r\n LIGHTEN: 7,\r\n DIFFERENCE: 8,\r\n COLOR_DODGE: 9,\r\n COLOR_BURN: 10\r\n};\r\n\r\n/**\r\n * High-performance compositor with zero allocations in hot paths\r\n * All functions are inlined and branch-reduced for maximum performance\r\n */\r\nclass Compositor {\r\n static tempCanvas = undefined;\r\n \r\n /**\r\n *\r\n * No object allocations, minimal branching, precomputed values\r\n * @param {PixelBuffer} canvas - Target pixel buffer\r\n * @param {Function} drawFunc - Drawing function that operates on temp canvas\r\n * @param {number} blendMode - Blend mode from BlendMode enum\r\n */\r\n static drawWithBlend(canvas, drawFunc, blendMode = BlendMode.NORMAL) {\r\n const width = canvas.width;\r\n const height = canvas.height;\r\n const data = canvas.data;\r\n \r\n \r\n if (!this.tempCanvas) {\r\n this.tempCanvas = new PixelBuffer(canvas.renderer, width, height);\r\n }\r\n \r\n this.tempCanvas.clear(0, 0, 0, 0);\r\n drawFunc(this.tempCanvas);\r\n \r\n const tempData = this.tempCanvas.data;\r\n const length = data.length;\r\n \r\n\r\n const blendFunc = this._getBlendFunction(blendMode);\r\n \r\n // Unrolled loop - process 4 pixels at a time for better cache performance\r\n for (let i = 0; i < length; i += 16) {\r\n // Pixel 0\r\n if (tempData[i + 3] !== 0) {\r\n blendFunc(\r\n tempData[i], tempData[i + 1], tempData[i + 2], tempData[i + 3],\r\n data[i], data[i + 1], data[i + 2], data[i + 3],\r\n data, i\r\n );\r\n }\r\n \r\n // Pixel 1 \r\n if (tempData[i + 7] !== 0) {\r\n blendFunc(\r\n tempData[i + 4], tempData[i + 5], tempData[i + 6], tempData[i + 7],\r\n data[i + 4], data[i + 5], data[i + 6], data[i + 7],\r\n data, i + 4\r\n );\r\n }\r\n \r\n // Pixel 2\r\n if (tempData[i + 11] !== 0) {\r\n blendFunc(\r\n tempData[i + 8], tempData[i + 9], tempData[i + 10], tempData[i + 11],\r\n data[i + 8], data[i + 9], data[i + 10], data[i + 11],\r\n data, i + 8\r\n );\r\n }\r\n \r\n // Pixel 3\r\n if (tempData[i + 15] !== 0) {\r\n blendFunc(\r\n tempData[i + 12], tempData[i + 13], tempData[i + 14], tempData[i + 15],\r\n data[i + 12], data[i + 13], data[i + 14], data[i + 15],\r\n data, i + 12\r\n );\r\n }\r\n }\r\n \r\n canvas.renderer.updateBufferData(canvas.bufferId, data);\r\n canvas.needsUpload = true;\r\n }\r\n \r\n /**\r\n * Get pre-bound blend function to eliminate switch statement in hot loop\r\n * @param {number} blendMode \r\n * @returns {Function}\r\n */\r\n static _getBlendFunction(blendMode) {\r\n switch (blendMode) {\r\n case BlendMode.MULTIPLY: return this._blendMultiply;\r\n case BlendMode.SCREEN: return this._blendScreen;\r\n case BlendMode.OVERLAY: return this._blendOverlay;\r\n case BlendMode.ADD: return this._blendAdd;\r\n case BlendMode.SUBTRACT: return this._blendSubtract;\r\n case BlendMode.DARKEN: return this._blendDarken;\r\n case BlendMode.LIGHTEN: return this._blendLighten;\r\n case BlendMode.DIFFERENCE: return this._blendDifference;\r\n case BlendMode.COLOR_DODGE: return this._blendColorDodge;\r\n case BlendMode.COLOR_BURN: return this._blendColorBurn;\r\n default: return this._blendNormal;\r\n }\r\n }\r\n \r\n /**\r\n * Normal blend - direct source over destination\r\n * Inlined Porter-Duff source over composition\r\n */\r\n static _blendNormal(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n if (srcA === 255) {\r\n // Fast path: fully opaque source\r\n data[idx] = srcR;\r\n data[idx + 1] = srcG;\r\n data[idx + 2] = srcB;\r\n data[idx + 3] = 255;\r\n return;\r\n }\r\n \r\n if (srcA === 0) return;\r\n \r\n // Porter-Duff source over with precomputed values\r\n const sa = srcA * 0.00392156862745098; // srcA / 255\r\n const da = dstA * 0.00392156862745098; // dstA / 255\r\n const outA = sa + da * (1 - sa);\r\n \r\n if (outA < 0.001) { // ~0.25 alpha value threshold\r\n data[idx] = 0;\r\n data[idx + 1] = 0;\r\n data[idx + 2] = 0;\r\n data[idx + 3] = 0;\r\n return;\r\n }\r\n \r\n const invOutA = 1 / outA;\r\n data[idx] = (srcR * sa + dstR * da * (1 - sa)) * invOutA;\r\n data[idx + 1] = (srcG * sa + dstG * da * (1 - sa)) * invOutA;\r\n data[idx + 2] = (srcB * sa + dstB * da * (1 - sa)) * invOutA;\r\n data[idx + 3] = outA * 255;\r\n }\r\n \r\n /**\r\n * Multiply blend - colors are multiplied\r\n */\r\n static _blendMultiply(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n if (srcA === 0) return;\r\n \r\n const sa = srcA * 0.00392156862745098;\r\n const da = dstA * 0.00392156862745098;\r\n const outA = sa + da * (1 - sa);\r\n \r\n if (outA < 0.001) {\r\n data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n return;\r\n }\r\n \r\n const invOutA = 1 / outA;\r\n const r = (srcR * dstR) * 0.00392156862745098; // / 255\r\n const g = (srcG * dstG) * 0.00392156862745098;\r\n const b = (srcB * dstB) * 0.00392156862745098;\r\n \r\n data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n data[idx + 3] = outA * 255;\r\n }\r\n \r\n /**\r\n * Screen blend - opposite of multiply\r\n */\r\n static _blendScreen(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n if (srcA === 0) return;\r\n \r\n const sa = srcA * 0.00392156862745098;\r\n const da = dstA * 0.00392156862745098;\r\n const outA = sa + da * (1 - sa);\r\n \r\n if (outA < 0.001) {\r\n data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n return;\r\n }\r\n \r\n const invOutA = 1 / outA;\r\n const r = 255 - ((255 - srcR) * (255 - dstR)) * 0.00392156862745098;\r\n const g = 255 - ((255 - srcG) * (255 - dstG)) * 0.00392156862745098;\r\n const b = 255 - ((255 - srcB) * (255 - dstB)) * 0.00392156862745098;\r\n \r\n data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n data[idx + 3] = outA * 255;\r\n }\r\n \r\n /**\r\n * Overlay blend - multiply or screen based on destination\r\n */\r\n static _blendOverlay(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n if (srcA === 0) return;\r\n \r\n const sa = srcA * 0.00392156862745098;\r\n const da = dstA * 0.00392156862745098;\r\n const outA = sa + da * (1 - sa);\r\n \r\n if (outA < 0.001) {\r\n data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n return;\r\n }\r\n \r\n const invOutA = 1 / outA;\r\n \r\n // inlined overlay per channel\r\n const r = dstR < 128 ? \r\n (2 * srcR * dstR) * 0.00392156862745098 : \r\n 255 - (2 * (255 - srcR) * (255 - dstR)) * 0.00392156862745098;\r\n \r\n const g = dstG < 128 ? \r\n (2 * srcG * dstG) * 0.00392156862745098 : \r\n 255 - (2 * (255 - srcG) * (255 - dstG)) * 0.00392156862745098;\r\n \r\n const b = dstB < 128 ? \r\n (2 * srcB * dstB) * 0.00392156862745098 : \r\n 255 - (2 * (255 - srcB) * (255 - dstB)) * 0.00392156862745098;\r\n \r\n data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n data[idx + 3] = outA * 255;\r\n }\r\n \r\n /**\r\n * Add blend - add source and destination\r\n */\r\n static _blendAdd(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n if (srcA === 0) return;\r\n \r\n const sa = srcA * 0.00392156862745098;\r\n const da = dstA * 0.00392156862745098;\r\n const outA = sa + da * (1 - sa);\r\n \r\n if (outA < 0.001) {\r\n data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n return;\r\n }\r\n \r\n const invOutA = 1 / outA;\r\n let r = srcR + dstR; if (r > 255) r = 255;\r\n let g = srcG + dstG; if (g > 255) g = 255;\r\n let b = srcB + dstB; if (b > 255) b = 255;\r\n \r\n data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n data[idx + 3] = outA * 255;\r\n }\r\n \r\n /**\r\n * Subtract blend - subtract source from destination\r\n */\r\n static _blendSubtract(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n if (srcA === 0) return;\r\n \r\n const sa = srcA * 0.00392156862745098;\r\n const da = dstA * 0.00392156862745098;\r\n const outA = sa + da * (1 - sa);\r\n \r\n if (outA < 0.001) {\r\n data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n return;\r\n }\r\n \r\n const invOutA = 1 / outA;\r\n let r = dstR - srcR; if (r < 0) r = 0;\r\n let g = dstG - srcG; if (g < 0) g = 0;\r\n let b = dstB - srcB; if (b < 0) b = 0;\r\n \r\n data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n data[idx + 3] = outA * 255;\r\n }\r\n \r\n /**\r\n * Darken blend - take minimum of source and destination\r\n */\r\n static _blendDarken(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n if (srcA === 0) return;\r\n \r\n const sa = srcA * 0.00392156862745098;\r\n const da = dstA * 0.00392156862745098;\r\n const outA = sa + da * (1 - sa);\r\n \r\n if (outA < 0.001) {\r\n data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n return;\r\n }\r\n \r\n const invOutA = 1 / outA;\r\n const r = srcR < dstR ? srcR : dstR;\r\n const g = srcG < dstG ? srcG : dstG;\r\n const b = srcB < dstB ? srcB : dstB;\r\n \r\n data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n data[idx + 3] = outA * 255;\r\n }\r\n \r\n /**\r\n * Lighten blend - take maximum of source and destination\r\n */\r\n static _blendLighten(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n if (srcA === 0) return;\r\n \r\n const sa = srcA * 0.00392156862745098;\r\n const da = dstA * 0.00392156862745098;\r\n const outA = sa + da * (1 - sa);\r\n \r\n if (outA < 0.001) {\r\n data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n return;\r\n }\r\n \r\n const invOutA = 1 / outA;\r\n const r = srcR > dstR ? srcR : dstR;\r\n const g = srcG > dstG ? srcG : dstG;\r\n const b = srcB > dstB ? srcB : dstB;\r\n \r\n data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n data[idx + 3] = outA * 255;\r\n }\r\n \r\n /**\r\n * Difference blend - absolute difference between source and destination\r\n */\r\n static _blendDifference(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n if (srcA === 0) return;\r\n \r\n const sa = srcA * 0.00392156862745098;\r\n const da = dstA * 0.00392156862745098;\r\n const outA = sa + da * (1 - sa);\r\n \r\n if (outA < 0.001) {\r\n data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n return;\r\n }\r\n \r\n const invOutA = 1 / outA;\r\n const r = Math.abs(srcR - dstR);\r\n const g = Math.abs(srcG - dstG);\r\n const b = Math.abs(srcB - dstB);\r\n \r\n data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n data[idx + 3] = outA * 255;\r\n }\r\n \r\n /**\r\n * Color dodge blend - brighten destination based on source\r\n */\r\n static _blendColorDodge(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n if (srcA === 0) return;\r\n \r\n const sa = srcA * 0.00392156862745098;\r\n const da = dstA * 0.00392156862745098;\r\n const outA = sa + da * (1 - sa);\r\n \r\n if (outA < 0.001) {\r\n data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n return;\r\n }\r\n \r\n const invOutA = 1 / outA;\r\n \r\n //color dodge per channel\r\n const r = srcR === 255 ? 255 : Math.min(255, (dstR * 255) / (255 - srcR));\r\n const g = srcG === 255 ? 255 : Math.min(255, (dstG * 255) / (255 - srcG));\r\n const b = srcB === 255 ? 255 : Math.min(255, (dstB * 255) / (255 - srcB));\r\n \r\n data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n data[idx + 3] = outA * 255;\r\n }\r\n \r\n /**\r\n * Color burn blend - darken destination based on source\r\n */\r\n static _blendColorBurn(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n if (srcA === 0) return;\r\n \r\n const sa = srcA * 0.00392156862745098;\r\n const da = dstA * 0.00392156862745098;\r\n const outA = sa + da * (1 - sa);\r\n \r\n if (outA < 0.001) {\r\n data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n return;\r\n }\r\n \r\n const invOutA = 1 / outA;\r\n \r\n // inlined color burn per channel\r\n const r = srcR === 0 ? 0 : Math.max(0, 255 - ((255 - dstR) * 255) / srcR);\r\n const g = srcG === 0 ? 0 : Math.max(0, 255 - ((255 - dstG) * 255) / srcG);\r\n const b = srcB === 0 ? 0 : Math.max(0, 255 - ((255 - dstB) * 255) / srcB);\r\n \r\n data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n data[idx + 3] = outA * 255;\r\n }\r\n \r\n /**\r\n * single pixel blend\r\n * @param {PixelBuffer} canvas\r\n * @param {number} x\r\n * @param {number} y\r\n * @param {number} srcR\r\n * @param {number} srcG\r\n * @param {number} srcB\r\n * @param {number} srcA\r\n * @param {number} blendMode\r\n */\r\n static setPixelBlended(canvas, x, y, srcR, srcG, srcB, srcA, blendMode = BlendMode.NORMAL) {\r\n if (x < 0 || x >= canvas.width || y < 0 || y >= canvas.height || srcA === 0) return;\r\n \r\n const idx = (y * canvas.width + x) * 4;\r\n const data = canvas.data;\r\n const dstR = data[idx];\r\n const dstG = data[idx + 1];\r\n const dstB = data[idx + 2];\r\n const dstA = data[idx + 3];\r\n \r\n // inlined normal blend (most common case)\r\n if (blendMode === BlendMode.NORMAL) {\r\n if (srcA === 255) {\r\n data[idx] = srcR;\r\n data[idx + 1] = srcG;\r\n data[idx + 2] = srcB;\r\n data[idx + 3] = 255;\r\n return;\r\n }\r\n \r\n const sa = srcA * 0.00392156862745098;\r\n const da = dstA * 0.00392156862745098;\r\n const outA = sa + da * (1 - sa);\r\n \r\n if (outA < 0.001) {\r\n data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n return;\r\n }\r\n \r\n const invOutA = 1 / outA;\r\n data[idx] = (srcR * sa + dstR * da * (1 - sa)) * invOutA;\r\n data[idx + 1] = (srcG * sa + dstG * da * (1 - sa)) * invOutA;\r\n data[idx + 2] = (srcB * sa + dstB * da * (1 - sa)) * invOutA;\r\n data[idx + 3] = outA * 255;\r\n return;\r\n }\r\n \r\n // for other blend modes, use the pre-bound functions\r\n const blendFunc = this._getBlendFunction(blendMode);\r\n blendFunc(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx);\r\n }\r\n \r\n /**\r\n * Create test gradient\r\n */\r\n static createTestGradient(canvas) {\r\n const width = canvas.width;\r\n const height = canvas.height;\r\n const data = canvas.data;\r\n \r\n for (let y = 0; y < height; y++) {\r\n const g = (y / height) * 255;\r\n for (let x = 0; x < width; x++) {\r\n const idx = (y * width + x) * 4;\r\n data[idx] = (x / width) * 255; \r\n data[idx + 1] = g; \r\n data[idx + 2] = 128; \r\n data[idx + 3] = 255; \r\n }\r\n }\r\n canvas.upload();\r\n }\r\n}\n\nclass ClipRect {\r\n constructor(x, y, width, height) {\r\n this.x = x;\r\n this.y = y;\r\n this.width = width;\r\n this.height = height;\r\n }\r\n\r\n /**\r\n * Check if rectangle intersects this clip rect\r\n * @param {number} x \r\n * @param {number} y \r\n * @param {number} width \r\n * @param {number} height \r\n * @returns {boolean}\r\n */\r\n intersects(x, y, width, height) {\r\n return !(x + width < this.x ||\r\n x > this.x + this.width ||\r\n y + height < this.y ||\r\n y > this.y + this.height);\r\n }\r\n\r\n /**\r\n * \r\n * @param {number} x \r\n * @param {number} y \r\n * @returns {boolean}\r\n */\r\n contains(x, y) {\r\n return x >= this.x && x < this.x + this.width &&\r\n y >= this.y && y < this.y + this.height;\r\n }\r\n\r\n /**\r\n * Get intersection with another rect\r\n * @param {ClipRect} other \r\n * @returns \r\n */\r\n intersect(other) {\r\n const x1 = Math.max(this.x, other.x);\r\n const y1 = Math.max(this.y, other.y);\r\n const x2 = Math.min(this.x + this.width, other.x + other.width);\r\n const y2 = Math.min(this.y + this.height, other.y + other.height);\r\n\r\n if (x2 <= x1 || y2 <= y1) {\r\n return null; // No intersection\r\n }\r\n\r\n return new ClipRect(x1, y1, x2 - x1, y2 - y1);\r\n }\r\n\r\n // Cohen-Sutherland outcode for line clipping\r\n computeOutcode(x, y) {\r\n let code = 0;\r\n\r\n if (x < this.x) code |= 1; // Left\r\n if (x >= this.x + this.width) code |= 2; // Right\r\n if (y < this.y) code |= 4; // Top\r\n if (y >= this.y + this.height) code |= 8; // Bottom\r\n\r\n return code;\r\n }\r\n}\r\n\r\nclass Transform {\r\n constructor(translateX = 0, translateY = 0, scaleX = 1, scaleY = 1, rotation = 0) {\r\n this.translateX = translateX;\r\n this.translateY = translateY;\r\n this.scaleX = scaleX;\r\n this.scaleY = scaleY;\r\n this.rotation = rotation; // radians\r\n }\r\n\r\n /**\r\n * Transform a point\r\n * @param {number} x \r\n * @param {number} y \r\n * @returns \r\n */\r\n apply(x, y) {\r\n // handle rotation\r\n if (this.rotation !== 0) {\r\n const cos = Math.cos(this.rotation);\r\n const sin = Math.sin(this.rotation);\r\n const tx = x * cos - y * sin;\r\n const ty = x * sin + y * cos;\r\n x = tx;\r\n y = ty;\r\n }\r\n\r\n // apply scale and translation\r\n return {\r\n x: x * this.scaleX + this.translateX,\r\n y: y * this.scaleY + this.translateY\r\n };\r\n }\r\n\r\n /**\r\n * transform a rectangle (returns bounding box)\r\n * @param {number} x \r\n * @param {number} y \r\n * @param {number} width \r\n * @param {number} height \r\n * @returns \r\n */\r\n applyRect(x, y, width, height) {\r\n const points = [\r\n this.apply(x, y),\r\n this.apply(x + width, y),\r\n this.apply(x, y + height),\r\n this.apply(x + width, y + height)\r\n ];\r\n\r\n let minX = Infinity, minY = Infinity;\r\n let maxX = -Infinity, maxY = -Infinity;\r\n\r\n for (const pt of points) {\r\n minX = Math.min(minX, pt.x);\r\n minY = Math.min(minY, pt.y);\r\n maxX = Math.max(maxX, pt.x);\r\n maxY = Math.max(maxY, pt.y);\r\n }\r\n\r\n return {\r\n x: minX,\r\n y: minY,\r\n width: maxX - minX,\r\n height: maxY - minY\r\n };\r\n }\r\n\r\n // Combine with another transform\r\n compose(other) {\r\n // For simplicity, we'll handle translation and scale composition\r\n // Full matrix composition would be more complex\r\n return new Transform(\r\n this.translateX + other.translateX * this.scaleX,\r\n this.translateY + other.translateY * this.scaleY,\r\n this.scaleX * other.scaleX,\r\n this.scaleY * other.scaleY,\r\n this.rotation + other.rotation\r\n );\r\n }\r\n\r\n /**\r\n * Create identity transform\r\n * @returns \r\n */\r\n static identity() {\r\n return new Transform(0, 0, 1, 1, 0);\r\n }\r\n}\r\n\r\nclass GraphicsState {\r\n /**\r\n * a stack to keep draw state\r\n */\r\n constructor() {\r\n this.clipStack = [];\r\n this.transformStack = [Transform.identity()];\r\n this.globalAlpha = 1.0;\r\n this.fillStyle = { r: 0, g: 0, b: 0, a: 255 };\r\n this.strokeStyle = { r: 0, g: 0, b: 0, a: 255 };\r\n this.lineWidth = 1;\r\n }\r\n\r\n get currentClip() {\r\n return this.clipStack.length > 0 ?\r\n this.clipStack[this.clipStack.length - 1] : null;\r\n }\r\n\r\n get currentTransform() {\r\n return this.transformStack[this.transformStack.length - 1];\r\n }\r\n\r\n /**\r\n * \r\n * @param {ClipRect} clipRect \r\n */\r\n pushClip(clipRect) {\r\n this.clipStack.push(clipRect);\r\n }\r\n\r\n /**\r\n * \r\n * @returns {ClipRect}\r\n */\r\n popClip() {\r\n return this.clipStack.pop();\r\n }\r\n\r\n /**\r\n * \r\n * @param {Transform} transform \r\n */\r\n pushTransform(transform) {\r\n const current = this.currentTransform;\r\n this.transformStack.push(current.compose(transform));\r\n }\r\n\r\n /**\r\n * \r\n * @returns {Transform}\r\n */\r\n popTransform() {\r\n if (this.transformStack.length > 1) {\r\n return this.transformStack.pop();\r\n }\r\n return this.currentTransform;\r\n }\r\n\r\n/**\r\n * save state\r\n * @returns \r\n */\r\n save() {\r\n return {\r\n clipStack: [...this.clipStack],\r\n transformStack: [...this.transformStack],\r\n globalAlpha: this.globalAlpha,\r\n fillStyle: { ...this.fillStyle },\r\n strokeStyle: { ...this.strokeStyle },\r\n lineWidth: this.lineWidth\r\n };\r\n }\r\n\r\n /**\r\n * restore saved state\r\n * @param {GraphicsState} state \r\n */\r\n restore(state) {\r\n this.clipStack = state.clipStack;\r\n this.transformStack = state.transformStack;\r\n this.globalAlpha = state.globalAlpha;\r\n this.fillStyle = state.fillStyle;\r\n this.strokeStyle = state.strokeStyle;\r\n this.lineWidth = state.lineWidth;\r\n }\r\n}\r\n\r\nclass ClippingContext {\r\n constructor(canvas) {\r\n this.canvas = canvas;\r\n this.state = new GraphicsState();\r\n\r\n // Initial clip is entire canvas\r\n this.state.pushClip(new ClipRect(0, 0, canvas.width, canvas.height));\r\n }\r\n\r\n // Save current state\r\n save() {\r\n return this.state.save();\r\n }\r\n\r\n // Restore state\r\n restore(state) {\r\n this.state.restore(state);\r\n }\r\n\r\n // Push clip rectangle (intersects with current)\r\n pushClipRect(x, y, width, height) {\r\n const transform = this.state.currentTransform;\r\n const transformed = transform.applyRect(x, y, width, height);\r\n\r\n const newClip = new ClipRect(\r\n transformed.x, transformed.y,\r\n transformed.width, transformed.height\r\n );\r\n\r\n // Intersect with current clip\r\n const current = this.state.currentClip;\r\n if (current) {\r\n const intersected = current.intersect(newClip); // creates a new bounding box\r\n if (intersected) {\r\n this.state.pushClip(intersected);\r\n } else {\r\n // No intersection - push empty clip\r\n this.state.pushClip(new ClipRect(0, 0, 0, 0));\r\n }\r\n } else {\r\n this.state.pushClip(newClip);\r\n }\r\n }\r\n\r\n // Pop clip rectangle\r\n popClipRect() {\r\n this.state.popClip();\r\n }\r\n\r\n // Push transform\r\n pushTransform(translateX = 0, translateY = 0, scaleX = 1, scaleY = 1, rotation = 0) {\r\n const transform = new Transform(translateX, translateY, scaleX, scaleY, rotation);\r\n this.state.pushTransform(transform);\r\n }\r\n\r\n // Pop transform\r\n popTransform() {\r\n this.state.popTransform();\r\n }\r\n\r\n // Check if rectangle is visible (intersects clip)\r\n isRectVisible(x, y, width, height) {\r\n const transform = this.state.currentTransform;\r\n const transformed = transform.applyRect(x, y, width, height);\r\n const clip = this.state.currentClip;\r\n\r\n if (!clip) return true; // No clipping active\r\n\r\n return clip.intersects(\r\n transformed.x, transformed.y,\r\n transformed.width, transformed.height\r\n );\r\n }\r\n\r\n // Transform point from local to screen coordinates\r\n transformPoint(x, y) {\r\n return this.state.currentTransform.apply(x, y);\r\n }\r\n\r\n // Clip line using Cohen-Sutherland algorithm\r\n clipLine(x1, y1, x2, y2) {\r\n const clip = this.state.currentClip;\r\n if (!clip) {\r\n return { x1, y1, x2, y2 }; // No clipping\r\n }\r\n\r\n // Transform endpoints\r\n const transform = this.state.currentTransform;\r\n let p1 = transform.apply(x1, y1);\r\n let p2 = transform.apply(x2, y2);\r\n\r\n let code1 = clip.computeOutcode(p1.x, p1.y);\r\n let code2 = clip.computeOutcode(p2.x, p2.y);\r\n\r\n let accept = false;\r\n\r\n while (true) {\r\n if ((code1 | code2) === 0) {\r\n // Both points inside clip region\r\n accept = true;\r\n break;\r\n } else if ((code1 & code2) !== 0) {\r\n // Both points on same outside edge\r\n break;\r\n } else {\r\n // Line crosses boundary - clip it\r\n let x, y;\r\n const codeOut = code1 !== 0 ? code1 : code2;\r\n\r\n // Find intersection point\r\n if (codeOut & 8) { // Bottom\r\n x = p1.x + (p2.x - p1.x) * (clip.y + clip.height - p1.y) / (p2.y - p1.y);\r\n y = clip.y + clip.height;\r\n } else if (codeOut & 4) { // Top\r\n x = p1.x + (p2.x - p1.x) * (clip.y - p1.y) / (p2.y - p1.y);\r\n y = clip.y;\r\n } else if (codeOut & 2) { // Right\r\n y = p1.y + (p2.y - p1.y) * (clip.x + clip.width - p1.x) / (p2.x - p1.x);\r\n x = clip.x + clip.width;\r\n } else if (codeOut & 1) { // Left\r\n y = p1.y + (p2.y - p1.y) * (clip.x - p1.x) / (p2.x - p1.x);\r\n x = clip.x;\r\n }\r\n\r\n // Update point and outcode\r\n if (codeOut === code1) {\r\n p1.x = x;\r\n p1.y = y;\r\n code1 = clip.computeOutcode(p1.x, p1.y);\r\n } else {\r\n p2.x = x;\r\n p2.y = y;\r\n code2 = clip.computeOutcode(p2.x, p2.y);\r\n }\r\n }\r\n }\r\n\r\n if (accept) {\r\n return { x1: p1.x, y1: p1.y, x2: p2.x, y2: p2.y };\r\n }\r\n\r\n return null; // Line completely outside clip region\r\n }\r\n\r\n // Clipped drawing methods\r\n\r\n fillRect(x, y, width, height, r, g, b, a = 255) {\r\n if (!this.isRectVisible(x, y, width, height)) return;\r\n\r\n const transform = this.state.currentTransform;\r\n const transformed = transform.applyRect(x, y, width, height);\r\n\r\n // Calculate clipped bounds\r\n const clip = this.state.currentClip;\r\n const x1 = Math.max(clip.x, transformed.x);\r\n const y1 = Math.max(clip.y, transformed.y);\r\n const x2 = Math.min(clip.x + clip.width, transformed.x + transformed.width);\r\n const y2 = Math.min(clip.y + clip.height, transformed.y + transformed.height);\r\n\r\n if (x2 > x1 && y2 > y1) {\r\n // Apply global alpha\r\n const finalAlpha = a * this.state.globalAlpha;\r\n ShapeDrawer.fillRect(\r\n this.canvas, x1, y1, x2 - x1, y2 - y1,\r\n r, g, b, finalAlpha\r\n );\r\n }\r\n }\r\n\r\n strokeRect(x, y, width, height, lineWidth, r, g, b, a = 255) {\r\n if (!this.isRectVisible(x, y, width, height)) return;\r\n\r\n const finalAlpha = a * this.state.globalAlpha;\r\n\r\n // Use the transformed coordinates for drawing\r\n const transform = this.state.currentTransform;\r\n const p1 = transform.apply(x, y);\r\n const p2 = transform.apply(x + width, y);\r\n const p3 = transform.apply(x + width, y + height);\r\n const p4 = transform.apply(x, y + height);\r\n\r\n // Draw clipped lines\r\n this._drawClippedLine(p1.x, p1.y, p2.x, p2.y, lineWidth, r, g, b, finalAlpha);\r\n this._drawClippedLine(p2.x, p2.y, p3.x, p3.y, lineWidth, r, g, b, finalAlpha);\r\n this._drawClippedLine(p3.x, p3.y, p4.x, p4.y, lineWidth, r, g, b, finalAlpha);\r\n this._drawClippedLine(p4.x, p4.y, p1.x, p1.y, lineWidth, r, g, b, finalAlpha);\r\n }\r\n\r\n drawLine(x1, y1, x2, y2, lineWidth, r, g, b, a = 255) {\r\n const clipped = this.clipLine(x1, y1, x2, y2);\r\n if (!clipped) return;\r\n\r\n const finalAlpha = a * this.state.globalAlpha;\r\n\r\n if (lineWidth === 1) {\r\n LineDrawer.drawLine(\r\n this.canvas,\r\n clipped.x1, clipped.y1, clipped.x2, clipped.y2,\r\n r, g, b, finalAlpha\r\n );\r\n } else {\r\n LineDrawer.drawThickLine(\r\n this.canvas,\r\n clipped.x1, clipped.y1, clipped.x2, clipped.y2,\r\n lineWidth, r, g, b, finalAlpha\r\n );\r\n }\r\n }\r\n\r\n fillCircle(cx, cy, radius, r, g, b, a = 255) {\r\n if (!this.isRectVisible(cx - radius, cy - radius, radius * 2, radius * 2)) return;\r\n\r\n const transform = this.state.currentTransform;\r\n const center = transform.apply(cx, cy);\r\n\r\n // Scale radius by average scale (approximation)\r\n const scaledRadius = radius * (Math.abs(transform.scaleX) + Math.abs(transform.scaleY)) / 2;\r\n\r\n const finalAlpha = a * this.state.globalAlpha;\r\n\r\n // Draw with per-pixel clip checking\r\n this._fillCircleClipped(center.x, center.y, scaledRadius, r, g, b, finalAlpha);\r\n }\r\n\r\n // Helper methods\r\n\r\n _drawClippedLine(x1, y1, x2, y2, lineWidth, r, g, b, a) {\r\n const clipped = this.clipLine(\r\n x1, y1, x2, y2\r\n );\r\n\r\n if (clipped) {\r\n if (lineWidth === 1) {\r\n LineDrawer.drawLine(\r\n this.canvas,\r\n clipped.x1, clipped.y1, clipped.x2, clipped.y2,\r\n r, g, b, a\r\n );\r\n } else {\r\n LineDrawer.drawThickLine(\r\n this.canvas,\r\n clipped.x1, clipped.y1, clipped.x2, clipped.y2,\r\n lineWidth, r, g, b, a\r\n );\r\n }\r\n }\r\n }\r\n\r\n _fillCircleClipped(cx, cy, radius, r, g, b, a) {\r\n const clip = this.state.currentClip;\r\n const data = this.canvas.data;\r\n const width = this.canvas.width;\r\n const height = this.canvas.height;\r\n\r\n const minX = Math.max(0, Math.floor(cx - radius));\r\n const maxX = Math.min(width - 1, Math.ceil(cx + radius));\r\n const minY = Math.max(0, Math.floor(cy - radius));\r\n const maxY = Math.min(height - 1, Math.ceil(cy + radius));\r\n\r\n for (let py = minY; py <= maxY; py++) {\r\n for (let px = minX; px <= maxX; px++) {\r\n // Check if inside clip rect\r\n if (clip && !clip.contains(px, py)) continue;\r\n\r\n const dx = px - cx;\r\n const dy = py - cy;\r\n const dist = Math.sqrt(dx * dx + dy * dy);\r\n\r\n if (dist <= radius) {\r\n const idx = (py * width + px) * 4;\r\n data[idx + 0] = r;\r\n data[idx + 1] = g;\r\n data[idx + 2] = b;\r\n data[idx + 3] = a;\r\n }\r\n }\r\n }\r\n\r\n // Update region\r\n this.canvas.renderer.updateBufferData(\r\n this.canvas.bufferId,\r\n this.canvas.data.subarray(0, width * height * 4),\r\n minX, minY,\r\n maxX - minX + 1, maxY - minY + 1\r\n );\r\n this.canvas.needsUpload = true;\r\n }\r\n\r\n // State setters\r\n setFillStyle(r, g, b, a = 255) {\r\n this.state.fillStyle = { r, g, b, a };\r\n }\r\n\r\n setStrokeStyle(r, g, b, a = 255) {\r\n this.state.strokeStyle = { r, g, b, a };\r\n }\r\n\r\n setLineWidth(width) {\r\n this.state.lineWidth = width;\r\n }\r\n\r\n setGlobalAlpha(alpha) {\r\n this.state.globalAlpha = Math.max(0, Math.min(1, alpha));\r\n }\r\n}\n\nclass Glyph {\n constructor(char, x, y, width, height, xOffset, yOffset, xAdvance) {\n this.char = char;\n this.x = x; // Position in atlas\n this.y = y;\n this.width = width; // Glyph dimensions\n this.height = height;\n this.xOffset = xOffset; // Rendering offset\n this.yOffset = yOffset;\n this.xAdvance = xAdvance; // Cursor advance\n }\n}\n\nclass BitmapFont {\n /**\n * Create bitmap font from atlas image\n * @param {Renderer} renderer\n * @param {string} atlasPath - Path to font atlas image\n * @param {Object} config - Font configuration\n */\n constructor(renderer, atlasPath, config = {}) {\n this.renderer = renderer;\n\n this.atlasImage = renderer.loadImage(atlasPath);\n if (!this.atlasImage.data)\n console.warn(\"image data empty\");\n\n // Store configuration\n this.config = {\n bitmapWidth: config.bitmapWidth || this.atlasImage.width,\n bitmapHeight: config.bitmapHeight || this.atlasImage.height,\n cellsPerRow: config.cellsPerRow || 16,\n cellsPerColumn: config.cellsPerColumn || 16,\n cellWidth: config.cellWidth || 32,\n cellHeight: config.cellHeight || 32,\n fontSize: config.fontSize || 16,\n offsetX: config.offsetX || 0,\n offsetY: config.offsetY || 0,\n charOrder: config.charOrder || this.getDefaultCharOrder(),\n lineHeight: config.lineHeight || config.cellHeight,\n lineGap: config.lineGap || 0,\n charSpacing: config.charSpacing || 0\n };\n\n this.glyphs = new Map();\n this.scaledGlyphCache = new Map();\n this.buildGlyphMap();\n\n this.lineHeight = this.config.cellHeight;\n this.baseline = Math.floor(this.lineHeight * 0.8);\n }\n\n getDefaultCharOrder() {\n return ' ☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼' +\n ' !\"#$%&\\'()*+,-./0123456789:;<=>?' +\n '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_' +\n '`abcdefghijklmnopqrstuvwxyz{¦}~⌂' +\n 'ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒ' +\n 'áíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐' +\n '└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀' +\n 'αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■□';\n }\n\n buildGlyphMap() {\n const { cellsPerRow, cellsPerColumn, cellWidth, cellHeight, offsetX, offsetY, charOrder } = this.config;\n\n let charIndex = 0;\n\n for (let row = 0; row < cellsPerColumn; row++) {\n for (let col = 0; col < cellsPerRow; col++) {\n if (charIndex >= charOrder.length) break;\n\n const char = charOrder[charIndex];\n const x = col * cellWidth + offsetX;\n const y = row * cellHeight + offsetY;\n\n const glyph = new Glyph(\n char,\n x, y,\n cellWidth, cellHeight,\n 0, 0,\n cellWidth\n );\n\n this.glyphs.set(char, glyph);\n charIndex++;\n }\n }\n\n console.log(`Built ${this.glyphs.size} glyphs from atlas`);\n }\n\n getGlyph(char) {\n let glyph = this.glyphs.get(char);\n\n if (!glyph) {\n if (char === \"\\n\") {\n return this.glyphs.get(' ')\n }\n glyph = this.glyphs.get('?') || this.glyphs.get(' ') || this.glyphs.values().next().value;\n }\n return glyph;\n }\n\n measureText(text) {\n let width = 0;\n\n for (let i = 0; i < text.length; i++) {\n const glyph = this.getGlyph(text[i]);\n width += glyph.xAdvance + this.config.charSpacing;\n }\n\n if (text.length > 0) {\n width -= this.config.charSpacing;\n }\n\n return { width, height: this.lineHeight };\n }\n\n /**\n * Draw text with optimized sampling and optional rotation\n * @param {PixelBuffer} canvas \n * @param {string} text \n * @param {number} x - Origin X position\n * @param {number} y - Origin Y position\n * @param {Object} color - {r, g, b, a}\n * @param {number} scale - Scale factor\n * @param {number} rotation - Rotation in degrees (0-360)\n * @param {Camera2D} camera - Optional camera for viewport clipping\n */\n drawText(canvas, text, x, y, color = { r: 255, g: 255, b: 255, a: 255 }, scale = 1.0, rotation = 0, camera = undefined) {\n const atlasData = this.atlasImage.data;\n const atlasWidth = this.atlasImage.width;\n const canvasData = canvas.data;\n const canvasWidth = canvas.width;\n const canvasHeight = canvas.height;\n\n // Pre-calculate rotation if needed\n const hasRotation = rotation !== 0;\n const radians = hasRotation ? (rotation * Math.PI / 180) : 0;\n const cosTheta = hasRotation ? Math.cos(radians) : 1;\n const sinTheta = hasRotation ? Math.sin(radians) : 0;\n\n // Pre-calculate color multipliers (normalized 0-1)\n const mR = color.r / 255;\n const mG = color.g / 255;\n const mB = color.b / 255;\n const mA = color.a / 255;\n const neutralTint = (mR === 1 && mG === 1 && mB === 1 && mA === 1);\n\n let cursorX = 0; // Relative to origin\n let minX = Infinity, minY = Infinity;\n let maxX = -Infinity, maxY = -Infinity;\n\n for (let i = 0; i < text.length; i++) {\n const char = text[i];\n const glyph = this.getGlyph(char);\n\n // Skip spaces\n if (char === ' ') {\n cursorX += (glyph.xAdvance + this.config.charSpacing) * scale;\n continue;\n }\n\n const glyphX = cursorX + glyph.xOffset * scale;\n const glyphY = glyph.yOffset * scale;\n const scaledWidth = Math.ceil(glyph.width * scale);\n const scaledHeight = Math.ceil(glyph.height * scale);\n\n // Cache scaled glyph\n const key = `${glyph.char}_${scale}`;\n if (!this.scaledGlyphCache.has(key)) {\n this.cacheScaledGlyph(glyph, scale, atlasData, atlasWidth, key);\n }\n const scaledAlphas = this.scaledGlyphCache.get(key);\n\n // Draw glyph pixels with optimized paths\n if (hasRotation) {\n this.drawRotatedGlyph(\n canvas, canvasWidth, canvasHeight,\n scaledAlphas, scaledWidth, scaledHeight,\n x, y, glyphX, glyphY,\n cosTheta, sinTheta,\n mR, mG, mB, mA, neutralTint,\n camera\n );\n } else {\n const result = this.drawGlyphFast(\n canvasData, canvasWidth, canvasHeight,\n scaledAlphas, scaledWidth, scaledHeight,\n x + glyphX, y + glyphY,\n mR, mG, mB, mA, neutralTint,\n camera\n );\n \n if (result) {\n minX = Math.min(minX, result.minX);\n minY = Math.min(minY, result.minY);\n maxX = Math.max(maxX, result.maxX);\n maxY = Math.max(maxY, result.maxY);\n }\n }\n\n cursorX += (glyph.xAdvance + this.config.charSpacing) * scale;\n }\n\n // Update canvas buffer\n if (minX !== Infinity) {\n this.uploadCanvasRegion(canvas, minX, minY, maxX, maxY);\n }\n }\n\n /**\n * Cache scaled glyph alpha values\n */\n cacheScaledGlyph(glyph, scale, atlasData, atlasWidth, key) {\n const scaledWidth = Math.ceil(glyph.width * scale);\n const scaledHeight = Math.ceil(glyph.height * scale);\n const scaledAlphas = new Uint8Array(scaledWidth * scaledHeight);\n\n for (let gy = 0; gy < scaledHeight; gy++) {\n for (let gx = 0; gx < scaledWidth; gx++) {\n const atlasX = glyph.x + Math.floor(gx / scale);\n const atlasY = glyph.y + Math.floor(gy / scale);\n \n if (atlasX >= glyph.x + glyph.width || atlasY >= glyph.y + glyph.height) {\n scaledAlphas[gy * scaledWidth + gx] = 0;\n continue;\n }\n\n const atlasIdx = (atlasY * atlasWidth + atlasX) * 4;\n const atlasR = atlasData[atlasIdx];\n const atlasG = atlasData[atlasIdx + 1];\n const atlasB = atlasData[atlasIdx + 2];\n const atlasA = atlasData[atlasIdx + 3];\n\n if (atlasA === 0) {\n scaledAlphas[gy * scaledWidth + gx] = 0;\n continue;\n }\n\n const intensity = (atlasR + atlasG + atlasB) / 3;\n const alpha = (intensity / 255) * (atlasA / 255);\n scaledAlphas[gy * scaledWidth + gx] = Math.floor(alpha * 255);\n }\n }\n\n this.scaledGlyphCache.set(key, scaledAlphas);\n }\n\n /**\n * Fast non-rotated glyph drawing with optimized paths\n */\n drawGlyphFast(canvasData, canvasWidth, canvasHeight, scaledAlphas, width, height, destX, destY, mR, mG, mB, mA, neutralTint, camera) {\n destX = Math.floor(destX);\n destY = Math.floor(destY);\n\n // Clamp to canvas bounds\n const clamped = clampRectToCanvas(destX, destY, width, height, canvasWidth, canvasHeight);\n if (!clamped) return null;\n\n let minX = Infinity, minY = Infinity;\n let maxX = -Infinity, maxY = -Infinity;\n\n const startX = clamped.x;\n const startY = clamped.y;\n const endX = clamped.x + clamped.width;\n const endY = clamped.y + clamped.height;\n\n // Optimized path: neutral tint\n if (neutralTint) {\n for (let py = startY; py < endY; py++) {\n const gy = py - destY;\n const rowBase = py * canvasWidth * 4;\n \n for (let px = startX; px < endX; px++) {\n if (camera && !shouldDrawPixel(px, py, { width: canvasWidth, height: canvasHeight }, camera)) continue;\n\n const gx = px - destX;\n const alpha = scaledAlphas[gy * width + gx];\n if (alpha < 1) continue;\n\n const idx = rowBase + px * 4;\n const sA = alpha;\n const inv = 255 - sA;\n\n if (sA === 255) {\n // Fully opaque - direct write\n canvasData[idx] = Math.floor(mR * 255);\n canvasData[idx + 1] = Math.floor(mG * 255);\n canvasData[idx + 2] = Math.floor(mB * 255);\n canvasData[idx + 3] = 255;\n } else {\n // Integer alpha composite\n const sR = Math.floor(mR * 255);\n const sG = Math.floor(mG * 255);\n const sB = Math.floor(mB * 255);\n \n canvasData[idx] = ((sR * sA + canvasData[idx] * inv) / 255) | 0;\n canvasData[idx + 1] = ((sG * sA + canvasData[idx + 1] * inv) / 255) | 0;\n canvasData[idx + 2] = ((sB * sA + canvasData[idx + 2] * inv) / 255) | 0;\n canvasData[idx + 3] = ((sA * 255 + canvasData[idx + 3] * inv) / 255) | 0;\n }\n\n minX = Math.min(minX, px);\n minY = Math.min(minY, py);\n maxX = Math.max(maxX, px);\n maxY = Math.max(maxY, py);\n }\n }\n } else {\n // General path with tint\n for (let py = startY; py < endY; py++) {\n const gy = py - destY;\n const rowBase = py * canvasWidth * 4;\n \n for (let px = startX; px < endX; px++) {\n if (camera && !shouldDrawPixel(px, py, { width: canvasWidth, height: canvasHeight }, camera)) continue;\n\n const gx = px - destX;\n const alphaRaw = scaledAlphas[gy * width + gx];\n if (alphaRaw < 1) continue;\n\n const idx = rowBase + px * 4;\n const sA = (alphaRaw / 255) * mA;\n \n if (sA < 0.01) continue;\n\n const invA = 1 - sA;\n const dR = canvasData[idx] / 255;\n const dG = canvasData[idx + 1] / 255;\n const dB = canvasData[idx + 2] / 255;\n\n canvasData[idx] = Math.floor((mR * sA + dR * invA) * 255);\n canvasData[idx + 1] = Math.floor((mG * sA + dG * invA) * 255);\n canvasData[idx + 2] = Math.floor((mB * sA + dB * invA) * 255);\n canvasData[idx + 3] = 255;\n\n minX = Math.min(minX, px);\n minY = Math.min(minY, py);\n maxX = Math.max(maxX, px);\n maxY = Math.max(maxY, py);\n }\n }\n }\n\n return minX !== Infinity ? { minX, minY, maxX, maxY } : null;\n }\n\n drawRotatedGlyph(canvas, canvasWidth, canvasHeight, scaledAlphas, width, height, originX, originY, glyphX, glyphY, cosTheta, sinTheta, mR, mG, mB, mA, neutralTint, camera) {\n\n const canvasData = canvas.data;\n const corners = [\n { x: glyphX, y: glyphY },\n { x: glyphX + width, y: glyphY },\n { x: glyphX, y: glyphY + height },\n { x: glyphX + width, y: glyphY + height }\n ];\n\n let minX = Infinity, minY = Infinity;\n let maxX = -Infinity, maxY = -Infinity;\n\n for (const corner of corners) {\n const rx = corner.x * cosTheta - corner.y * sinTheta;\n const ry = corner.x * sinTheta + corner.y * cosTheta;\n minX = Math.min(minX, rx);\n minY = Math.min(minY, ry);\n maxX = Math.max(maxX, rx);\n maxY = Math.max(maxY, ry);\n }\n\n const startX = Math.max(0, Math.floor(originX + minX));\n const startY = Math.max(0, Math.floor(originY + minY));\n const endX = Math.min(canvasWidth, Math.ceil(originX + maxX));\n const endY = Math.min(canvasHeight, Math.ceil(originY + maxY));\n\n\n let dirtyMinX = canvasWidth;\n let dirtyMinY = canvasHeight;\n let dirtyMaxX = -1;\n let dirtyMaxY = -1;\n\n for (let py = startY; py < endY; py++) {\n const rowBase = py * canvasWidth * 4;\n \n for (let px = startX; px < endX; px++) {\n if (camera && !shouldDrawPixel(px, py, { width: canvasWidth, height: canvasHeight }, camera)) continue;\n\n // Inverse rotate to find source pixel\n const dx = px - originX;\n const dy = py - originY;\n const srcX = dx * cosTheta + dy * sinTheta - glyphX;\n const srcY = -dx * sinTheta + dy * cosTheta - glyphY;\n\n if (srcX < 0 || srcX >= width || srcY < 0 || srcY >= height) continue;\n\n const gx = Math.floor(srcX);\n const gy = Math.floor(srcY);\n \n const alphaRaw = scaledAlphas[gy * width + gx];\n if (alphaRaw < 1) continue;\n\n const idx = rowBase + px * 4;\n const sA = (alphaRaw / 255) * mA;\n \n if (sA < 0.01) continue;\n\n const invA = 1 - sA;\n const dR = canvasData[idx] / 255;\n const dG = canvasData[idx + 1] / 255;\n const dB = canvasData[idx + 2] / 255;\n\n canvasData[idx] = Math.floor((mR * sA + dR * invA) * 255);\n canvasData[idx + 1] = Math.floor((mG * sA + dG * invA) * 255);\n canvasData[idx + 2] = Math.floor((mB * sA + dB * invA) * 255);\n canvasData[idx + 3] = 255;\n\n // Track dirty region\n if (px < dirtyMinX) dirtyMinX = px;\n if (py < dirtyMinY) dirtyMinY = py;\n if (px > dirtyMaxX) dirtyMaxX = px;\n if (py > dirtyMaxY) dirtyMaxY = py;\n }\n }\n\n // Flush dirty region if any pixels were drawn\n if (dirtyMaxX >= 0) {\n const tracker = canvas.dirtyTracker;\n if (tracker) {\n tracker.addRegion(dirtyMinX, dirtyMinY, dirtyMaxX - dirtyMinX + 1, dirtyMaxY - dirtyMinY + 1);\n }\n canvas.needsUpload = true;\n }\n }\n\n /**\n * Upload dirty region to GPU\n */\n uploadCanvasRegion(canvas, minX, minY, maxX, maxY) {\n const tracker = canvas.dirtyTracker;\n if (tracker) {\n tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n }\n canvas.needsUpload = true;\n canvas.upload();\n }\n\n drawTextWithTint(canvas, text, x, y, r, g, b, a = 255, scale = 1.0, rotation = 0, camera = undefined) {\n return this.drawText(canvas, text, x, y, { r, g, b, a }, scale, rotation, camera);\n }\n\n wrapText(text, maxWidth) {\n const words = text.split(' ');\n const lines = [];\n let currentLine = '';\n\n words.forEach(word => {\n const testLine = currentLine + (currentLine ? ' ' : '') + word;\n const metrics = this.measureText(testLine);\n\n if (metrics.width > maxWidth && currentLine) {\n lines.push(currentLine);\n currentLine = word;\n } else {\n currentLine = testLine;\n }\n });\n\n if (currentLine) {\n lines.push(currentLine);\n }\n\n return lines;\n }\n\n drawMultilineText(canvas, text, x, y, maxWidth, align = 'left', color = { r: 255, g: 255, b: 255, a: 255 }, scale = 1.0, rotation = 0, camera = undefined) {\n const lines = this.wrapText(text, maxWidth);\n let currentY = 0;\n\n for (const line of lines) {\n const metrics = this.measureText(line);\n let lineX = 0;\n\n if (align === 'center') {\n lineX = (maxWidth - metrics.width) / 2;\n } else if (align === 'right') {\n lineX = maxWidth - metrics.width;\n }\n\n this.drawText(canvas, line, x + lineX, y + currentY, color, scale, rotation, camera);\n currentY += (this.lineHeight + this.config.lineGap) * scale;\n }\n\n return {\n width: maxWidth,\n height: lines.length * this.lineHeight * scale\n };\n }\n}\n\n/**\r\n * Base UI Element\r\n * DO not use will re-write buggy\r\n */\r\nclass UIElement {\r\n constructor(x, y, width, height) {\r\n this.x = x;\r\n this.y = y;\r\n this.width = width;\r\n this.height = height;\r\n this.visible = true;\r\n this.enabled = true;\r\n }\r\n \r\n contains(px, py) {\r\n return px >= this.x && px < this.x + this.width &&\r\n py >= this.y && py < this.y + this.height;\r\n }\r\n \r\n update(inputMap) {}\r\n draw(canvas, font) {}\r\n}\r\n\r\n/**\r\n * Button with rounded corners\r\n */\r\nclass Button extends UIElement {\r\n constructor(x, y, width, height, text, onClick) {\r\n super(x, y, width, height);\r\n this.text = text;\r\n this.onClick = onClick;\r\n \r\n // State\r\n this.isHovered = false;\r\n this.isPressed = false;\r\n \r\n // Style\r\n this.normalColor = { r: 70, g: 80, b: 100 };\r\n this.hoverColor = { r: 90, g: 100, b: 120 };\r\n this.pressedColor = { r: 50, g: 60, b: 80 };\r\n this.textColor = { r: 255, g: 255, b: 255, a: 255 };\r\n this.borderRadius = 8;\r\n }\r\n \r\n update(inputMap) {\r\n if (!this.enabled) return;\r\n \r\n const mousePos = inputMap.mousePosition;\r\n this.isHovered;\r\n this.isHovered = this.contains(mousePos.x, mousePos.y);\r\n \r\n // Mouse down\r\n if (this.isHovered && inputMap.isMousePressed('click')) {\r\n this.isPressed = true;\r\n }\r\n \r\n // Mouse up (click complete)\r\n if (this.isPressed && inputMap.IsMouseActionReleased('click')) {\r\n if (this.isHovered && this.onClick) {\r\n this.onClick();\r\n }\r\n this.isPressed = false;\r\n }\r\n }\r\n \r\n draw(canvas, font) {\r\n if (!this.visible) return;\r\n \r\n // Choose color based on state\r\n let color = this.normalColor;\r\n if (!this.enabled) {\r\n color = { r: 40, g: 45, b: 50 };\r\n } else if (this.isPressed) {\r\n color = this.pressedColor;\r\n } else if (this.isHovered) {\r\n color = this.hoverColor;\r\n }\r\n \r\n // Draw rounded rectangle\r\n const points = PolygonDrawer.createRoundedRect(\r\n this.x, this.y, \r\n this.width, this.height, \r\n this.borderRadius\r\n );\r\n \r\n PolygonDrawer.fillPolygon(\r\n canvas, points,\r\n color.r, color.g, color.b, 255\r\n );\r\n \r\n // Draw border\r\n PolygonDrawer.strokePolygon(\r\n canvas, points, 2,\r\n this.isHovered ? 120 : 80,\r\n this.isHovered ? 140 : 100,\r\n this.isHovered ? 160 : 120,\r\n 255\r\n );\r\n \r\n // Draw text (centered)\r\n if (font && this.text) {\r\n const metrics = font.measureText(this.text);\r\n const textX = this.x + (this.width - metrics.width) / 2;\r\n const textY = this.y + (this.height - metrics.height) / 2;\r\n \r\n font.drawText(canvas, this.text, textX, textY, this.textColor);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Text Input with blinking cursor\r\n */\r\nclass TextInput extends UIElement {\r\n constructor(x, y, width, height, placeholder = \"\") {\r\n super(x, y, width, height);\r\n this.text = \"\";\r\n this.placeholder = placeholder;\r\n this.isFocused = false;\r\n this.cursorPosition = 0;\r\n this.cursorBlinkTime = 0;\r\n this.cursorVisible = true;\r\n \r\n // Style\r\n this.backgroundColor = { r: 40, g: 45, b: 55 };\r\n this.focusedBackgroundColor = { r: 50, g: 55, b: 65 };\r\n this.borderColor = { r: 80, g: 90, b: 110 };\r\n this.focusedBorderColor = { r: 100, g: 150, b: 200 };\r\n this.textColor = { r: 255, g: 255, b: 255, a: 255 };\r\n this.placeholderColor = { r: 120, g: 130, b: 140, a: 255 };\r\n this.cursorColor = { r: 255, g: 255, b: 255, a: 255 };\r\n this.padding = 8;\r\n this.borderRadius = 6;\r\n \r\n // Callbacks\r\n this.onTextChange = null;\r\n this.onSubmit = null;\r\n }\r\n \r\n update(inputMap, deltaTime = 16) {\r\n if (!this.enabled) return;\r\n \r\n const mousePos = inputMap.mousePosition;\r\n \r\n // Handle focus\r\n if (inputMap.isMousePressed('click')) {\r\n const wasClicked = this.contains(mousePos.x, mousePos.y);\r\n if (wasClicked && !this.isFocused) {\r\n this.focus();\r\n } else if (!wasClicked && this.isFocused) {\r\n this.blur();\r\n }\r\n }\r\n \r\n // Blink cursor\r\n if (this.isFocused) {\r\n this.cursorBlinkTime += deltaTime;\r\n if (this.cursorBlinkTime >= 530) { // Blink every 530ms\r\n this.cursorVisible = !this.cursorVisible;\r\n this.cursorBlinkTime = 0;\r\n }\r\n }\r\n }\r\n \r\n focus() {\r\n this.isFocused = true;\r\n this.cursorPosition = this.text.length;\r\n this.cursorVisible = true;\r\n this.cursorBlinkTime = 0;\r\n }\r\n \r\n blur() {\r\n this.isFocused = false;\r\n this.cursorVisible = false;\r\n }\r\n \r\n /**\r\n * Handle character input\r\n * Call this from your input system when keys are pressed\r\n */\r\n handleChar(char) {\r\n if (!this.isFocused) return;\r\n \r\n // Insert character at cursor position\r\n this.text = this.text.slice(0, this.cursorPosition) + \r\n char + \r\n this.text.slice(this.cursorPosition);\r\n this.cursorPosition++;\r\n \r\n // Reset cursor blink\r\n this.cursorVisible = true;\r\n this.cursorBlinkTime = 0;\r\n \r\n if (this.onTextChange) {\r\n this.onTextChange(this.text);\r\n }\r\n }\r\n \r\n /**\r\n * Handle backspace\r\n */\r\n handleBackspace() {\r\n if (!this.isFocused || this.cursorPosition === 0) return;\r\n \r\n this.text = this.text.slice(0, this.cursorPosition - 1) + \r\n this.text.slice(this.cursorPosition);\r\n this.cursorPosition--;\r\n \r\n // Reset cursor blink\r\n this.cursorVisible = true;\r\n this.cursorBlinkTime = 0;\r\n \r\n if (this.onTextChange) {\r\n this.onTextChange(this.text);\r\n }\r\n }\r\n \r\n /**\r\n * Handle delete\r\n */\r\n handleDelete() {\r\n if (!this.isFocused || this.cursorPosition >= this.text.length) return;\r\n \r\n this.text = this.text.slice(0, this.cursorPosition) + \r\n this.text.slice(this.cursorPosition + 1);\r\n \r\n // Reset cursor blink\r\n this.cursorVisible = true;\r\n this.cursorBlinkTime = 0;\r\n \r\n if (this.onTextChange) {\r\n this.onTextChange(this.text);\r\n }\r\n }\r\n \r\n /**\r\n * Handle enter/return\r\n */\r\n handleSubmit() {\r\n if (!this.isFocused) return;\r\n \r\n if (this.onSubmit) {\r\n this.onSubmit(this.text);\r\n }\r\n }\r\n \r\n /**\r\n * Move cursor left\r\n */\r\n moveCursorLeft() {\r\n if (!this.isFocused || this.cursorPosition === 0) return;\r\n \r\n this.cursorPosition--;\r\n this.cursorVisible = true;\r\n this.cursorBlinkTime = 0;\r\n }\r\n \r\n /**\r\n * Move cursor right\r\n */\r\n moveCursorRight() {\r\n if (!this.isFocused || this.cursorPosition >= this.text.length) return;\r\n \r\n this.cursorPosition++;\r\n this.cursorVisible = true;\r\n this.cursorBlinkTime = 0;\r\n }\r\n \r\n /**\r\n * Set text programmatically\r\n */\r\n setText(text) {\r\n this.text = text;\r\n this.cursorPosition = text.length;\r\n this.cursorVisible = true;\r\n this.cursorBlinkTime = 0;\r\n }\r\n \r\n /**\r\n * Get current text\r\n */\r\n getText() {\r\n return this.text;\r\n }\r\n \r\n /**\r\n * Clear text\r\n */\r\n clear() {\r\n this.text = \"\";\r\n this.cursorPosition = 0;\r\n this.cursorVisible = true;\r\n this.cursorBlinkTime = 0;\r\n }\r\n \r\n draw(canvas, font) {\r\n if (!this.visible) return;\r\n \r\n // Background\r\n const bgColor = this.isFocused ? this.focusedBackgroundColor : this.backgroundColor;\r\n const points = PolygonDrawer.createRoundedRect(\r\n this.x, this.y,\r\n this.width, this.height,\r\n this.borderRadius\r\n );\r\n \r\n PolygonDrawer.fillPolygon(\r\n canvas, points,\r\n bgColor.r, bgColor.g, bgColor.b, 255\r\n );\r\n \r\n // Border\r\n const borderColor = this.isFocused ? this.focusedBorderColor : this.borderColor;\r\n PolygonDrawer.strokePolygon(\r\n canvas, points,\r\n this.isFocused ? 2 : 1,\r\n borderColor.r, borderColor.g, borderColor.b, 255\r\n );\r\n \r\n if (!font) return;\r\n \r\n // Text or placeholder\r\n const displayText = this.text || this.placeholder;\r\n const textColor = this.text ? this.textColor : this.placeholderColor;\r\n \r\n if (displayText) {\r\n const textX = this.x + this.padding;\r\n const textY = this.y + (this.height - font.lineHeight) / 2;\r\n \r\n font.drawText(canvas, displayText, textX, textY, textColor);\r\n }\r\n \r\n // Cursor\r\n if (this.isFocused && this.cursorVisible) {\r\n // Calculate cursor X position\r\n const textBeforeCursor = this.text.slice(0, this.cursorPosition);\r\n const cursorOffset = font.measureText(textBeforeCursor).width;\r\n \r\n const cursorX = this.x + this.padding + cursorOffset;\r\n const cursorY1 = this.y + this.padding;\r\n const cursorY2 = this.y + this.height - this.padding;\r\n \r\n // Draw cursor line\r\n ShapeDrawer.fillRect(\r\n canvas,\r\n cursorX, cursorY1,\r\n 2, cursorY2 - cursorY1,\r\n this.cursorColor.r, this.cursorColor.g, this.cursorColor.b, this.cursorColor.a\r\n );\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Label (static text)\r\n */\r\nclass Label extends UIElement {\r\n constructor(x, y, text, color = { r: 255, g: 255, b: 255, a: 255 }) {\r\n super(x, y, 0, 0);\r\n this.text = text;\r\n this.color = color;\r\n }\r\n \r\n draw(canvas, font) {\r\n if (!this.visible || !font) return;\r\n \r\n font.drawText(canvas, this.text, this.x, this.y, this.color);\r\n }\r\n}\r\n\r\n/**\r\n * UI Manager\r\n */\r\nclass UIManager {\r\n constructor(canvas, font, inputMap) {\r\n this.canvas = canvas;\r\n this.font = font;\r\n this.inputMap = inputMap;\r\n this.elements = [];\r\n this.focusedElement = null;\r\n \r\n // Track last frame time for delta\r\n this.lastFrameTime = performance.now();\r\n }\r\n \r\n add(element) {\r\n this.elements.push(element);\r\n return element;\r\n }\r\n \r\n remove(element) {\r\n const index = this.elements.indexOf(element);\r\n if (index > -1) {\r\n this.elements.splice(index, 1);\r\n }\r\n }\r\n \r\n clear() {\r\n this.elements = [];\r\n this.focusedElement = null;\r\n }\r\n \r\n update() {\r\n const now = performance.now();\r\n const deltaTime = now - this.lastFrameTime;\r\n this.lastFrameTime = now;\r\n \r\n // Update all elements\r\n this.elements.forEach(element => {\r\n if (element.enabled) {\r\n element.update(this.inputMap, deltaTime);\r\n }\r\n });\r\n }\r\n \r\n draw() {\r\n // Draw all elements\r\n this.elements.forEach(element => {\r\n if (element.visible) {\r\n element.draw(this.canvas, this.font);\r\n }\r\n });\r\n }\r\n}\n\nclass SharedArena {\r\n constructor(capacity) {\r\n\r\n this.m_data = new SharedArrayBuffer(capacity + 16); // +16 for metadata header\r\n\r\n // Int32Array view for atomic operations\r\n this.m_meta = new Int32Array(this.m_data, 0, 4);\r\n // [0] = current offset (atomic)\r\n // [1] = capacity\r\n // [2] = allocation count\r\n // [3] = lock flag (0=unlocked, 1=locked)\r\n\r\n Atomics.store(this.m_meta, 0, 16); // start after metadata\r\n Atomics.store(this.m_meta, 1, capacity);\r\n Atomics.store(this.m_meta, 2, 0);\r\n Atomics.store(this.m_meta, 3, 0);\r\n\r\n // Uint8Array for actual pixel data\r\n this.m_view = new Uint8Array(this.m_data, 16);\r\n }\r\n\r\n\r\n static fromBuffer(m_data) {\r\n const self = new SharedArena(0);\r\n self.m_data = m_data;\r\n self.m_meta = new Int32Array(self.m_data, 0, 4);\r\n self.m_view = new Uint8Array(self.m_data, 16);\r\n return self;\r\n }\r\n\r\n\r\n\r\n /**\r\n * thread-safe allocation using compare-and-swap\r\n * @param {number} size \r\n * @param {number} alignment \r\n * @param {boolean} autoGrow - if true, will attempt to grow arena on OOM\r\n */\r\n allocate(size, alignment = 4, autoGrow = false) {\r\n while (true) {\r\n /**\r\n * offset += size isn't atomic. Two workers could read offset=1000, both add 500, both write 1500, now we got overlapping allocations. CAS ensures only one thread wins.\r\n */\r\n if (Atomics.compareExchange(this.m_meta, 3, 0, 1) !== 0) {\r\n continue; // someone else has lock\r\n }\r\n\r\n const offset = Atomics.load(this.m_meta, 0);\r\n const capacity = Atomics.load(this.m_meta, 1);\r\n const aligned = Math.ceil(offset / alignment) * alignment;\r\n\r\n if (aligned + size > capacity) {\r\n Atomics.store(this.m_meta, 3, 0); // release lock\r\n\r\n if (autoGrow) {\r\n // calculate needed capacity with breathing room\r\n const currentUsed = offset - 16;\r\n const needed = currentUsed + size;\r\n const breathingRoom = Math.max(size, 1024 * 1024); // At least 1MB or size of current allocation\r\n this.grow(needed + breathingRoom);\r\n continue; // retry allocation after growth\r\n }\r\n\r\n throw new Error(`Arena OOM: need ${size}, have ${capacity - aligned}`);\r\n }\r\n\r\n // Commit allocation\r\n Atomics.store(this.m_meta, 0, aligned + size);\r\n Atomics.add(this.m_meta, 2, 1);\r\n Atomics.store(this.m_meta, 3, 0); // release lock\r\n\r\n return aligned;\r\n }\r\n }\r\n\r\n /**\r\n * Grow the arena to a new capacity\r\n * @param {number} newCapacity - target capacity (will be rounded up if needed)\r\n */\r\n grow(newCapacity) {\r\n // Acquire lock\r\n while (Atomics.compareExchange(this.m_meta, 3, 0, 1) !== 0) {\r\n // spin until we get lock\r\n }\r\n\r\n try {\r\n const oldCapacity = Atomics.load(this.m_meta, 1);\r\n\r\n if (newCapacity <= oldCapacity) {\r\n return; // already big enough\r\n }\r\n\r\n // Create new buffer with increased capacity\r\n const newData = new SharedArrayBuffer(newCapacity + 16);\r\n const newMeta = new Int32Array(newData, 0, 4);\r\n const newView = new Uint8Array(newData, 16);\r\n\r\n // Copy old data\r\n newView.set(this.m_view.subarray(0, Atomics.load(this.m_meta, 0) - 16));\r\n\r\n // Copy metadata\r\n newMeta[0] = this.m_meta[0]; // offset\r\n newMeta[2] = this.m_meta[2]; // allocation count\r\n newMeta[3] = 0; // reset lock\r\n\r\n // Update capacity in new buffer\r\n Atomics.store(newMeta, 1, newCapacity);\r\n\r\n // Swap buffers\r\n this.m_data = newData;\r\n this.m_meta = newMeta;\r\n this.m_view = newView;\r\n\r\n } finally {\r\n // Release lock\r\n Atomics.store(this.m_meta, 3, 0);\r\n }\r\n }\r\n\r\n\r\n // /**\r\n // * thread-safe allocation using compare-and-swap\r\n // * @param {number} size \r\n // * @param {number} alignment \r\n // */\r\n // allocate(size, alignment = 4) {\r\n // while (true) {\r\n // /**\r\n // * offset += size isn't atomic. Two workers could read offset=1000, both add 500, both write 1500, now we got overlapping allocations. CAS ensures only one thread wins.\r\n // */\r\n // if (Atomics.compareExchange(this.m_meta, 3, 0, 1) !== 0) {\r\n // continue; // someone else has lock\r\n // }\r\n\r\n // const offset = Atomics.load(this.m_meta, 0);\r\n // const capacity = Atomics.load(this.m_meta, 1);\r\n // const aligned = Math.ceil(offset / alignment) * alignment;\r\n\r\n // if (aligned + size > capacity) {\r\n // Atomics.store(this.m_meta, 3, 0); // release lock\r\n // throw new Error(`Arena OOM: need ${size}, have ${capacity - aligned}`);\r\n // }\r\n\r\n // // Commit allocation\r\n // Atomics.store(this.m_meta, 0, aligned + size);\r\n // Atomics.add(this.m_meta, 2, 1);\r\n // Atomics.store(this.m_meta, 3, 0); // release lock\r\n\r\n // return aligned;\r\n // }\r\n\r\n\r\n // }\r\n\r\n reset() {\r\n Atomics.store(this.m_meta, 0, 16);\r\n Atomics.store(this.m_meta, 2, 0);\r\n this.m_view.fill(0);\r\n }\r\n\r\n get stats() {\r\n const offset = Atomics.load(this.m_meta, 0);\r\n const capacity = Atomics.load(this.m_meta, 1);\r\n const count = Atomics.load(this.m_meta, 2);\r\n return {\r\n capacity,\r\n used: offset - 16,\r\n available: capacity - (offset - 16),\r\n allocationCount: count,\r\n utilization: ((offset - 16) / capacity * 100).toFixed(2) + '%'\r\n };\r\n }\r\n}\n\nexport { AADrawer, BatchedDirtyTracker, BitmapFont, BlendMode, Button, CacheBuffer, Camera, ClipRect, ClippingContext, ColorTheory, Compositor, CoordinateSystem, DirtyRegionTracker, GraphicsState, Input, InputBuffer, InputMap, Label, LineDrawer$1 as LineDrawer, PerformanceMonitor, PixelBuffer, PolygonDrawer, Renderer, ShapeDrawer, SharedArena, TextInput, Transform, UIElement, UIManager, Viewport, createLetterboxedViewport, drawAtlasRegionToCanvas, drawLetterboxBars, genFrames, imageToCanvas, loadRenderer, loadRendererSea, normalizeRGBA };\n//# sourceMappingURL=index.js.map\n","import { DirtyRegionTracker, PerformanceMonitor } from \"tessera.js\";\n// import { Camera2D } from \"./cam.js\";\n\nimport { fileURLToPath } from 'url';\nimport { dirname } from 'path';\nimport { createRequire } from 'module';\nimport { PixelBuffer } from \"tessera.js\";\nimport { watch } from \"node:fs\";\nimport path from \"node:path\";\nimport { pathToFileURL } from 'url';\n\n// profiler.js - Zero-allocation hierarchical profiler\n// Usage:\n// profiler.start(\"scopeName\")\n// // ... work ...\n// profiler.end(\"scopeName\")\n//\n// profiler.frame() // Call once per frame\n// profiler.report() // Print stats\n\nconst SCOPE_POOL_SIZE = 256;\nconst FRAME_HISTORY = 240; // 4 seconds at 60fps\n\nclass ScopeData {\n constructor() {\n this.name = \"\";\n this.depth = 0;\n this.startTime = 0;\n this.endTime = 0;\n this.duration = 0;\n this.parent = null;\n this.children = [];\n this.callCount = 0;\n\n // Stats\n this.totalTime = 0;\n this.minTime = Infinity;\n this.maxTime = 0;\n this.samples = [];\n }\n\n reset() {\n this.startTime = 0;\n this.endTime = 0;\n this.duration = 0;\n this.parent = null;\n this.children.length = 0;\n this.callCount = 0;\n }\n\n resetStats() {\n this.totalTime = 0;\n this.minTime = Infinity;\n this.maxTime = 0;\n this.samples.length = 0;\n this.callCount = 0;\n }\n}\nclass Profiler {\n constructor() {\n this.scopePool = [];\n for (let i = 0; i < SCOPE_POOL_SIZE; i++) {\n this.scopePool.push(new ScopeData());\n }\n this.poolIndex = 0;\n\n this.scopeStack = [];\n this.currentScope = null;\n this.rootScopes = [];\n\n this.frameCount = 0;\n this.frameTimes = [];\n this.frameStart = 0;\n\n this.scopeStats = new Map();\n\n this.enabled = true;\n\n // New: silent mismatch counter\n this.mismatchCount = 0;\n }\n\n acquireScope(name) {\n const scope = this.scopePool[this.poolIndex];\n this.poolIndex = (this.poolIndex + 1) % SCOPE_POOL_SIZE;\n\n scope.reset();\n scope.name = name;\n scope.depth = this.scopeStack.length;\n\n return scope;\n }\n\n start(name) {\n if (!this.enabled) return;\n\n const scope = this.acquireScope(name);\n scope.startTime = performance.now();\n\n if (this.currentScope) {\n scope.parent = this.currentScope;\n this.currentScope.children.push(scope);\n } else {\n this.rootScopes.push(scope);\n }\n\n this.scopeStack.push(scope);\n this.currentScope = scope;\n }\n\n _finalizeScope(scope) {\n const name = scope.name;\n const now = performance.now();\n scope.endTime = now;\n scope.duration = scope.endTime - scope.startTime;\n scope.callCount = (scope.callCount || 0) + 1;\n\n if (!this.scopeStats.has(name)) {\n this.scopeStats.set(name, {\n name: name,\n totalTime: 0,\n minTime: Infinity,\n maxTime: 0,\n callCount: 0,\n samples: []\n });\n }\n\n const stats = this.scopeStats.get(name);\n stats.totalTime += scope.duration;\n stats.minTime = Math.min(stats.minTime, scope.duration);\n stats.maxTime = Math.max(stats.maxTime, scope.duration);\n stats.callCount++;\n\n if (stats.samples.length < FRAME_HISTORY) {\n stats.samples.push(scope.duration);\n } else {\n stats.samples[this.frameCount % FRAME_HISTORY] = scope.duration;\n }\n }\n\n end(name) {\n if (!this.enabled) return;\n\n if (this.scopeStack.length === 0) {\n // no open scopes — silently ignore, but count the mismatch\n this.mismatchCount++;\n return;\n }\n\n const now = performance.now();\n // fast path: top of stack matches\n const top = this.scopeStack[this.scopeStack.length - 1];\n if (top.name === name) {\n const scope = this.scopeStack.pop();\n this._finalizeScope(scope);\n\n this.currentScope = this.scopeStack.length > 0\n ? this.scopeStack[this.scopeStack.length - 1]\n : null;\n return;\n }\n\n // mismatch: look for the most recent matching scope in the stack\n let matchIndex = -1;\n for (let i = this.scopeStack.length - 1; i >= 0; i--) {\n if (this.scopeStack[i].name === name) {\n matchIndex = i;\n break;\n }\n }\n\n if (matchIndex === -1) {\n // No matching open scope anywhere in stack — silently ignore and count mismatch\n this.mismatchCount++;\n return;\n }\n\n // We found a matching scope but there were leaked scopes above it.\n // Count this as a single mismatch occurrence (you can change this to count the number of leaked scopes if preferred).\n this.mismatchCount++;\n\n // Finalize any leaked scopes above the matched scope (they were never properly ended).\n for (let i = this.scopeStack.length - 1; i > matchIndex; i--) {\n const leaked = this.scopeStack.pop();\n leaked.endTime = now;\n leaked.duration = leaked.endTime - leaked.startTime;\n leaked.callCount = (leaked.callCount || 0) + 1;\n this._finalizeScope(leaked);\n }\n\n // Now finalize the matched scope\n const matched = this.scopeStack.pop();\n matched.endTime = now;\n matched.duration = matched.endTime - matched.startTime;\n matched.callCount = (matched.callCount || 0) + 1;\n this._finalizeScope(matched);\n\n // update currentScope\n this.currentScope = this.scopeStack.length > 0\n ? this.scopeStack[this.scopeStack.length - 1]\n : null;\n }\n\n frame() {\n if (!this.enabled) return;\n\n const frameTime = performance.now() - this.frameStart;\n this.frameTimes.push(frameTime);\n if (this.frameTimes.length > FRAME_HISTORY) {\n this.frameTimes.shift();\n }\n\n this.frameCount++;\n this.frameStart = performance.now();\n\n this.rootScopes.length = 0;\n this.scopeStack.length = 0;\n this.currentScope = null;\n }\n\n getStats(name) {\n return this.scopeStats.get(name);\n }\n\n getAllStats() {\n return Array.from(this.scopeStats.values());\n }\n\n percentile(samples, p) {\n if (samples.length === 0) return 0;\n const sorted = samples.slice().sort((a, b) => a - b);\n const index = Math.ceil((p / 100) * sorted.length) - 1;\n return sorted[Math.max(0, index)];\n }\n\n report() {\n if (this.scopeStats.size === 0) {\n console.log(\"[Profiler] No data collected\");\n return;\n }\n\n console.log(\"\\n=== PROFILER REPORT ===\");\n console.log(`Frames: ${this.frameCount}`);\n\n if (this.frameTimes.length > 0) {\n const avgFrame = this.frameTimes.reduce((a, b) => a + b, 0) / this.frameTimes.length;\n const minFrame = Math.min(...this.frameTimes);\n const maxFrame = Math.max(...this.frameTimes);\n const p95Frame = this.percentile(this.frameTimes, 95);\n const p99Frame = this.percentile(this.frameTimes, 99);\n\n console.log(`\\nFrame Time: avg=${avgFrame.toFixed(2)}ms min=${minFrame.toFixed(2)}ms max=${maxFrame.toFixed(2)}ms p95=${p95Frame.toFixed(2)}ms p99=${p99Frame.toFixed(2)}ms`);\n console.log(`Target: 16.67ms (60fps) | Actual: ${(1000 / avgFrame).toFixed(1)}fps`);\n }\n\n // Print mismatch count if any\n if (this.mismatchCount > 0) {\n console.log(`\\n[Profiler] Mismatches encountered: ${this.mismatchCount} (silently counted)`);\n }\n\n const stats = this.getAllStats().sort((a, b) => b.totalTime - a.totalTime);\n\n console.log(\"\\nScope Breakdown:\");\n console.log(\"Name\".padEnd(30) + \"Total(ms)\".padEnd(12) + \"Avg(ms)\".padEnd(10) + \"Min(ms)\".padEnd(10) + \"Max(ms)\".padEnd(10) + \"P95(ms)\".padEnd(10) + \"Calls\".padEnd(8));\n console.log(\"-\".repeat(100));\n\n for (const stat of stats) {\n const avg = stat.totalTime / stat.callCount;\n const p95 = this.percentile(stat.samples, 95);\n\n console.log(\n stat.name.padEnd(30) +\n stat.totalTime.toFixed(2).padEnd(12) +\n avg.toFixed(2).padEnd(10) +\n stat.minTime.toFixed(2).padEnd(10) +\n stat.maxTime.toFixed(2).padEnd(10) +\n p95.toFixed(2).padEnd(10) +\n stat.callCount.toString().padEnd(8)\n );\n }\n\n console.log(\"=\".repeat(100));\n }\n\n exportTrace() {\n const events = [];\n let eventId = 0;\n\n const processScope = (scope, tid = 0) => {\n events.push({\n name: scope.name,\n cat: \"function\",\n ph: \"X\",\n ts: scope.startTime * 1000,\n dur: scope.duration * 1000,\n pid: 1,\n tid: tid,\n args: {\n depth: scope.depth\n }\n });\n\n for (const child of scope.children) {\n processScope(child, tid);\n }\n };\n\n for (const root of this.rootScopes) {\n processScope(root);\n }\n\n return JSON.stringify(events, null, 2);\n }\n\n reset() {\n this.scopeStats.clear();\n this.frameTimes.length = 0;\n this.frameCount = 0;\n this.rootScopes.length = 0;\n this.scopeStack.length = 0;\n this.currentScope = null;\n this.poolIndex = 0;\n this.mismatchCount = 0; // reset mismatch counter\n }\n\n enable() { this.enabled = true; }\n disable() { this.enabled = false; }\n}\n\nexport const globalPerf = new Profiler()\n\n\n// Convenience wrapper for automatic scoping\nexport function profile(name, fn) {\n globalPerf.start(name);\n try {\n return fn();\n } finally {\n globalPerf.end(name);\n }\n}\n\n// Async version\nexport async function profileAsync(name, fn) {\n globalPerf.start(name);\n try {\n return await fn();\n } finally {\n globalPerf.end(name);\n }\n}\n\n\n\n\nexport const getModulePaths = () => {\n try {\n // Try ESM first\n if (typeof import.meta !== 'undefined' && import.meta.url) {\n const filename = fileURLToPath(import.meta.url);\n return {\n __filename: filename,\n __dirname: dirname(filename),\n require: createRequire(import.meta.url)\n };\n }\n } catch (e) {\n // Fall through to CJS\n }\n\n // CJS fallback\n return {\n __filename: typeof __filename !== 'undefined' ? __filename : '',\n __dirname: typeof __dirname !== 'undefined' ? __dirname : '',\n require: typeof require !== 'undefined' ? require : () => { throw new Error('require not available'); }\n };\n};\n\n\n\n\n/**\n * minimal hot-reloader - treats game module as a hot-swappable DLL\n * \n * @param {Object} options\n * @param {string} options.entry - Path to game module\n * @param {boolean} [options.watch=true] - Enable file watching\n * @param {number} [options.debounce=100] - Debounce ms for file changes\n * @param {string[]} [options.watchFiles=[]] - Additional files to watch for changes\n * @returns {Promise<Object>} Game module proxy\n */\nexport async function hotloader(state, options) {\n const entryPath = path.resolve(options.entry);\n const shouldWatch = options.watch !== false;\n const debounceMs = options.debounce || 100;\n const watchFiles = (options.watchFiles || []).map(f => path.resolve(f));\n\n let currentModule = null;\n let watchers = [];\n let debounceTimer = null;\n let abortController = null;\n\n // Load module with cache busting\n async function load() {\n if (currentModule) {\n currentModule.cleanup()\n }\n const cacheBusted = `${pathToFileURL(entryPath)}?t=${Date.now()}`;\n const module = await import(cacheBusted);\n currentModule = module.default || module;\n currentModule.init(state)\n }\n\n // Reload on file change\n function handleChange() {\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(async () => {\n console.log('[hotloader] reloading...');\n await load();\n }, debounceMs);\n }\n\n\n await load();\n\n\n if (shouldWatch) {\n abortController = new AbortController();\n\n // Watch main entry file\n watchers.push(watch(entryPath, { signal: abortController.signal }, (event) => {\n if (event === 'change') handleChange();\n }));\n\n // Watch additional files\n watchFiles.forEach(filePath => {\n watchers.push(watch(filePath, { signal: abortController.signal }, (event) => {\n if (event === 'change') handleChange();\n }));\n });\n }\n\n // // return proxy that forwards all calls to current module\n // return new Proxy({}, {\n // get(_, prop) {\n // if (prop === 'cleanup') {\n // return () => {\n // if (abortController) abortController.abort();\n // if (watcher) watcher.close();\n // };\n // }\n // return currentModule?.[prop];\n // }\n // });\n}\n\n\n\n\n/**\n * Clamp a rectangle to canvas bounds\n * Returns null if completely outside canvas\n */\nexport function clampRectToCanvas(x, y, width, height, canvasWidth, canvasHeight) {\n const x1 = Math.max(0, Math.floor(x));\n const y1 = Math.max(0, Math.floor(y));\n const x2 = Math.min(canvasWidth, Math.ceil(x + width));\n const y2 = Math.min(canvasHeight, Math.ceil(y + height));\n\n const clampedWidth = x2 - x1;\n const clampedHeight = y2 - y1;\n\n if (clampedWidth <= 0 || clampedHeight <= 0) {\n return null; // Completely outside canvas\n }\n\n return { x: x1, y: y1, width: clampedWidth, height: clampedHeight };\n}\n\n/**\n * Check if a pixel should be drawn (canvas + viewport clipping)\n * @param {Camera2D} camera \n */\nexport function shouldDrawPixel(x, y, canvas, camera) {\n if (x < 0 || x >= canvas.width || y < 0 || y >= canvas.height) {\n return false;\n }\n\n // Viewport clipping (if camera has viewport)\n if (camera && camera.viewport && camera.viewport.shouldClip(x, y)) {\n return false;\n }\n\n return true;\n}\n\n\n/**\n * optimized drawAtlasRegionToCanvas with micro-optimized fast paths.\n *\n * @param {{data: Uint8Array, width: number, height: number}} atlas\n * @param {{x: number, y: number, width: number, height: number}} srcRect\n * @param {PixelBuffer} canvas\n * @param {{x: number, y: number, width: number, height: number}} destRect\n * @param {{algorithm?: \"bilinear\" | \"nn\", flipH?: boolean, flipV?: boolean, modulate?: {r:number,g:number,b:number,a:number}, assumeOpaque?: boolean, camera?: Camera2D}} options\n */\nexport function drawAtlasRegionToCanvas(atlas, srcRect, canvas, destRect, options = {}) {\n globalPerf.start(\"drawAtlas\");\n const tracker = canvas.dirtyTracker;\n const cdata = canvas.data;\n const adata = atlas.data;\n const atlasWidth = atlas.width | 0;\n const atlasHeight = atlas.height | 0;\n const canvasWidth = canvas.width | 0;\n const canvasHeight = canvas.height | 0;\n\n const {\n algorithm = 'bilinear',\n flipH = false,\n flipV = false,\n modulate = { r: 255, g: 255, b: 255, a: 255 },\n assumeOpaque = false,\n camera = null,\n rotation = 0, // radians\n pivot = { x: 0.5, y: 0.5 } // normalized within destRect\n } = options;\n\n const srcWidth = srcRect.width | 0;\n const srcHeight = srcRect.height | 0;\n let dWidth = destRect.width | 0;\n let dHeight = destRect.height | 0;\n\n if (dWidth <= 0 || dHeight <= 0 || srcWidth <= 0 || srcHeight <= 0) return;\n\n const scaleX = srcWidth / dWidth;\n const scaleY = srcHeight / dHeight;\n\n const clampX = (x) => (x < srcRect.x ? srcRect.x : (x > srcRect.x + srcWidth - 1 ? srcRect.x + srcWidth - 1 : x));\n const clampY = (y) => (y < srcRect.y ? srcRect.y : (y > srcRect.y + srcHeight - 1 ? srcRect.y + srcHeight - 1 : y));\n\n const mR = (modulate.r ?? 255) / 255;\n const mG = (modulate.g ?? 255) / 255;\n const mB = (modulate.b ?? 255) / 255;\n const mA = (modulate.a ?? 255) / 255;\n const neutralTint = (mR === 1 && mG === 1 && mB === 1 && mA === 1);\n\n const angle = rotation || 0;\n const useRotation = angle !== 0;\n const cosA = Math.cos(angle);\n const sinA = Math.sin(angle);\n\n let pivotOffsetX = pivot.x * dWidth;\n let pivotOffsetY = pivot.y * dHeight;\n\n // NEW: Preserve originals for mapping (this is key to the fix)\n const orig_pivotOffsetX = pivotOffsetX;\n const orig_pivotOffsetY = pivotOffsetY;\n\n let dX = destRect.x;\n let dY = destRect.y;\n\n if (useRotation) {\n // Screen position of pivot point (before rotation)\n const screenPivotX = destRect.x + pivotOffsetX;\n const screenPivotY = destRect.y + pivotOffsetY;\n\n // Unrotated corners relative to pivot (pivot is at origin)\n const halfW = dWidth / 2;\n const halfH = dHeight / 2;\n\n const corners = [\n { x: -pivotOffsetX, y: -pivotOffsetY },\n { x: dWidth - pivotOffsetX, y: -pivotOffsetY },\n { x: dWidth - pivotOffsetX, y: dHeight - pivotOffsetY },\n { x: -pivotOffsetX, y: dHeight - pivotOffsetY }\n ];\n\n let minRX = Infinity, maxRX = -Infinity, minRY = Infinity, maxRY = -Infinity;\n\n // Apply forward transform (CW rotation matrix) relative to pivot\n for (let c of corners) {\n const rx = cosA * c.x - sinA * c.y;\n const ry = sinA * c.x + cosA * c.y;\n minRX = Math.min(minRX, rx);\n maxRX = Math.max(maxRX, rx);\n minRY = Math.min(minRY, ry);\n maxRY = Math.max(maxRY, ry);\n }\n\n const aabbWidth = maxRX - minRX;\n const aabbHeight = maxRY - minRY;\n\n // New destRect top-left\n dX = Math.floor(screenPivotX + minRX);\n dY = Math.floor(screenPivotY + minRY);\n dWidth = Math.ceil(aabbWidth);\n dHeight = Math.ceil(aabbHeight);\n\n // Update pivotOffset relative to new destRect\n pivotOffsetX = screenPivotX - dX;\n pivotOffsetY = screenPivotY - dY;\n\n // console.log('Rotation Debug:', {\n // angle: angle,\n // originalDest: { x: destRect.x, y: destRect.y, w: destRect.width, h: destRect.height },\n // pivot: pivot,\n // pivotOffsetX: pivotOffsetX,\n // pivotOffsetY: pivotOffsetY,\n // newDest: { x: dX, y: dY, w: dWidth, h: dHeight },\n // });\n }\n\n // Now clamp the (possibly adjusted) destRect\n const clamped = clampRectToCanvas(dX, dY, dWidth, dHeight, canvas.width, canvas.height);\n if (!clamped) return;\n\n const destStartX = clamped.x;\n const destStartY = clamped.y;\n const destEndX = clamped.x + clamped.width;\n const destEndY = clamped.y + clamped.height;\n\n if (!useRotation) {\n // Non-rotated paths (unchanged, but I added the out-of-bounds skip for consistency where clamping was used)\n if (algorithm === 'nn') {\n if (assumeOpaque && neutralTint) {\n for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n const dy = rowDestY - dY;\n let dstRowBase = rowDestY * canvasWidth * 4;\n for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n const dx = colDestX - dX;\n const idxDest = dstRowBase + colDestX * 4;\n\n const srcXoffset = Math.floor((dx + 0.5) * scaleX);\n const srcYoffset = Math.floor((dy + 0.5) * scaleY);\n\n let srcX = flipH ? (srcRect.x + (srcWidth - 1) - srcXoffset) : (srcRect.x + srcXoffset);\n let srcY = flipV ? (srcRect.y + (srcHeight - 1) - srcYoffset) : (srcRect.y + srcYoffset);\n\n // Skip if out of source bounds (instead of clamp)\n const relX = srcX - srcRect.x;\n const relY = srcY - srcRect.y;\n if (relX < 0 || relX >= srcWidth || relY < 0 || relY >= srcHeight) continue;\n\n const srcIdxBase = (srcY * atlasWidth + srcX) * 4;\n cdata[idxDest] = adata[srcIdxBase];\n cdata[idxDest + 1] = adata[srcIdxBase + 1];\n cdata[idxDest + 2] = adata[srcIdxBase + 2];\n cdata[idxDest + 3] = 255;\n }\n }\n if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n globalPerf.end(\"drawAtlas\");\n return;\n }\n\n if (neutralTint) {\n for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n const dy = rowDestY - dY;\n let dstRowBase = rowDestY * canvasWidth * 4;\n for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n const dx = colDestX - dX;\n const idxDest = dstRowBase + colDestX * 4;\n\n const srcXoffset = Math.floor((dx + 0.5) * scaleX);\n const srcYoffset = Math.floor((dy + 0.5) * scaleY);\n\n let srcX = flipH ? (srcRect.x + (srcWidth - 1) - srcXoffset) : (srcRect.x + srcXoffset);\n let srcY = flipV ? (srcRect.y + (srcHeight - 1) - srcYoffset) : (srcRect.y + srcYoffset);\n\n const relX = srcX - srcRect.x;\n const relY = srcY - srcRect.y;\n if (relX < 0 || relX >= srcWidth || relY < 0 || relY >= srcHeight) continue;\n\n const srcIdxBase = (srcY * atlasWidth + srcX) * 4;\n const sR = adata[srcIdxBase];\n const sG = adata[srcIdxBase + 1];\n const sB = adata[srcIdxBase + 2];\n const sA = adata[srcIdxBase + 3];\n\n if (sA === 255) {\n cdata[idxDest] = sR;\n cdata[idxDest + 1] = sG;\n cdata[idxDest + 2] = sB;\n cdata[idxDest + 3] = 255;\n continue;\n }\n\n const dR = cdata[idxDest];\n const dG = cdata[idxDest + 1];\n const dB = cdata[idxDest + 2];\n const dA = cdata[idxDest + 3];\n\n const inv = 255 - sA;\n\n const outR = ((sR * sA + dR * inv) + 127) / 255 | 0;\n const outG = ((sG * sA + dG * inv) + 127) / 255 | 0;\n const outB = ((sB * sA + dB * inv) + 127) / 255 | 0;\n const outA = ((sA * 255 + dA * inv) + 127) / 255 | 0;\n\n cdata[idxDest] = outR;\n cdata[idxDest + 1] = outG;\n cdata[idxDest + 2] = outB;\n cdata[idxDest + 3] = outA;\n }\n }\n if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n globalPerf.end(\"drawAtlas\");\n return;\n }\n\n for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n const dy = rowDestY - dY;\n let dstRowBase = rowDestY * canvasWidth * 4;\n for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n const dx = colDestX - dX;\n const idxDest = dstRowBase + colDestX * 4;\n\n const srcXoffset = Math.floor((dx + 0.5) * scaleX);\n const srcYoffset = Math.floor((dy + 0.5) * scaleY);\n\n let srcX = flipH ? (srcRect.x + (srcWidth - 1) - srcXoffset) : (srcRect.x + srcXoffset);\n let srcY = flipV ? (srcRect.y + (srcHeight - 1) - srcYoffset) : (srcRect.y + srcYoffset);\n\n const relX = srcX - srcRect.x;\n const relY = srcY - srcRect.y;\n if (relX < 0 || relX >= srcWidth || relY < 0 || relY >= srcHeight) continue;\n\n const srcIdxBase = (srcY * atlasWidth + srcX) * 4;\n\n const sR255 = adata[srcIdxBase];\n const sG255 = adata[srcIdxBase + 1];\n const sB255 = adata[srcIdxBase + 2];\n const sA255 = adata[srcIdxBase + 3];\n\n const sA = (sA255 / 255) * mA;\n const sR = (sR255 / 255) * mR;\n const sG = (sG255 / 255) * mG;\n const sB = (sB255 / 255) * mB;\n\n const dR = cdata[idxDest] / 255;\n const dG = cdata[idxDest + 1] / 255;\n const dB = cdata[idxDest + 2] / 255;\n const dA = cdata[idxDest + 3] / 255;\n\n const outA = sA + dA * (1 - sA);\n const outR = sR * sA + dR * (1 - sA);\n const outG = sG * sA + dG * (1 - sA);\n const outB = sB * sA + dB * (1 - sA);\n\n cdata[idxDest] = Math.round(outR * 255);\n cdata[idxDest + 1] = Math.round(outG * 255);\n cdata[idxDest + 2] = Math.round(outB * 255);\n cdata[idxDest + 3] = Math.round(outA * 255);\n }\n }\n if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n globalPerf.end(\"drawAtlas\");\n return;\n }\n\n if (algorithm !== 'nn') {\n if (assumeOpaque && neutralTint) {\n for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n const dy = rowDestY - dY;\n let dstRowBase = rowDestY * canvasWidth * 4;\n for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n const dx = colDestX - dX;\n const idxDest = dstRowBase + colDestX * 4;\n\n const unflippedSrcX = (dx + 0.5) * scaleX - 0.5;\n const unflippedSrcY = (dy + 0.5) * scaleY - 0.5;\n\n let srcX = flipH ? (srcRect.x + (srcWidth - 1) - unflippedSrcX) : (srcRect.x + unflippedSrcX);\n let srcY = flipV ? (srcRect.y + (srcHeight - 1) - unflippedSrcY) : (srcRect.y + unflippedSrcY);\n\n const relX = srcX - srcRect.x;\n const relY = srcY - srcRect.y;\n if (relX < 0 || relX >= srcWidth - 1 || relY < 0 || relY >= srcHeight - 1) continue; // For bilinear, ensure room for +1\n\n let x1 = Math.floor(srcX);\n let y1 = Math.floor(srcY);\n let x2 = Math.min(x1 + 1, srcRect.x + srcWidth - 1, atlasWidth - 1);\n let y2 = Math.min(y1 + 1, srcRect.y + srcHeight - 1, atlasHeight - 1);\n\n const dxFrac = srcX - x1;\n const dyFrac = srcY - y1;\n\n const p11Idx = (y1 * atlasWidth + x1) * 4;\n const p12Idx = (y1 * atlasWidth + x2) * 4;\n const p21Idx = (y2 * atlasWidth + x1) * 4;\n const p22Idx = (y2 * atlasWidth + x2) * 4;\n\n const interp = (c) => {\n const p11 = adata[p11Idx + c];\n const p12 = adata[p12Idx + c];\n const p21 = adata[p21Idx + c];\n const p22 = adata[p22Idx + c];\n const ix1 = p11 * (1 - dxFrac) + p12 * dxFrac;\n const ix2 = p21 * (1 - dxFrac) + p22 * dxFrac;\n return Math.round(ix1 * (1 - dyFrac) + ix2 * dyFrac);\n };\n\n cdata[idxDest] = interp(0);\n cdata[idxDest + 1] = interp(1);\n cdata[idxDest + 2] = interp(2);\n cdata[idxDest + 3] = 255;\n }\n }\n if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n globalPerf.end(\"drawAtlas\");\n return;\n }\n\n for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n const dy = rowDestY - dY;\n let dstRowBase = rowDestY * canvasWidth * 4;\n for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n const dx = colDestX - dX;\n const idxDest = dstRowBase + colDestX * 4;\n\n const unflippedSrcX = (dx + 0.5) * scaleX - 0.5;\n const unflippedSrcY = (dy + 0.5) * scaleY - 0.5;\n\n let srcX = flipH ? (srcRect.x + (srcWidth - 1) - unflippedSrcX) : (srcRect.x + unflippedSrcX);\n let srcY = flipV ? (srcRect.y + (srcHeight - 1) - unflippedSrcY) : (srcRect.y + unflippedSrcY);\n\n const relX = srcX - srcRect.x;\n const relY = srcY - srcRect.y;\n if (relX < 0 || relX >= srcWidth - 1 || relY < 0 || relY >= srcHeight - 1) continue;\n\n let x1 = Math.floor(srcX);\n let y1 = Math.floor(srcY);\n let x2 = Math.min(x1 + 1, srcRect.x + srcWidth - 1, atlasWidth - 1);\n let y2 = Math.min(y1 + 1, srcRect.y + srcHeight - 1, atlasHeight - 1);\n\n const dxFrac = srcX - x1;\n const dyFrac = srcY - y1;\n\n const p11Idx = (y1 * atlasWidth + x1) * 4;\n const p12Idx = (y1 * atlasWidth + x2) * 4;\n const p21Idx = (y2 * atlasWidth + x1) * 4;\n const p22Idx = (y2 * atlasWidth + x2) * 4;\n\n const interpChannel = (c) => {\n const p11 = adata[p11Idx + c];\n const p12 = adata[p12Idx + c];\n const p21 = adata[p21Idx + c];\n const p22 = adata[p22Idx + c];\n const interpX1 = p11 * (1 - dxFrac) + p12 * dxFrac;\n const interpX2 = p21 * (1 - dxFrac) + p22 * dxFrac;\n return interpX1 * (1 - dyFrac) + interpX2 * dyFrac;\n };\n\n const sR255 = interpChannel(0);\n const sG255 = interpChannel(1);\n const sB255 = interpChannel(2);\n const sA255 = interpChannel(3);\n\n const sA = (sA255 / 255) * mA;\n const sR = (sR255 / 255) * mR;\n const sG = (sG255 / 255) * mG;\n const sB = (sB255 / 255) * mB;\n\n const dR = cdata[idxDest] / 255;\n const dG = cdata[idxDest + 1] / 255;\n const dB = cdata[idxDest + 2] / 255;\n const dA = cdata[idxDest + 3] / 255;\n\n const outA = sA + dA * (1 - sA);\n const outR = sR * sA + dR * (1 - sA);\n const outG = sG * sA + dG * (1 - sA);\n const outB = sB * sA + dB * (1 - sA);\n\n cdata[idxDest] = Math.round(outR * 255);\n cdata[idxDest + 1] = Math.round(outG * 255);\n cdata[idxDest + 2] = Math.round(outB * 255);\n cdata[idxDest + 3] = Math.round(outA * 255);\n }\n }\n if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n globalPerf.end(\"drawAtlas\");\n return;\n }\n }\n\n // Rotated paths\n const srcRectX = srcRect.x;\n const srcRectY = srcRect.y;\n const srcMaxX = srcRect.x + srcWidth - 1;\n const srcMaxY = srcRect.y + srcHeight - 1;\n const atlasW = atlasWidth;\n const atlasH = atlasHeight;\n\n if (algorithm === 'nn') {\n if (assumeOpaque && neutralTint) {\n for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n const py = (rowDestY - dY) + 0.5;\n let dstRowBase = rowDestY * canvasWidth * 4;\n for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n const px = (colDestX - dX) + 0.5;\n const idxDest = dstRowBase + colDestX * 4;\n\n const localX = px - pivotOffsetX;\n const localY = py - pivotOffsetY;\n const ux = cosA * localX + sinA * localY;\n const uy = -sinA * localX + cosA * localY;\n\n let mappedRelX = (ux + pivotOffsetX) * scaleX;\n let mappedRelY = (uy + pivotOffsetY) * scaleY;\n\n if (flipH) mappedRelX = (srcWidth - 1) - mappedRelX;\n if (flipV) mappedRelY = (srcHeight - 1) - mappedRelY;\n\n if (mappedRelX < 0 || mappedRelX >= srcWidth || mappedRelY < 0 || mappedRelY >= srcHeight) continue;\n\n let srcX = Math.round(srcRectX + mappedRelX);\n let srcY = Math.round(srcRectY + mappedRelY);\n\n const srcIdxBase = (srcY * atlasW + srcX) * 4;\n cdata[idxDest] = adata[srcIdxBase];\n cdata[idxDest + 1] = adata[srcIdxBase + 1];\n cdata[idxDest + 2] = adata[srcIdxBase + 2];\n cdata[idxDest + 3] = 255;\n }\n }\n if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n globalPerf.end(\"drawAtlas\");\n return;\n }\n\n if (neutralTint) {\n for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n const py = (rowDestY - dY) + 0.5;\n let dstRowBase = rowDestY * canvasWidth * 4;\n for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n const px = (colDestX - dX) + 0.5;\n const idxDest = dstRowBase + colDestX * 4;\n\n const localX = px - pivotOffsetX;\n const localY = py - pivotOffsetY;\n const ux = cosA * localX + sinA * localY;\n const uy = -sinA * localX + cosA * localY;\n\n // FIXED: Use orig_pivotOffsetX/Y for mapping\n let mappedRelX = (ux + orig_pivotOffsetX) * scaleX;\n let mappedRelY = (uy + orig_pivotOffsetY) * scaleY;\n\n if (flipH) mappedRelX = (srcWidth - 1) - mappedRelX;\n if (flipV) mappedRelY = (srcHeight - 1) - mappedRelY;\n\n if (mappedRelX < 0 || mappedRelX >= srcWidth || mappedRelY < 0 || mappedRelY >= srcHeight) continue;\n\n let srcX = Math.round(srcRectX + mappedRelX);\n let srcY = Math.round(srcRectY + mappedRelY);\n\n const srcIdxBase = (srcY * atlasW + srcX) * 4;\n const sR = adata[srcIdxBase];\n const sG = adata[srcIdxBase + 1];\n const sB = adata[srcIdxBase + 2];\n const sA = adata[srcIdxBase + 3];\n\n if (sA === 255) {\n cdata[idxDest] = sR;\n cdata[idxDest + 1] = sG;\n cdata[idxDest + 2] = sB;\n cdata[idxDest + 3] = 255;\n continue;\n }\n\n const dR = cdata[idxDest];\n const dG = cdata[idxDest + 1];\n const dB = cdata[idxDest + 2];\n const dA = cdata[idxDest + 3];\n\n const inv = 255 - sA;\n\n const outR = ((sR * sA + dR * inv) + 127) / 255 | 0;\n const outG = ((sG * sA + dG * inv) + 127) / 255 | 0;\n const outB = ((sB * sA + dB * inv) + 127) / 255 | 0;\n const outA = ((sA * 255 + dA * inv) + 127) / 255 | 0;\n\n cdata[idxDest] = outR;\n cdata[idxDest + 1] = outG;\n cdata[idxDest + 2] = outB;\n cdata[idxDest + 3] = outA;\n }\n }\n if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n globalPerf.end(\"drawAtlas\");\n return;\n }\n\n for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n const py = (rowDestY - dY) + 0.5;\n let dstRowBase = rowDestY * canvasWidth * 4;\n for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n const px = (colDestX - dX) + 0.5;\n const idxDest = dstRowBase + colDestX * 4;\n\n const localX = px - pivotOffsetX;\n const localY = py - pivotOffsetY;\n const ux = cosA * localX + sinA * localY;\n const uy = -sinA * localX + cosA * localY;\n\n // FIXED: Use orig_pivotOffsetX/Y for mapping\n let mappedRelX = (ux + orig_pivotOffsetX) * scaleX;\n let mappedRelY = (uy + orig_pivotOffsetY) * scaleY;\n\n if (flipH) mappedRelX = (srcWidth - 1) - mappedRelX;\n if (flipV) mappedRelY = (srcHeight - 1) - mappedRelY;\n\n if (mappedRelX < 0 || mappedRelX >= srcWidth || mappedRelY < 0 || mappedRelY >= srcHeight) continue;\n\n const srcFloatX = srcRectX + mappedRelX;\n const srcFloatY = srcRectY + mappedRelY;\n\n const sIdxBase = ((Math.max(srcRectY, Math.min(srcMaxY, Math.round(srcFloatY))) * atlasW) + Math.max(srcRectX, Math.min(srcMaxX, Math.round(srcFloatX)))) * 4;\n\n const sR255 = adata[sIdxBase];\n const sG255 = adata[sIdxBase + 1];\n const sB255 = adata[sIdxBase + 2];\n const sA255 = adata[sIdxBase + 3];\n\n const sA = (sA255 / 255) * mA;\n const sR = (sR255 / 255) * mR;\n const sG = (sG255 / 255) * mG;\n const sB = (sB255 / 255) * mB;\n\n const dR = cdata[idxDest] / 255;\n const dG = cdata[idxDest + 1] / 255;\n const dB = cdata[idxDest + 2] / 255;\n const dA = cdata[idxDest + 3] / 255;\n\n const outA = sA + dA * (1 - sA);\n const outR = sR * sA + dR * (1 - sA);\n const outG = sG * sA + dG * (1 - sA);\n const outB = sB * sA + dB * (1 - sA);\n\n cdata[idxDest] = Math.round(outR * 255);\n cdata[idxDest + 1] = Math.round(outG * 255);\n cdata[idxDest + 2] = Math.round(outB * 255);\n cdata[idxDest + 3] = Math.round(outA * 255);\n }\n }\n if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n globalPerf.end(\"drawAtlas\");\n return;\n }\n\n // rotated bilinear\n if (assumeOpaque && neutralTint) {\n for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n const py = (rowDestY - dY) + 0.5;\n let dstRowBase = rowDestY * canvasWidth * 4;\n for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n const px = (colDestX - dX) + 0.5;\n const idxDest = dstRowBase + colDestX * 4;\n\n const localX = px - pivotOffsetX;\n const localY = py - pivotOffsetY;\n const ux = cosA * localX + sinA * localY;\n const uy = -sinA * localX + cosA * localY;\n\n // FIXED: Use orig_pivotOffsetX/Y for mapping\n let srcXf = srcRectX + (ux + orig_pivotOffsetX) * scaleX - 0.5;\n let srcYf = srcRectY + (uy + orig_pivotOffsetY) * scaleY - 0.5;\n\n if (flipH) srcXf = srcRectX + (srcWidth - 1) - (srcXf - srcRectX);\n if (flipV) srcYf = srcRectY + (srcHeight - 1) - (srcYf - srcRectY);\n\n const relX = srcXf - srcRect.x;\n const relY = srcYf - srcRect.y;\n if (relX < 0 || relX >= srcWidth - 1 || relY < 0 || relY >= srcHeight - 1) continue;\n\n let x1 = Math.floor(srcXf);\n let y1 = Math.floor(srcYf);\n let x2 = Math.min(x1 + 1, srcMaxX, atlasW - 1);\n let y2 = Math.min(y1 + 1, srcMaxY, atlasH - 1);\n\n const dxFrac = srcXf - x1;\n const dyFrac = srcYf - y1;\n\n const p11Idx = (y1 * atlasW + x1) * 4;\n const p12Idx = (y1 * atlasW + x2) * 4;\n const p21Idx = (y2 * atlasW + x1) * 4;\n const p22Idx = (y2 * atlasW + x2) * 4;\n\n const interp = (c) => {\n const p11 = adata[p11Idx + c];\n const p12 = adata[p12Idx + c];\n const p21 = adata[p21Idx + c];\n const p22 = adata[p22Idx + c];\n const ix1 = p11 * (1 - dxFrac) + p12 * dxFrac;\n const ix2 = p21 * (1 - dxFrac) + p22 * dxFrac;\n return Math.round(ix1 * (1 - dyFrac) + ix2 * dyFrac);\n };\n\n cdata[idxDest] = interp(0);\n cdata[idxDest + 1] = interp(1);\n cdata[idxDest + 2] = interp(2);\n cdata[idxDest + 3] = 255;\n }\n }\n if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n globalPerf.end(\"drawAtlas\");\n return;\n }\n\n for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n const py = (rowDestY - dY) + 0.5;\n let dstRowBase = rowDestY * canvasWidth * 4;\n for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n const px = (colDestX - dX) + 0.5;\n const idxDest = dstRowBase + colDestX * 4;\n\n const localX = px - pivotOffsetX;\n const localY = py - pivotOffsetY;\n const ux = cosA * localX + sinA * localY;\n const uy = -sinA * localX + cosA * localY;\n\n // FIXED: Use orig_pivotOffsetX/Y for mapping\n let srcXf = srcRectX + (ux + orig_pivotOffsetX) * scaleX - 0.5;\n let srcYf = srcRectY + (uy + orig_pivotOffsetY) * scaleY - 0.5;\n\n if (flipH) srcXf = srcRectX + (srcWidth - 1) - (srcXf - srcRectX);\n if (flipV) srcYf = srcRectY + (srcHeight - 1) - (srcYf - srcRectY);\n\n const relX = srcXf - srcRect.x;\n const relY = srcYf - srcRect.y;\n if (relX < 0 || relX >= srcWidth - 1 || relY < 0 || relY >= srcHeight - 1) continue;\n\n let x1 = Math.floor(srcXf);\n let y1 = Math.floor(srcYf);\n let x2 = Math.min(x1 + 1, srcMaxX, atlasW - 1);\n let y2 = Math.min(y1 + 1, srcMaxY, atlasH - 1);\n\n const dxFrac = srcXf - x1;\n const dyFrac = srcYf - y1;\n\n const p11Idx = (y1 * atlasW + x1) * 4;\n const p12Idx = (y1 * atlasW + x2) * 4;\n const p21Idx = (y2 * atlasW + x1) * 4;\n const p22Idx = (y2 * atlasW + x2) * 4;\n\n const interpChannel = (c) => {\n const p11 = adata[p11Idx + c];\n const p12 = adata[p12Idx + c];\n const p21 = adata[p21Idx + c];\n const p22 = adata[p22Idx + c];\n const interpX1 = p11 * (1 - dxFrac) + p12 * dxFrac;\n const interpX2 = p21 * (1 - dxFrac) + p22 * dxFrac;\n return interpX1 * (1 - dyFrac) + interpX2 * dyFrac;\n };\n\n const sR255 = interpChannel(0);\n const sG255 = interpChannel(1);\n const sB255 = interpChannel(2);\n const sA255 = interpChannel(3);\n\n const sA = (sA255 / 255) * mA;\n const sR = (sR255 / 255) * mR;\n const sG = (sG255 / 255) * mG;\n const sB = (sB255 / 255) * mB;\n\n const dR = cdata[idxDest] / 255;\n const dG = cdata[idxDest + 1] / 255;\n const dB = cdata[idxDest + 2] / 255;\n const dA = cdata[idxDest + 3] / 255;\n\n const outA = sA + dA * (1 - sA);\n const outR = sR * sA + dR * (1 - sA);\n const outG = sG * sA + dG * (1 - sA);\n const outB = sB * sA + dB * (1 - sA);\n\n cdata[idxDest] = Math.round(outR * 255);\n cdata[idxDest + 1] = Math.round(outG * 255);\n cdata[idxDest + 2] = Math.round(outB * 255);\n cdata[idxDest + 3] = Math.round(outA * 255);\n }\n }\n\n if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n globalPerf.end(\"drawAtlas\");\n}","import { PixelBuffer, PerformanceMonitor } from \"tessera.js\";\nimport { globalPerf } from \"./lib.js\";\n// Global profiler for transform calculations\nconst transformMonitor = globalPerf;\n\n\nexport function vec2(x = 0, y = 0) {\n return { x, y };\n}\n\n/**\n * local transforms are relative to an object's parent or its own origin (like moving along its own \"front\"), while global transforms are relative to the fixed world origin (0,0,0)\n */\nexport class Transform2D {\n constructor() {\n this.position = vec2();\n this.rotation = 0; // radians\n this.scale = vec2(1, 1);\n }\n\n copy(other) {\n this.position.x = other.position.x;\n this.position.y = other.position.y;\n this.rotation = other.rotation;\n this.scale.x = other.scale.x;\n this.scale.y = other.scale.y;\n }\n}\n\n\n/**\n * \n * Node - base class for all scene objects\n * \n * Why this design:\n * - Children array for hierarchy\n * - Dirty flags prevent redundant transform calculations\n * - Lifecycle hooks (_ready, _process, _draw) give clear entry points\n * - World transform cached for performance\n */\n\nexport class Node {\n constructor(name = \"node\") {\n this.name = name;\n this.parent = null;\n this.children = [];\n\n // relative to parent\n this.position = vec2();\n this.rotation = 0;\n this.scale = vec2(1, 1);\n\n // world transform absolute, cached\n this.worldPosition = vec2();\n this.worldRotation = 0;\n this.worldScale = vec2(1, 1);\n\n this.worldCos = 1; // Default to rotation 0\n this.worldSin = 0;\n\n\n this.transformDirty = true; // needs recalculation?\n this.visible = true;\n this.active = true; // if false, skip _process\n\n // lifecycle state\n this.ready = false;\n\n this.physicsWorld = null\n\n }\n /**\n * \n * @param {Node} node \n * @returns \n */\n addChild(node) {\n if (node.parent) {\n node.parent.removeChild(node);\n }\n node.parent = this;\n node.transformDirty = true;\n this.children.push(node);\n return node;\n }\n /**\n * \n * @param {Node} node \n * @returns \n */\n removeChild(node) {\n\n const idx = this.children.indexOf(node);\n if (idx !== -1) {\n this.children.splice(idx, 1);\n node.parent = null;\n }\n }\n\n\n markDirty() {\n // this.transformDirty = true;\n // for (let i = 0; i < this.children.length; i++) {\n // this.children[i].markDirty();\n // }\n\n const stack = [this];\n while (stack.length > 0) {\n const node = stack.pop();\n node.transformDirty = true;\n for (let i = node.children.length - 1; i >= 0; i--) { // Reverse for depth-first\n stack.push(node.children[i]);\n }\n }\n }\n\n\n /**\n * Calculate world transform from local + parent\n * \n * Why this order:\n * 1. Scale the local position\n * 2. Rotate it\n * 3. Add parent's world position\n * \n * This gives proper transform inheritance (child orbits parent)\n */\n updateWorldTransform() {\n transformMonitor.start(\"updateWorldTransform\")\n\n if (!this.transformDirty) {\n transformMonitor.end(\"updateWorldTransform\")\n return;\n }\n\n if (this.parent) {\n // transform relative to parent \n // ensure parent is up to date\n this.parent.updateWorldTransform();\n\n // apply parent's transform to our local transform\n const cos = this.parent.worldCos;\n const sin = this.parent.worldSin;\n\n // scale local position by parent scale\n const scaledX = this.position.x * this.parent.worldScale.x;\n const scaledY = this.position.y * this.parent.worldScale.y;\n\n // rotate scaled position\n const rotatedX = scaledX * cos - scaledY * sin;\n const rotatedY = scaledX * sin + scaledY * cos;\n\n // translate by parent world position\n this.worldPosition.x = this.parent.worldPosition.x + rotatedX;\n this.worldPosition.y = this.parent.worldPosition.y + rotatedY;\n\n // inherit rotation and scale\n this.worldRotation = this.parent.worldRotation + this.rotation;\n this.worldScale.x = this.parent.worldScale.x * this.scale.x;\n this.worldScale.y = this.parent.worldScale.y * this.scale.y;\n } else {\n // root node - world = local\n this.worldPosition.x = this.position.x;\n this.worldPosition.y = this.position.y;\n this.worldRotation = this.rotation;\n this.worldScale.x = this.scale.x;\n this.worldScale.y = this.scale.y;\n }\n\n this.worldCos = Math.cos(this.worldRotation);\n this.worldSin = Math.sin(this.worldRotation);\n this.transformDirty = false\n transformMonitor.end(\"updateWorldTransform\")\n\n }\n\n\n // assumes parent.world* are up-to-date\n getWorldPosition() {\n this.updateWorldTransform();\n return { x: this.worldPosition.x, y: this.worldPosition.y };\n }\n\n worldToLocal(wx, wy) {\n if (!this.parent) return { x: wx, y: wy };\n // Make sure parent's world transform is current\n this.parent.updateWorldTransform();\n\n // Translate into parent's local space\n let px = wx - this.parent.worldPosition.x;\n let py = wy - this.parent.worldPosition.y;\n\n // Inverse rotate by parent's rotation\n const cos = this.parent.worldCos; // cos(-theta) = cos(theta)\n const sin = -this.parent.worldSin; // sin(-theta) = -sin(theta)\n let lx = px * cos - py * sin;\n let ly = px * sin + py * cos;\n\n // Inverse scale by parent's scale\n lx = lx / this.parent.worldScale.x;\n ly = ly / this.parent.worldScale.y;\n\n return { x: lx, y: ly };\n }\n\n localToWorld(lx, ly) {\n this.updateWorldTransform(); // ensure parent chain is up-to-date\n const cos = this.worldCos;\n const sin = this.worldSin;\n\n // scale then rotate then translate\n const sx = lx * this.worldScale.x;\n const sy = ly * this.worldScale.y;\n\n const rx = sx * cos - sy * sin;\n const ry = sx * sin + sy * cos;\n\n return { x: this.worldPosition.x + rx, y: this.worldPosition.y + ry };\n }\n\n\n\n _ready() {\n // Called once when node enters scene tree\n }\n\n _process(delta) {\n // Called every frame with time delta\n }\n\n _draw(canvas, camera) {\n // Called every frame for rendering\n }\n\n\n /**\n * internal tree traversal - don't override these\n */\n propagateReady() {\n if (!this.ready) {\n this._ready();\n this.ready = true;\n }\n for (let i = 0; i < this.children.length; i++) {\n this.children[i].propagateReady();\n }\n }\n\n propagateProcess(delta) {\n transformMonitor.start(\"propagateProcess\")\n\n if (this.active) {\n this._process(delta);\n }\n // TODO: should childs inherit parents inactive state? \n for (let i = 0; i < this.children.length; i++) {\n this.children[i].propagateProcess(delta);\n }\n\n transformMonitor.end(\"propagateProcess\")\n }\n\n propagateDraw(canvas, camera) {\n transformMonitor.start(\"propagateDraw\")\n\n if (!this.visible) {\n transformMonitor.end(\"propagateDraw\")\n return;\n }\n\n this.updateWorldTransform();\n this._draw(canvas, camera);\n\n for (let i = 0; i < this.children.length; i++) {\n this.children[i].propagateDraw(canvas, camera);\n }\n // const stack = [{ node: this, index: 0 }];\n // while (stack.length > 0) {\n // const entry = stack[stack.length - 1];\n // const node = entry.node;\n\n // if (entry.index === 0) { // Pre-child phase\n // if (!node.visible) {\n // stack.pop();\n // continue;\n // }\n // node.updateWorldTransform();\n // node._draw(canvas, camera);\n // }\n\n // if (entry.index < node.children.length) { // Push next child\n // const child = node.children[entry.index];\n // entry.index++;\n // stack.push({ node: child, index: 0 });\n // } else { // All children done\n // stack.pop();\n // }\n // }\n\n transformMonitor.end(\"propagateDraw\")\n }\n\n\n /**\n * utility: find child by name (recursive)\n */\n findChild(name, recursive = true) {\n for (let i = 0; i < this.children.length; i++) {\n if (this.children[i].name === name) {\n return this.children[i];\n }\n if (recursive) {\n const found = this.children[i].findChild(name, true);\n if (found) return found;\n }\n }\n return null;\n }\n\n /**\n * utility: get full path (e.g., \"Root/Player/Sprite\")\n */\n getPath() {\n if (!this.parent) return this.name;\n return this.parent.getPath() + \"/\" + this.name;\n }\n}\n\n\n\n\n/**\n * Scene - root container + game loop coordinator\n * \n * why Scene:\n * - single entry point for update/draw\n * - manages lifecycle (ready propagation)\n * - can pause/unpause entire tree\n * - scene loading/unloading\n */\n\nexport class Scene {\n /**\n * \n * @param {PixelBuffer} canvas \n */\n constructor(canvas) {\n this.canvas = canvas;\n this.root = new Node(\"Root\");\n this.paused = false;\n this.timeScale = 1.0; // slow-mo or fast-forward\n this.camera = null;\n\n // // trigger _ready on root\n // this.root.propagateReady();\n }\n\n set physicsWorld(world) {\n // TODO: guard\n this.root.physicsWorld = world\n }\n addChild(node) {\n return this.root.addChild(node);\n }\n\n start() {\n this.root.propagateReady()\n }\n process(delta) {\n if (this.paused) return;\n const scaledDelta = delta * this.timeScale;\n this.root.propagateProcess(scaledDelta);\n }\n\n draw() {\n this.root.propagateDraw(this.canvas, this.camera);\n }\n\n /**\n * find node by path (e.g., \"Player/Weapon\")\n */\n getNode(path) {\n const parts = path.split('/');\n let current = this.root;\n\n for (let i = 0; i < parts.length; i++) {\n if (parts[i] === 'Root' || parts[i] === '') continue;\n current = current.findChild(parts[i], false);\n if (!current) return null;\n }\n\n return current;\n }\n\n /**\n * debug: print tree structure\n */\n printTree(node = this.root, indent = 0) {\n const prefix = ' '.repeat(indent);\n const pos = `(${node.worldPosition.x.toFixed(1)}, ${node.worldPosition.y.toFixed(1)})`;\n console.log(`${prefix}${node.name} ${pos}`);\n for (let i = 0; i < node.children.length; i++) {\n this.printTree(node.children[i], indent + 1);\n }\n }\n}","import { Node } from \"./core.js\"\r\n\r\nexport function vec2(x = 0, y = 0) {\r\n return { x, y };\r\n}\r\n\r\nexport class Camera2D extends Node {\r\n constructor(name = \"camera\") {\r\n super(name)\r\n this.name = name;\r\n this.parent = null;\r\n this.children = [];\r\n\r\n // local transform (relative to parent camera/world)\r\n this.position = vec2();\r\n this.rotation = 0; // radians\r\n this.scale = vec2(1, 1);\r\n\r\n // camera-specific properties\r\n this.zoom = 1.0; // Multiplicative zoom factor\r\n /**\r\n * @type {Viewport}\r\n */\r\n this.viewport = null; // Viewport for screen rendering\r\n this.near = -1000; // Near clipping plane\r\n this.far = 1000; // Far clipping plane\r\n\r\n // cached transforms\r\n this.worldPosition = vec2();\r\n this.worldRotation = 0;\r\n this.worldScale = vec2(1, 1);\r\n this.worldZoom = 1.0;\r\n\r\n\r\n this.transformDirty = true;\r\n this.projectionDirty = true;\r\n\r\n // view frustum for culling (updated each frame)\r\n this.frustum = {\r\n left: 0, right: 0,\r\n top: 0, bottom: 0,\r\n near: 0, far: 0\r\n };\r\n\r\n this.bounds = {\r\n left: 0, right: 0,\r\n top: 0, bottom: 0,\r\n }\r\n\r\n // camera viewport size (in world units at zoom=1)\r\n this.viewWidth = 800;\r\n this.viewHeight = 600;\r\n\r\n\r\n this.active = true;\r\n this.cullingEnabled = true;\r\n\r\n // cached matrices (avoid recalculating every frame)\r\n this._viewMatrix = null;\r\n this._projectionMatrix = null;\r\n this._viewProjectionMatrix = null;\r\n }\r\n\r\n\r\n setBounds(bounds) {\r\n this.bounds = bounds\r\n }\r\n /**\r\n * viewport\r\n * @param {*} width \r\n * @param {*} height \r\n */\r\n setViewSize(width, height) {\r\n this.viewWidth = width;\r\n this.viewHeight = height;\r\n this.projectionDirty = true;\r\n }\r\n\r\n updateWorldTransform() {\r\n if (!this.transformDirty && !this.projectionDirty) return;\r\n\r\n if (this.parent && this.parent.updateWorldTransform) {\r\n this.parent.updateWorldTransform();\r\n\r\n // Inherit parent's world transform\r\n const cos = Math.cos(this.parent.worldRotation);\r\n const sin = Math.sin(this.parent.worldRotation);\r\n\r\n const scaledX = this.position.x * this.parent.worldScale.x;\r\n const scaledY = this.position.y * this.parent.worldScale.y;\r\n\r\n const rotatedX = scaledX * cos - scaledY * sin;\r\n const rotatedY = scaledX * sin + scaledY * cos;\r\n\r\n this.worldPosition.x = this.parent.worldPosition.x + rotatedX;\r\n this.worldPosition.y = this.parent.worldPosition.y + rotatedY;\r\n\r\n this.worldRotation = this.parent.worldRotation + this.rotation;\r\n this.worldScale.x = this.parent.worldScale.x * this.scale.x;\r\n this.worldScale.y = this.parent.worldScale.y * this.scale.y;\r\n this.worldZoom = this.parent.worldZoom * this.zoom;\r\n } else {\r\n // Root camera\r\n this.worldPosition.x = this.position.x;\r\n this.worldPosition.y = this.position.y;\r\n this.worldRotation = this.rotation;\r\n this.worldScale.x = this.scale.x;\r\n this.worldScale.y = this.scale.y;\r\n this.worldZoom = this.zoom;\r\n }\r\n\r\n this._updateFrustum();\r\n\r\n }\r\n\r\n _process(delta) {\r\n super._process(delta);\r\n this.updateWorldTransform()\r\n }\r\n\r\n /**\r\n * visible space in world \r\n */\r\n _updateFrustum() {\r\n const hw = (this.viewWidth / 2) / this.worldZoom;\r\n const hh = (this.viewHeight / 2) / this.worldZoom;\r\n const c = Math.cos(this.worldRotation);\r\n const s = Math.sin(this.worldRotation);\r\n const cx = this.worldPosition.x;\r\n const cy = this.worldPosition.y;\r\n\r\n const absC = Math.abs(c);\r\n const absS = Math.abs(s);\r\n\r\n const halfExtentX = absC * hw + absS * hh;\r\n const halfExtentY = absS * hw + absC * hh;\r\n\r\n this.frustum.left = cx - halfExtentX;\r\n this.frustum.right = cx + halfExtentX;\r\n this.frustum.top = cy - halfExtentY;\r\n this.frustum.bottom = cy + halfExtentY;\r\n this.frustum.near = this.near;\r\n this.frustum.far = this.far;\r\n }\r\n\r\n\r\n worldToScreen(worldX, worldY, applyViewport = true) {\r\n this.updateWorldTransform()\r\n\r\n // inverse of camera's world transform\r\n const dx = worldX - this.worldPosition.x;\r\n const dy = worldY - this.worldPosition.y;\r\n\r\n // rotate by negative camera rotation (bring to camera space)\r\n const cos = Math.cos(-this.worldRotation);\r\n const sin = Math.sin(-this.worldRotation);\r\n\r\n let camX = dx * cos - dy * sin;\r\n let camY = dx * sin + dy * cos;\r\n\r\n camX *= this.worldZoom;\r\n camY *= this.worldZoom;\r\n\r\n let screenX = camX + this.viewWidth / 2;\r\n let screenY = camY + this.viewHeight / 2;\r\n\r\n if (applyViewport && this.viewport) {\r\n const scaleX = this.viewport.width / this.viewWidth;\r\n const scaleY = this.viewport.height / this.viewHeight;\r\n\r\n return {\r\n x: screenX * scaleX + this.viewport.x,\r\n y: screenY * scaleY + this.viewport.y\r\n };\r\n }\r\n\r\n return { x: screenX, y: screenY };\r\n\r\n }\r\n\r\n screenToWorld(screenX, screenY) {\r\n this.updateWorldTransform();\r\n\r\n let localX, localY;\r\n\r\n // 1. Remove viewport transform if present\r\n if (this.viewport) {\r\n const scaleX = this.viewWidth / this.viewport.width;\r\n const scaleY = this.viewHeight / this.viewport.height;\r\n\r\n localX = (screenX - this.viewport.x) * scaleX;\r\n localY = (screenY - this.viewport.y) * scaleY;\r\n } else {\r\n localX = screenX;\r\n localY = screenY;\r\n }\r\n\r\n // 2. Convert from screen to camera space\r\n let camX = localX - this.viewWidth / 2;\r\n let camY = localY - this.viewHeight / 2;\r\n\r\n // Apply inverse zoom\r\n camX /= this.worldZoom;\r\n camY /= this.worldZoom;\r\n\r\n // 3. Rotate by camera rotation (inverse of negative rotation)\r\n const cos = Math.cos(this.worldRotation);\r\n const sin = Math.sin(this.worldRotation);\r\n\r\n const worldX = camX * cos - camY * sin + this.worldPosition.x;\r\n const worldY = camX * sin + camY * cos + this.worldPosition.y;\r\n\r\n return { x: worldX, y: worldY };\r\n }\r\n\r\n\r\n getVisibility(x, y, width = 0, height = 0) {\r\n if (!this.cullingEnabled) return 2;\r\n\r\n this.updateWorldTransform();\r\n\r\n const left = x - width / 2;\r\n const right = x + width / 2;\r\n const top = y - height / 2;\r\n const bottom = y + height / 2;\r\n\r\n // Complete outside check\r\n if (right < this.frustum.left || left > this.frustum.right ||\r\n bottom < this.frustum.top || top > this.frustum.bottom) {\r\n return 0; // Outside\r\n }\r\n\r\n // Complete inside check\r\n if (left >= this.frustum.left && right <= this.frustum.right &&\r\n top >= this.frustum.top && bottom <= this.frustum.bottom) {\r\n return 2; // Fully inside\r\n }\r\n\r\n return 1; // Intersecting\r\n }\r\n\r\n isVisible(x, y, margin = 0) {\r\n if (!this.cullingEnabled) return true;\r\n\r\n this.updateWorldTransform();\r\n\r\n return x >= this.frustum.left - margin && x <= this.frustum.right + margin &&\r\n y >= this.frustum.top - margin && y <= this.frustum.bottom + margin;\r\n }\r\n\r\n\r\n /**\r\n * Check if an axis-aligned bounding box (AABB) is visible in the camera view\r\n * @param {number} worldX - Center X of the AABB in world space\r\n * @param {number} worldY - Center Y of the AABB in world space\r\n * @param {number} width - Width of the AABB\r\n * @param {number} height - Height of the AABB\r\n * @returns {boolean} True if the AABB is at least partially visible\r\n */\r\n isAABBVisible(worldX, worldY, width, height) {\r\n return this.getVisibility(worldX, worldY, width, height) > 0;\r\n }\r\n\r\n getVisibleBounds() {\r\n this.updateWorldTransform();\r\n\r\n return {\r\n left: this.frustum.left,\r\n right: this.frustum.right,\r\n top: this.frustum.top,\r\n bottom: this.frustum.bottom,\r\n width: this.frustum.right - this.frustum.left,\r\n height: this.frustum.bottom - this.frustum.top\r\n };\r\n }\r\n\r\n\r\n moveLocal(dx, dy) {\r\n const cos = Math.cos(this.rotation);\r\n const sin = Math.sin(this.rotation);\r\n\r\n this.position.x += dx * cos - dy * sin;\r\n this.position.y += dx * sin + dy * cos;\r\n this.transformDirty = true;\r\n }\r\n\r\n moveWorld(dx, dy) {\r\n this.position.x += dx;\r\n this.position.y += dy;\r\n this.transformDirty = true;\r\n }\r\n\r\n setPosition(x, y) {\r\n this.position.x = x;\r\n this.position.y = y;\r\n this.transformDirty = true;\r\n }\r\n\r\n\r\n /**\r\n * Zoom with optional pivot point (world space)\r\n * Pivot allows zooming toward a specific point (like mouse position)\r\n */\r\n zoomTo(factor, pivotX = null, pivotY = null) {\r\n if (pivotX !== null && pivotY !== null) {\r\n // Get current world position of pivot\r\n const pivotWorld = this.screenToWorld(pivotX, pivotY);\r\n\r\n // Apply zoom\r\n const oldZoom = this.zoom;\r\n this.zoom = factor;\r\n this.transformDirty = true;\r\n\r\n // Adjust position to keep pivot at same screen position\r\n const newPivotWorld = this.screenToWorld(pivotX, pivotY);\r\n\r\n this.position.x += pivotWorld.x - newPivotWorld.x;\r\n this.position.y += pivotWorld.y - newPivotWorld.y;\r\n } else {\r\n this.zoom = factor;\r\n this.transformDirty = true;\r\n }\r\n }\r\n\r\n applyShake(intensity, decay = 0.9) {\r\n if (intensity > 0.1) {\r\n this.position.x += (Math.random() - 0.5) * intensity * 2;\r\n this.position.y += (Math.random() - 0.5) * intensity * 2;\r\n this.transformDirty = true;\r\n return intensity * decay;\r\n }\r\n return 0;\r\n }\r\n\r\n}\r\n\r\n\r\nexport class Viewport {\r\n constructor(x, y, width, height) {\r\n this.x = x;\r\n this.y = y;\r\n this.width = width;\r\n this.height = height;\r\n this.scissorEnabled = true;\r\n }\r\n\r\n contains(screenX, screenY) {\r\n return screenX >= this.x && screenX < this.x + this.width &&\r\n screenY >= this.y && screenY < this.y + this.height;\r\n }\r\n\r\n setScissor(enabled) {\r\n this.scissorEnabled = enabled;\r\n }\r\n\r\n shouldClip(canvasX, canvasY, margin = 0) {\r\n if (!this.scissorEnabled) return false;\r\n\r\n return canvasX < this.x - margin || canvasX >= this.x + this.width + margin ||\r\n canvasY < this.y - margin || canvasY >= this.y + this.height + margin;\r\n }\r\n}","/**\r\n * - `t = 0` → returns `a`\r\n- `t = 0.5` → returns midpoint\r\n- `t = 1` → returns `b`\r\n- Single multiplication, single addition\r\n- No branching (fast)\r\n- Works for ANY numeric type (positions, colors, angles, scales)\r\n\r\n * @param {*} a \r\n * @param {*} b \r\n * @param {*} t \r\n * @returns \r\n */\r\nexport function lerp(a, b, t) {\r\n return a + (b - a) * t;\r\n}\r\n\r\n\r\nexport function lerp2D(p0, p1, t) {\r\n return {\r\n x: lerp(p0.x, p1.x, t),\r\n y: lerp(p0.y, p1.y, t)\r\n };\r\n}\r\n\r\nexport function inverseLerp(a, b, value) {\r\n return (value - a) / (b - a);\r\n}\r\n\r\nexport function remap(inMin, inMax, outMin, outMax, value) {\r\n const t = inverseLerp(inMin, inMax, value);\r\n return lerp(outMin, outMax, t);\r\n}\r\n\r\n\r\n/**\r\n * in quadratic interpolation (or \"quadratic lerp\" in programming contexts), the resulting line is a parabolic curve that is determined by the three points. It is not a direct, piecewise linear connection of the points. \r\nQuadratic interpolation fits a second-degree polynomial (a parabola) through the three given points (e.g., A, B, and C).\r\nWhen used as a Bézier curve, the three points define the start point, an end point, and a control point that shapes the curve.\r\nThe curve is generated by a continuous process of linear interpolations (lerps) between intermediate points, resulting in a smooth arc. \r\n * @param {*} p0 \r\n * @param {*} p1 \r\n * @param {*} p2 \r\n * @param {*} t \r\n * @returns \r\n */\r\nexport function quadraticBezier(p0, p1, p2, t) {\r\n // Level 1: lerp the edges\r\n const a = lerp2D(p0, p1, t);\r\n const b = lerp2D(p1, p2, t);\r\n \r\n // Level 2: lerp between those to get curve\r\n return lerp2D(a, b, t);\r\n}\r\n\r\n// Get tangent (velocity) at point t\r\n/**\r\n * the tangent vector of a quadratic Bézier curve is directly related to a linear interpolation (LERP). Specifically, the first derivative of a quadratic Bézier curve equation is a LERP function that defines the curve's velocity and direction (tangent) at any given parameter \\(t\\). A quadratic Bézier curve is defined as \\(B(t)=(1-t)^{2}P_{0}+2(1-t)tP_{1}+t^{2}P_{2}\\).The first derivative (rate of change with respect to \\(t\\)) is \\(B^{\\prime }(t)=2(1-t)(P_{1}-P_{0})+2t(P_{2}-P_{1})\\).This derivative can be expressed as a LERP between the vectors \\((P_{1}-P_{0})\\) and \\((P_{2}-P_{1})\\), scaled by 2. \r\n * @param {*} p0 \r\n * @param {*} p1 \r\n * @param {*} p2 \r\n * @param {*} t \r\n * @returns \r\n */\r\nexport function quadraticBezierTangent(p0, p1, p2, t) {\r\n // Derivative of quadratic bezier\r\n const dx = 2 * (1 - t) * (p1.x - p0.x) + 2 * t * (p2.x - p1.x);\r\n const dy = 2 * (1 - t) * (p1.y - p0.y) + 2 * t * (p2.y - p1.y);\r\n \r\n // Normalize\r\n const len = Math.sqrt(dx * dx + dy * dy);\r\n return { x: dx / len, y: dy / len };\r\n}\r\n\r\n\r\nexport function cubicBezier(p0, p1, p2, p3, t) {\r\n // Level 1: lerp the four edges\r\n const a = lerp2D(p0, p1, t);\r\n const b = lerp2D(p1, p2, t);\r\n const c = lerp2D(p2, p3, t);\r\n \r\n // Level 2: lerp between those\r\n const d = lerp2D(a, b, t);\r\n const e = lerp2D(b, c, t);\r\n \r\n // Level 3: final lerp\r\n return lerp2D(d, e, t);\r\n}\r\n\r\nexport function cubicBezierTangent(p0, p1, p2, p3, t) {\r\n // Derivative of cubic bezier\r\n const dx = 3 * (1 - t) * (1 - t) * (p1.x - p0.x) +\r\n 6 * (1 - t) * t * (p2.x - p1.x) +\r\n 3 * t * t * (p3.x - p2.x);\r\n const dy = 3 * (1 - t) * (1 - t) * (p1.y - p0.y) +\r\n 6 * (1 - t) * t * (p2.y - p1.y) +\r\n 3 * t * t * (p3.y - p2.y);\r\n \r\n const len = Math.sqrt(dx * dx + dy * dy);\r\n return { x: dx / len, y: dy / len, magnitude: len };\r\n}\r\n\r\nexport function distance2D(p1, p2) {\r\n const dx = p2.x - p1.x, dy = p2.y - p1.y;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n}\r\n\r\n\r\nexport class BezierChain {\r\n constructor() { this.segments = []; }\r\n \r\n addSegment(p0, p1, p2, p3) {\r\n this.segments.push({ p0, p1, p2, p3 });\r\n }\r\n \r\n addSmoothSegment(p2, p3) {\r\n if (this.segments.length === 0) return;\r\n const lastSeg = this.segments[this.segments.length - 1];\r\n const p0 = lastSeg.p3;\r\n const p1 = { x: p0.x + (p0.x - lastSeg.p2.x), y: p0.y + (p0.y - lastSeg.p2.y) };\r\n this.addSegment(p0, p1, p2, p3);\r\n }\r\n \r\n getPoint(globalT) {\r\n if (this.segments.length === 0) return null;\r\n const segIndex = Math.floor(globalT);\r\n const localT = globalT - segIndex;\r\n if (segIndex >= this.segments.length) return this.segments[this.segments.length - 1].p3;\r\n const seg = this.segments[segIndex];\r\n return cubicBezier(seg.p0, seg.p1, seg.p2, seg.p3, localT);\r\n }\r\n \r\n getTangent(globalT) {\r\n if (this.segments.length === 0) return null;\r\n let segIndex = Math.floor(globalT);\r\n const localT = globalT - segIndex;\r\n if (segIndex >= this.segments.length) segIndex = this.segments.length - 1;\r\n const seg = this.segments[segIndex];\r\n return cubicBezierTangent(seg.p0, seg.p1, seg.p2, seg.p3, localT);\r\n }\r\n \r\n removeFirstSegment() {\r\n if (this.segments.length > 0) this.segments.shift();\r\n }\r\n}\r\n\r\n\r\n// console.log(lerp(10, 9, 0.5))\r\n// console.log(lerp(10, 19, 0.5))\r\n\r\n// bringing life to lerp, the change of t\r\n/**\r\n * **The insight:** We don't change lerp. We change **t**.\r\n\r\n```javascript\r\n// Linear (boring)\r\nconst x = lerp(a, b, t);\r\n\r\n// Beautiful\r\nconst easedT = easeOutCubic(t);\r\nconst x = lerp(a, b, easedT);\r\n```\r\n\r\nEasing functions transform `t` from a straight line into a curve. Same lerp, different feel.\r\n */\r\n// All easing functions take `t ∈ [0, 1]` and return `eased ∈ [0, 1]`. They're just curve equations.\r\n\r\n// **Quadratic (power of 2):**\r\n\r\nexport function easeInQuad(t) { return t * t; }\r\nexport function easeOutQuad(t) { return t * (2 - t); }\r\nexport function easeInOutQuad(t) {\r\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\r\n}\r\n\r\n\r\n// Cubic (power of 3):\r\n\r\nexport function easeInCubic(t) { return t * t * t; }\r\nexport function easeOutCubic(t) { return (--t) * t * t + 1; }\r\nexport function easeInOutCubic(t) {\r\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\r\n}\r\n\r\n/**\r\n * \r\n- **EaseIn**: Slow start, fast end (accelerate)\r\n- **EaseOut**: Fast start, slow end (decelerate)\r\n- **EaseInOut**: Slow both ends, fast middle (S-curve)\r\n\r\n */\r\n\r\n\r\n// Quartic\r\nexport function easeInQuart(t) { return t * t * t * t; }\r\nexport function easeOutQuart(t) { return 1 - (--t) * t * t * t; }\r\nexport function easeInOutQuart(t) {\r\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t;\r\n}\r\n\r\n// Elastic (spring-like overshoot)\r\nexport function easeOutElastic(t) {\r\n const c4 = (2 * Math.PI) / 3;\r\n return t === 0 ? 0 : t === 1 ? 1 : \r\n Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1;\r\n}\r\n\r\nexport function easeInElastic(t) {\r\n const c4 = (2 * Math.PI) / 3;\r\n return t === 0 ? 0 : t === 1 ? 1 :\r\n -Math.pow(2, 10 * t - 10) * Math.sin((t * 10 - 10.75) * c4);\r\n}\r\n\r\n// Bounce\r\nexport function easeOutBounce(t) {\r\n const n1 = 7.5625;\r\n const d1 = 2.75;\r\n if (t < 1 / d1) {\r\n return n1 * t * t;\r\n } else if (t < 2 / d1) {\r\n return n1 * (t -= 1.5 / d1) * t + 0.75;\r\n } else if (t < 2.5 / d1) {\r\n return n1 * (t -= 2.25 / d1) * t + 0.9375;\r\n } else {\r\n return n1 * (t -= 2.625 / d1) * t + 0.984375;\r\n }\r\n}\r\n\r\nexport function easeInBounce(t) {\r\n return 1 - easeOutBounce(1 - t);\r\n}\r\n\r\n// Back (overshoot)\r\nexport function easeOutBack(t) {\r\n const c1 = 1.70158;\r\n const c3 = c1 + 1;\r\n return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\r\n}\r\n\r\n\r\n/**\r\n * Every animation framework uses this same pattern:\r\n\r\n```javascript\r\nconst t = getCurrentTime() / duration; // 0 to 1\r\nconst easedT = easingFunction(t);\r\nconst value = lerp(start, end, easedT);\r\n```\r\n\r\nSeparate **timing** (t) from **interpolation** (lerp) from **feel** (easing). This is why CSS animations, Unity animations, and game engines all have \"easing\" dropdowns.\r\n */","import { Camera2D } from \"./cam.js\";\r\nimport { Node } from \"./core.js\";\r\n\r\nimport { lerp, cubicBezier, easeInOutQuad, easeOutElastic } from \"./lerp.js\"\r\n\r\n/**\r\n * Base Controller - all camera behaviors inherit from this\r\n * Why a base class: provides common lifecycle methods and state management\r\n */\r\nexport class CameraController {\r\n constructor(name = \"controller\") {\r\n this.name = name;\r\n this.enabled = true;\r\n this.priority = 0; // Higher priority controllers override lower ones\r\n this.camera = null;\r\n this.weight = 1.0; // Blend weight for multiple controllers\r\n }\r\n\r\n attach(camera) {\r\n this.camera = camera;\r\n this.onAttach();\r\n }\r\n\r\n detach() {\r\n this.onDetach();\r\n this.camera = null;\r\n }\r\n\r\n // Lifecycle hooks\r\n onAttach() { }\r\n onDetach() { }\r\n onUpdate(delta) { return false; } // Return true if camera modified\r\n\r\n // Called before camera update\r\n preUpdate(delta) { }\r\n\r\n // Called after camera update \r\n postUpdate(delta) { }\r\n}\r\n\r\n/**\r\n * FollowController - smoothly follows a target\r\n * Key features:\r\n * - Lag/smoothing with lerp\r\n * - Deadzone (camera only moves when target leaves center area)\r\n * - Look-ahead (predictive movement)\r\n * - Boundaries (clamp to level limits)\r\n */\r\n/**\r\n * Optimized FollowController with smooth lerping\r\n * \r\n * Key improvements:\r\n * - Smooth lerp towards target center (no harsh deadzone snapping)\r\n * - Optional soft deadzone for reduced movement near center\r\n * - Simplified calculations, fewer conversions\r\n * - Better performance with early exits\r\n */\r\nexport class FollowController extends CameraController {\r\n constructor(target, options = {}) {\r\n super(\"follow\");\r\n this.target = target;\r\n this.enabled = true;\r\n\r\n // Smoothing factor (0 = instant, 1 = no movement, 0.1 = nice default)\r\n this.smoothing = options.smoothing ?? 0.1;\r\n \r\n // Soft deadzone: reduces movement when target is near center\r\n // null = always follow, > 0 = proportional dampening inside radius\r\n this.softDeadzoneRadius = options.softDeadzoneRadius ?? null;\r\n this.softDeadzoneFalloff = options.softDeadzoneFalloff ?? 2; // power curve for falloff\r\n \r\n // Offset from target (useful for look-ahead or offset framing)\r\n this.offset = options.offset || { x: 0, y: 0 };\r\n \r\n // Boundaries\r\n this.bounds = options.bounds || null;\r\n\r\n // Separate axis smoothing\r\n this.smoothingX = options.smoothingX ?? this.smoothing;\r\n this.smoothingY = options.smoothingY ?? this.smoothing;\r\n \r\n // Minimum movement threshold (optimization)\r\n this.minMovement = options.minMovement ?? 0.0005;\r\n }\r\n\r\n onAttach() {\r\n // Snap camera to target on attach to avoid initial jump\r\n if (this.target?.worldPosition && this.camera) {\r\n this.camera.position.x = this.target.worldPosition.x + this.offset.x;\r\n this.camera.position.y = this.target.worldPosition.y + this.offset.y;\r\n this.camera.transformDirty = true;\r\n }\r\n }\r\n\r\n onUpdate(delta) {\r\n if (!this.target || !this.camera || !this.enabled) return false;\r\n\r\n // Ensure camera transform is current\r\n this.camera.updateWorldTransform?.();\r\n\r\n const cam = this.camera;\r\n \r\n // Get target world position\r\n const targetPos = this.target.worldPosition?.x != null \r\n ? this.target.worldPosition \r\n : this.target.position;\r\n \r\n if (!targetPos) return false;\r\n\r\n // Desired camera position (target + offset)\r\n let desiredX = targetPos.x + this.offset.x;\r\n let desiredY = targetPos.y + this.offset.y;\r\n\r\n // Apply soft deadzone if enabled\r\n if (this.softDeadzoneRadius != null && this.softDeadzoneRadius > 0) {\r\n const worldZoom = cam.worldZoom ?? cam.zoom ?? 1;\r\n const deadzoneWorld = this.softDeadzoneRadius / worldZoom;\r\n \r\n // Distance from camera to desired position\r\n const dx = desiredX - cam.worldPosition.x;\r\n const dy = desiredY - cam.worldPosition.y;\r\n const dist = Math.sqrt(dx * dx + dy * dy);\r\n \r\n // If inside deadzone, scale movement based on distance\r\n if (dist < deadzoneWorld) {\r\n const influence = Math.pow(dist / deadzoneWorld, this.softDeadzoneFalloff);\r\n desiredX = cam.worldPosition.x + dx * influence;\r\n desiredY = cam.worldPosition.y + dy * influence;\r\n }\r\n }\r\n\r\n // Lerp towards desired position\r\n const sx = Math.max(0, Math.min(1, this.smoothingX));\r\n const sy = Math.max(0, Math.min(1, this.smoothingY));\r\n \r\n let newWorldX = lerp(cam.worldPosition.x, desiredX, sx);\r\n let newWorldY = lerp(cam.worldPosition.y, desiredY, sy);\r\n\r\n // Apply bounds\r\n if (this.bounds) {\r\n const worldZoom = cam.worldZoom ?? cam.zoom ?? 1;\r\n const halfW = (cam.viewWidth / 2) / worldZoom;\r\n const halfH = (cam.viewHeight / 2) / worldZoom;\r\n \r\n newWorldX = Math.max(\r\n this.bounds.left + halfW, \r\n Math.min(this.bounds.right - halfW, newWorldX)\r\n );\r\n newWorldY = Math.max(\r\n this.bounds.top + halfH, \r\n Math.min(this.bounds.bottom - halfH, newWorldY)\r\n );\r\n }\r\n\r\n // Calculate movement delta\r\n const deltaX = newWorldX - cam.worldPosition.x;\r\n const deltaY = newWorldY - cam.worldPosition.y;\r\n\r\n // Early exit if movement is negligible (optimization)\r\n if (Math.abs(deltaX) < this.minMovement && Math.abs(deltaY) < this.minMovement) {\r\n return false;\r\n }\r\n\r\n // Apply movement\r\n cam.position.x += deltaX;\r\n cam.position.y += deltaY;\r\n cam.transformDirty = true;\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * ShakeController - screen shake for impacts, explosions, etc.\r\n * Key features:\r\n * - Perlin-like noise for natural shaking\r\n * - Decay over time\r\n * - Configurable intensity and frequency\r\n * - Can shake position, rotation, or both\r\n */\r\nexport class ShakeController extends CameraController {\r\n constructor(options = {}) {\r\n super(\"shake\");\r\n\r\n // Configuration\r\n this.intensity = options.intensity || 10;\r\n this.decay = options.decay || 0.9;\r\n this.frequency = options.frequency || 60; // Shakes per second\r\n this.shakePosition = options.shakePosition !== false;\r\n this.shakeRotation = options.shakeRotation || false;\r\n this.maxRotation = options.maxRotation || 0.1; // Max radians\r\n\r\n // Internal state\r\n this.time = 0;\r\n this.seed = Math.random() * 1000;\r\n this.currentIntensity = 0;\r\n this.offset = { x: 0, y: 0 };\r\n this.rotationOffset = 0;\r\n\r\n // Perlin-like noise parameters\r\n this.octaves = options.octaves || 2;\r\n this.persistence = options.persistence || 0.5;\r\n }\r\n\r\n // Trigger a shake\r\n shake(intensity = this.intensity) {\r\n this.currentIntensity = Math.max(this.currentIntensity, intensity);\r\n this.time = 0;\r\n }\r\n\r\n onUpdate(delta) {\r\n if (!this.camera || !this.enabled || this.currentIntensity < 0.01) return false;\r\n\r\n this.time += delta;\r\n let modified = false;\r\n\r\n // Apply decay\r\n this.currentIntensity *= this.decay;\r\n\r\n if (this.currentIntensity < 0.01) {\r\n // Reset offsets when shake ends\r\n if (this.offset.x !== 0 || this.offset.y !== 0 || this.rotationOffset !== 0) {\r\n this.offset = { x: 0, y: 0 };\r\n this.rotationOffset = 0;\r\n this.camera.transformDirty = true;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // Calculate noise-based offsets\r\n if (this.shakePosition) {\r\n const newX = this._perlinNoise(this.seed, this.time * this.frequency) * this.currentIntensity;\r\n const newY = this._perlinNoise(this.seed + 100, this.time * this.frequency) * this.currentIntensity;\r\n\r\n if (Math.abs(newX - this.offset.x) > 0.001 || Math.abs(newY - this.offset.y) > 0.001) {\r\n this.offset.x = newX;\r\n this.offset.y = newY;\r\n modified = true;\r\n }\r\n }\r\n\r\n if (this.shakeRotation) {\r\n const newRot = this._perlinNoise(this.seed + 200, this.time * this.frequency) *\r\n this.currentIntensity * this.maxRotation / this.intensity;\r\n\r\n if (Math.abs(newRot - this.rotationOffset) > 0.001) {\r\n this.rotationOffset = newRot;\r\n modified = true;\r\n }\r\n }\r\n\r\n if (modified) {\r\n this.camera.transformDirty = true;\r\n }\r\n\r\n return modified;\r\n }\r\n\r\n // Simple Perlin-like noise (fractal Brownian motion)\r\n _perlinNoise(seed, t) {\r\n let total = 0;\r\n let frequency = 1;\r\n let amplitude = 1;\r\n let maxValue = 0;\r\n\r\n for (let i = 0; i < this.octaves; i++) {\r\n // Simple pseudo-random function\r\n const value = Math.sin((seed + t) * frequency) * amplitude;\r\n total += value;\r\n maxValue += amplitude;\r\n amplitude *= this.persistence;\r\n frequency *= 2;\r\n }\r\n\r\n return total / maxValue;\r\n }\r\n\r\n preUpdate(delta) {\r\n if (!this.camera || !this.enabled) return;\r\n\r\n // Apply offsets before camera updates\r\n if (this.shakePosition) {\r\n this.camera.position.x += this.offset.x;\r\n this.camera.position.y += this.offset.y;\r\n }\r\n\r\n if (this.shakeRotation) {\r\n this.camera.rotation += this.rotationOffset;\r\n }\r\n }\r\n\r\n postUpdate(delta) {\r\n if (!this.camera || !this.enabled) return;\r\n\r\n // Remove offsets after camera updates (so they're fresh next frame)\r\n if (this.shakePosition) {\r\n this.camera.position.x -= this.offset.x;\r\n this.camera.position.y -= this.offset.y;\r\n }\r\n\r\n if (this.shakeRotation) {\r\n this.camera.rotation -= this.rotationOffset;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * ZoomController - smooth zoom interpolation\r\n * Key features:\r\n * - Animated zoom to target level\r\n * - Zoom to fit specific bounds\r\n * - Zoom with pivot point (mouse position)\r\n */\r\nexport class ZoomController extends CameraController {\r\n constructor(options = {}) {\r\n super(\"zoom\");\r\n\r\n // Configuration\r\n this.targetZoom = options.initialZoom || 1.0;\r\n this.smoothing = options.smoothing || 0.1;\r\n this.minZoom = options.minZoom || 0.1;\r\n this.maxZoom = options.maxZoom || 10.0;\r\n this.zoomToFitPadding = options.zoomToFitPadding || 50;\r\n\r\n // Internal state\r\n this.isZooming = false;\r\n this.zoomStart = 1.0;\r\n this.zoomTime = 0;\r\n this.zoomDuration = 0;\r\n this.easingFunc = null;\r\n this.pivot = null; // { x, y } in world space\r\n }\r\n\r\n // Zoom to specific level with animation\r\n zoomTo(zoomLevel, duration = 0, easing = \"linear\", pivot = null) {\r\n this.targetZoom = Math.max(this.minZoom, Math.min(this.maxZoom, zoomLevel));\r\n this.pivot = pivot;\r\n\r\n if (duration > 0) {\r\n this.isZooming = true;\r\n this.zoomStart = this.camera.zoom;\r\n this.zoomTime = 0;\r\n this.zoomDuration = duration;\r\n this.easingFunc = this._getEasingFunction(easing);\r\n } else {\r\n this.camera.zoom = this.targetZoom;\r\n this.camera.transformDirty = true;\r\n }\r\n }\r\n\r\n // Zoom to fit a bounding box in view\r\n zoomToFit(bounds, duration = 0, easing = \"linear\") {\r\n // Calculate required zoom to fit bounds in view\r\n const { left, right, top, bottom } = bounds;\r\n const width = right - left + this.zoomToFitPadding * 2;\r\n const height = bottom - top + this.zoomToFitPadding * 2;\r\n\r\n const zoomX = this.camera.viewWidth / width;\r\n const zoomY = this.camera.viewHeight / height;\r\n\r\n // Use the smaller zoom to ensure everything fits\r\n const targetZoom = Math.min(zoomX, zoomY);\r\n\r\n // Center on bounds\r\n const centerX = (left + right) / 2;\r\n const centerY = (top + bottom) / 2;\r\n\r\n // Set camera position and zoom\r\n this.camera.setPosition(centerX, centerY);\r\n this.zoomTo(targetZoom, duration, easing);\r\n }\r\n\r\n // Zoom in/out by factor\r\n zoomBy(factor, duration = 0, easing = \"linear\", pivot = null) {\r\n this.zoomTo(this.targetZoom * factor, duration, easing, pivot);\r\n }\r\n\r\n onUpdate(delta) {\r\n if (!this.camera || !this.enabled) return false;\r\n\r\n let modified = false;\r\n\r\n // Handle animated zoom\r\n if (this.isZooming) {\r\n this.zoomTime += delta;\r\n\r\n if (this.zoomTime >= this.zoomDuration) {\r\n // Animation complete\r\n this.camera.zoom = this.targetZoom;\r\n this.isZooming = false;\r\n modified = true;\r\n } else {\r\n // Interpolate zoom\r\n const t = this.zoomTime / this.zoomDuration;\r\n const easedT = this.easingFunc ? this.easingFunc(t) : t;\r\n const newZoom = lerp(this.zoomStart, this.targetZoom, easedT);\r\n\r\n if (Math.abs(newZoom - this.camera.zoom) > 0.001) {\r\n // Handle pivot-based zoom (keep point stable)\r\n if (this.pivot) {\r\n const oldWorld = this.camera.screenToWorld(this.pivot.x, this.pivot.y);\r\n this.camera.zoom = newZoom;\r\n const newWorld = this.camera.screenToWorld(this.pivot.x, this.pivot.y);\r\n\r\n // Adjust position to keep pivot point stable\r\n this.camera.position.x += oldWorld.x - newWorld.x;\r\n this.camera.position.y += oldWorld.y - newWorld.y;\r\n } else {\r\n this.camera.zoom = newZoom;\r\n }\r\n\r\n modified = true;\r\n }\r\n }\r\n } else {\r\n // Smooth zoom to target\r\n const newZoom = lerp(this.camera.zoom, this.targetZoom, this.smoothing);\r\n if (Math.abs(newZoom - this.camera.zoom) > 0.001) {\r\n this.camera.zoom = newZoom;\r\n modified = true;\r\n }\r\n }\r\n\r\n // Clamp zoom to limits\r\n if (this.camera.zoom < this.minZoom) {\r\n this.camera.zoom = this.minZoom;\r\n modified = true;\r\n } else if (this.camera.zoom > this.maxZoom) {\r\n this.camera.zoom = this.maxZoom;\r\n modified = true;\r\n }\r\n\r\n if (modified) {\r\n this.camera.transformDirty = true;\r\n }\r\n\r\n return modified;\r\n }\r\n\r\n _getEasingFunction(name) {\r\n switch (name) {\r\n case 'linear': return t => t;\r\n case 'easeIn': return t => t * t;\r\n case 'easeOut': return t => t * (2 - t);\r\n case 'easeInOut': return easeInOutQuad;\r\n case 'elastic': return easeOutElastic;\r\n default: return t => t;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * PathController - follow a Bézier path for cinematic sequences\r\n * Key features:\r\n * - Follow sequence of control points\r\n * - Configurable speed and easing\r\n * - Loop or one-shot playback\r\n * - Callbacks at waypoints\r\n */\r\nexport class PathController extends CameraController {\r\n constructor(path = [], options = {}) {\r\n super(\"path\");\r\n\r\n // Path data\r\n this.path = path; // Array of control point arrays\r\n this.speed = options.speed || 100; // Units per second\r\n this.easing = options.easing || 'linear';\r\n this.loop = options.loop || false;\r\n this.autoStart = options.autoStart || false;\r\n\r\n // Internal state\r\n this.isPlaying = false;\r\n this.currentTime = 0;\r\n this.totalDistance = 0;\r\n this.segmentDistances = [];\r\n this.currentSegment = 0;\r\n this.t = 0;\r\n\r\n // Callbacks\r\n this.onComplete = options.onComplete;\r\n this.onWaypoint = options.onWaypoint;\r\n\r\n // Calculate path distances if provided\r\n if (path.length >= 4) {\r\n this._calculatePathDistances();\r\n }\r\n }\r\n\r\n play() {\r\n this.isPlaying = true;\r\n this.currentTime = 0;\r\n this.currentSegment = 0;\r\n this.t = 0;\r\n }\r\n\r\n pause() {\r\n this.isPlaying = false;\r\n }\r\n\r\n stop() {\r\n this.isPlaying = false;\r\n this.currentTime = 0;\r\n this.currentSegment = 0;\r\n this.t = 0;\r\n }\r\n\r\n _calculatePathDistances() {\r\n // Estimate path length by sampling\r\n this.segmentDistances = [];\r\n this.totalDistance = 0;\r\n\r\n const samples = 100;\r\n for (let i = 0; i < this.path.length - 3; i += 3) {\r\n let segmentDist = 0;\r\n let lastPoint = cubicBezier(\r\n this.path[i], this.path[i + 1], this.path[i + 2], this.path[i + 3], 0\r\n );\r\n\r\n for (let j = 1; j <= samples; j++) {\r\n const t = j / samples;\r\n const point = cubicBezier(\r\n this.path[i], this.path[i + 1], this.path[i + 2], this.path[i + 3], t\r\n );\r\n\r\n const dx = point.x - lastPoint.x;\r\n const dy = point.y - lastPoint.y;\r\n segmentDist += Math.sqrt(dx * dx + dy * dy);\r\n lastPoint = point;\r\n }\r\n\r\n this.segmentDistances.push(segmentDist);\r\n this.totalDistance += segmentDist;\r\n }\r\n }\r\n\r\n onUpdate(delta) {\r\n if (!this.camera || !this.enabled || !this.isPlaying || this.path.length < 4) {\r\n return false;\r\n }\r\n\r\n this.currentTime += delta;\r\n const distanceTraveled = this.currentTime * this.speed;\r\n\r\n // Find current segment based on distance\r\n let accumulatedDist = 0;\r\n let segmentIndex = 0;\r\n\r\n for (let i = 0; i < this.segmentDistances.length; i++) {\r\n if (distanceTraveled <= accumulatedDist + this.segmentDistances[i]) {\r\n segmentIndex = i;\r\n break;\r\n }\r\n accumulatedDist += this.segmentDistances[i];\r\n }\r\n\r\n // Check if path complete\r\n if (distanceTraveled >= this.totalDistance) {\r\n if (this.loop) {\r\n this.currentTime = 0;\r\n this.currentSegment = 0;\r\n this.t = 0;\r\n return this.onUpdate(delta);\r\n } else {\r\n this.isPlaying = false;\r\n if (this.onComplete) this.onComplete();\r\n return false;\r\n }\r\n }\r\n\r\n // Calculate t within current segment\r\n const segmentDist = distanceTraveled - accumulatedDist;\r\n this.t = segmentDist / this.segmentDistances[segmentIndex];\r\n\r\n // Apply easing\r\n const easedT = this._applyEasing(this.t, this.easing);\r\n\r\n // Get position from Bézier curve\r\n const startIdx = segmentIndex * 3;\r\n const point = cubicBezier(\r\n this.path[startIdx], this.path[startIdx + 1],\r\n this.path[startIdx + 2], this.path[startIdx + 3], easedT\r\n );\r\n\r\n // Update camera position\r\n const oldX = this.camera.position.x;\r\n const oldY = this.camera.position.y;\r\n\r\n this.camera.position.x = point.x;\r\n this.camera.position.y = point.y;\r\n\r\n // Check if waypoint reached\r\n if (segmentIndex !== this.currentSegment) {\r\n this.currentSegment = segmentIndex;\r\n if (this.onWaypoint) this.onWaypoint(segmentIndex);\r\n }\r\n\r\n // Check if position changed\r\n if (Math.abs(oldX - point.x) > 0.001 || Math.abs(oldY - point.y) > 0.001) {\r\n this.camera.transformDirty = true;\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _applyEasing(t, easing) {\r\n switch (easing) {\r\n case 'linear': return t;\r\n case 'easeIn': return t * t;\r\n case 'easeOut': return t * (2 - t);\r\n case 'easeInOut': return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\r\n default: return t;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * ControllerManager - manages multiple controllers on a camera\r\n * Why needed: handles controller priority, blending, and update order\r\n */\r\nexport class ControllerManager {\r\n constructor(camera) {\r\n this.camera = camera;\r\n this.controllers = new Map(); // name -> controller\r\n this.updateOrder = []; // Array of controller names in update order\r\n\r\n // Automatic update integration\r\n this._originalUpdate = camera._process;\r\n camera._process = this._update.bind(this);\r\n }\r\n\r\n add(controller) {\r\n controller.attach(this.camera);\r\n this.controllers.set(controller.name, controller);\r\n\r\n // Insert in priority order (higher priority first)\r\n this.updateOrder = Array.from(this.controllers.values())\r\n .sort((a, b) => b.priority - a.priority)\r\n .map(c => c.name);\r\n\r\n return controller;\r\n }\r\n\r\n remove(name) {\r\n const controller = this.controllers.get(name);\r\n if (controller) {\r\n controller.detach();\r\n this.controllers.delete(name);\r\n this.updateOrder = this.updateOrder.filter(n => n !== name);\r\n }\r\n }\r\n\r\n get(name) {\r\n return this.controllers.get(name);\r\n }\r\n\r\n _update(delta) {\r\n // Call pre-update on all controllers\r\n for (const name of this.updateOrder) {\r\n const controller = this.controllers.get(name);\r\n if (controller && controller.enabled) {\r\n controller.preUpdate(delta);\r\n }\r\n }\r\n\r\n // Call original camera update\r\n if (this._originalUpdate) {\r\n // console.log(\"calling original update\")\r\n this._originalUpdate.call(this.camera, delta);\r\n }\r\n\r\n // Call onUpdate on all controllers\r\n for (const name of this.updateOrder) {\r\n const controller = this.controllers.get(name);\r\n if (controller && controller.enabled) {\r\n controller.onUpdate(delta);\r\n }\r\n }\r\n\r\n // Call post-update on all controllers\r\n for (const name of this.updateOrder) {\r\n const controller = this.controllers.get(name);\r\n if (controller && controller.enabled) {\r\n controller.postUpdate(delta);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Integrated Camera2D with controller support\r\n * Extends the base Camera2D to include controller management\r\n */\r\nexport class ControlledCamera extends Camera2D {\r\n constructor(name = \"camera\") {\r\n super(name);\r\n this.controllerManager = new ControllerManager(this);\r\n this._controllers = this.controllerManager; // Alias for convenience\r\n }\r\n\r\n addController(controller) {\r\n return this.controllerManager.add(controller);\r\n }\r\n\r\n removeController(name) {\r\n this.controllerManager.remove(name);\r\n }\r\n\r\n getController(name) {\r\n return this.controllerManager.get(name);\r\n }\r\n\r\n // Convenience methods\r\n follow(target, options) {\r\n const controller = new FollowController(target, options);\r\n this.addController(controller);\r\n return controller;\r\n }\r\n\r\n shake(options) {\r\n const controller = new ShakeController(options);\r\n this.addController(controller);\r\n return controller;\r\n }\r\n\r\n zoom(options) {\r\n const controller = new ZoomController(options);\r\n this.addController(controller);\r\n return controller;\r\n }\r\n\r\n path(path, options) {\r\n const controller = new PathController(path, options);\r\n this.addController(controller);\r\n return controller;\r\n }\r\n}\r\n\r\n/**\r\n * CameraRig - parent node for camera with additional control points\r\n * Useful for: camera shake that doesn't affect child objects, complex camera setups\r\n */\r\nexport class CameraRig extends Node {\r\n constructor(name = \"camera_rig\") {\r\n super(name);\r\n this.camera = new ControlledCamera(\"attached_camera\");\r\n this.addChild(this.camera);\r\n\r\n // Additional control nodes\r\n this.pivot = new Node(\"pivot\");\r\n this.camera.addChild(this.pivot);\r\n\r\n // Offset from rig to camera\r\n this.cameraOffset = { x: 0, y: 0 };\r\n }\r\n\r\n // Shake just the camera, not the rig\r\n shakeCamera(intensity = 10) {\r\n const shakeCtrl = this.camera.shake({ intensity });\r\n return shakeCtrl;\r\n }\r\n\r\n // Move rig (affects camera and all children)\r\n moveRig(x, y) {\r\n this.position.x += x;\r\n this.position.y += y;\r\n this.transformDirty = true;\r\n }\r\n\r\n // Set camera offset relative to rig\r\n setCameraOffset(x, y) {\r\n this.cameraOffset.x = x;\r\n this.cameraOffset.y = y;\r\n this.camera.position.x = x;\r\n this.camera.position.y = y;\r\n this.camera.transformDirty = true;\r\n }\r\n}\r\n\r\n\r\n","// engine/audio.js - Audio management system with fade effects and spatial audio\r\n\r\nimport { globalPerf } from \"./lib.js\";\r\n\r\n// import { EventBus } from './signals.js';\r\nconst audioperf = globalPerf\r\n/**\r\n * AudioManager - high-level audio management\r\n * \r\n * Features:\r\n * - Named audio assets (play by name, not handle)\r\n * - Volume groups (SFX, music, master)\r\n * - Fade in/out effects\r\n * - Spatial audio (2D positional sound)\r\n * - Audio groups (random variation)\r\n * - Preloading\r\n * \r\n * Why this wrapper:\r\n * - tessera.js is low-level (handles, no names)\r\n * - Need organized asset management\r\n * - Need fade effects for polish\r\n * - Need volume groups for settings\r\n */\r\nexport class AudioManagerClass {\r\n constructor() {\r\n // tessera.js audio interface\r\n this.audio = null;\r\n\r\n // Asset registry\r\n this.sounds = new Map(); // name -> { handle, type: \"sound\" }\r\n this.music = new Map(); // name -> { handle, type: \"music\" }\r\n\r\n // Volume settings\r\n this.masterVolume = 1.0;\r\n this.sfxVolume = 1.0;\r\n this.musicVolume = 1.0;\r\n\r\n // Currently playing instances (for fade effects)\r\n this.activeSounds = new Map(); // name -> { handle, volume, fadeTarget, fadeSpeed }\r\n this.activeMusic = null; // { name, handle, volume, fadeTarget, fadeSpeed }\r\n\r\n // Audio groups (for random variation)\r\n this.groups = new Map(); // groupName -> [soundNames]\r\n\r\n // Spatial audio settings\r\n this.listenerPosition = { x: 0, y: 0 };\r\n this.maxHearingDistance = 1000; // pixels\r\n }\r\n\r\n /**\r\n * Initialize with tessera.js audio interface\r\n * \r\n * @param {Object} audioInterface - renderer.audio from tessera.js\r\n */\r\n init(audioInterface) {\r\n this.audio = audioInterface;\r\n\r\n // Set initial master volume\r\n this.audio.setMasterVolume(this.masterVolume);\r\n\r\n console.log(\"AudioManager initialized\");\r\n }\r\n\r\n /**\r\n * Load sound effect (fully loaded into memory)\r\n * \r\n * @param {string} name - Unique name for this sound\r\n * @param {string} filePath - Path to audio file\r\n * @returns {Promise<boolean>} - Success\r\n */\r\n async loadSound(name, filePath) {\r\n if (this.sounds.has(name)) {\r\n console.warn(`Sound \"${name}\" already loaded`);\r\n return true;\r\n }\r\n\r\n try {\r\n const handle = this.audio.loadSound(filePath);\r\n\r\n if (handle === 0) {\r\n console.error(`Failed to load sound: ${filePath}`);\r\n return false;\r\n }\r\n\r\n this.sounds.set(name, {\r\n handle,\r\n type: \"sound\",\r\n filePath,\r\n baseVolume: 1.0\r\n });\r\n\r\n console.log(`Loaded sound: ${name} (${filePath})`);\r\n return true;\r\n } catch (error) {\r\n console.error(`Error loading sound \"${name}\":`, error);\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Load music (streamed from disk)\r\n * \r\n * @param {string} name - Unique name for this music\r\n * @param {string} filePath - Path to audio file\r\n * @returns {Promise<boolean>} - Success\r\n */\r\n async loadMusic(name, filePath) {\r\n if (this.music.has(name)) {\r\n console.warn(`Music \"${name}\" already loaded`);\r\n return true;\r\n }\r\n\r\n try {\r\n const handle = this.audio.loadMusic(filePath);\r\n\r\n if (handle === 0) {\r\n console.error(`Failed to load music: ${filePath}`);\r\n return false;\r\n }\r\n\r\n this.music.set(name, {\r\n handle,\r\n type: \"music\",\r\n filePath,\r\n baseVolume: 1.0\r\n });\r\n\r\n console.log(`Loaded music: ${name} (${filePath})`);\r\n return true;\r\n } catch (error) {\r\n console.error(`Error loading music \"${name}\":`, error);\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Play sound effect\r\n * \r\n * @param {string} name - Sound name\r\n * @param {Object} options - { volume, pitch, loop }\r\n * @returns {boolean} - Success\r\n */\r\n playSound(name, options = {}) {\r\n const sound = this.sounds.get(name);\r\n if (!sound) {\r\n console.warn(`Sound not loaded: ${name}`);\r\n return false;\r\n }\r\n\r\n // Calculate final volume (master * sfx * base * options)\r\n const volume = (options.volume || 1.0) * sound.baseVolume * this.sfxVolume * this.masterVolume;\r\n\r\n\r\n // Play\r\n this.audio.playSound(sound.handle);\r\n\r\n // Set volume before playing\r\n this.audio.setSoundVolume(sound.handle, volume);\r\n // Track active sound (for potential fade effects)\r\n this.activeSounds.set(name, {\r\n handle: sound.handle,\r\n volume,\r\n fadeTarget: null,\r\n fadeSpeed: 0\r\n });\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Play music with fade options\r\n * \r\n * @param {string} name - Music name\r\n * @param {Object} options - { fadeIn, loop, volume }\r\n * @returns {boolean} - Success\r\n */\r\n playMusic(name, options = {}) {\r\n const music = this.music.get(name);\r\n if (!music) {\r\n console.warn(`Music not loaded: ${name}`);\r\n return false;\r\n }\r\n\r\n // Stop current music if playing\r\n if (this.activeMusic && this.activeMusic.name !== name) {\r\n this.stopMusic(this.activeMusic.name, { fadeOut: options.fadeIn || 0 });\r\n }\r\n\r\n // Calculate volume\r\n const targetVolume = (options.volume || 1.0) * music.baseVolume * this.musicVolume * this.masterVolume;\r\n\r\n // Fade in effect\r\n let startVolume = targetVolume;\r\n let fadeSpeed = 0;\r\n\r\n if (options.fadeIn) {\r\n startVolume = 0;\r\n fadeSpeed = targetVolume / options.fadeIn; // Volume units per second\r\n }\r\n\r\n\r\n\r\n // Play\r\n this.audio.playMusic(music.handle, options.loop);\r\n // Set initial volume\r\n this.audio.setMusicVolume(music.handle, startVolume);\r\n // Track active music\r\n this.activeMusic = {\r\n name,\r\n handle: music.handle,\r\n volume: startVolume,\r\n fadeTarget: options.fadeIn ? targetVolume : null,\r\n fadeSpeed\r\n };\r\n\r\n console.log(`Playing music: ${name}${options.fadeIn ? ` (fade in ${options.fadeIn}s)` : ''}`);\r\n\r\n // EventBus.emit(\"music_started\", { name });\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Stop music with fade out\r\n * \r\n * @param {string} name - Music name\r\n * @param {Object} options - { fadeOut }\r\n */\r\n stopMusic(name, options = {}) {\r\n const music = this.music.get(name);\r\n if (!music) {\r\n console.warn(`Music not loaded: ${name}`);\r\n return;\r\n }\r\n\r\n if (!this.activeMusic || this.activeMusic.name !== name) {\r\n return; // Not playing\r\n }\r\n\r\n if (options.fadeOut) {\r\n // Fade out to 0\r\n this.activeMusic.fadeTarget = 0;\r\n this.activeMusic.fadeSpeed = -this.activeMusic.volume / options.fadeOut;\r\n this.activeMusic.stopping = true;\r\n } else {\r\n // Immediate stop\r\n this.audio.stopMusic(music.handle);\r\n this.activeMusic = null;\r\n\r\n // EventBus.emit(\"music_stopped\", { name });\r\n }\r\n }\r\n\r\n /**\r\n * Pause music\r\n */\r\n pauseMusic(name) {\r\n const music = this.music.get(name);\r\n if (!music) return;\r\n\r\n this.audio.pauseMusic(music.handle);\r\n }\r\n\r\n /**\r\n * Resume music\r\n */\r\n resumeMusic(name) {\r\n const music = this.music.get(name);\r\n if (!music) return;\r\n\r\n this.audio.resumeMusic(music.handle);\r\n }\r\n\r\n /**\r\n * Play sound with 2D spatial positioning\r\n * \r\n * Volume falls off with distance from listener\r\n * \r\n * @param {string} name - Sound name\r\n * @param {number} x - Sound world X\r\n * @param {number} y - Sound world Y\r\n * @param {number} listenerX - Listener world X (camera/player)\r\n * @param {number} listenerY - Listener world Y\r\n */\r\n playSoundAt(name, x, y, listenerX, listenerY) {\r\n // Calculate distance\r\n const dx = x - listenerX;\r\n const dy = y - listenerY;\r\n const distance = Math.sqrt(dx * dx + dy * dy);\r\n\r\n // Distance attenuation (linear falloff)\r\n const attenuation = Math.max(0, 1 - distance / this.maxHearingDistance);\r\n\r\n if (attenuation <= 0) {\r\n return; // Too far, don't play\r\n }\r\n\r\n // Play with attenuated volume\r\n this.playSound(name, { volume: attenuation });\r\n }\r\n\r\n /**\r\n * Set master volume (affects all audio)\r\n */\r\n setMasterVolume(volume) {\r\n this.masterVolume = Math.max(0, Math.min(1, volume));\r\n this.audio.setMasterVolume(this.masterVolume);\r\n\r\n // Update active sounds/music\r\n this.updateAllVolumes();\r\n\r\n // EventBus.emit(\"volume_changed\", { type: \"master\", volume: this.masterVolume });\r\n }\r\n\r\n /**\r\n * Set SFX volume group\r\n */\r\n setSFXVolume(volume) {\r\n this.sfxVolume = Math.max(0, Math.min(1, volume));\r\n this.updateAllVolumes();\r\n\r\n // EventBus.emit(\"volume_changed\", { type: \"sfx\", volume: this.sfxVolume });\r\n }\r\n\r\n /**\r\n * Set music volume group\r\n */\r\n setMusicVolume(volume) {\r\n this.musicVolume = Math.max(0, Math.min(1, volume));\r\n this.updateAllVolumes();\r\n\r\n // EventBus.emit(\"volume_changed\", { type: \"music\", volume: this.musicVolume });\r\n }\r\n\r\n /**\r\n * Update volumes for all active audio\r\n */\r\n updateAllVolumes() {\r\n // Update active sounds\r\n for (const [name, data] of this.activeSounds) {\r\n const sound = this.sounds.get(name);\r\n if (sound) {\r\n const volume = sound.baseVolume * this.sfxVolume * this.masterVolume;\r\n this.audio.setSoundVolume(sound.handle, volume);\r\n }\r\n }\r\n\r\n // Update active music\r\n if (this.activeMusic) {\r\n const music = this.music.get(this.activeMusic.name);\r\n if (music) {\r\n const volume = music.baseVolume * this.musicVolume * this.masterVolume;\r\n this.audio.setMusicVolume(music.handle, volume);\r\n this.activeMusic.volume = volume;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Create audio group for random variation\r\n * \r\n * Example: footsteps group contains step1, step2, step3\r\n * \r\n * @param {string} groupName - Group name\r\n * @param {Array<string>} soundNames - Sound names in group\r\n */\r\n createGroup(groupName, soundNames) {\r\n this.groups.set(groupName, soundNames);\r\n console.log(`Created audio group: ${groupName} (${soundNames.length} sounds)`);\r\n }\r\n\r\n /**\r\n * Play random sound from group\r\n */\r\n playRandomFromGroup(groupName, options = {}) {\r\n const group = this.groups.get(groupName);\r\n if (!group || group.length === 0) {\r\n console.warn(`Audio group not found or empty: ${groupName}`);\r\n return false;\r\n }\r\n\r\n // Pick random\r\n const randomName = group[Math.floor(Math.random() * group.length)];\r\n return this.playSound(randomName, options);\r\n }\r\n\r\n /**\r\n * Update fade effects (call every frame)\r\n * \r\n * @param {number} delta - Time delta in seconds\r\n */\r\n update(delta) {\r\n // Update music fade\r\n audioperf.start(\"audioupdate\")\r\n if (this.activeMusic && this.activeMusic.fadeTarget !== null) {\r\n const music = this.music.get(this.activeMusic.name);\r\n if (!music) {\r\n this.activeMusic = null;\r\n return;\r\n }\r\n\r\n // Update volume\r\n this.activeMusic.volume += this.activeMusic.fadeSpeed * delta;\r\n\r\n // Clamp to target\r\n if (this.activeMusic.fadeSpeed > 0) {\r\n // Fading in\r\n if (this.activeMusic.volume >= this.activeMusic.fadeTarget) {\r\n this.activeMusic.volume = this.activeMusic.fadeTarget;\r\n this.activeMusic.fadeTarget = null;\r\n this.activeMusic.fadeSpeed = 0;\r\n }\r\n } else {\r\n // Fading out\r\n if (this.activeMusic.volume <= this.activeMusic.fadeTarget) {\r\n this.activeMusic.volume = this.activeMusic.fadeTarget;\r\n\r\n // If fading out to stop\r\n if (this.activeMusic.stopping && this.activeMusic.volume === 0) {\r\n this.audio.stopMusic(music.handle);\r\n // EventBus.emit(\"music_stopped\", { name: this.activeMusic.name });\r\n this.activeMusic = null;\r\n return;\r\n }\r\n\r\n this.activeMusic.fadeTarget = null;\r\n this.activeMusic.fadeSpeed = 0;\r\n }\r\n }\r\n\r\n // Apply volume\r\n this.audio.setMusicVolume(music.handle, this.activeMusic.volume);\r\n }\r\n audioperf.end(\"audioupdate\")\r\n }\r\n\r\n /**\r\n * Check if sound is playing\r\n */\r\n isSoundPlaying(name) {\r\n const sound = this.sounds.get(name);\r\n if (!sound) return false;\r\n\r\n return this.audio.isSoundPlaying(sound.handle);\r\n }\r\n\r\n /**\r\n * Check if music is playing\r\n */\r\n isMusicPlaying(name) {\r\n const music = this.music.get(name);\r\n if (!music) return false;\r\n\r\n return this.audio.isMusicPlaying(music.handle);\r\n }\r\n\r\n /**\r\n * Unload sound\r\n */\r\n unloadSound(name) {\r\n const sound = this.sounds.get(name);\r\n if (!sound) return;\r\n\r\n this.audio.unloadSound(sound.handle);\r\n this.sounds.delete(name);\r\n this.activeSounds.delete(name);\r\n\r\n console.log(`Unloaded sound: ${name}`);\r\n }\r\n\r\n /**\r\n * Unload music\r\n */\r\n unloadMusic(name) {\r\n const music = this.music.get(name);\r\n if (!music) return;\r\n\r\n this.audio.unloadMusic(music.handle);\r\n this.music.delete(name);\r\n\r\n if (this.activeMusic && this.activeMusic.name === name) {\r\n this.activeMusic = null;\r\n }\r\n\r\n console.log(`Unloaded music: ${name}`);\r\n }\r\n\r\n /**\r\n * Unload all audio\r\n */\r\n unloadAll() {\r\n // Unload all sounds\r\n for (const name of this.sounds.keys()) {\r\n this.unloadSound(name);\r\n }\r\n\r\n // Unload all music\r\n for (const name of this.music.keys()) {\r\n this.unloadMusic(name);\r\n }\r\n\r\n console.log(\"Unloaded all audio\");\r\n }\r\n\r\n /**\r\n * Get audio statistics\r\n */\r\n getStats() {\r\n return {\r\n soundsLoaded: this.sounds.size,\r\n musicLoaded: this.music.size,\r\n activeSounds: this.activeSounds.size,\r\n musicPlaying: this.activeMusic !== null,\r\n masterVolume: this.masterVolume,\r\n sfxVolume: this.sfxVolume,\r\n musicVolume: this.musicVolume\r\n };\r\n }\r\n}\r\n\r\n\r\nexport const AudioManager = new AudioManagerClass();\r\n\r\n/**\r\n * AudioPresets - common audio patterns\r\n */\r\nexport class AudioPresets {\r\n /**\r\n * UI sound pack\r\n */\r\n static async loadUIAudio() {\r\n await AudioManager.loadSound(\"ui_click\", \"assets/audio/ui/click.wav\");\r\n await AudioManager.loadSound(\"ui_hover\", \"assets/audio/ui/hover.wav\");\r\n await AudioManager.loadSound(\"ui_open\", \"assets/audio/ui/open.wav\");\r\n await AudioManager.loadSound(\"ui_close\", \"assets/audio/ui/close.wav\");\r\n }\r\n\r\n /**\r\n * Player action sounds\r\n */\r\n static async loadPlayerAudio() {\r\n await AudioManager.loadSound(\"jump\", \"assets/audio/player/jump.wav\");\r\n await AudioManager.loadSound(\"land\", \"assets/audio/player/land.wav\");\r\n await AudioManager.loadSound(\"damage\", \"assets/audio/player/damage.wav\");\r\n await AudioManager.loadSound(\"death\", \"assets/audio/player/death.wav\");\r\n }\r\n\r\n /**\r\n * Background music\r\n */\r\n static async loadMusicTracks() {\r\n await AudioManager.loadMusic(\"menu_theme\", \"assets/audio/music/menu.ogg\");\r\n await AudioManager.loadMusic(\"level1_theme\", \"assets/audio/music/level1.ogg\");\r\n await AudioManager.loadMusic(\"boss_theme\", \"assets/audio/music/boss.ogg\");\r\n }\r\n}","/**\n * Planck.js v1.4.2\n * @license The MIT license\n * @copyright Copyright (c) 2025 Erin Catto, Ali Shakiba\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nvar extendStatics = function(d2, b2) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b3) {\n d3.__proto__ = b3;\n } || function(d3, b3) {\n for (var p in b3) if (Object.prototype.hasOwnProperty.call(b3, p)) d3[p] = b3[p];\n };\n return extendStatics(d2, b2);\n};\nfunction __extends(d2, b2) {\n if (typeof b2 !== \"function\" && b2 !== null)\n throw new TypeError(\"Class extends value \" + String(b2) + \" is not a constructor or null\");\n extendStatics(d2, b2);\n function __() {\n this.constructor = d2;\n }\n d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __());\n}\nvar __assign = function() {\n __assign = Object.assign || function __assign2(t) {\n for (var s2, i = 1, n2 = arguments.length; i < n2; i++) {\n s2 = arguments[i];\n for (var p in s2) if (Object.prototype.hasOwnProperty.call(s2, p)) t[p] = s2[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar options = function(input2, defaults) {\n if (input2 === null || typeof input2 === \"undefined\") {\n input2 = {};\n }\n var output2 = __assign({}, input2);\n for (var key in defaults) {\n if (defaults.hasOwnProperty(key) && typeof input2[key] === \"undefined\") {\n output2[key] = defaults[key];\n }\n }\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n var symbols = Object.getOwnPropertySymbols(defaults);\n for (var i = 0; i < symbols.length; i++) {\n var symbol = symbols[i];\n if (defaults.propertyIsEnumerable(symbol) && typeof input2[symbol] === \"undefined\") {\n output2[symbol] = defaults[symbol];\n }\n }\n }\n return output2;\n};\nvar math_random = Math.random;\nvar EPSILON = 1e-9;\nvar isFinite = Number.isFinite;\nfunction nextPowerOfTwo(x2) {\n x2 |= x2 >> 1;\n x2 |= x2 >> 2;\n x2 |= x2 >> 4;\n x2 |= x2 >> 8;\n x2 |= x2 >> 16;\n return x2 + 1;\n}\nfunction isPowerOfTwo(x2) {\n return x2 > 0 && (x2 & x2 - 1) === 0;\n}\nfunction mod(num, min, max) {\n if (typeof min === \"undefined\") {\n max = 1;\n min = 0;\n } else if (typeof max === \"undefined\") {\n max = min;\n min = 0;\n }\n if (max > min) {\n num = (num - min) % (max - min);\n return num + (num < 0 ? max : min);\n } else {\n num = (num - max) % (min - max);\n return num + (num <= 0 ? min : max);\n }\n}\nfunction clamp(num, min, max) {\n if (num < min) {\n return min;\n } else if (num > max) {\n return max;\n } else {\n return num;\n }\n}\nfunction random(min, max) {\n if (typeof min === \"undefined\") {\n max = 1;\n min = 0;\n } else if (typeof max === \"undefined\") {\n max = min;\n min = 0;\n }\n return min === max ? min : math_random() * (max - min) + min;\n}\nvar math = Object.create(Math);\nmath.EPSILON = EPSILON;\nmath.isFinite = isFinite;\nmath.nextPowerOfTwo = nextPowerOfTwo;\nmath.isPowerOfTwo = isPowerOfTwo;\nmath.mod = mod;\nmath.clamp = clamp;\nmath.random = random;\nvar math_abs$9 = Math.abs;\nvar math_sqrt$5 = Math.sqrt;\nvar math_max$8 = Math.max;\nvar math_min$8 = Math.min;\nvar Vec2 = (\n /** @class */\n function() {\n function Vec22(x2, y) {\n if (!(this instanceof Vec22)) {\n return new Vec22(x2, y);\n }\n if (typeof x2 === \"undefined\") {\n this.x = 0;\n this.y = 0;\n } else if (typeof x2 === \"object\") {\n this.x = x2.x;\n this.y = x2.y;\n } else {\n this.x = x2;\n this.y = y;\n }\n }\n Vec22.prototype._serialize = function() {\n return {\n x: this.x,\n y: this.y\n };\n };\n Vec22._deserialize = function(data) {\n var obj = Object.create(Vec22.prototype);\n obj.x = data.x;\n obj.y = data.y;\n return obj;\n };\n Vec22.zero = function() {\n var obj = Object.create(Vec22.prototype);\n obj.x = 0;\n obj.y = 0;\n return obj;\n };\n Vec22.neo = function(x2, y) {\n var obj = Object.create(Vec22.prototype);\n obj.x = x2;\n obj.y = y;\n return obj;\n };\n Vec22.clone = function(v3) {\n return Vec22.neo(v3.x, v3.y);\n };\n Vec22.prototype.toString = function() {\n return JSON.stringify(this);\n };\n Vec22.isValid = function(obj) {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.x) && Number.isFinite(obj.y);\n };\n Vec22.assert = function(o) {\n };\n Vec22.prototype.clone = function() {\n return Vec22.clone(this);\n };\n Vec22.prototype.setZero = function() {\n this.x = 0;\n this.y = 0;\n return this;\n };\n Vec22.prototype.set = function(x2, y) {\n if (typeof x2 === \"object\") {\n this.x = x2.x;\n this.y = x2.y;\n } else {\n this.x = x2;\n this.y = y;\n }\n return this;\n };\n Vec22.prototype.setNum = function(x2, y) {\n this.x = x2;\n this.y = y;\n return this;\n };\n Vec22.prototype.setVec2 = function(value) {\n this.x = value.x;\n this.y = value.y;\n return this;\n };\n Vec22.prototype.wSet = function(a2, v3, b2, w) {\n if (typeof b2 !== \"undefined\" || typeof w !== \"undefined\") {\n return this.setCombine(a2, v3, b2, w);\n } else {\n return this.setMul(a2, v3);\n }\n };\n Vec22.prototype.setCombine = function(a2, v3, b2, w) {\n var x2 = a2 * v3.x + b2 * w.x;\n var y = a2 * v3.y + b2 * w.y;\n this.x = x2;\n this.y = y;\n return this;\n };\n Vec22.prototype.setMul = function(a2, v3) {\n var x2 = a2 * v3.x;\n var y = a2 * v3.y;\n this.x = x2;\n this.y = y;\n return this;\n };\n Vec22.prototype.add = function(w) {\n this.x += w.x;\n this.y += w.y;\n return this;\n };\n Vec22.prototype.wAdd = function(a2, v3, b2, w) {\n if (typeof b2 !== \"undefined\" || typeof w !== \"undefined\") {\n return this.addCombine(a2, v3, b2, w);\n } else {\n return this.addMul(a2, v3);\n }\n };\n Vec22.prototype.addCombine = function(a2, v3, b2, w) {\n var x2 = a2 * v3.x + b2 * w.x;\n var y = a2 * v3.y + b2 * w.y;\n this.x += x2;\n this.y += y;\n return this;\n };\n Vec22.prototype.addMul = function(a2, v3) {\n var x2 = a2 * v3.x;\n var y = a2 * v3.y;\n this.x += x2;\n this.y += y;\n return this;\n };\n Vec22.prototype.wSub = function(a2, v3, b2, w) {\n if (typeof b2 !== \"undefined\" || typeof w !== \"undefined\") {\n return this.subCombine(a2, v3, b2, w);\n } else {\n return this.subMul(a2, v3);\n }\n };\n Vec22.prototype.subCombine = function(a2, v3, b2, w) {\n var x2 = a2 * v3.x + b2 * w.x;\n var y = a2 * v3.y + b2 * w.y;\n this.x -= x2;\n this.y -= y;\n return this;\n };\n Vec22.prototype.subMul = function(a2, v3) {\n var x2 = a2 * v3.x;\n var y = a2 * v3.y;\n this.x -= x2;\n this.y -= y;\n return this;\n };\n Vec22.prototype.sub = function(w) {\n this.x -= w.x;\n this.y -= w.y;\n return this;\n };\n Vec22.prototype.mul = function(m) {\n this.x *= m;\n this.y *= m;\n return this;\n };\n Vec22.prototype.length = function() {\n return Vec22.lengthOf(this);\n };\n Vec22.prototype.lengthSquared = function() {\n return Vec22.lengthSquared(this);\n };\n Vec22.prototype.normalize = function() {\n var length = this.length();\n if (length < EPSILON) {\n return 0;\n }\n var invLength = 1 / length;\n this.x *= invLength;\n this.y *= invLength;\n return length;\n };\n Vec22.normalize = function(v3) {\n var length = Vec22.lengthOf(v3);\n if (length < EPSILON) {\n return Vec22.zero();\n }\n var invLength = 1 / length;\n return Vec22.neo(v3.x * invLength, v3.y * invLength);\n };\n Vec22.lengthOf = function(v3) {\n return math_sqrt$5(v3.x * v3.x + v3.y * v3.y);\n };\n Vec22.lengthSquared = function(v3) {\n return v3.x * v3.x + v3.y * v3.y;\n };\n Vec22.distance = function(v3, w) {\n var dx = v3.x - w.x;\n var dy = v3.y - w.y;\n return math_sqrt$5(dx * dx + dy * dy);\n };\n Vec22.distanceSquared = function(v3, w) {\n var dx = v3.x - w.x;\n var dy = v3.y - w.y;\n return dx * dx + dy * dy;\n };\n Vec22.areEqual = function(v3, w) {\n return v3 === w || typeof w === \"object\" && w !== null && v3.x === w.x && v3.y === w.y;\n };\n Vec22.skew = function(v3) {\n return Vec22.neo(-v3.y, v3.x);\n };\n Vec22.dot = function(v3, w) {\n return v3.x * w.x + v3.y * w.y;\n };\n Vec22.cross = function(v3, w) {\n if (typeof w === \"number\") {\n return Vec22.neo(w * v3.y, -w * v3.x);\n } else if (typeof v3 === \"number\") {\n return Vec22.neo(-v3 * w.y, v3 * w.x);\n } else {\n return v3.x * w.y - v3.y * w.x;\n }\n };\n Vec22.crossVec2Vec2 = function(v3, w) {\n return v3.x * w.y - v3.y * w.x;\n };\n Vec22.crossVec2Num = function(v3, w) {\n return Vec22.neo(w * v3.y, -w * v3.x);\n };\n Vec22.crossNumVec2 = function(v3, w) {\n return Vec22.neo(-v3 * w.y, v3 * w.x);\n };\n Vec22.addCross = function(a2, v3, w) {\n if (typeof w === \"number\") {\n return Vec22.neo(w * v3.y + a2.x, -w * v3.x + a2.y);\n } else if (typeof v3 === \"number\") {\n return Vec22.neo(-v3 * w.y + a2.x, v3 * w.x + a2.y);\n }\n };\n Vec22.addCrossVec2Num = function(a2, v3, w) {\n return Vec22.neo(w * v3.y + a2.x, -w * v3.x + a2.y);\n };\n Vec22.addCrossNumVec2 = function(a2, v3, w) {\n return Vec22.neo(-v3 * w.y + a2.x, v3 * w.x + a2.y);\n };\n Vec22.add = function(v3, w) {\n return Vec22.neo(v3.x + w.x, v3.y + w.y);\n };\n Vec22.wAdd = function(a2, v3, b2, w) {\n if (typeof b2 !== \"undefined\" || typeof w !== \"undefined\") {\n return Vec22.combine(a2, v3, b2, w);\n } else {\n return Vec22.mulNumVec2(a2, v3);\n }\n };\n Vec22.combine = function(a2, v3, b2, w) {\n return Vec22.zero().setCombine(a2, v3, b2, w);\n };\n Vec22.sub = function(v3, w) {\n return Vec22.neo(v3.x - w.x, v3.y - w.y);\n };\n Vec22.mul = function(a2, b2) {\n if (typeof a2 === \"object\") {\n return Vec22.neo(a2.x * b2, a2.y * b2);\n } else if (typeof b2 === \"object\") {\n return Vec22.neo(a2 * b2.x, a2 * b2.y);\n }\n };\n Vec22.mulVec2Num = function(a2, b2) {\n return Vec22.neo(a2.x * b2, a2.y * b2);\n };\n Vec22.mulNumVec2 = function(a2, b2) {\n return Vec22.neo(a2 * b2.x, a2 * b2.y);\n };\n Vec22.prototype.neg = function() {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n };\n Vec22.neg = function(v3) {\n return Vec22.neo(-v3.x, -v3.y);\n };\n Vec22.abs = function(v3) {\n return Vec22.neo(math_abs$9(v3.x), math_abs$9(v3.y));\n };\n Vec22.mid = function(v3, w) {\n return Vec22.neo((v3.x + w.x) * 0.5, (v3.y + w.y) * 0.5);\n };\n Vec22.upper = function(v3, w) {\n return Vec22.neo(math_max$8(v3.x, w.x), math_max$8(v3.y, w.y));\n };\n Vec22.lower = function(v3, w) {\n return Vec22.neo(math_min$8(v3.x, w.x), math_min$8(v3.y, w.y));\n };\n Vec22.prototype.clamp = function(max) {\n var lengthSqr = this.x * this.x + this.y * this.y;\n if (lengthSqr > max * max) {\n var scale = max / math_sqrt$5(lengthSqr);\n this.x *= scale;\n this.y *= scale;\n }\n return this;\n };\n Vec22.clamp = function(v3, max) {\n var r = Vec22.neo(v3.x, v3.y);\n r.clamp(max);\n return r;\n };\n Vec22.clampVec2 = function(v3, min, max) {\n return {\n x: clamp(v3.x, min === null || min === void 0 ? void 0 : min.x, max === null || max === void 0 ? void 0 : max.x),\n y: clamp(v3.y, min === null || min === void 0 ? void 0 : min.y, max === null || max === void 0 ? void 0 : max.y)\n };\n };\n Vec22.scaleFn = function(x2, y) {\n return function(v3) {\n return Vec22.neo(v3.x * x2, v3.y * y);\n };\n };\n Vec22.translateFn = function(x2, y) {\n return function(v3) {\n return Vec22.neo(v3.x + x2, v3.y + y);\n };\n };\n return Vec22;\n }()\n);\nvar math_max$7 = Math.max;\nvar math_min$7 = Math.min;\nvar AABB = (\n /** @class */\n function() {\n function AABB2(lower, upper) {\n if (!(this instanceof AABB2)) {\n return new AABB2(lower, upper);\n }\n this.lowerBound = Vec2.zero();\n this.upperBound = Vec2.zero();\n if (typeof lower === \"object\") {\n this.lowerBound.setVec2(lower);\n }\n if (typeof upper === \"object\") {\n this.upperBound.setVec2(upper);\n } else if (typeof lower === \"object\") {\n this.upperBound.setVec2(lower);\n }\n }\n AABB2.prototype.isValid = function() {\n return AABB2.isValid(this);\n };\n AABB2.isValid = function(obj) {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.lowerBound) && Vec2.isValid(obj.upperBound) && Vec2.sub(obj.upperBound, obj.lowerBound).lengthSquared() >= 0;\n };\n AABB2.assert = function(o) {\n };\n AABB2.prototype.getCenter = function() {\n return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5);\n };\n AABB2.prototype.getExtents = function() {\n return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5);\n };\n AABB2.prototype.getPerimeter = function() {\n return 2 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y);\n };\n AABB2.prototype.combine = function(a2, b2) {\n b2 = b2 || this;\n var lowerA = a2.lowerBound;\n var upperA = a2.upperBound;\n var lowerB = b2.lowerBound;\n var upperB = b2.upperBound;\n var lowerX = math_min$7(lowerA.x, lowerB.x);\n var lowerY = math_min$7(lowerA.y, lowerB.y);\n var upperX = math_max$7(upperB.x, upperA.x);\n var upperY = math_max$7(upperB.y, upperA.y);\n this.lowerBound.setNum(lowerX, lowerY);\n this.upperBound.setNum(upperX, upperY);\n };\n AABB2.prototype.combinePoints = function(a2, b2) {\n this.lowerBound.setNum(math_min$7(a2.x, b2.x), math_min$7(a2.y, b2.y));\n this.upperBound.setNum(math_max$7(a2.x, b2.x), math_max$7(a2.y, b2.y));\n };\n AABB2.prototype.set = function(aabb) {\n this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y);\n this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y);\n };\n AABB2.prototype.contains = function(aabb) {\n var result = true;\n result = result && this.lowerBound.x <= aabb.lowerBound.x;\n result = result && this.lowerBound.y <= aabb.lowerBound.y;\n result = result && aabb.upperBound.x <= this.upperBound.x;\n result = result && aabb.upperBound.y <= this.upperBound.y;\n return result;\n };\n AABB2.prototype.extend = function(value) {\n AABB2.extend(this, value);\n return this;\n };\n AABB2.extend = function(out, value) {\n out.lowerBound.x -= value;\n out.lowerBound.y -= value;\n out.upperBound.x += value;\n out.upperBound.y += value;\n return out;\n };\n AABB2.testOverlap = function(a2, b2) {\n var d1x = b2.lowerBound.x - a2.upperBound.x;\n var d2x = a2.lowerBound.x - b2.upperBound.x;\n var d1y = b2.lowerBound.y - a2.upperBound.y;\n var d2y = a2.lowerBound.y - b2.upperBound.y;\n if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) {\n return false;\n }\n return true;\n };\n AABB2.areEqual = function(a2, b2) {\n return Vec2.areEqual(a2.lowerBound, b2.lowerBound) && Vec2.areEqual(a2.upperBound, b2.upperBound);\n };\n AABB2.diff = function(a2, b2) {\n var wD = math_max$7(0, math_min$7(a2.upperBound.x, b2.upperBound.x) - math_max$7(b2.lowerBound.x, a2.lowerBound.x));\n var hD = math_max$7(0, math_min$7(a2.upperBound.y, b2.upperBound.y) - math_max$7(b2.lowerBound.y, a2.lowerBound.y));\n var wA = a2.upperBound.x - a2.lowerBound.x;\n var hA = a2.upperBound.y - a2.lowerBound.y;\n var wB = b2.upperBound.x - b2.lowerBound.x;\n var hB = b2.upperBound.y - b2.lowerBound.y;\n return wA * hA + wB * hB - wD * hD;\n };\n AABB2.prototype.rayCast = function(output2, input2) {\n var tmin = -Infinity;\n var tmax = Infinity;\n var p = input2.p1;\n var d2 = Vec2.sub(input2.p2, input2.p1);\n var absD = Vec2.abs(d2);\n var normal3 = Vec2.zero();\n {\n if (absD.x < EPSILON) {\n if (p.x < this.lowerBound.x || this.upperBound.x < p.x) {\n return false;\n }\n } else {\n var inv_d = 1 / d2.x;\n var t1 = (this.lowerBound.x - p.x) * inv_d;\n var t2 = (this.upperBound.x - p.x) * inv_d;\n var s2 = -1;\n if (t1 > t2) {\n var temp3 = t1;\n t1 = t2;\n t2 = temp3;\n s2 = 1;\n }\n if (t1 > tmin) {\n normal3.setZero();\n normal3.x = s2;\n tmin = t1;\n }\n tmax = math_min$7(tmax, t2);\n if (tmin > tmax) {\n return false;\n }\n }\n }\n {\n if (absD.y < EPSILON) {\n if (p.y < this.lowerBound.y || this.upperBound.y < p.y) {\n return false;\n }\n } else {\n var inv_d = 1 / d2.y;\n var t1 = (this.lowerBound.y - p.y) * inv_d;\n var t2 = (this.upperBound.y - p.y) * inv_d;\n var s2 = -1;\n if (t1 > t2) {\n var temp3 = t1;\n t1 = t2;\n t2 = temp3;\n s2 = 1;\n }\n if (t1 > tmin) {\n normal3.setZero();\n normal3.y = s2;\n tmin = t1;\n }\n tmax = math_min$7(tmax, t2);\n if (tmin > tmax) {\n return false;\n }\n }\n }\n if (tmin < 0 || input2.maxFraction < tmin) {\n return false;\n }\n output2.fraction = tmin;\n output2.normal = normal3;\n return true;\n };\n AABB2.prototype.toString = function() {\n return JSON.stringify(this);\n };\n AABB2.combinePoints = function(out, a2, b2) {\n out.lowerBound.x = math_min$7(a2.x, b2.x);\n out.lowerBound.y = math_min$7(a2.y, b2.y);\n out.upperBound.x = math_max$7(a2.x, b2.x);\n out.upperBound.y = math_max$7(a2.y, b2.y);\n return out;\n };\n AABB2.combinedPerimeter = function(a2, b2) {\n var lx = math_min$7(a2.lowerBound.x, b2.lowerBound.x);\n var ly = math_min$7(a2.lowerBound.y, b2.lowerBound.y);\n var ux = math_max$7(a2.upperBound.x, b2.upperBound.x);\n var uy = math_max$7(a2.upperBound.y, b2.upperBound.y);\n return 2 * (ux - lx + uy - ly);\n };\n return AABB2;\n }()\n);\nvar math_PI$6 = Math.PI;\nvar Settings = (\n /** @class */\n function() {\n function Settings2() {\n }\n Object.defineProperty(Settings2, \"polygonRadius\", {\n /**\n * The radius of the polygon/edge shape skin. This should not be modified.\n * Making this smaller means polygons will have an insufficient buffer for\n * continuous collision. Making it larger may create artifacts for vertex\n * collision.\n */\n get: function() {\n return 2 * Settings2.linearSlop;\n },\n enumerable: false,\n configurable: true\n });\n Settings2.lengthUnitsPerMeter = 1;\n Settings2.maxManifoldPoints = 2;\n Settings2.maxPolygonVertices = 12;\n Settings2.aabbExtension = 0.1;\n Settings2.aabbMultiplier = 2;\n Settings2.linearSlop = 5e-3;\n Settings2.angularSlop = 2 / 180 * math_PI$6;\n Settings2.maxSubSteps = 8;\n Settings2.maxTOIContacts = 32;\n Settings2.maxTOIIterations = 20;\n Settings2.maxDistanceIterations = 20;\n Settings2.velocityThreshold = 1;\n Settings2.maxLinearCorrection = 0.2;\n Settings2.maxAngularCorrection = 8 / 180 * math_PI$6;\n Settings2.maxTranslation = 2;\n Settings2.maxRotation = 0.5 * math_PI$6;\n Settings2.baumgarte = 0.2;\n Settings2.toiBaugarte = 0.75;\n Settings2.timeToSleep = 0.5;\n Settings2.linearSleepTolerance = 0.01;\n Settings2.angularSleepTolerance = 2 / 180 * math_PI$6;\n return Settings2;\n }()\n);\nvar SettingsInternal = (\n /** @class */\n function() {\n function SettingsInternal2() {\n }\n Object.defineProperty(SettingsInternal2, \"maxManifoldPoints\", {\n get: function() {\n return Settings.maxManifoldPoints;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"maxPolygonVertices\", {\n get: function() {\n return Settings.maxPolygonVertices;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"aabbExtension\", {\n get: function() {\n return Settings.aabbExtension * Settings.lengthUnitsPerMeter;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"aabbMultiplier\", {\n get: function() {\n return Settings.aabbMultiplier;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"linearSlop\", {\n get: function() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"linearSlopSquared\", {\n get: function() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"angularSlop\", {\n get: function() {\n return Settings.angularSlop;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"polygonRadius\", {\n get: function() {\n return 2 * Settings.linearSlop;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"maxSubSteps\", {\n get: function() {\n return Settings.maxSubSteps;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"maxTOIContacts\", {\n get: function() {\n return Settings.maxTOIContacts;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"maxTOIIterations\", {\n get: function() {\n return Settings.maxTOIIterations;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"maxDistanceIterations\", {\n get: function() {\n return Settings.maxDistanceIterations;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"velocityThreshold\", {\n get: function() {\n return Settings.velocityThreshold * Settings.lengthUnitsPerMeter;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"maxLinearCorrection\", {\n get: function() {\n return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"maxAngularCorrection\", {\n get: function() {\n return Settings.maxAngularCorrection;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"maxTranslation\", {\n get: function() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"maxTranslationSquared\", {\n get: function() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"maxRotation\", {\n get: function() {\n return Settings.maxRotation;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"maxRotationSquared\", {\n get: function() {\n return Settings.maxRotation * Settings.maxRotation;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"baumgarte\", {\n get: function() {\n return Settings.baumgarte;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"toiBaugarte\", {\n get: function() {\n return Settings.toiBaugarte;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"timeToSleep\", {\n get: function() {\n return Settings.timeToSleep;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"linearSleepTolerance\", {\n get: function() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"linearSleepToleranceSqr\", {\n get: function() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"angularSleepTolerance\", {\n get: function() {\n return Settings.angularSleepTolerance;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SettingsInternal2, \"angularSleepToleranceSqr\", {\n get: function() {\n return Settings.angularSleepTolerance * Settings.angularSleepTolerance;\n },\n enumerable: false,\n configurable: true\n });\n return SettingsInternal2;\n }()\n);\nvar Pool = (\n /** @class */\n function() {\n function Pool2(opts) {\n this._list = [];\n this._max = Infinity;\n this._hasCreateFn = false;\n this._createCount = 0;\n this._hasAllocateFn = false;\n this._allocateCount = 0;\n this._hasReleaseFn = false;\n this._releaseCount = 0;\n this._hasDisposeFn = false;\n this._disposeCount = 0;\n this._list = [];\n this._max = opts.max || this._max;\n this._createFn = opts.create;\n this._hasCreateFn = typeof this._createFn === \"function\";\n this._allocateFn = opts.allocate;\n this._hasAllocateFn = typeof this._allocateFn === \"function\";\n this._releaseFn = opts.release;\n this._hasReleaseFn = typeof this._releaseFn === \"function\";\n this._disposeFn = opts.dispose;\n this._hasDisposeFn = typeof this._disposeFn === \"function\";\n }\n Pool2.prototype.max = function(n2) {\n if (typeof n2 === \"number\") {\n this._max = n2;\n return this;\n }\n return this._max;\n };\n Pool2.prototype.size = function() {\n return this._list.length;\n };\n Pool2.prototype.allocate = function() {\n var item;\n if (this._list.length > 0) {\n item = this._list.shift();\n } else {\n this._createCount++;\n if (this._hasCreateFn) {\n item = this._createFn();\n } else {\n item = {};\n }\n }\n this._allocateCount++;\n if (this._hasAllocateFn) {\n this._allocateFn(item);\n }\n return item;\n };\n Pool2.prototype.release = function(item) {\n if (this._list.length < this._max) {\n this._releaseCount++;\n if (this._hasReleaseFn) {\n this._releaseFn(item);\n }\n this._list.push(item);\n } else {\n this._disposeCount++;\n if (this._hasDisposeFn) {\n item = this._disposeFn(item);\n }\n }\n };\n Pool2.prototype.toString = function() {\n return \" +\" + this._createCount + \" >\" + this._allocateCount + \" <\" + this._releaseCount + \" -\" + this._disposeCount + \" =\" + this._list.length + \"/\" + this._max;\n };\n return Pool2;\n }()\n);\nvar math_abs$8 = Math.abs;\nvar math_max$6 = Math.max;\nvar TreeNode = (\n /** @class */\n function() {\n function TreeNode2(id) {\n this.aabb = new AABB();\n this.userData = null;\n this.parent = null;\n this.child1 = null;\n this.child2 = null;\n this.height = -1;\n this.id = id;\n }\n TreeNode2.prototype.toString = function() {\n return this.id + \": \" + this.userData;\n };\n TreeNode2.prototype.isLeaf = function() {\n return this.child1 == null;\n };\n return TreeNode2;\n }()\n);\nvar poolTreeNode = new Pool({\n create: function() {\n return new TreeNode();\n },\n release: function(node) {\n node.userData = null;\n node.parent = null;\n node.child1 = null;\n node.child2 = null;\n node.height = -1;\n node.id = void 0;\n }\n});\nvar DynamicTree = (\n /** @class */\n function() {\n function DynamicTree2() {\n this.inputPool = new Pool({\n create: function() {\n return {};\n },\n release: function(stack) {\n }\n });\n this.stackPool = new Pool({\n create: function() {\n return [];\n },\n release: function(stack) {\n stack.length = 0;\n }\n });\n this.iteratorPool = new Pool({\n create: function() {\n return new Iterator();\n },\n release: function(iterator) {\n iterator.close();\n }\n });\n this.m_root = null;\n this.m_nodes = {};\n this.m_lastProxyId = 0;\n }\n DynamicTree2.prototype.getUserData = function(id) {\n var node = this.m_nodes[id];\n return node.userData;\n };\n DynamicTree2.prototype.getFatAABB = function(id) {\n var node = this.m_nodes[id];\n return node.aabb;\n };\n DynamicTree2.prototype.allocateNode = function() {\n var node = poolTreeNode.allocate();\n node.id = ++this.m_lastProxyId;\n this.m_nodes[node.id] = node;\n return node;\n };\n DynamicTree2.prototype.freeNode = function(node) {\n delete this.m_nodes[node.id];\n poolTreeNode.release(node);\n };\n DynamicTree2.prototype.createProxy = function(aabb, userData) {\n var node = this.allocateNode();\n node.aabb.set(aabb);\n AABB.extend(node.aabb, SettingsInternal.aabbExtension);\n node.userData = userData;\n node.height = 0;\n this.insertLeaf(node);\n return node.id;\n };\n DynamicTree2.prototype.destroyProxy = function(id) {\n var node = this.m_nodes[id];\n this.removeLeaf(node);\n this.freeNode(node);\n };\n DynamicTree2.prototype.moveProxy = function(id, aabb, d2) {\n var node = this.m_nodes[id];\n if (node.aabb.contains(aabb)) {\n return false;\n }\n this.removeLeaf(node);\n node.aabb.set(aabb);\n aabb = node.aabb;\n AABB.extend(aabb, SettingsInternal.aabbExtension);\n if (d2.x < 0) {\n aabb.lowerBound.x += d2.x * SettingsInternal.aabbMultiplier;\n } else {\n aabb.upperBound.x += d2.x * SettingsInternal.aabbMultiplier;\n }\n if (d2.y < 0) {\n aabb.lowerBound.y += d2.y * SettingsInternal.aabbMultiplier;\n } else {\n aabb.upperBound.y += d2.y * SettingsInternal.aabbMultiplier;\n }\n this.insertLeaf(node);\n return true;\n };\n DynamicTree2.prototype.insertLeaf = function(leaf) {\n if (this.m_root == null) {\n this.m_root = leaf;\n this.m_root.parent = null;\n return;\n }\n var leafAABB = leaf.aabb;\n var index = this.m_root;\n while (!index.isLeaf()) {\n var child1 = index.child1;\n var child2 = index.child2;\n var area = index.aabb.getPerimeter();\n var combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB);\n var cost = 2 * combinedArea;\n var inheritanceCost = 2 * (combinedArea - area);\n var newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb);\n var cost1 = newArea1 + inheritanceCost;\n if (!child1.isLeaf()) {\n var oldArea = child1.aabb.getPerimeter();\n cost1 -= oldArea;\n }\n var newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb);\n var cost2 = newArea2 + inheritanceCost;\n if (!child2.isLeaf()) {\n var oldArea = child2.aabb.getPerimeter();\n cost2 -= oldArea;\n }\n if (cost < cost1 && cost < cost2) {\n break;\n }\n if (cost1 < cost2) {\n index = child1;\n } else {\n index = child2;\n }\n }\n var sibling = index;\n var oldParent = sibling.parent;\n var newParent = this.allocateNode();\n newParent.parent = oldParent;\n newParent.userData = null;\n newParent.aabb.combine(leafAABB, sibling.aabb);\n newParent.height = sibling.height + 1;\n if (oldParent != null) {\n if (oldParent.child1 === sibling) {\n oldParent.child1 = newParent;\n } else {\n oldParent.child2 = newParent;\n }\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n } else {\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n this.m_root = newParent;\n }\n index = leaf.parent;\n while (index != null) {\n index = this.balance(index);\n var child1 = index.child1;\n var child2 = index.child2;\n index.height = 1 + math_max$6(child1.height, child2.height);\n index.aabb.combine(child1.aabb, child2.aabb);\n index = index.parent;\n }\n };\n DynamicTree2.prototype.removeLeaf = function(leaf) {\n if (leaf === this.m_root) {\n this.m_root = null;\n return;\n }\n var parent = leaf.parent;\n var grandParent = parent.parent;\n var sibling;\n if (parent.child1 === leaf) {\n sibling = parent.child2;\n } else {\n sibling = parent.child1;\n }\n if (grandParent != null) {\n if (grandParent.child1 === parent) {\n grandParent.child1 = sibling;\n } else {\n grandParent.child2 = sibling;\n }\n sibling.parent = grandParent;\n this.freeNode(parent);\n var index = grandParent;\n while (index != null) {\n index = this.balance(index);\n var child1 = index.child1;\n var child2 = index.child2;\n index.aabb.combine(child1.aabb, child2.aabb);\n index.height = 1 + math_max$6(child1.height, child2.height);\n index = index.parent;\n }\n } else {\n this.m_root = sibling;\n sibling.parent = null;\n this.freeNode(parent);\n }\n };\n DynamicTree2.prototype.balance = function(iA) {\n var A = iA;\n if (A.isLeaf() || A.height < 2) {\n return iA;\n }\n var B = A.child1;\n var C = A.child2;\n var balance = C.height - B.height;\n if (balance > 1) {\n var F = C.child1;\n var G = C.child2;\n C.child1 = A;\n C.parent = A.parent;\n A.parent = C;\n if (C.parent != null) {\n if (C.parent.child1 === iA) {\n C.parent.child1 = C;\n } else {\n C.parent.child2 = C;\n }\n } else {\n this.m_root = C;\n }\n if (F.height > G.height) {\n C.child2 = F;\n A.child2 = G;\n G.parent = A;\n A.aabb.combine(B.aabb, G.aabb);\n C.aabb.combine(A.aabb, F.aabb);\n A.height = 1 + math_max$6(B.height, G.height);\n C.height = 1 + math_max$6(A.height, F.height);\n } else {\n C.child2 = G;\n A.child2 = F;\n F.parent = A;\n A.aabb.combine(B.aabb, F.aabb);\n C.aabb.combine(A.aabb, G.aabb);\n A.height = 1 + math_max$6(B.height, F.height);\n C.height = 1 + math_max$6(A.height, G.height);\n }\n return C;\n }\n if (balance < -1) {\n var D = B.child1;\n var E = B.child2;\n B.child1 = A;\n B.parent = A.parent;\n A.parent = B;\n if (B.parent != null) {\n if (B.parent.child1 === A) {\n B.parent.child1 = B;\n } else {\n B.parent.child2 = B;\n }\n } else {\n this.m_root = B;\n }\n if (D.height > E.height) {\n B.child2 = D;\n A.child1 = E;\n E.parent = A;\n A.aabb.combine(C.aabb, E.aabb);\n B.aabb.combine(A.aabb, D.aabb);\n A.height = 1 + math_max$6(C.height, E.height);\n B.height = 1 + math_max$6(A.height, D.height);\n } else {\n B.child2 = E;\n A.child1 = D;\n D.parent = A;\n A.aabb.combine(C.aabb, D.aabb);\n B.aabb.combine(A.aabb, E.aabb);\n A.height = 1 + math_max$6(C.height, D.height);\n B.height = 1 + math_max$6(A.height, E.height);\n }\n return B;\n }\n return A;\n };\n DynamicTree2.prototype.getHeight = function() {\n if (this.m_root == null) {\n return 0;\n }\n return this.m_root.height;\n };\n DynamicTree2.prototype.getAreaRatio = function() {\n if (this.m_root == null) {\n return 0;\n }\n var root = this.m_root;\n var rootArea = root.aabb.getPerimeter();\n var totalArea = 0;\n var node;\n var it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n continue;\n }\n totalArea += node.aabb.getPerimeter();\n }\n this.iteratorPool.release(it);\n return totalArea / rootArea;\n };\n DynamicTree2.prototype.computeHeight = function(id) {\n var node;\n if (typeof id !== \"undefined\") {\n node = this.m_nodes[id];\n } else {\n node = this.m_root;\n }\n if (node.isLeaf()) {\n return 0;\n }\n var height1 = this.computeHeight(node.child1.id);\n var height2 = this.computeHeight(node.child2.id);\n return 1 + math_max$6(height1, height2);\n };\n DynamicTree2.prototype.validateStructure = function(node) {\n if (node == null) {\n return;\n }\n if (node === this.m_root) ;\n var child1 = node.child1;\n var child2 = node.child2;\n if (node.isLeaf()) {\n return;\n }\n this.validateStructure(child1);\n this.validateStructure(child2);\n };\n DynamicTree2.prototype.validateMetrics = function(node) {\n if (node == null) {\n return;\n }\n var child1 = node.child1;\n var child2 = node.child2;\n if (node.isLeaf()) {\n return;\n }\n this.validateMetrics(child1);\n this.validateMetrics(child2);\n };\n DynamicTree2.prototype.validate = function() {\n return;\n };\n DynamicTree2.prototype.getMaxBalance = function() {\n var maxBalance = 0;\n var node;\n var it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height <= 1) {\n continue;\n }\n var balance = math_abs$8(node.child2.height - node.child1.height);\n maxBalance = math_max$6(maxBalance, balance);\n }\n this.iteratorPool.release(it);\n return maxBalance;\n };\n DynamicTree2.prototype.rebuildBottomUp = function() {\n var nodes = [];\n var count = 0;\n var node;\n var it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n continue;\n }\n if (node.isLeaf()) {\n node.parent = null;\n nodes[count] = node;\n ++count;\n } else {\n this.freeNode(node);\n }\n }\n this.iteratorPool.release(it);\n while (count > 1) {\n var minCost = Infinity;\n var iMin = -1;\n var jMin = -1;\n for (var i = 0; i < count; ++i) {\n var aabbi = nodes[i].aabb;\n for (var j = i + 1; j < count; ++j) {\n var aabbj = nodes[j].aabb;\n var cost = AABB.combinedPerimeter(aabbi, aabbj);\n if (cost < minCost) {\n iMin = i;\n jMin = j;\n minCost = cost;\n }\n }\n }\n var child1 = nodes[iMin];\n var child2 = nodes[jMin];\n var parent_1 = this.allocateNode();\n parent_1.child1 = child1;\n parent_1.child2 = child2;\n parent_1.height = 1 + math_max$6(child1.height, child2.height);\n parent_1.aabb.combine(child1.aabb, child2.aabb);\n parent_1.parent = null;\n child1.parent = parent_1;\n child2.parent = parent_1;\n nodes[jMin] = nodes[count - 1];\n nodes[iMin] = parent_1;\n --count;\n }\n this.m_root = nodes[0];\n };\n DynamicTree2.prototype.shiftOrigin = function(newOrigin) {\n var node;\n var it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n var aabb = node.aabb;\n aabb.lowerBound.x -= newOrigin.x;\n aabb.lowerBound.y -= newOrigin.y;\n aabb.upperBound.x -= newOrigin.x;\n aabb.upperBound.y -= newOrigin.y;\n }\n this.iteratorPool.release(it);\n };\n DynamicTree2.prototype.query = function(aabb, queryCallback) {\n var stack = this.stackPool.allocate();\n stack.push(this.m_root);\n while (stack.length > 0) {\n var node = stack.pop();\n if (node == null) {\n continue;\n }\n if (AABB.testOverlap(node.aabb, aabb)) {\n if (node.isLeaf()) {\n var proceed = queryCallback(node.id);\n if (proceed === false) {\n return;\n }\n } else {\n stack.push(node.child1);\n stack.push(node.child2);\n }\n }\n }\n this.stackPool.release(stack);\n };\n DynamicTree2.prototype.rayCast = function(input2, rayCastCallback) {\n var p1 = input2.p1;\n var p2 = input2.p2;\n var r = Vec2.sub(p2, p1);\n r.normalize();\n var v3 = Vec2.crossNumVec2(1, r);\n var abs_v = Vec2.abs(v3);\n var maxFraction = input2.maxFraction;\n var segmentAABB = new AABB();\n var t = Vec2.combine(1 - maxFraction, p1, maxFraction, p2);\n segmentAABB.combinePoints(p1, t);\n var stack = this.stackPool.allocate();\n var subInput = this.inputPool.allocate();\n stack.push(this.m_root);\n while (stack.length > 0) {\n var node = stack.pop();\n if (node == null) {\n continue;\n }\n if (AABB.testOverlap(node.aabb, segmentAABB) === false) {\n continue;\n }\n var c2 = node.aabb.getCenter();\n var h = node.aabb.getExtents();\n var separation = math_abs$8(Vec2.dot(v3, Vec2.sub(p1, c2))) - Vec2.dot(abs_v, h);\n if (separation > 0) {\n continue;\n }\n if (node.isLeaf()) {\n subInput.p1 = Vec2.clone(input2.p1);\n subInput.p2 = Vec2.clone(input2.p2);\n subInput.maxFraction = maxFraction;\n var value = rayCastCallback(subInput, node.id);\n if (value === 0) {\n break;\n } else if (value > 0) {\n maxFraction = value;\n t = Vec2.combine(1 - maxFraction, p1, maxFraction, p2);\n segmentAABB.combinePoints(p1, t);\n }\n } else {\n stack.push(node.child1);\n stack.push(node.child2);\n }\n }\n this.stackPool.release(stack);\n this.inputPool.release(subInput);\n };\n return DynamicTree2;\n }()\n);\nvar Iterator = (\n /** @class */\n function() {\n function Iterator2() {\n this.parents = [];\n this.states = [];\n }\n Iterator2.prototype.preorder = function(root) {\n this.parents.length = 0;\n this.parents.push(root);\n this.states.length = 0;\n this.states.push(0);\n return this;\n };\n Iterator2.prototype.next = function() {\n while (this.parents.length > 0) {\n var i = this.parents.length - 1;\n var node = this.parents[i];\n if (this.states[i] === 0) {\n this.states[i] = 1;\n return node;\n }\n if (this.states[i] === 1) {\n this.states[i] = 2;\n if (node.child1) {\n this.parents.push(node.child1);\n this.states.push(1);\n return node.child1;\n }\n }\n if (this.states[i] === 2) {\n this.states[i] = 3;\n if (node.child2) {\n this.parents.push(node.child2);\n this.states.push(1);\n return node.child2;\n }\n }\n this.parents.pop();\n this.states.pop();\n }\n };\n Iterator2.prototype.close = function() {\n this.parents.length = 0;\n };\n return Iterator2;\n }()\n);\nvar math_max$5 = Math.max;\nvar math_min$6 = Math.min;\nvar BroadPhase = (\n /** @class */\n function() {\n function BroadPhase2() {\n var _this = this;\n this.m_tree = new DynamicTree();\n this.m_moveBuffer = [];\n this.query = function(aabb, queryCallback) {\n _this.m_tree.query(aabb, queryCallback);\n };\n this.queryCallback = function(proxyId) {\n if (proxyId === _this.m_queryProxyId) {\n return true;\n }\n var proxyIdA = math_min$6(proxyId, _this.m_queryProxyId);\n var proxyIdB = math_max$5(proxyId, _this.m_queryProxyId);\n var userDataA = _this.m_tree.getUserData(proxyIdA);\n var userDataB = _this.m_tree.getUserData(proxyIdB);\n _this.m_callback(userDataA, userDataB);\n return true;\n };\n }\n BroadPhase2.prototype.getUserData = function(proxyId) {\n return this.m_tree.getUserData(proxyId);\n };\n BroadPhase2.prototype.testOverlap = function(proxyIdA, proxyIdB) {\n var aabbA = this.m_tree.getFatAABB(proxyIdA);\n var aabbB = this.m_tree.getFatAABB(proxyIdB);\n return AABB.testOverlap(aabbA, aabbB);\n };\n BroadPhase2.prototype.getFatAABB = function(proxyId) {\n return this.m_tree.getFatAABB(proxyId);\n };\n BroadPhase2.prototype.getProxyCount = function() {\n return this.m_moveBuffer.length;\n };\n BroadPhase2.prototype.getTreeHeight = function() {\n return this.m_tree.getHeight();\n };\n BroadPhase2.prototype.getTreeBalance = function() {\n return this.m_tree.getMaxBalance();\n };\n BroadPhase2.prototype.getTreeQuality = function() {\n return this.m_tree.getAreaRatio();\n };\n BroadPhase2.prototype.rayCast = function(input2, rayCastCallback) {\n this.m_tree.rayCast(input2, rayCastCallback);\n };\n BroadPhase2.prototype.shiftOrigin = function(newOrigin) {\n this.m_tree.shiftOrigin(newOrigin);\n };\n BroadPhase2.prototype.createProxy = function(aabb, userData) {\n var proxyId = this.m_tree.createProxy(aabb, userData);\n this.bufferMove(proxyId);\n return proxyId;\n };\n BroadPhase2.prototype.destroyProxy = function(proxyId) {\n this.unbufferMove(proxyId);\n this.m_tree.destroyProxy(proxyId);\n };\n BroadPhase2.prototype.moveProxy = function(proxyId, aabb, displacement2) {\n var changed = this.m_tree.moveProxy(proxyId, aabb, displacement2);\n if (changed) {\n this.bufferMove(proxyId);\n }\n };\n BroadPhase2.prototype.touchProxy = function(proxyId) {\n this.bufferMove(proxyId);\n };\n BroadPhase2.prototype.bufferMove = function(proxyId) {\n this.m_moveBuffer.push(proxyId);\n };\n BroadPhase2.prototype.unbufferMove = function(proxyId) {\n for (var i = 0; i < this.m_moveBuffer.length; ++i) {\n if (this.m_moveBuffer[i] === proxyId) {\n this.m_moveBuffer[i] = null;\n }\n }\n };\n BroadPhase2.prototype.updatePairs = function(addPairCallback) {\n this.m_callback = addPairCallback;\n while (this.m_moveBuffer.length > 0) {\n this.m_queryProxyId = this.m_moveBuffer.pop();\n if (this.m_queryProxyId === null) {\n continue;\n }\n var fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId);\n this.m_tree.query(fatAABB, this.queryCallback);\n }\n };\n return BroadPhase2;\n }()\n);\nvar math_sin$2 = Math.sin;\nvar math_cos$2 = Math.cos;\nvar math_sqrt$4 = Math.sqrt;\nfunction vec2(x2, y) {\n return { x: x2, y };\n}\nfunction rotation(angle) {\n return { s: math_sin$2(angle), c: math_cos$2(angle) };\n}\nfunction setVec2(out, x2, y) {\n out.x = x2;\n out.y = y;\n return out;\n}\nfunction copyVec2(out, w) {\n out.x = w.x;\n out.y = w.y;\n return out;\n}\nfunction zeroVec2(out) {\n out.x = 0;\n out.y = 0;\n return out;\n}\nfunction negVec2(out) {\n out.x = -out.x;\n out.y = -out.y;\n return out;\n}\nfunction plusVec2(out, w) {\n out.x += w.x;\n out.y += w.y;\n return out;\n}\nfunction addVec2(out, v3, w) {\n out.x = v3.x + w.x;\n out.y = v3.x + w.y;\n return out;\n}\nfunction minusVec2(out, w) {\n out.x -= w.x;\n out.y -= w.y;\n return out;\n}\nfunction subVec2(out, v3, w) {\n out.x = v3.x - w.x;\n out.y = v3.y - w.y;\n return out;\n}\nfunction mulVec2(out, m) {\n out.x *= m;\n out.y *= m;\n return out;\n}\nfunction scaleVec2(out, m, w) {\n out.x = m * w.x;\n out.y = m * w.y;\n return out;\n}\nfunction plusScaleVec2(out, m, w) {\n out.x += m * w.x;\n out.y += m * w.y;\n return out;\n}\nfunction minusScaleVec2(out, m, w) {\n out.x -= m * w.x;\n out.y -= m * w.y;\n return out;\n}\nfunction combine2Vec2(out, am, a2, bm, b2) {\n out.x = am * a2.x + bm * b2.x;\n out.y = am * a2.y + bm * b2.y;\n return out;\n}\nfunction combine3Vec2(out, am, a2, bm, b2, cm, c2) {\n out.x = am * a2.x + bm * b2.x + cm * c2.x;\n out.y = am * a2.y + bm * b2.y + cm * c2.y;\n return out;\n}\nfunction normalizeVec2Length(out) {\n var length = math_sqrt$4(out.x * out.x + out.y * out.y);\n if (length !== 0) {\n var invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return length;\n}\nfunction normalizeVec2(out) {\n var length = math_sqrt$4(out.x * out.x + out.y * out.y);\n if (length > 0) {\n var invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return out;\n}\nfunction crossVec2Num(out, v3, w) {\n var x2 = w * v3.y;\n var y = -w * v3.x;\n out.x = x2;\n out.y = y;\n return out;\n}\nfunction crossNumVec2(out, w, v3) {\n var x2 = -w * v3.y;\n var y = w * v3.x;\n out.x = x2;\n out.y = y;\n return out;\n}\nfunction crossVec2Vec2(a2, b2) {\n return a2.x * b2.y - a2.y * b2.x;\n}\nfunction dotVec2(a2, b2) {\n return a2.x * b2.x + a2.y * b2.y;\n}\nfunction lengthSqrVec2(a2) {\n return a2.x * a2.x + a2.y * a2.y;\n}\nfunction distVec2(a2, b2) {\n var dx = a2.x - b2.x;\n var dy = a2.y - b2.y;\n return math_sqrt$4(dx * dx + dy * dy);\n}\nfunction distSqrVec2(a2, b2) {\n var dx = a2.x - b2.x;\n var dy = a2.y - b2.y;\n return dx * dx + dy * dy;\n}\nfunction setRotAngle(out, a2) {\n out.c = math_cos$2(a2);\n out.s = math_sin$2(a2);\n return out;\n}\nfunction rotVec2(out, q, v3) {\n out.x = q.c * v3.x - q.s * v3.y;\n out.y = q.s * v3.x + q.c * v3.y;\n return out;\n}\nfunction derotVec2(out, q, v3) {\n var x2 = q.c * v3.x + q.s * v3.y;\n var y = -q.s * v3.x + q.c * v3.y;\n out.x = x2;\n out.y = y;\n return out;\n}\nfunction rerotVec2(out, before, after, v3) {\n var x0 = before.c * v3.x + before.s * v3.y;\n var y0 = -before.s * v3.x + before.c * v3.y;\n var x2 = after.c * x0 - after.s * y0;\n var y = after.s * x0 + after.c * y0;\n out.x = x2;\n out.y = y;\n return out;\n}\nfunction transform(x2, y, a2) {\n return { p: vec2(x2, y), q: rotation(a2) };\n}\nfunction copyTransform(out, transform2) {\n out.p.x = transform2.p.x;\n out.p.y = transform2.p.y;\n out.q.s = transform2.q.s;\n out.q.c = transform2.q.c;\n return out;\n}\nfunction transformVec2(out, xf2, v3) {\n var x2 = xf2.q.c * v3.x - xf2.q.s * v3.y + xf2.p.x;\n var y = xf2.q.s * v3.x + xf2.q.c * v3.y + xf2.p.y;\n out.x = x2;\n out.y = y;\n return out;\n}\nfunction detransformVec2(out, xf2, v3) {\n var px = v3.x - xf2.p.x;\n var py = v3.y - xf2.p.y;\n var x2 = xf2.q.c * px + xf2.q.s * py;\n var y = -xf2.q.s * px + xf2.q.c * py;\n out.x = x2;\n out.y = y;\n return out;\n}\nfunction retransformVec2(out, from, to, v3) {\n var x0 = from.q.c * v3.x - from.q.s * v3.y + from.p.x;\n var y0 = from.q.s * v3.x + from.q.c * v3.y + from.p.y;\n var px = x0 - to.p.x;\n var py = y0 - to.p.y;\n var x2 = to.q.c * px + to.q.s * py;\n var y = -to.q.s * px + to.q.c * py;\n out.x = x2;\n out.y = y;\n return out;\n}\nfunction detransformTransform(out, a2, b2) {\n var c2 = a2.q.c * b2.q.c + a2.q.s * b2.q.s;\n var s2 = a2.q.c * b2.q.s - a2.q.s * b2.q.c;\n var x2 = a2.q.c * (b2.p.x - a2.p.x) + a2.q.s * (b2.p.y - a2.p.y);\n var y = -a2.q.s * (b2.p.x - a2.p.x) + a2.q.c * (b2.p.y - a2.p.y);\n out.q.c = c2;\n out.q.s = s2;\n out.p.x = x2;\n out.p.y = y;\n return out;\n}\nvar math_sin$1 = Math.sin;\nvar math_cos$1 = Math.cos;\nvar math_atan2$1 = Math.atan2;\nvar Rot = (\n /** @class */\n function() {\n function Rot2(angle) {\n if (!(this instanceof Rot2)) {\n return new Rot2(angle);\n }\n if (typeof angle === \"number\") {\n this.setAngle(angle);\n } else if (typeof angle === \"object\") {\n this.setRot(angle);\n } else {\n this.setIdentity();\n }\n }\n Rot2.neo = function(angle) {\n var obj = Object.create(Rot2.prototype);\n obj.setAngle(angle);\n return obj;\n };\n Rot2.clone = function(rot) {\n var obj = Object.create(Rot2.prototype);\n obj.s = rot.s;\n obj.c = rot.c;\n return obj;\n };\n Rot2.identity = function() {\n var obj = Object.create(Rot2.prototype);\n obj.s = 0;\n obj.c = 1;\n return obj;\n };\n Rot2.isValid = function(obj) {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.s) && Number.isFinite(obj.c);\n };\n Rot2.assert = function(o) {\n };\n Rot2.prototype.setIdentity = function() {\n this.s = 0;\n this.c = 1;\n };\n Rot2.prototype.set = function(angle) {\n if (typeof angle === \"object\") {\n this.s = angle.s;\n this.c = angle.c;\n } else {\n this.s = math_sin$1(angle);\n this.c = math_cos$1(angle);\n }\n };\n Rot2.prototype.setRot = function(angle) {\n this.s = angle.s;\n this.c = angle.c;\n };\n Rot2.prototype.setAngle = function(angle) {\n this.s = math_sin$1(angle);\n this.c = math_cos$1(angle);\n };\n Rot2.prototype.getAngle = function() {\n return math_atan2$1(this.s, this.c);\n };\n Rot2.prototype.getXAxis = function() {\n return Vec2.neo(this.c, this.s);\n };\n Rot2.prototype.getYAxis = function() {\n return Vec2.neo(-this.s, this.c);\n };\n Rot2.mul = function(rot, m) {\n if (\"c\" in m && \"s\" in m) {\n var qr = Rot2.identity();\n qr.s = rot.s * m.c + rot.c * m.s;\n qr.c = rot.c * m.c - rot.s * m.s;\n return qr;\n } else if (\"x\" in m && \"y\" in m) {\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n };\n Rot2.mulRot = function(rot, m) {\n var qr = Rot2.identity();\n qr.s = rot.s * m.c + rot.c * m.s;\n qr.c = rot.c * m.c - rot.s * m.s;\n return qr;\n };\n Rot2.mulVec2 = function(rot, m) {\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n };\n Rot2.mulSub = function(rot, v3, w) {\n var x2 = rot.c * (v3.x - w.x) - rot.s * (v3.y - w.y);\n var y = rot.s * (v3.x - w.x) + rot.c * (v3.y - w.y);\n return Vec2.neo(x2, y);\n };\n Rot2.mulT = function(rot, m) {\n if (\"c\" in m && \"s\" in m) {\n var qr = Rot2.identity();\n qr.s = rot.c * m.s - rot.s * m.c;\n qr.c = rot.c * m.c + rot.s * m.s;\n return qr;\n } else if (\"x\" in m && \"y\" in m) {\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n };\n Rot2.mulTRot = function(rot, m) {\n var qr = Rot2.identity();\n qr.s = rot.c * m.s - rot.s * m.c;\n qr.c = rot.c * m.c + rot.s * m.s;\n return qr;\n };\n Rot2.mulTVec2 = function(rot, m) {\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n };\n return Rot2;\n }()\n);\nvar math_atan2 = Math.atan2;\nvar math_PI$5 = Math.PI;\nvar temp$7 = vec2(0, 0);\nvar Sweep = (\n /** @class */\n function() {\n function Sweep2() {\n this.localCenter = Vec2.zero();\n this.c = Vec2.zero();\n this.a = 0;\n this.alpha0 = 0;\n this.c0 = Vec2.zero();\n this.a0 = 0;\n }\n Sweep2.prototype.recycle = function() {\n zeroVec2(this.localCenter);\n zeroVec2(this.c);\n this.a = 0;\n this.alpha0 = 0;\n zeroVec2(this.c0);\n this.a0 = 0;\n };\n Sweep2.prototype.setTransform = function(xf2) {\n transformVec2(temp$7, xf2, this.localCenter);\n copyVec2(this.c, temp$7);\n copyVec2(this.c0, temp$7);\n this.a = this.a0 = math_atan2(xf2.q.s, xf2.q.c);\n };\n Sweep2.prototype.setLocalCenter = function(localCenter2, xf2) {\n copyVec2(this.localCenter, localCenter2);\n transformVec2(temp$7, xf2, this.localCenter);\n copyVec2(this.c, temp$7);\n copyVec2(this.c0, temp$7);\n };\n Sweep2.prototype.getTransform = function(xf2, beta) {\n if (beta === void 0) {\n beta = 0;\n }\n setRotAngle(xf2.q, (1 - beta) * this.a0 + beta * this.a);\n combine2Vec2(xf2.p, 1 - beta, this.c0, beta, this.c);\n minusVec2(xf2.p, rotVec2(temp$7, xf2.q, this.localCenter));\n };\n Sweep2.prototype.advance = function(alpha) {\n var beta = (alpha - this.alpha0) / (1 - this.alpha0);\n combine2Vec2(this.c0, beta, this.c, 1 - beta, this.c0);\n this.a0 = beta * this.a + (1 - beta) * this.a0;\n this.alpha0 = alpha;\n };\n Sweep2.prototype.forward = function() {\n this.a0 = this.a;\n copyVec2(this.c0, this.c);\n };\n Sweep2.prototype.normalize = function() {\n var a0 = mod(this.a0, -math_PI$5, +math_PI$5);\n this.a -= this.a0 - a0;\n this.a0 = a0;\n };\n Sweep2.prototype.set = function(that) {\n copyVec2(this.localCenter, that.localCenter);\n copyVec2(this.c, that.c);\n this.a = that.a;\n this.alpha0 = that.alpha0;\n copyVec2(this.c0, that.c0);\n this.a0 = that.a0;\n };\n return Sweep2;\n }()\n);\nvar Transform = (\n /** @class */\n function() {\n function Transform2(position, rotation2) {\n if (!(this instanceof Transform2)) {\n return new Transform2(position, rotation2);\n }\n this.p = Vec2.zero();\n this.q = Rot.identity();\n if (typeof position !== \"undefined\") {\n this.p.setVec2(position);\n }\n if (typeof rotation2 !== \"undefined\") {\n this.q.setAngle(rotation2);\n }\n }\n Transform2.clone = function(xf2) {\n var obj = Object.create(Transform2.prototype);\n obj.p = Vec2.clone(xf2.p);\n obj.q = Rot.clone(xf2.q);\n return obj;\n };\n Transform2.neo = function(position, rotation2) {\n var obj = Object.create(Transform2.prototype);\n obj.p = Vec2.clone(position);\n obj.q = Rot.clone(rotation2);\n return obj;\n };\n Transform2.identity = function() {\n var obj = Object.create(Transform2.prototype);\n obj.p = Vec2.zero();\n obj.q = Rot.identity();\n return obj;\n };\n Transform2.prototype.setIdentity = function() {\n this.p.setZero();\n this.q.setIdentity();\n };\n Transform2.prototype.set = function(a2, b2) {\n if (typeof b2 === \"undefined\") {\n this.p.set(a2.p);\n this.q.set(a2.q);\n } else {\n this.p.set(a2);\n this.q.set(b2);\n }\n };\n Transform2.prototype.setNum = function(position, rotation2) {\n this.p.setVec2(position);\n this.q.setAngle(rotation2);\n };\n Transform2.prototype.setTransform = function(xf2) {\n this.p.setVec2(xf2.p);\n this.q.setRot(xf2.q);\n };\n Transform2.isValid = function(obj) {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.p) && Rot.isValid(obj.q);\n };\n Transform2.assert = function(o) {\n };\n Transform2.mul = function(a2, b2) {\n if (Array.isArray(b2)) {\n var arr = [];\n for (var i = 0; i < b2.length; i++) {\n arr[i] = Transform2.mul(a2, b2[i]);\n }\n return arr;\n } else if (\"x\" in b2 && \"y\" in b2) {\n return Transform2.mulVec2(a2, b2);\n } else if (\"p\" in b2 && \"q\" in b2) {\n return Transform2.mulXf(a2, b2);\n }\n };\n Transform2.mulAll = function(a2, b2) {\n var arr = [];\n for (var i = 0; i < b2.length; i++) {\n arr[i] = Transform2.mul(a2, b2[i]);\n }\n return arr;\n };\n Transform2.mulFn = function(a2) {\n return function(b2) {\n return Transform2.mul(a2, b2);\n };\n };\n Transform2.mulVec2 = function(a2, b2) {\n var x2 = a2.q.c * b2.x - a2.q.s * b2.y + a2.p.x;\n var y = a2.q.s * b2.x + a2.q.c * b2.y + a2.p.y;\n return Vec2.neo(x2, y);\n };\n Transform2.mulXf = function(a2, b2) {\n var xf2 = Transform2.identity();\n xf2.q = Rot.mulRot(a2.q, b2.q);\n xf2.p = Vec2.add(Rot.mulVec2(a2.q, b2.p), a2.p);\n return xf2;\n };\n Transform2.mulT = function(a2, b2) {\n if (\"x\" in b2 && \"y\" in b2) {\n return Transform2.mulTVec2(a2, b2);\n } else if (\"p\" in b2 && \"q\" in b2) {\n return Transform2.mulTXf(a2, b2);\n }\n };\n Transform2.mulTVec2 = function(a2, b2) {\n var px = b2.x - a2.p.x;\n var py = b2.y - a2.p.y;\n var x2 = a2.q.c * px + a2.q.s * py;\n var y = -a2.q.s * px + a2.q.c * py;\n return Vec2.neo(x2, y);\n };\n Transform2.mulTXf = function(a2, b2) {\n var xf2 = Transform2.identity();\n xf2.q.setRot(Rot.mulTRot(a2.q, b2.q));\n xf2.p.setVec2(Rot.mulTVec2(a2.q, Vec2.sub(b2.p, a2.p)));\n return xf2;\n };\n return Transform2;\n }()\n);\nvar Velocity = (\n /** @class */\n /* @__PURE__ */ function() {\n function Velocity2() {\n this.v = Vec2.zero();\n this.w = 0;\n }\n return Velocity2;\n }()\n);\nvar math_sin = Math.sin;\nvar math_cos = Math.cos;\nvar Position = (\n /** @class */\n function() {\n function Position2() {\n this.c = Vec2.zero();\n this.a = 0;\n }\n Position2.prototype.getTransform = function(xf2, p) {\n xf2.q.c = math_cos(this.a);\n xf2.q.s = math_sin(this.a);\n xf2.p.x = this.c.x - (xf2.q.c * p.x - xf2.q.s * p.y);\n xf2.p.y = this.c.y - (xf2.q.s * p.x + xf2.q.c * p.y);\n return xf2;\n };\n return Position2;\n }()\n);\nfunction getTransform(xf2, p, c2, a2) {\n xf2.q.c = math_cos(a2);\n xf2.q.s = math_sin(a2);\n xf2.p.x = c2.x - (xf2.q.c * p.x - xf2.q.s * p.y);\n xf2.p.y = c2.y - (xf2.q.s * p.x + xf2.q.c * p.y);\n return xf2;\n}\nvar Shape = (\n /** @class */\n function() {\n function Shape2() {\n this.style = {};\n this.appData = {};\n }\n Shape2.isValid = function(obj) {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return typeof obj.m_type === \"string\" && typeof obj.m_radius === \"number\";\n };\n return Shape2;\n }()\n);\nvar synchronize_aabb1 = new AABB();\nvar synchronize_aabb2 = new AABB();\nvar displacement = vec2(0, 0);\nvar FixtureDefDefault = {\n userData: null,\n friction: 0.2,\n restitution: 0,\n density: 0,\n isSensor: false,\n filterGroupIndex: 0,\n filterCategoryBits: 1,\n filterMaskBits: 65535\n};\nvar FixtureProxy = (\n /** @class */\n /* @__PURE__ */ function() {\n function FixtureProxy2(fixture, childIndex) {\n this.aabb = new AABB();\n this.fixture = fixture;\n this.childIndex = childIndex;\n }\n return FixtureProxy2;\n }()\n);\nvar Fixture = (\n /** @class */\n function() {\n function Fixture2(body, shape, def) {\n this.style = {};\n this.appData = {};\n if (shape.shape) {\n def = shape;\n shape = shape.shape;\n } else if (typeof def === \"number\") {\n def = { density: def };\n }\n def = options(def, FixtureDefDefault);\n this.m_body = body;\n this.m_friction = def.friction;\n this.m_restitution = def.restitution;\n this.m_density = def.density;\n this.m_isSensor = def.isSensor;\n this.m_filterGroupIndex = def.filterGroupIndex;\n this.m_filterCategoryBits = def.filterCategoryBits;\n this.m_filterMaskBits = def.filterMaskBits;\n this.m_shape = shape;\n this.m_next = null;\n this.m_proxies = [];\n this.m_proxyCount = 0;\n var childCount = this.m_shape.getChildCount();\n for (var i = 0; i < childCount; ++i) {\n this.m_proxies[i] = new FixtureProxy(this, i);\n }\n this.m_userData = def.userData;\n if (typeof def.style === \"object\" && def.style !== null) {\n this.style = def.style;\n }\n }\n Fixture2.prototype._reset = function() {\n var body = this.getBody();\n var broadPhase = body.m_world.m_broadPhase;\n this.destroyProxies(broadPhase);\n if (this.m_shape._reset) {\n this.m_shape._reset();\n }\n var childCount = this.m_shape.getChildCount();\n for (var i = 0; i < childCount; ++i) {\n this.m_proxies[i] = new FixtureProxy(this, i);\n }\n this.createProxies(broadPhase, body.m_xf);\n body.resetMassData();\n };\n Fixture2.prototype._serialize = function() {\n return {\n friction: this.m_friction,\n restitution: this.m_restitution,\n density: this.m_density,\n isSensor: this.m_isSensor,\n filterGroupIndex: this.m_filterGroupIndex,\n filterCategoryBits: this.m_filterCategoryBits,\n filterMaskBits: this.m_filterMaskBits,\n shape: this.m_shape\n };\n };\n Fixture2._deserialize = function(data, body, restore) {\n var shape = restore(Shape, data.shape);\n var fixture = shape && new Fixture2(body, shape, data);\n return fixture;\n };\n Fixture2.prototype.getType = function() {\n return this.m_shape.m_type;\n };\n Fixture2.prototype.getShape = function() {\n return this.m_shape;\n };\n Fixture2.prototype.isSensor = function() {\n return this.m_isSensor;\n };\n Fixture2.prototype.setSensor = function(sensor) {\n if (sensor != this.m_isSensor) {\n this.m_body.setAwake(true);\n this.m_isSensor = sensor;\n }\n };\n Fixture2.prototype.getUserData = function() {\n return this.m_userData;\n };\n Fixture2.prototype.setUserData = function(data) {\n this.m_userData = data;\n };\n Fixture2.prototype.getBody = function() {\n return this.m_body;\n };\n Fixture2.prototype.getNext = function() {\n return this.m_next;\n };\n Fixture2.prototype.getDensity = function() {\n return this.m_density;\n };\n Fixture2.prototype.setDensity = function(density) {\n this.m_density = density;\n };\n Fixture2.prototype.getFriction = function() {\n return this.m_friction;\n };\n Fixture2.prototype.setFriction = function(friction) {\n this.m_friction = friction;\n };\n Fixture2.prototype.getRestitution = function() {\n return this.m_restitution;\n };\n Fixture2.prototype.setRestitution = function(restitution) {\n this.m_restitution = restitution;\n };\n Fixture2.prototype.testPoint = function(p) {\n return this.m_shape.testPoint(this.m_body.getTransform(), p);\n };\n Fixture2.prototype.rayCast = function(output2, input2, childIndex) {\n return this.m_shape.rayCast(output2, input2, this.m_body.getTransform(), childIndex);\n };\n Fixture2.prototype.getMassData = function(massData) {\n this.m_shape.computeMass(massData, this.m_density);\n };\n Fixture2.prototype.getAABB = function(childIndex) {\n return this.m_proxies[childIndex].aabb;\n };\n Fixture2.prototype.createProxies = function(broadPhase, xf2) {\n this.m_proxyCount = this.m_shape.getChildCount();\n for (var i = 0; i < this.m_proxyCount; ++i) {\n var proxy = this.m_proxies[i];\n this.m_shape.computeAABB(proxy.aabb, xf2, i);\n proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy);\n }\n };\n Fixture2.prototype.destroyProxies = function(broadPhase) {\n for (var i = 0; i < this.m_proxyCount; ++i) {\n var proxy = this.m_proxies[i];\n broadPhase.destroyProxy(proxy.proxyId);\n proxy.proxyId = null;\n }\n this.m_proxyCount = 0;\n };\n Fixture2.prototype.synchronize = function(broadPhase, xf1, xf2) {\n for (var i = 0; i < this.m_proxyCount; ++i) {\n var proxy = this.m_proxies[i];\n this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex);\n this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex);\n proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2);\n subVec2(displacement, xf2.p, xf1.p);\n broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement);\n }\n };\n Fixture2.prototype.setFilterData = function(filter) {\n this.m_filterGroupIndex = filter.groupIndex;\n this.m_filterCategoryBits = filter.categoryBits;\n this.m_filterMaskBits = filter.maskBits;\n this.refilter();\n };\n Fixture2.prototype.getFilterGroupIndex = function() {\n return this.m_filterGroupIndex;\n };\n Fixture2.prototype.setFilterGroupIndex = function(groupIndex) {\n this.m_filterGroupIndex = groupIndex;\n this.refilter();\n };\n Fixture2.prototype.getFilterCategoryBits = function() {\n return this.m_filterCategoryBits;\n };\n Fixture2.prototype.setFilterCategoryBits = function(categoryBits) {\n this.m_filterCategoryBits = categoryBits;\n this.refilter();\n };\n Fixture2.prototype.getFilterMaskBits = function() {\n return this.m_filterMaskBits;\n };\n Fixture2.prototype.setFilterMaskBits = function(maskBits) {\n this.m_filterMaskBits = maskBits;\n this.refilter();\n };\n Fixture2.prototype.refilter = function() {\n if (this.m_body == null) {\n return;\n }\n var edge = this.m_body.getContactList();\n while (edge) {\n var contact = edge.contact;\n var fixtureA = contact.getFixtureA();\n var fixtureB = contact.getFixtureB();\n if (fixtureA == this || fixtureB == this) {\n contact.flagForFiltering();\n }\n edge = edge.next;\n }\n var world = this.m_body.getWorld();\n if (world == null) {\n return;\n }\n var broadPhase = world.m_broadPhase;\n for (var i = 0; i < this.m_proxyCount; ++i) {\n broadPhase.touchProxy(this.m_proxies[i].proxyId);\n }\n };\n Fixture2.prototype.shouldCollide = function(that) {\n if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) {\n return that.m_filterGroupIndex > 0;\n }\n var collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0;\n var collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0;\n var collide = collideA && collideB;\n return collide;\n };\n return Fixture2;\n }()\n);\nvar STATIC = \"static\";\nvar KINEMATIC = \"kinematic\";\nvar DYNAMIC = \"dynamic\";\nvar oldCenter = vec2(0, 0);\nvar localCenter = vec2(0, 0);\nvar shift = vec2(0, 0);\nvar temp$6 = vec2(0, 0);\nvar xf$2 = transform(0, 0, 0);\nvar BodyDefDefault = {\n type: STATIC,\n position: Vec2.zero(),\n angle: 0,\n linearVelocity: Vec2.zero(),\n angularVelocity: 0,\n linearDamping: 0,\n angularDamping: 0,\n fixedRotation: false,\n bullet: false,\n gravityScale: 1,\n allowSleep: true,\n awake: true,\n active: true,\n userData: null\n};\nvar Body = (\n /** @class */\n function() {\n function Body2(world, def) {\n this.style = {};\n this.appData = {};\n def = options(def, BodyDefDefault);\n this.m_world = world;\n this.m_awakeFlag = def.awake;\n this.m_autoSleepFlag = def.allowSleep;\n this.m_bulletFlag = def.bullet;\n this.m_fixedRotationFlag = def.fixedRotation;\n this.m_activeFlag = def.active;\n this.m_islandFlag = false;\n this.m_toiFlag = false;\n this.m_userData = def.userData;\n this.m_type = def.type;\n if (this.m_type == DYNAMIC) {\n this.m_mass = 1;\n this.m_invMass = 1;\n } else {\n this.m_mass = 0;\n this.m_invMass = 0;\n }\n this.m_I = 0;\n this.m_invI = 0;\n this.m_xf = Transform.identity();\n this.m_xf.p.setVec2(def.position);\n this.m_xf.q.setAngle(def.angle);\n this.m_sweep = new Sweep();\n this.m_sweep.setTransform(this.m_xf);\n this.c_velocity = new Velocity();\n this.c_position = new Position();\n this.m_force = Vec2.zero();\n this.m_torque = 0;\n this.m_linearVelocity = Vec2.clone(def.linearVelocity);\n this.m_angularVelocity = def.angularVelocity;\n this.m_linearDamping = def.linearDamping;\n this.m_angularDamping = def.angularDamping;\n this.m_gravityScale = def.gravityScale;\n this.m_sleepTime = 0;\n this.m_jointList = null;\n this.m_contactList = null;\n this.m_fixtureList = null;\n this.m_prev = null;\n this.m_next = null;\n this.m_destroyed = false;\n if (typeof def.style === \"object\" && def.style !== null) {\n this.style = def.style;\n }\n }\n Body2.prototype._serialize = function() {\n var fixtures = [];\n for (var f = this.m_fixtureList; f; f = f.m_next) {\n fixtures.push(f);\n }\n return {\n type: this.m_type,\n bullet: this.m_bulletFlag,\n position: this.m_xf.p,\n angle: this.m_xf.q.getAngle(),\n linearVelocity: this.m_linearVelocity,\n angularVelocity: this.m_angularVelocity,\n fixtures\n };\n };\n Body2._deserialize = function(data, world, restore) {\n var body = new Body2(world, data);\n if (data.fixtures) {\n for (var i = data.fixtures.length - 1; i >= 0; i--) {\n var fixture = restore(Fixture, data.fixtures[i], body);\n body._addFixture(fixture);\n }\n }\n return body;\n };\n Body2.prototype.isWorldLocked = function() {\n return this.m_world && this.m_world.isLocked() ? true : false;\n };\n Body2.prototype.getWorld = function() {\n return this.m_world;\n };\n Body2.prototype.getNext = function() {\n return this.m_next;\n };\n Body2.prototype.setUserData = function(data) {\n this.m_userData = data;\n };\n Body2.prototype.getUserData = function() {\n return this.m_userData;\n };\n Body2.prototype.getFixtureList = function() {\n return this.m_fixtureList;\n };\n Body2.prototype.getJointList = function() {\n return this.m_jointList;\n };\n Body2.prototype.getContactList = function() {\n return this.m_contactList;\n };\n Body2.prototype.isStatic = function() {\n return this.m_type == STATIC;\n };\n Body2.prototype.isDynamic = function() {\n return this.m_type == DYNAMIC;\n };\n Body2.prototype.isKinematic = function() {\n return this.m_type == KINEMATIC;\n };\n Body2.prototype.setStatic = function() {\n this.setType(STATIC);\n return this;\n };\n Body2.prototype.setDynamic = function() {\n this.setType(DYNAMIC);\n return this;\n };\n Body2.prototype.setKinematic = function() {\n this.setType(KINEMATIC);\n return this;\n };\n Body2.prototype.getType = function() {\n return this.m_type;\n };\n Body2.prototype.setType = function(type) {\n if (this.isWorldLocked() == true) {\n return;\n }\n if (this.m_type == type) {\n return;\n }\n this.m_type = type;\n this.resetMassData();\n if (this.m_type == STATIC) {\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0;\n this.m_sweep.forward();\n this.synchronizeFixtures();\n }\n this.setAwake(true);\n this.m_force.setZero();\n this.m_torque = 0;\n var ce = this.m_contactList;\n while (ce) {\n var ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n var broadPhase = this.m_world.m_broadPhase;\n for (var f = this.m_fixtureList; f; f = f.m_next) {\n for (var i = 0; i < f.m_proxyCount; ++i) {\n broadPhase.touchProxy(f.m_proxies[i].proxyId);\n }\n }\n };\n Body2.prototype.isBullet = function() {\n return this.m_bulletFlag;\n };\n Body2.prototype.setBullet = function(flag) {\n this.m_bulletFlag = !!flag;\n };\n Body2.prototype.isSleepingAllowed = function() {\n return this.m_autoSleepFlag;\n };\n Body2.prototype.setSleepingAllowed = function(flag) {\n this.m_autoSleepFlag = !!flag;\n if (this.m_autoSleepFlag == false) {\n this.setAwake(true);\n }\n };\n Body2.prototype.isAwake = function() {\n return this.m_awakeFlag;\n };\n Body2.prototype.setAwake = function(flag) {\n if (flag) {\n this.m_awakeFlag = true;\n this.m_sleepTime = 0;\n } else {\n this.m_awakeFlag = false;\n this.m_sleepTime = 0;\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0;\n this.m_force.setZero();\n this.m_torque = 0;\n }\n };\n Body2.prototype.isActive = function() {\n return this.m_activeFlag;\n };\n Body2.prototype.setActive = function(flag) {\n if (flag == this.m_activeFlag) {\n return;\n }\n this.m_activeFlag = !!flag;\n if (this.m_activeFlag) {\n var broadPhase = this.m_world.m_broadPhase;\n for (var f = this.m_fixtureList; f; f = f.m_next) {\n f.createProxies(broadPhase, this.m_xf);\n }\n this.m_world.m_newFixture = true;\n } else {\n var broadPhase = this.m_world.m_broadPhase;\n for (var f = this.m_fixtureList; f; f = f.m_next) {\n f.destroyProxies(broadPhase);\n }\n var ce = this.m_contactList;\n while (ce) {\n var ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n }\n };\n Body2.prototype.isFixedRotation = function() {\n return this.m_fixedRotationFlag;\n };\n Body2.prototype.setFixedRotation = function(flag) {\n if (this.m_fixedRotationFlag == flag) {\n return;\n }\n this.m_fixedRotationFlag = !!flag;\n this.m_angularVelocity = 0;\n this.resetMassData();\n };\n Body2.prototype.getTransform = function() {\n return this.m_xf;\n };\n Body2.prototype.setTransform = function(a2, b2) {\n if (this.isWorldLocked() == true) {\n return;\n }\n if (typeof b2 === \"number\") {\n this.m_xf.setNum(a2, b2);\n } else {\n this.m_xf.setTransform(a2);\n }\n this.m_sweep.setTransform(this.m_xf);\n var broadPhase = this.m_world.m_broadPhase;\n for (var f = this.m_fixtureList; f; f = f.m_next) {\n f.synchronize(broadPhase, this.m_xf, this.m_xf);\n }\n this.setAwake(true);\n };\n Body2.prototype.synchronizeTransform = function() {\n this.m_sweep.getTransform(this.m_xf, 1);\n };\n Body2.prototype.synchronizeFixtures = function() {\n this.m_sweep.getTransform(xf$2, 0);\n var broadPhase = this.m_world.m_broadPhase;\n for (var f = this.m_fixtureList; f; f = f.m_next) {\n f.synchronize(broadPhase, xf$2, this.m_xf);\n }\n };\n Body2.prototype.advance = function(alpha) {\n this.m_sweep.advance(alpha);\n copyVec2(this.m_sweep.c, this.m_sweep.c0);\n this.m_sweep.a = this.m_sweep.a0;\n this.m_sweep.getTransform(this.m_xf, 1);\n };\n Body2.prototype.getPosition = function() {\n return this.m_xf.p;\n };\n Body2.prototype.setPosition = function(p) {\n this.setTransform(p, this.m_sweep.a);\n };\n Body2.prototype.getAngle = function() {\n return this.m_sweep.a;\n };\n Body2.prototype.setAngle = function(angle) {\n this.setTransform(this.m_xf.p, angle);\n };\n Body2.prototype.getWorldCenter = function() {\n return this.m_sweep.c;\n };\n Body2.prototype.getLocalCenter = function() {\n return this.m_sweep.localCenter;\n };\n Body2.prototype.getLinearVelocity = function() {\n return this.m_linearVelocity;\n };\n Body2.prototype.getLinearVelocityFromWorldPoint = function(worldPoint) {\n var localCenter2 = Vec2.sub(worldPoint, this.m_sweep.c);\n return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity, localCenter2));\n };\n Body2.prototype.getLinearVelocityFromLocalPoint = function(localPoint) {\n return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint));\n };\n Body2.prototype.setLinearVelocity = function(v3) {\n if (this.m_type == STATIC) {\n return;\n }\n if (Vec2.dot(v3, v3) > 0) {\n this.setAwake(true);\n }\n this.m_linearVelocity.setVec2(v3);\n };\n Body2.prototype.getAngularVelocity = function() {\n return this.m_angularVelocity;\n };\n Body2.prototype.setAngularVelocity = function(w) {\n if (this.m_type == STATIC) {\n return;\n }\n if (w * w > 0) {\n this.setAwake(true);\n }\n this.m_angularVelocity = w;\n };\n Body2.prototype.getLinearDamping = function() {\n return this.m_linearDamping;\n };\n Body2.prototype.setLinearDamping = function(linearDamping) {\n this.m_linearDamping = linearDamping;\n };\n Body2.prototype.getAngularDamping = function() {\n return this.m_angularDamping;\n };\n Body2.prototype.setAngularDamping = function(angularDamping) {\n this.m_angularDamping = angularDamping;\n };\n Body2.prototype.getGravityScale = function() {\n return this.m_gravityScale;\n };\n Body2.prototype.setGravityScale = function(scale) {\n this.m_gravityScale = scale;\n };\n Body2.prototype.getMass = function() {\n return this.m_mass;\n };\n Body2.prototype.getInertia = function() {\n return this.m_I + this.m_mass * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter);\n };\n Body2.prototype.getMassData = function(data) {\n data.mass = this.m_mass;\n data.I = this.getInertia();\n copyVec2(data.center, this.m_sweep.localCenter);\n };\n Body2.prototype.resetMassData = function() {\n this.m_mass = 0;\n this.m_invMass = 0;\n this.m_I = 0;\n this.m_invI = 0;\n zeroVec2(this.m_sweep.localCenter);\n if (this.isStatic() || this.isKinematic()) {\n copyVec2(this.m_sweep.c0, this.m_xf.p);\n copyVec2(this.m_sweep.c, this.m_xf.p);\n this.m_sweep.a0 = this.m_sweep.a;\n return;\n }\n zeroVec2(localCenter);\n for (var f = this.m_fixtureList; f; f = f.m_next) {\n if (f.m_density == 0) {\n continue;\n }\n var massData = {\n mass: 0,\n center: vec2(0, 0),\n I: 0\n };\n f.getMassData(massData);\n this.m_mass += massData.mass;\n plusScaleVec2(localCenter, massData.mass, massData.center);\n this.m_I += massData.I;\n }\n if (this.m_mass > 0) {\n this.m_invMass = 1 / this.m_mass;\n scaleVec2(localCenter, this.m_invMass, localCenter);\n } else {\n this.m_mass = 1;\n this.m_invMass = 1;\n }\n if (this.m_I > 0 && this.m_fixedRotationFlag == false) {\n this.m_I -= this.m_mass * dotVec2(localCenter, localCenter);\n this.m_invI = 1 / this.m_I;\n } else {\n this.m_I = 0;\n this.m_invI = 0;\n }\n copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(localCenter, this.m_xf);\n subVec2(shift, this.m_sweep.c, oldCenter);\n crossNumVec2(temp$6, this.m_angularVelocity, shift);\n plusVec2(this.m_linearVelocity, temp$6);\n };\n Body2.prototype.setMassData = function(massData) {\n if (this.isWorldLocked() == true) {\n return;\n }\n if (this.m_type != DYNAMIC) {\n return;\n }\n this.m_invMass = 0;\n this.m_I = 0;\n this.m_invI = 0;\n this.m_mass = massData.mass;\n if (this.m_mass <= 0) {\n this.m_mass = 1;\n }\n this.m_invMass = 1 / this.m_mass;\n if (massData.I > 0 && this.m_fixedRotationFlag == false) {\n this.m_I = massData.I - this.m_mass * dotVec2(massData.center, massData.center);\n this.m_invI = 1 / this.m_I;\n }\n copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(massData.center, this.m_xf);\n subVec2(shift, this.m_sweep.c, oldCenter);\n crossNumVec2(temp$6, this.m_angularVelocity, shift);\n plusVec2(this.m_linearVelocity, temp$6);\n };\n Body2.prototype.applyForce = function(force, point2, wake) {\n if (wake === void 0) {\n wake = true;\n }\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point2, this.m_sweep.c), force);\n }\n };\n Body2.prototype.applyForceToCenter = function(force, wake) {\n if (wake === void 0) {\n wake = true;\n }\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n }\n };\n Body2.prototype.applyTorque = function(torque, wake) {\n if (wake === void 0) {\n wake = true;\n }\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n if (this.m_awakeFlag) {\n this.m_torque += torque;\n }\n };\n Body2.prototype.applyLinearImpulse = function(impulse, point2, wake) {\n if (wake === void 0) {\n wake = true;\n }\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n if (this.m_awakeFlag) {\n this.m_linearVelocity.addMul(this.m_invMass, impulse);\n this.m_angularVelocity += this.m_invI * Vec2.crossVec2Vec2(Vec2.sub(point2, this.m_sweep.c), impulse);\n }\n };\n Body2.prototype.applyAngularImpulse = function(impulse, wake) {\n if (wake === void 0) {\n wake = true;\n }\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n if (this.m_awakeFlag) {\n this.m_angularVelocity += this.m_invI * impulse;\n }\n };\n Body2.prototype.shouldCollide = function(that) {\n if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) {\n return false;\n }\n for (var jn = this.m_jointList; jn; jn = jn.next) {\n if (jn.other == that) {\n if (jn.joint.m_collideConnected == false) {\n return false;\n }\n }\n }\n return true;\n };\n Body2.prototype._addFixture = function(fixture) {\n if (this.isWorldLocked() == true) {\n return null;\n }\n if (this.m_activeFlag) {\n var broadPhase = this.m_world.m_broadPhase;\n fixture.createProxies(broadPhase, this.m_xf);\n }\n fixture.m_next = this.m_fixtureList;\n this.m_fixtureList = fixture;\n if (fixture.m_density > 0) {\n this.resetMassData();\n }\n this.m_world.m_newFixture = true;\n return fixture;\n };\n Body2.prototype.createFixture = function(shape, fixdef) {\n if (this.isWorldLocked() == true) {\n return null;\n }\n var fixture = new Fixture(this, shape, fixdef);\n this._addFixture(fixture);\n return fixture;\n };\n Body2.prototype.destroyFixture = function(fixture) {\n if (this.isWorldLocked() == true) {\n return;\n }\n if (this.m_fixtureList === fixture) {\n this.m_fixtureList = fixture.m_next;\n } else {\n var node = this.m_fixtureList;\n while (node != null) {\n if (node.m_next === fixture) {\n node.m_next = fixture.m_next;\n break;\n }\n node = node.m_next;\n }\n }\n var edge = this.m_contactList;\n while (edge) {\n var c2 = edge.contact;\n edge = edge.next;\n var fixtureA = c2.getFixtureA();\n var fixtureB = c2.getFixtureB();\n if (fixture == fixtureA || fixture == fixtureB) {\n this.m_world.destroyContact(c2);\n }\n }\n if (this.m_activeFlag) {\n var broadPhase = this.m_world.m_broadPhase;\n fixture.destroyProxies(broadPhase);\n }\n fixture.m_body = null;\n fixture.m_next = null;\n this.m_world.publish(\"remove-fixture\", fixture);\n this.resetMassData();\n };\n Body2.prototype.getWorldPoint = function(localPoint) {\n return Transform.mulVec2(this.m_xf, localPoint);\n };\n Body2.prototype.getWorldVector = function(localVector) {\n return Rot.mulVec2(this.m_xf.q, localVector);\n };\n Body2.prototype.getLocalPoint = function(worldPoint) {\n return Transform.mulTVec2(this.m_xf, worldPoint);\n };\n Body2.prototype.getLocalVector = function(worldVector) {\n return Rot.mulTVec2(this.m_xf.q, worldVector);\n };\n Body2.STATIC = \"static\";\n Body2.KINEMATIC = \"kinematic\";\n Body2.DYNAMIC = \"dynamic\";\n return Body2;\n }()\n);\nvar JointEdge = (\n /** @class */\n /* @__PURE__ */ function() {\n function JointEdge2() {\n this.other = null;\n this.joint = null;\n this.prev = null;\n this.next = null;\n }\n return JointEdge2;\n }()\n);\nvar Joint = (\n /** @class */\n function() {\n function Joint2(def, bodyA, bodyB) {\n this.m_type = \"unknown-joint\";\n this.m_prev = null;\n this.m_next = null;\n this.m_edgeA = new JointEdge();\n this.m_edgeB = new JointEdge();\n this.m_islandFlag = false;\n this.style = {};\n this.appData = {};\n bodyA = \"bodyA\" in def ? def.bodyA : bodyA;\n bodyB = \"bodyB\" in def ? def.bodyB : bodyB;\n this.m_bodyA = bodyA;\n this.m_bodyB = bodyB;\n this.m_collideConnected = !!def.collideConnected;\n this.m_userData = def.userData;\n if (typeof def.style === \"object\" && def.style !== null) {\n this.style = def.style;\n }\n }\n Joint2.prototype.isActive = function() {\n return this.m_bodyA.isActive() && this.m_bodyB.isActive();\n };\n Joint2.prototype.getType = function() {\n return this.m_type;\n };\n Joint2.prototype.getBodyA = function() {\n return this.m_bodyA;\n };\n Joint2.prototype.getBodyB = function() {\n return this.m_bodyB;\n };\n Joint2.prototype.getNext = function() {\n return this.m_next;\n };\n Joint2.prototype.getUserData = function() {\n return this.m_userData;\n };\n Joint2.prototype.setUserData = function(data) {\n this.m_userData = data;\n };\n Joint2.prototype.getCollideConnected = function() {\n return this.m_collideConnected;\n };\n Joint2.prototype.shiftOrigin = function(newOrigin) {\n };\n Joint2.prototype._resetAnchors = function(def) {\n return this._reset(def);\n };\n return Joint2;\n }()\n);\nvar stats = {\n gjkCalls: 0,\n gjkIters: 0,\n gjkMaxIters: 0,\n toiTime: 0,\n toiMaxTime: 0,\n toiCalls: 0,\n toiIters: 0,\n toiMaxIters: 0,\n toiRootIters: 0,\n toiMaxRootIters: 0,\n toString: function(newline) {\n newline = typeof newline === \"string\" ? newline : \"\\n\";\n var string = \"\";\n for (var name_1 in this) {\n if (typeof this[name_1] !== \"function\" && typeof this[name_1] !== \"object\") {\n string += name_1 + \": \" + this[name_1] + newline;\n }\n }\n return string;\n }\n};\nvar now = function() {\n return Date.now();\n};\nvar diff = function(time) {\n return Date.now() - time;\n};\nconst Timer = {\n now,\n diff\n};\nvar math_max$4 = Math.max;\nvar temp$5 = vec2(0, 0);\nvar normal$4 = vec2(0, 0);\nvar e12 = vec2(0, 0);\nvar e13 = vec2(0, 0);\nvar e23 = vec2(0, 0);\nvar temp1 = vec2(0, 0);\nvar temp2 = vec2(0, 0);\nstats.gjkCalls = 0;\nstats.gjkIters = 0;\nstats.gjkMaxIters = 0;\nvar DistanceInput = (\n /** @class */\n function() {\n function DistanceInput2() {\n this.proxyA = new DistanceProxy();\n this.proxyB = new DistanceProxy();\n this.transformA = Transform.identity();\n this.transformB = Transform.identity();\n this.useRadii = false;\n }\n DistanceInput2.prototype.recycle = function() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n this.useRadii = false;\n };\n return DistanceInput2;\n }()\n);\nvar DistanceOutput = (\n /** @class */\n function() {\n function DistanceOutput2() {\n this.pointA = vec2(0, 0);\n this.pointB = vec2(0, 0);\n this.distance = 0;\n this.iterations = 0;\n }\n DistanceOutput2.prototype.recycle = function() {\n zeroVec2(this.pointA);\n zeroVec2(this.pointB);\n this.distance = 0;\n this.iterations = 0;\n };\n return DistanceOutput2;\n }()\n);\nvar SimplexCache = (\n /** @class */\n function() {\n function SimplexCache2() {\n this.metric = 0;\n this.indexA = [];\n this.indexB = [];\n this.count = 0;\n }\n SimplexCache2.prototype.recycle = function() {\n this.metric = 0;\n this.indexA.length = 0;\n this.indexB.length = 0;\n this.count = 0;\n };\n return SimplexCache2;\n }()\n);\nvar Distance = function(output2, cache2, input2) {\n ++stats.gjkCalls;\n var proxyA = input2.proxyA;\n var proxyB = input2.proxyB;\n var xfA2 = input2.transformA;\n var xfB2 = input2.transformB;\n simplex.recycle();\n simplex.readCache(cache2, proxyA, xfA2, proxyB, xfB2);\n var vertices = simplex.m_v;\n var k_maxIters = SettingsInternal.maxDistanceIterations;\n var saveA = [];\n var saveB = [];\n var saveCount = 0;\n var iter = 0;\n while (iter < k_maxIters) {\n saveCount = simplex.m_count;\n for (var i = 0; i < saveCount; ++i) {\n saveA[i] = vertices[i].indexA;\n saveB[i] = vertices[i].indexB;\n }\n simplex.solve();\n if (simplex.m_count === 3) {\n break;\n }\n var d2 = simplex.getSearchDirection();\n if (lengthSqrVec2(d2) < EPSILON * EPSILON) {\n break;\n }\n var vertex = vertices[simplex.m_count];\n vertex.indexA = proxyA.getSupport(derotVec2(temp$5, xfA2.q, scaleVec2(temp$5, -1, d2)));\n transformVec2(vertex.wA, xfA2, proxyA.getVertex(vertex.indexA));\n vertex.indexB = proxyB.getSupport(derotVec2(temp$5, xfB2.q, d2));\n transformVec2(vertex.wB, xfB2, proxyB.getVertex(vertex.indexB));\n subVec2(vertex.w, vertex.wB, vertex.wA);\n ++iter;\n ++stats.gjkIters;\n var duplicate = false;\n for (var i = 0; i < saveCount; ++i) {\n if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) {\n duplicate = true;\n break;\n }\n }\n if (duplicate) {\n break;\n }\n ++simplex.m_count;\n }\n stats.gjkMaxIters = math_max$4(stats.gjkMaxIters, iter);\n simplex.getWitnessPoints(output2.pointA, output2.pointB);\n output2.distance = distVec2(output2.pointA, output2.pointB);\n output2.iterations = iter;\n simplex.writeCache(cache2);\n if (input2.useRadii) {\n var rA2 = proxyA.m_radius;\n var rB2 = proxyB.m_radius;\n if (output2.distance > rA2 + rB2 && output2.distance > EPSILON) {\n output2.distance -= rA2 + rB2;\n subVec2(normal$4, output2.pointB, output2.pointA);\n normalizeVec2(normal$4);\n plusScaleVec2(output2.pointA, rA2, normal$4);\n minusScaleVec2(output2.pointB, rB2, normal$4);\n } else {\n var p = subVec2(temp$5, output2.pointA, output2.pointB);\n copyVec2(output2.pointA, p);\n copyVec2(output2.pointB, p);\n output2.distance = 0;\n }\n }\n};\nvar DistanceProxy = (\n /** @class */\n function() {\n function DistanceProxy2() {\n this.m_vertices = [];\n this.m_count = 0;\n this.m_radius = 0;\n }\n DistanceProxy2.prototype.recycle = function() {\n this.m_vertices.length = 0;\n this.m_count = 0;\n this.m_radius = 0;\n };\n DistanceProxy2.prototype.getVertexCount = function() {\n return this.m_count;\n };\n DistanceProxy2.prototype.getVertex = function(index) {\n return this.m_vertices[index];\n };\n DistanceProxy2.prototype.getSupport = function(d2) {\n var bestIndex = -1;\n var bestValue = -Infinity;\n for (var i = 0; i < this.m_count; ++i) {\n var value = dotVec2(this.m_vertices[i], d2);\n if (value > bestValue) {\n bestIndex = i;\n bestValue = value;\n }\n }\n return bestIndex;\n };\n DistanceProxy2.prototype.getSupportVertex = function(d2) {\n return this.m_vertices[this.getSupport(d2)];\n };\n DistanceProxy2.prototype.set = function(shape, index) {\n shape.computeDistanceProxy(this, index);\n };\n DistanceProxy2.prototype.setVertices = function(vertices, count, radius) {\n this.m_vertices = vertices;\n this.m_count = count;\n this.m_radius = radius;\n };\n return DistanceProxy2;\n }()\n);\nvar SimplexVertex = (\n /** @class */\n function() {\n function SimplexVertex2() {\n this.wA = vec2(0, 0);\n this.indexA = 0;\n this.wB = vec2(0, 0);\n this.indexB = 0;\n this.w = vec2(0, 0);\n this.a = 0;\n }\n SimplexVertex2.prototype.recycle = function() {\n this.indexA = 0;\n this.indexB = 0;\n zeroVec2(this.wA);\n zeroVec2(this.wB);\n zeroVec2(this.w);\n this.a = 0;\n };\n SimplexVertex2.prototype.set = function(v3) {\n this.indexA = v3.indexA;\n this.indexB = v3.indexB;\n copyVec2(this.wA, v3.wA);\n copyVec2(this.wB, v3.wB);\n copyVec2(this.w, v3.w);\n this.a = v3.a;\n };\n return SimplexVertex2;\n }()\n);\nvar searchDirection_reuse = vec2(0, 0);\nvar closestPoint_reuse = vec2(0, 0);\nvar Simplex = (\n /** @class */\n function() {\n function Simplex2() {\n this.m_v1 = new SimplexVertex();\n this.m_v2 = new SimplexVertex();\n this.m_v3 = new SimplexVertex();\n this.m_v = [this.m_v1, this.m_v2, this.m_v3];\n }\n Simplex2.prototype.recycle = function() {\n this.m_v1.recycle();\n this.m_v2.recycle();\n this.m_v3.recycle();\n this.m_count = 0;\n };\n Simplex2.prototype.toString = function() {\n if (this.m_count === 3) {\n return [\n \"+\" + this.m_count,\n this.m_v1.a,\n this.m_v1.wA.x,\n this.m_v1.wA.y,\n this.m_v1.wB.x,\n this.m_v1.wB.y,\n this.m_v2.a,\n this.m_v2.wA.x,\n this.m_v2.wA.y,\n this.m_v2.wB.x,\n this.m_v2.wB.y,\n this.m_v3.a,\n this.m_v3.wA.x,\n this.m_v3.wA.y,\n this.m_v3.wB.x,\n this.m_v3.wB.y\n ].toString();\n } else if (this.m_count === 2) {\n return [\n \"+\" + this.m_count,\n this.m_v1.a,\n this.m_v1.wA.x,\n this.m_v1.wA.y,\n this.m_v1.wB.x,\n this.m_v1.wB.y,\n this.m_v2.a,\n this.m_v2.wA.x,\n this.m_v2.wA.y,\n this.m_v2.wB.x,\n this.m_v2.wB.y\n ].toString();\n } else if (this.m_count === 1) {\n return [\n \"+\" + this.m_count,\n this.m_v1.a,\n this.m_v1.wA.x,\n this.m_v1.wA.y,\n this.m_v1.wB.x,\n this.m_v1.wB.y\n ].toString();\n } else {\n return \"+\" + this.m_count;\n }\n };\n Simplex2.prototype.readCache = function(cache2, proxyA, transformA, proxyB, transformB) {\n this.m_count = cache2.count;\n for (var i = 0; i < this.m_count; ++i) {\n var v3 = this.m_v[i];\n v3.indexA = cache2.indexA[i];\n v3.indexB = cache2.indexB[i];\n var wALocal = proxyA.getVertex(v3.indexA);\n var wBLocal = proxyB.getVertex(v3.indexB);\n transformVec2(v3.wA, transformA, wALocal);\n transformVec2(v3.wB, transformB, wBLocal);\n subVec2(v3.w, v3.wB, v3.wA);\n v3.a = 0;\n }\n if (this.m_count > 1) {\n var metric1 = cache2.metric;\n var metric2 = this.getMetric();\n if (metric2 < 0.5 * metric1 || 2 * metric1 < metric2 || metric2 < EPSILON) {\n this.m_count = 0;\n }\n }\n if (this.m_count === 0) {\n var v3 = this.m_v[0];\n v3.indexA = 0;\n v3.indexB = 0;\n var wALocal = proxyA.getVertex(0);\n var wBLocal = proxyB.getVertex(0);\n transformVec2(v3.wA, transformA, wALocal);\n transformVec2(v3.wB, transformB, wBLocal);\n subVec2(v3.w, v3.wB, v3.wA);\n v3.a = 1;\n this.m_count = 1;\n }\n };\n Simplex2.prototype.writeCache = function(cache2) {\n cache2.metric = this.getMetric();\n cache2.count = this.m_count;\n for (var i = 0; i < this.m_count; ++i) {\n cache2.indexA[i] = this.m_v[i].indexA;\n cache2.indexB[i] = this.m_v[i].indexB;\n }\n };\n Simplex2.prototype.getSearchDirection = function() {\n var v13 = this.m_v1;\n var v22 = this.m_v2;\n switch (this.m_count) {\n case 1:\n return setVec2(searchDirection_reuse, -v13.w.x, -v13.w.y);\n case 2: {\n subVec2(e12, v22.w, v13.w);\n var sgn = -crossVec2Vec2(e12, v13.w);\n if (sgn > 0) {\n return setVec2(searchDirection_reuse, -e12.y, e12.x);\n } else {\n return setVec2(searchDirection_reuse, e12.y, -e12.x);\n }\n }\n default:\n return zeroVec2(searchDirection_reuse);\n }\n };\n Simplex2.prototype.getClosestPoint = function() {\n var v13 = this.m_v1;\n var v22 = this.m_v2;\n switch (this.m_count) {\n case 0:\n return zeroVec2(closestPoint_reuse);\n case 1:\n return copyVec2(closestPoint_reuse, v13.w);\n case 2:\n return combine2Vec2(closestPoint_reuse, v13.a, v13.w, v22.a, v22.w);\n case 3:\n return zeroVec2(closestPoint_reuse);\n default:\n return zeroVec2(closestPoint_reuse);\n }\n };\n Simplex2.prototype.getWitnessPoints = function(pA2, pB2) {\n var v13 = this.m_v1;\n var v22 = this.m_v2;\n var v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n break;\n case 1:\n copyVec2(pA2, v13.wA);\n copyVec2(pB2, v13.wB);\n break;\n case 2:\n combine2Vec2(pA2, v13.a, v13.wA, v22.a, v22.wA);\n combine2Vec2(pB2, v13.a, v13.wB, v22.a, v22.wB);\n break;\n case 3:\n combine3Vec2(pA2, v13.a, v13.wA, v22.a, v22.wA, v3.a, v3.wA);\n copyVec2(pB2, pA2);\n break;\n }\n };\n Simplex2.prototype.getMetric = function() {\n switch (this.m_count) {\n case 0:\n return 0;\n case 1:\n return 0;\n case 2:\n return distVec2(this.m_v1.w, this.m_v2.w);\n case 3:\n return crossVec2Vec2(subVec2(temp1, this.m_v2.w, this.m_v1.w), subVec2(temp2, this.m_v3.w, this.m_v1.w));\n default:\n return 0;\n }\n };\n Simplex2.prototype.solve = function() {\n switch (this.m_count) {\n case 1:\n break;\n case 2:\n this.solve2();\n break;\n case 3:\n this.solve3();\n break;\n }\n };\n Simplex2.prototype.solve2 = function() {\n var w1 = this.m_v1.w;\n var w2 = this.m_v2.w;\n subVec2(e12, w2, w1);\n var d12_2 = -dotVec2(w1, e12);\n if (d12_2 <= 0) {\n this.m_v1.a = 1;\n this.m_count = 1;\n return;\n }\n var d12_1 = dotVec2(w2, e12);\n if (d12_1 <= 0) {\n this.m_v2.a = 1;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n var inv_d12 = 1 / (d12_1 + d12_2);\n this.m_v1.a = d12_1 * inv_d12;\n this.m_v2.a = d12_2 * inv_d12;\n this.m_count = 2;\n };\n Simplex2.prototype.solve3 = function() {\n var w1 = this.m_v1.w;\n var w2 = this.m_v2.w;\n var w3 = this.m_v3.w;\n subVec2(e12, w2, w1);\n var w1e12 = dotVec2(w1, e12);\n var w2e12 = dotVec2(w2, e12);\n var d12_1 = w2e12;\n var d12_2 = -w1e12;\n subVec2(e13, w3, w1);\n var w1e13 = dotVec2(w1, e13);\n var w3e13 = dotVec2(w3, e13);\n var d13_1 = w3e13;\n var d13_2 = -w1e13;\n subVec2(e23, w3, w2);\n var w2e23 = dotVec2(w2, e23);\n var w3e23 = dotVec2(w3, e23);\n var d23_1 = w3e23;\n var d23_2 = -w2e23;\n var n123 = crossVec2Vec2(e12, e13);\n var d123_1 = n123 * crossVec2Vec2(w2, w3);\n var d123_2 = n123 * crossVec2Vec2(w3, w1);\n var d123_3 = n123 * crossVec2Vec2(w1, w2);\n if (d12_2 <= 0 && d13_2 <= 0) {\n this.m_v1.a = 1;\n this.m_count = 1;\n return;\n }\n if (d12_1 > 0 && d12_2 > 0 && d123_3 <= 0) {\n var inv_d12 = 1 / (d12_1 + d12_2);\n this.m_v1.a = d12_1 * inv_d12;\n this.m_v2.a = d12_2 * inv_d12;\n this.m_count = 2;\n return;\n }\n if (d13_1 > 0 && d13_2 > 0 && d123_2 <= 0) {\n var inv_d13 = 1 / (d13_1 + d13_2);\n this.m_v1.a = d13_1 * inv_d13;\n this.m_v3.a = d13_2 * inv_d13;\n this.m_count = 2;\n this.m_v2.set(this.m_v3);\n return;\n }\n if (d12_1 <= 0 && d23_2 <= 0) {\n this.m_v2.a = 1;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n if (d13_1 <= 0 && d23_1 <= 0) {\n this.m_v3.a = 1;\n this.m_count = 1;\n this.m_v1.set(this.m_v3);\n return;\n }\n if (d23_1 > 0 && d23_2 > 0 && d123_1 <= 0) {\n var inv_d23 = 1 / (d23_1 + d23_2);\n this.m_v2.a = d23_1 * inv_d23;\n this.m_v3.a = d23_2 * inv_d23;\n this.m_count = 2;\n this.m_v1.set(this.m_v3);\n return;\n }\n var inv_d123 = 1 / (d123_1 + d123_2 + d123_3);\n this.m_v1.a = d123_1 * inv_d123;\n this.m_v2.a = d123_2 * inv_d123;\n this.m_v3.a = d123_3 * inv_d123;\n this.m_count = 3;\n };\n return Simplex2;\n }()\n);\nvar simplex = new Simplex();\nvar input$1 = new DistanceInput();\nvar cache$1 = new SimplexCache();\nvar output$1 = new DistanceOutput();\nvar testOverlap = function(shapeA, indexA, shapeB, indexB, xfA2, xfB2) {\n input$1.recycle();\n input$1.proxyA.set(shapeA, indexA);\n input$1.proxyB.set(shapeB, indexB);\n copyTransform(input$1.transformA, xfA2);\n copyTransform(input$1.transformB, xfB2);\n input$1.useRadii = true;\n output$1.recycle();\n cache$1.recycle();\n Distance(output$1, cache$1, input$1);\n return output$1.distance < 10 * EPSILON;\n};\nDistance.testOverlap = testOverlap;\nDistance.Input = DistanceInput;\nDistance.Output = DistanceOutput;\nDistance.Proxy = DistanceProxy;\nDistance.Cache = SimplexCache;\nvar ShapeCastInput = (\n /** @class */\n function() {\n function ShapeCastInput2() {\n this.proxyA = new DistanceProxy();\n this.proxyB = new DistanceProxy();\n this.transformA = Transform.identity();\n this.transformB = Transform.identity();\n this.translationB = Vec2.zero();\n }\n ShapeCastInput2.prototype.recycle = function() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n zeroVec2(this.translationB);\n };\n return ShapeCastInput2;\n }()\n);\nvar ShapeCastOutput = (\n /** @class */\n /* @__PURE__ */ function() {\n function ShapeCastOutput2() {\n this.point = Vec2.zero();\n this.normal = Vec2.zero();\n this.lambda = 1;\n this.iterations = 0;\n }\n return ShapeCastOutput2;\n }()\n);\nvar ShapeCast = function(output2, input2) {\n output2.iterations = 0;\n output2.lambda = 1;\n output2.normal.setZero();\n output2.point.setZero();\n var proxyA = input2.proxyA;\n var proxyB = input2.proxyB;\n var radiusA = math_max$4(proxyA.m_radius, SettingsInternal.polygonRadius);\n var radiusB = math_max$4(proxyB.m_radius, SettingsInternal.polygonRadius);\n var radius = radiusA + radiusB;\n var xfA2 = input2.transformA;\n var xfB2 = input2.transformB;\n var r = input2.translationB;\n var n2 = Vec2.zero();\n var lambda = 0;\n var simplex2 = new Simplex();\n simplex2.m_count = 0;\n var vertices = simplex2.m_v;\n var indexA = proxyA.getSupport(Rot.mulTVec2(xfA2.q, Vec2.neg(r)));\n var wA = Transform.mulVec2(xfA2, proxyA.getVertex(indexA));\n var indexB = proxyB.getSupport(Rot.mulTVec2(xfB2.q, r));\n var wB = Transform.mulVec2(xfB2, proxyB.getVertex(indexB));\n var v3 = Vec2.sub(wA, wB);\n var sigma = math_max$4(SettingsInternal.polygonRadius, radius - SettingsInternal.polygonRadius);\n var tolerance = 0.5 * SettingsInternal.linearSlop;\n var k_maxIters = 20;\n var iter = 0;\n while (iter < k_maxIters && v3.length() - sigma > tolerance) {\n output2.iterations += 1;\n indexA = proxyA.getSupport(Rot.mulTVec2(xfA2.q, Vec2.neg(v3)));\n wA = Transform.mulVec2(xfA2, proxyA.getVertex(indexA));\n indexB = proxyB.getSupport(Rot.mulTVec2(xfB2.q, v3));\n wB = Transform.mulVec2(xfB2, proxyB.getVertex(indexB));\n var p = Vec2.sub(wA, wB);\n v3.normalize();\n var vp = Vec2.dot(v3, p);\n var vr = Vec2.dot(v3, r);\n if (vp - sigma > lambda * vr) {\n if (vr <= 0) {\n return false;\n }\n lambda = (vp - sigma) / vr;\n if (lambda > 1) {\n return false;\n }\n n2.setMul(-1, v3);\n simplex2.m_count = 0;\n }\n var vertex = vertices[simplex2.m_count];\n vertex.indexA = indexB;\n vertex.wA = Vec2.combine(1, wB, lambda, r);\n vertex.indexB = indexA;\n vertex.wB = wA;\n vertex.w = Vec2.sub(vertex.wB, vertex.wA);\n vertex.a = 1;\n simplex2.m_count += 1;\n switch (simplex2.m_count) {\n case 1:\n break;\n case 2:\n simplex2.solve2();\n break;\n case 3:\n simplex2.solve3();\n break;\n }\n if (simplex2.m_count == 3) {\n return false;\n }\n v3.setVec2(simplex2.getClosestPoint());\n ++iter;\n }\n if (iter == 0) {\n return false;\n }\n var pointA2 = Vec2.zero();\n var pointB2 = Vec2.zero();\n simplex2.getWitnessPoints(pointB2, pointA2);\n if (v3.lengthSquared() > 0) {\n n2.setMul(-1, v3);\n n2.normalize();\n }\n output2.point = Vec2.combine(1, pointA2, radiusA, n2);\n output2.normal = n2;\n output2.lambda = lambda;\n output2.iterations = iter;\n return true;\n};\nvar math_abs$7 = Math.abs;\nvar math_max$3 = Math.max;\nvar TOIInput = (\n /** @class */\n function() {\n function TOIInput2() {\n this.proxyA = new DistanceProxy();\n this.proxyB = new DistanceProxy();\n this.sweepA = new Sweep();\n this.sweepB = new Sweep();\n }\n TOIInput2.prototype.recycle = function() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.sweepA.recycle();\n this.sweepB.recycle();\n this.tMax = -1;\n };\n return TOIInput2;\n }()\n);\nvar TOIOutputState;\n(function(TOIOutputState2) {\n TOIOutputState2[TOIOutputState2[\"e_unset\"] = -1] = \"e_unset\";\n TOIOutputState2[TOIOutputState2[\"e_unknown\"] = 0] = \"e_unknown\";\n TOIOutputState2[TOIOutputState2[\"e_failed\"] = 1] = \"e_failed\";\n TOIOutputState2[TOIOutputState2[\"e_overlapped\"] = 2] = \"e_overlapped\";\n TOIOutputState2[TOIOutputState2[\"e_touching\"] = 3] = \"e_touching\";\n TOIOutputState2[TOIOutputState2[\"e_separated\"] = 4] = \"e_separated\";\n})(TOIOutputState || (TOIOutputState = {}));\nvar TOIOutput = (\n /** @class */\n function() {\n function TOIOutput2() {\n this.state = TOIOutputState.e_unset;\n this.t = -1;\n }\n TOIOutput2.prototype.recycle = function() {\n this.state = TOIOutputState.e_unset;\n this.t = -1;\n };\n return TOIOutput2;\n }()\n);\nstats.toiTime = 0;\nstats.toiMaxTime = 0;\nstats.toiCalls = 0;\nstats.toiIters = 0;\nstats.toiMaxIters = 0;\nstats.toiRootIters = 0;\nstats.toiMaxRootIters = 0;\nvar distanceInput = new DistanceInput();\nvar distanceOutput = new DistanceOutput();\nvar cache = new SimplexCache();\nvar xfA$1 = transform(0, 0, 0);\nvar xfB$1 = transform(0, 0, 0);\nvar temp$4 = vec2(0, 0);\nvar pointA$2 = vec2(0, 0);\nvar pointB$2 = vec2(0, 0);\nvar normal$3 = vec2(0, 0);\nvar axisA = vec2(0, 0);\nvar axisB = vec2(0, 0);\nvar localPointA = vec2(0, 0);\nvar localPointB = vec2(0, 0);\nvar TimeOfImpact = function(output2, input2) {\n var timer = Timer.now();\n ++stats.toiCalls;\n output2.state = TOIOutputState.e_unknown;\n output2.t = input2.tMax;\n var proxyA = input2.proxyA;\n var proxyB = input2.proxyB;\n var sweepA = input2.sweepA;\n var sweepB = input2.sweepB;\n sweepA.normalize();\n sweepB.normalize();\n var tMax = input2.tMax;\n var totalRadius = proxyA.m_radius + proxyB.m_radius;\n var target = math_max$3(SettingsInternal.linearSlop, totalRadius - 3 * SettingsInternal.linearSlop);\n var tolerance = 0.25 * SettingsInternal.linearSlop;\n var t1 = 0;\n var k_maxIterations = SettingsInternal.maxTOIIterations;\n var iter = 0;\n cache.recycle();\n distanceInput.proxyA.setVertices(proxyA.m_vertices, proxyA.m_count, proxyA.m_radius);\n distanceInput.proxyB.setVertices(proxyB.m_vertices, proxyB.m_count, proxyB.m_radius);\n distanceInput.useRadii = false;\n while (true) {\n sweepA.getTransform(xfA$1, t1);\n sweepB.getTransform(xfB$1, t1);\n copyTransform(distanceInput.transformA, xfA$1);\n copyTransform(distanceInput.transformB, xfB$1);\n Distance(distanceOutput, cache, distanceInput);\n if (distanceOutput.distance <= 0) {\n output2.state = TOIOutputState.e_overlapped;\n output2.t = 0;\n break;\n }\n if (distanceOutput.distance < target + tolerance) {\n output2.state = TOIOutputState.e_touching;\n output2.t = t1;\n break;\n }\n separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1);\n var done = false;\n var t2 = tMax;\n var pushBackIter = 0;\n while (true) {\n var s2 = separationFunction.findMinSeparation(t2);\n if (s2 > target + tolerance) {\n output2.state = TOIOutputState.e_separated;\n output2.t = tMax;\n done = true;\n break;\n }\n if (s2 > target - tolerance) {\n t1 = t2;\n break;\n }\n var s1 = separationFunction.evaluate(t1);\n if (s1 < target - tolerance) {\n output2.state = TOIOutputState.e_failed;\n output2.t = t1;\n done = true;\n break;\n }\n if (s1 <= target + tolerance) {\n output2.state = TOIOutputState.e_touching;\n output2.t = t1;\n done = true;\n break;\n }\n var rootIterCount = 0;\n var a1 = t1;\n var a2 = t2;\n while (true) {\n var t = void 0;\n if (rootIterCount & 1) {\n t = a1 + (target - s1) * (a2 - a1) / (s2 - s1);\n } else {\n t = 0.5 * (a1 + a2);\n }\n ++rootIterCount;\n ++stats.toiRootIters;\n var s3 = separationFunction.evaluate(t);\n if (math_abs$7(s3 - target) < tolerance) {\n t2 = t;\n break;\n }\n if (s3 > target) {\n a1 = t;\n s1 = s3;\n } else {\n a2 = t;\n s2 = s3;\n }\n if (rootIterCount === 50) {\n break;\n }\n }\n stats.toiMaxRootIters = math_max$3(stats.toiMaxRootIters, rootIterCount);\n ++pushBackIter;\n if (pushBackIter === SettingsInternal.maxPolygonVertices) {\n break;\n }\n }\n ++iter;\n ++stats.toiIters;\n if (done) {\n break;\n }\n if (iter === k_maxIterations) {\n output2.state = TOIOutputState.e_failed;\n output2.t = t1;\n break;\n }\n }\n stats.toiMaxIters = math_max$3(stats.toiMaxIters, iter);\n var time = Timer.diff(timer);\n stats.toiMaxTime = math_max$3(stats.toiMaxTime, time);\n stats.toiTime += time;\n separationFunction.recycle();\n};\nvar SeparationFunctionType;\n(function(SeparationFunctionType2) {\n SeparationFunctionType2[SeparationFunctionType2[\"e_unset\"] = -1] = \"e_unset\";\n SeparationFunctionType2[SeparationFunctionType2[\"e_points\"] = 1] = \"e_points\";\n SeparationFunctionType2[SeparationFunctionType2[\"e_faceA\"] = 2] = \"e_faceA\";\n SeparationFunctionType2[SeparationFunctionType2[\"e_faceB\"] = 3] = \"e_faceB\";\n})(SeparationFunctionType || (SeparationFunctionType = {}));\nvar SeparationFunction = (\n /** @class */\n function() {\n function SeparationFunction2() {\n this.m_proxyA = null;\n this.m_proxyB = null;\n this.m_sweepA = null;\n this.m_sweepB = null;\n this.m_type = SeparationFunctionType.e_unset;\n this.m_localPoint = vec2(0, 0);\n this.m_axis = vec2(0, 0);\n this.indexA = -1;\n this.indexB = -1;\n }\n SeparationFunction2.prototype.recycle = function() {\n this.m_proxyA = null;\n this.m_proxyB = null;\n this.m_sweepA = null;\n this.m_sweepB = null;\n this.m_type = SeparationFunctionType.e_unset;\n zeroVec2(this.m_localPoint);\n zeroVec2(this.m_axis);\n this.indexA = -1;\n this.indexB = -1;\n };\n SeparationFunction2.prototype.initialize = function(cache2, proxyA, sweepA, proxyB, sweepB, t1) {\n var count = cache2.count;\n this.m_proxyA = proxyA;\n this.m_proxyB = proxyB;\n this.m_sweepA = sweepA;\n this.m_sweepB = sweepB;\n this.m_sweepA.getTransform(xfA$1, t1);\n this.m_sweepB.getTransform(xfB$1, t1);\n if (count === 1) {\n this.m_type = SeparationFunctionType.e_points;\n var localPointA_1 = this.m_proxyA.getVertex(cache2.indexA[0]);\n var localPointB_1 = this.m_proxyB.getVertex(cache2.indexB[0]);\n transformVec2(pointA$2, xfA$1, localPointA_1);\n transformVec2(pointB$2, xfB$1, localPointB_1);\n subVec2(this.m_axis, pointB$2, pointA$2);\n var s2 = normalizeVec2Length(this.m_axis);\n return s2;\n } else if (cache2.indexA[0] === cache2.indexA[1]) {\n this.m_type = SeparationFunctionType.e_faceB;\n var localPointB1 = proxyB.getVertex(cache2.indexB[0]);\n var localPointB2 = proxyB.getVertex(cache2.indexB[1]);\n crossVec2Num(this.m_axis, subVec2(temp$4, localPointB2, localPointB1), 1);\n normalizeVec2(this.m_axis);\n rotVec2(normal$3, xfB$1.q, this.m_axis);\n combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2);\n transformVec2(pointB$2, xfB$1, this.m_localPoint);\n var localPointA_2 = proxyA.getVertex(cache2.indexA[0]);\n var pointA_1 = Transform.mulVec2(xfA$1, localPointA_2);\n var s2 = dotVec2(pointA_1, normal$3) - dotVec2(pointB$2, normal$3);\n if (s2 < 0) {\n negVec2(this.m_axis);\n s2 = -s2;\n }\n return s2;\n } else {\n this.m_type = SeparationFunctionType.e_faceA;\n var localPointA1 = this.m_proxyA.getVertex(cache2.indexA[0]);\n var localPointA2 = this.m_proxyA.getVertex(cache2.indexA[1]);\n crossVec2Num(this.m_axis, subVec2(temp$4, localPointA2, localPointA1), 1);\n normalizeVec2(this.m_axis);\n rotVec2(normal$3, xfA$1.q, this.m_axis);\n combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2);\n transformVec2(pointA$2, xfA$1, this.m_localPoint);\n var localPointB_2 = this.m_proxyB.getVertex(cache2.indexB[0]);\n transformVec2(pointB$2, xfB$1, localPointB_2);\n var s2 = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3);\n if (s2 < 0) {\n negVec2(this.m_axis);\n s2 = -s2;\n }\n return s2;\n }\n };\n SeparationFunction2.prototype.compute = function(find, t) {\n this.m_sweepA.getTransform(xfA$1, t);\n this.m_sweepB.getTransform(xfB$1, t);\n switch (this.m_type) {\n case SeparationFunctionType.e_points: {\n if (find) {\n derotVec2(axisA, xfA$1.q, this.m_axis);\n derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, this.m_axis));\n this.indexA = this.m_proxyA.getSupport(axisA);\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n transformVec2(pointA$2, xfA$1, localPointA);\n transformVec2(pointB$2, xfB$1, localPointB);\n var sep = dotVec2(pointB$2, this.m_axis) - dotVec2(pointA$2, this.m_axis);\n return sep;\n }\n case SeparationFunctionType.e_faceA: {\n rotVec2(normal$3, xfA$1.q, this.m_axis);\n transformVec2(pointA$2, xfA$1, this.m_localPoint);\n if (find) {\n derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, normal$3));\n this.indexA = -1;\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n transformVec2(pointB$2, xfB$1, localPointB);\n var sep = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3);\n return sep;\n }\n case SeparationFunctionType.e_faceB: {\n rotVec2(normal$3, xfB$1.q, this.m_axis);\n transformVec2(pointB$2, xfB$1, this.m_localPoint);\n if (find) {\n derotVec2(axisA, xfA$1.q, scaleVec2(temp$4, -1, normal$3));\n this.indexB = -1;\n this.indexA = this.m_proxyA.getSupport(axisA);\n }\n copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n transformVec2(pointA$2, xfA$1, localPointA);\n var sep = dotVec2(pointA$2, normal$3) - dotVec2(pointB$2, normal$3);\n return sep;\n }\n default:\n if (find) {\n this.indexA = -1;\n this.indexB = -1;\n }\n return 0;\n }\n };\n SeparationFunction2.prototype.findMinSeparation = function(t) {\n return this.compute(true, t);\n };\n SeparationFunction2.prototype.evaluate = function(t) {\n return this.compute(false, t);\n };\n return SeparationFunction2;\n }()\n);\nvar separationFunction = new SeparationFunction();\nTimeOfImpact.Input = TOIInput;\nTimeOfImpact.Output = TOIOutput;\nvar math_abs$6 = Math.abs;\nvar math_sqrt$3 = Math.sqrt;\nvar math_min$5 = Math.min;\nvar TimeStep = (\n /** @class */\n function() {\n function TimeStep2() {\n this.dt = 0;\n this.inv_dt = 0;\n this.velocityIterations = 0;\n this.positionIterations = 0;\n this.warmStarting = false;\n this.blockSolve = true;\n this.inv_dt0 = 0;\n this.dtRatio = 1;\n }\n TimeStep2.prototype.reset = function(dt) {\n if (this.dt > 0) {\n this.inv_dt0 = this.inv_dt;\n }\n this.dt = dt;\n this.inv_dt = dt == 0 ? 0 : 1 / dt;\n this.dtRatio = dt * this.inv_dt0;\n };\n return TimeStep2;\n }()\n);\nvar s_subStep = new TimeStep();\nvar c = vec2(0, 0);\nvar v = vec2(0, 0);\nvar translation = vec2(0, 0);\nvar input = new TOIInput();\nvar output = new TOIOutput();\nvar backup = new Sweep();\nvar backup1 = new Sweep();\nvar backup2 = new Sweep();\nvar ContactImpulse = (\n /** @class */\n function() {\n function ContactImpulse2(contact) {\n this.contact = contact;\n this.normals = [];\n this.tangents = [];\n }\n ContactImpulse2.prototype.recycle = function() {\n this.normals.length = 0;\n this.tangents.length = 0;\n };\n Object.defineProperty(ContactImpulse2.prototype, \"normalImpulses\", {\n get: function() {\n var contact = this.contact;\n var normals = this.normals;\n normals.length = 0;\n for (var p = 0; p < contact.v_points.length; ++p) {\n normals.push(contact.v_points[p].normalImpulse);\n }\n return normals;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ContactImpulse2.prototype, \"tangentImpulses\", {\n get: function() {\n var contact = this.contact;\n var tangents = this.tangents;\n tangents.length = 0;\n for (var p = 0; p < contact.v_points.length; ++p) {\n tangents.push(contact.v_points[p].tangentImpulse);\n }\n return tangents;\n },\n enumerable: false,\n configurable: true\n });\n return ContactImpulse2;\n }()\n);\nvar Solver = (\n /** @class */\n function() {\n function Solver2(world) {\n this.m_world = world;\n this.m_stack = [];\n this.m_bodies = [];\n this.m_contacts = [];\n this.m_joints = [];\n }\n Solver2.prototype.clear = function() {\n this.m_stack.length = 0;\n this.m_bodies.length = 0;\n this.m_contacts.length = 0;\n this.m_joints.length = 0;\n };\n Solver2.prototype.addBody = function(body) {\n this.m_bodies.push(body);\n };\n Solver2.prototype.addContact = function(contact) {\n this.m_contacts.push(contact);\n };\n Solver2.prototype.addJoint = function(joint) {\n this.m_joints.push(joint);\n };\n Solver2.prototype.solveWorld = function(step) {\n var world = this.m_world;\n for (var b2 = world.m_bodyList; b2; b2 = b2.m_next) {\n b2.m_islandFlag = false;\n }\n for (var c_1 = world.m_contactList; c_1; c_1 = c_1.m_next) {\n c_1.m_islandFlag = false;\n }\n for (var j = world.m_jointList; j; j = j.m_next) {\n j.m_islandFlag = false;\n }\n var stack = this.m_stack;\n for (var seed = world.m_bodyList; seed; seed = seed.m_next) {\n if (seed.m_islandFlag) {\n continue;\n }\n if (seed.isAwake() == false || seed.isActive() == false) {\n continue;\n }\n if (seed.isStatic()) {\n continue;\n }\n this.clear();\n stack.push(seed);\n seed.m_islandFlag = true;\n while (stack.length > 0) {\n var b2 = stack.pop();\n this.addBody(b2);\n b2.m_awakeFlag = true;\n if (b2.isStatic()) {\n continue;\n }\n for (var ce = b2.m_contactList; ce; ce = ce.next) {\n var contact = ce.contact;\n if (contact.m_islandFlag) {\n continue;\n }\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n continue;\n }\n var sensorA = contact.m_fixtureA.m_isSensor;\n var sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n this.addContact(contact);\n contact.m_islandFlag = true;\n var other = ce.other;\n if (other.m_islandFlag) {\n continue;\n }\n stack.push(other);\n other.m_islandFlag = true;\n }\n for (var je = b2.m_jointList; je; je = je.next) {\n if (je.joint.m_islandFlag == true) {\n continue;\n }\n var other = je.other;\n if (other.isActive() == false) {\n continue;\n }\n this.addJoint(je.joint);\n je.joint.m_islandFlag = true;\n if (other.m_islandFlag) {\n continue;\n }\n stack.push(other);\n other.m_islandFlag = true;\n }\n }\n this.solveIsland(step);\n for (var i = 0; i < this.m_bodies.length; ++i) {\n var b2 = this.m_bodies[i];\n if (b2.isStatic()) {\n b2.m_islandFlag = false;\n }\n }\n }\n };\n Solver2.prototype.solveIsland = function(step) {\n var world = this.m_world;\n var gravity = world.m_gravity;\n var allowSleep = world.m_allowSleep;\n var h = step.dt;\n for (var i = 0; i < this.m_bodies.length; ++i) {\n var body = this.m_bodies[i];\n copyVec2(c, body.m_sweep.c);\n var a2 = body.m_sweep.a;\n copyVec2(v, body.m_linearVelocity);\n var w = body.m_angularVelocity;\n copyVec2(body.m_sweep.c0, body.m_sweep.c);\n body.m_sweep.a0 = body.m_sweep.a;\n if (body.isDynamic()) {\n plusScaleVec2(v, h * body.m_gravityScale, gravity);\n plusScaleVec2(v, h * body.m_invMass, body.m_force);\n w += h * body.m_invI * body.m_torque;\n scaleVec2(v, 1 / (1 + h * body.m_linearDamping), v);\n w *= 1 / (1 + h * body.m_angularDamping);\n }\n copyVec2(body.c_position.c, c);\n body.c_position.a = a2;\n copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n for (var i = 0; i < this.m_contacts.length; ++i) {\n var contact = this.m_contacts[i];\n contact.initConstraint(step);\n }\n for (var i = 0; i < this.m_contacts.length; ++i) {\n var contact = this.m_contacts[i];\n contact.initVelocityConstraint(step);\n }\n if (step.warmStarting) {\n for (var i = 0; i < this.m_contacts.length; ++i) {\n var contact = this.m_contacts[i];\n contact.warmStartConstraint(step);\n }\n }\n for (var i = 0; i < this.m_joints.length; ++i) {\n var joint = this.m_joints[i];\n joint.initVelocityConstraints(step);\n }\n for (var i = 0; i < step.velocityIterations; ++i) {\n for (var j = 0; j < this.m_joints.length; ++j) {\n var joint = this.m_joints[j];\n joint.solveVelocityConstraints(step);\n }\n for (var j = 0; j < this.m_contacts.length; ++j) {\n var contact = this.m_contacts[j];\n contact.solveVelocityConstraint(step);\n }\n }\n for (var i = 0; i < this.m_contacts.length; ++i) {\n var contact = this.m_contacts[i];\n contact.storeConstraintImpulses(step);\n }\n for (var i = 0; i < this.m_bodies.length; ++i) {\n var body = this.m_bodies[i];\n copyVec2(c, body.c_position.c);\n var a2 = body.c_position.a;\n copyVec2(v, body.c_velocity.v);\n var w = body.c_velocity.w;\n scaleVec2(translation, h, v);\n var translationLengthSqr = lengthSqrVec2(translation);\n if (translationLengthSqr > SettingsInternal.maxTranslationSquared) {\n var ratio = SettingsInternal.maxTranslation / math_sqrt$3(translationLengthSqr);\n mulVec2(v, ratio);\n }\n var rotation2 = h * w;\n if (rotation2 * rotation2 > SettingsInternal.maxRotationSquared) {\n var ratio = SettingsInternal.maxRotation / math_abs$6(rotation2);\n w *= ratio;\n }\n plusScaleVec2(c, h, v);\n a2 += h * w;\n copyVec2(body.c_position.c, c);\n body.c_position.a = a2;\n copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n var positionSolved = false;\n for (var i = 0; i < step.positionIterations; ++i) {\n var minSeparation = 0;\n for (var j = 0; j < this.m_contacts.length; ++j) {\n var contact = this.m_contacts[j];\n var separation = contact.solvePositionConstraint(step);\n minSeparation = math_min$5(minSeparation, separation);\n }\n var contactsOkay = minSeparation >= -3 * SettingsInternal.linearSlop;\n var jointsOkay = true;\n for (var j = 0; j < this.m_joints.length; ++j) {\n var joint = this.m_joints[j];\n var jointOkay = joint.solvePositionConstraints(step);\n jointsOkay = jointsOkay && jointOkay;\n }\n if (contactsOkay && jointsOkay) {\n positionSolved = true;\n break;\n }\n }\n for (var i = 0; i < this.m_bodies.length; ++i) {\n var body = this.m_bodies[i];\n copyVec2(body.m_sweep.c, body.c_position.c);\n body.m_sweep.a = body.c_position.a;\n copyVec2(body.m_linearVelocity, body.c_velocity.v);\n body.m_angularVelocity = body.c_velocity.w;\n body.synchronizeTransform();\n }\n this.postSolveIsland();\n if (allowSleep) {\n var minSleepTime = Infinity;\n var linTolSqr = SettingsInternal.linearSleepToleranceSqr;\n var angTolSqr = SettingsInternal.angularSleepToleranceSqr;\n for (var i = 0; i < this.m_bodies.length; ++i) {\n var body = this.m_bodies[i];\n if (body.isStatic()) {\n continue;\n }\n if (body.m_autoSleepFlag == false || body.m_angularVelocity * body.m_angularVelocity > angTolSqr || lengthSqrVec2(body.m_linearVelocity) > linTolSqr) {\n body.m_sleepTime = 0;\n minSleepTime = 0;\n } else {\n body.m_sleepTime += h;\n minSleepTime = math_min$5(minSleepTime, body.m_sleepTime);\n }\n }\n if (minSleepTime >= SettingsInternal.timeToSleep && positionSolved) {\n for (var i = 0; i < this.m_bodies.length; ++i) {\n var body = this.m_bodies[i];\n body.setAwake(false);\n }\n }\n }\n };\n Solver2.prototype.solveWorldTOI = function(step) {\n var world = this.m_world;\n if (world.m_stepComplete) {\n for (var b2 = world.m_bodyList; b2; b2 = b2.m_next) {\n b2.m_islandFlag = false;\n b2.m_sweep.alpha0 = 0;\n }\n for (var c_2 = world.m_contactList; c_2; c_2 = c_2.m_next) {\n c_2.m_toiFlag = false;\n c_2.m_islandFlag = false;\n c_2.m_toiCount = 0;\n c_2.m_toi = 1;\n }\n }\n while (true) {\n var minContact = null;\n var minAlpha = 1;\n for (var c_3 = world.m_contactList; c_3; c_3 = c_3.m_next) {\n if (c_3.isEnabled() == false) {\n continue;\n }\n if (c_3.m_toiCount > SettingsInternal.maxSubSteps) {\n continue;\n }\n var alpha = 1;\n if (c_3.m_toiFlag) {\n alpha = c_3.m_toi;\n } else {\n var fA_1 = c_3.getFixtureA();\n var fB_1 = c_3.getFixtureB();\n if (fA_1.isSensor() || fB_1.isSensor()) {\n continue;\n }\n var bA_1 = fA_1.getBody();\n var bB_1 = fB_1.getBody();\n var activeA = bA_1.isAwake() && !bA_1.isStatic();\n var activeB = bB_1.isAwake() && !bB_1.isStatic();\n if (activeA == false && activeB == false) {\n continue;\n }\n var collideA = bA_1.isBullet() || !bA_1.isDynamic();\n var collideB = bB_1.isBullet() || !bB_1.isDynamic();\n if (collideA == false && collideB == false) {\n continue;\n }\n var alpha0 = bA_1.m_sweep.alpha0;\n if (bA_1.m_sweep.alpha0 < bB_1.m_sweep.alpha0) {\n alpha0 = bB_1.m_sweep.alpha0;\n bA_1.m_sweep.advance(alpha0);\n } else if (bB_1.m_sweep.alpha0 < bA_1.m_sweep.alpha0) {\n alpha0 = bA_1.m_sweep.alpha0;\n bB_1.m_sweep.advance(alpha0);\n }\n var indexA = c_3.getChildIndexA();\n var indexB = c_3.getChildIndexB();\n input.proxyA.set(fA_1.getShape(), indexA);\n input.proxyB.set(fB_1.getShape(), indexB);\n input.sweepA.set(bA_1.m_sweep);\n input.sweepB.set(bB_1.m_sweep);\n input.tMax = 1;\n TimeOfImpact(output, input);\n var beta = output.t;\n if (output.state == TOIOutputState.e_touching) {\n alpha = math_min$5(alpha0 + (1 - alpha0) * beta, 1);\n } else {\n alpha = 1;\n }\n c_3.m_toi = alpha;\n c_3.m_toiFlag = true;\n }\n if (alpha < minAlpha) {\n minContact = c_3;\n minAlpha = alpha;\n }\n }\n if (minContact == null || 1 - 10 * EPSILON < minAlpha) {\n world.m_stepComplete = true;\n break;\n }\n var fA = minContact.getFixtureA();\n var fB = minContact.getFixtureB();\n var bA = fA.getBody();\n var bB = fB.getBody();\n backup1.set(bA.m_sweep);\n backup2.set(bB.m_sweep);\n bA.advance(minAlpha);\n bB.advance(minAlpha);\n minContact.update(world);\n minContact.m_toiFlag = false;\n ++minContact.m_toiCount;\n if (minContact.isEnabled() == false || minContact.isTouching() == false) {\n minContact.setEnabled(false);\n bA.m_sweep.set(backup1);\n bB.m_sweep.set(backup2);\n bA.synchronizeTransform();\n bB.synchronizeTransform();\n continue;\n }\n bA.setAwake(true);\n bB.setAwake(true);\n this.clear();\n this.addBody(bA);\n this.addBody(bB);\n this.addContact(minContact);\n bA.m_islandFlag = true;\n bB.m_islandFlag = true;\n minContact.m_islandFlag = true;\n var bodies = [bA, bB];\n for (var i = 0; i < bodies.length; ++i) {\n var body = bodies[i];\n if (body.isDynamic()) {\n for (var ce = body.m_contactList; ce; ce = ce.next) {\n var contact = ce.contact;\n if (contact.m_islandFlag) {\n continue;\n }\n var other = ce.other;\n if (other.isDynamic() && !body.isBullet() && !other.isBullet()) {\n continue;\n }\n var sensorA = contact.m_fixtureA.m_isSensor;\n var sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n backup.set(other.m_sweep);\n if (other.m_islandFlag == false) {\n other.advance(minAlpha);\n }\n contact.update(world);\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n other.m_sweep.set(backup);\n other.synchronizeTransform();\n continue;\n }\n contact.m_islandFlag = true;\n this.addContact(contact);\n if (other.m_islandFlag) {\n continue;\n }\n other.m_islandFlag = true;\n if (!other.isStatic()) {\n other.setAwake(true);\n }\n this.addBody(other);\n }\n }\n }\n s_subStep.reset((1 - minAlpha) * step.dt);\n s_subStep.dtRatio = 1;\n s_subStep.positionIterations = 20;\n s_subStep.velocityIterations = step.velocityIterations;\n s_subStep.warmStarting = false;\n this.solveIslandTOI(s_subStep, bA, bB);\n for (var i = 0; i < this.m_bodies.length; ++i) {\n var body = this.m_bodies[i];\n body.m_islandFlag = false;\n if (!body.isDynamic()) {\n continue;\n }\n body.synchronizeFixtures();\n for (var ce = body.m_contactList; ce; ce = ce.next) {\n ce.contact.m_toiFlag = false;\n ce.contact.m_islandFlag = false;\n }\n }\n world.findNewContacts();\n if (world.m_subStepping) {\n world.m_stepComplete = false;\n break;\n }\n }\n };\n Solver2.prototype.solveIslandTOI = function(subStep, toiA, toiB) {\n for (var i = 0; i < this.m_bodies.length; ++i) {\n var body = this.m_bodies[i];\n copyVec2(body.c_position.c, body.m_sweep.c);\n body.c_position.a = body.m_sweep.a;\n copyVec2(body.c_velocity.v, body.m_linearVelocity);\n body.c_velocity.w = body.m_angularVelocity;\n }\n for (var i = 0; i < this.m_contacts.length; ++i) {\n var contact = this.m_contacts[i];\n contact.initConstraint(subStep);\n }\n for (var i = 0; i < subStep.positionIterations; ++i) {\n var minSeparation = 0;\n for (var j = 0; j < this.m_contacts.length; ++j) {\n var contact = this.m_contacts[j];\n var separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB);\n minSeparation = math_min$5(minSeparation, separation);\n }\n var contactsOkay = minSeparation >= -1.5 * SettingsInternal.linearSlop;\n if (contactsOkay) {\n break;\n }\n }\n var i;\n copyVec2(toiA.m_sweep.c0, toiA.c_position.c);\n toiA.m_sweep.a0 = toiA.c_position.a;\n copyVec2(toiB.m_sweep.c0, toiB.c_position.c);\n toiB.m_sweep.a0 = toiB.c_position.a;\n for (var i = 0; i < this.m_contacts.length; ++i) {\n var contact = this.m_contacts[i];\n contact.initVelocityConstraint(subStep);\n }\n for (var i = 0; i < subStep.velocityIterations; ++i) {\n for (var j = 0; j < this.m_contacts.length; ++j) {\n var contact = this.m_contacts[j];\n contact.solveVelocityConstraint(subStep);\n }\n }\n var h = subStep.dt;\n for (var i = 0; i < this.m_bodies.length; ++i) {\n var body = this.m_bodies[i];\n copyVec2(c, body.c_position.c);\n var a2 = body.c_position.a;\n copyVec2(v, body.c_velocity.v);\n var w = body.c_velocity.w;\n scaleVec2(translation, h, v);\n var translationLengthSqr = lengthSqrVec2(translation);\n if (translationLengthSqr > SettingsInternal.maxTranslationSquared) {\n var ratio = SettingsInternal.maxTranslation / math_sqrt$3(translationLengthSqr);\n mulVec2(v, ratio);\n }\n var rotation2 = h * w;\n if (rotation2 * rotation2 > SettingsInternal.maxRotationSquared) {\n var ratio = SettingsInternal.maxRotation / math_abs$6(rotation2);\n w *= ratio;\n }\n plusScaleVec2(c, h, v);\n a2 += h * w;\n copyVec2(body.c_position.c, c);\n body.c_position.a = a2;\n copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n copyVec2(body.m_sweep.c, c);\n body.m_sweep.a = a2;\n copyVec2(body.m_linearVelocity, v);\n body.m_angularVelocity = w;\n body.synchronizeTransform();\n }\n this.postSolveIsland();\n };\n Solver2.prototype.postSolveIsland = function() {\n for (var c_5 = 0; c_5 < this.m_contacts.length; ++c_5) {\n var contact = this.m_contacts[c_5];\n this.m_world.postSolve(contact, contact.m_impulse);\n }\n };\n return Solver2;\n }()\n);\nSolver.TimeStep = TimeStep;\nvar Mat22 = (\n /** @class */\n function() {\n function Mat222(a2, b2, c2, d2) {\n if (typeof a2 === \"object\" && a2 !== null) {\n this.ex = Vec2.clone(a2);\n this.ey = Vec2.clone(b2);\n } else if (typeof a2 === \"number\") {\n this.ex = Vec2.neo(a2, c2);\n this.ey = Vec2.neo(b2, d2);\n } else {\n this.ex = Vec2.zero();\n this.ey = Vec2.zero();\n }\n }\n Mat222.prototype.toString = function() {\n return JSON.stringify(this);\n };\n Mat222.isValid = function(obj) {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey);\n };\n Mat222.assert = function(o) {\n };\n Mat222.prototype.set = function(a2, b2, c2, d2) {\n if (typeof a2 === \"number\" && typeof b2 === \"number\" && typeof c2 === \"number\" && typeof d2 === \"number\") {\n this.ex.setNum(a2, c2);\n this.ey.setNum(b2, d2);\n } else if (typeof a2 === \"object\" && typeof b2 === \"object\") {\n this.ex.setVec2(a2);\n this.ey.setVec2(b2);\n } else if (typeof a2 === \"object\") {\n this.ex.setVec2(a2.ex);\n this.ey.setVec2(a2.ey);\n } else ;\n };\n Mat222.prototype.setIdentity = function() {\n this.ex.x = 1;\n this.ey.x = 0;\n this.ex.y = 0;\n this.ey.y = 1;\n };\n Mat222.prototype.setZero = function() {\n this.ex.x = 0;\n this.ey.x = 0;\n this.ex.y = 0;\n this.ey.y = 0;\n };\n Mat222.prototype.getInverse = function() {\n var a2 = this.ex.x;\n var b2 = this.ey.x;\n var c2 = this.ex.y;\n var d2 = this.ey.y;\n var det = a2 * d2 - b2 * c2;\n if (det !== 0) {\n det = 1 / det;\n }\n var imx = new Mat222();\n imx.ex.x = det * d2;\n imx.ey.x = -det * b2;\n imx.ex.y = -det * c2;\n imx.ey.y = det * a2;\n return imx;\n };\n Mat222.prototype.solve = function(v3) {\n var a2 = this.ex.x;\n var b2 = this.ey.x;\n var c2 = this.ex.y;\n var d2 = this.ey.y;\n var det = a2 * d2 - b2 * c2;\n if (det !== 0) {\n det = 1 / det;\n }\n var w = Vec2.zero();\n w.x = det * (d2 * v3.x - b2 * v3.y);\n w.y = det * (a2 * v3.y - c2 * v3.x);\n return w;\n };\n Mat222.mul = function(mx, v3) {\n if (v3 && \"x\" in v3 && \"y\" in v3) {\n var x2 = mx.ex.x * v3.x + mx.ey.x * v3.y;\n var y = mx.ex.y * v3.x + mx.ey.y * v3.y;\n return Vec2.neo(x2, y);\n } else if (v3 && \"ex\" in v3 && \"ey\" in v3) {\n var a2 = mx.ex.x * v3.ex.x + mx.ey.x * v3.ex.y;\n var b2 = mx.ex.x * v3.ey.x + mx.ey.x * v3.ey.y;\n var c2 = mx.ex.y * v3.ex.x + mx.ey.y * v3.ex.y;\n var d2 = mx.ex.y * v3.ey.x + mx.ey.y * v3.ey.y;\n return new Mat222(a2, b2, c2, d2);\n }\n };\n Mat222.mulVec2 = function(mx, v3) {\n var x2 = mx.ex.x * v3.x + mx.ey.x * v3.y;\n var y = mx.ex.y * v3.x + mx.ey.y * v3.y;\n return Vec2.neo(x2, y);\n };\n Mat222.mulMat22 = function(mx, v3) {\n var a2 = mx.ex.x * v3.ex.x + mx.ey.x * v3.ex.y;\n var b2 = mx.ex.x * v3.ey.x + mx.ey.x * v3.ey.y;\n var c2 = mx.ex.y * v3.ex.x + mx.ey.y * v3.ex.y;\n var d2 = mx.ex.y * v3.ey.x + mx.ey.y * v3.ey.y;\n return new Mat222(a2, b2, c2, d2);\n };\n Mat222.mulT = function(mx, v3) {\n if (v3 && \"x\" in v3 && \"y\" in v3) {\n return Vec2.neo(Vec2.dot(v3, mx.ex), Vec2.dot(v3, mx.ey));\n } else if (v3 && \"ex\" in v3 && \"ey\" in v3) {\n var c1 = Vec2.neo(Vec2.dot(mx.ex, v3.ex), Vec2.dot(mx.ey, v3.ex));\n var c2 = Vec2.neo(Vec2.dot(mx.ex, v3.ey), Vec2.dot(mx.ey, v3.ey));\n return new Mat222(c1, c2);\n }\n };\n Mat222.mulTVec2 = function(mx, v3) {\n return Vec2.neo(Vec2.dot(v3, mx.ex), Vec2.dot(v3, mx.ey));\n };\n Mat222.mulTMat22 = function(mx, v3) {\n var c1 = Vec2.neo(Vec2.dot(mx.ex, v3.ex), Vec2.dot(mx.ey, v3.ex));\n var c2 = Vec2.neo(Vec2.dot(mx.ex, v3.ey), Vec2.dot(mx.ey, v3.ey));\n return new Mat222(c1, c2);\n };\n Mat222.abs = function(mx) {\n return new Mat222(Vec2.abs(mx.ex), Vec2.abs(mx.ey));\n };\n Mat222.add = function(mx1, mx2) {\n return new Mat222(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey));\n };\n return Mat222;\n }()\n);\nvar math_sqrt$2 = Math.sqrt;\nvar pointA$1 = vec2(0, 0);\nvar pointB$1 = vec2(0, 0);\nvar temp$3 = vec2(0, 0);\nvar cA$1 = vec2(0, 0);\nvar cB$1 = vec2(0, 0);\nvar dist = vec2(0, 0);\nvar planePoint$2 = vec2(0, 0);\nvar clipPoint$1 = vec2(0, 0);\nvar ManifoldType;\n(function(ManifoldType2) {\n ManifoldType2[ManifoldType2[\"e_unset\"] = -1] = \"e_unset\";\n ManifoldType2[ManifoldType2[\"e_circles\"] = 0] = \"e_circles\";\n ManifoldType2[ManifoldType2[\"e_faceA\"] = 1] = \"e_faceA\";\n ManifoldType2[ManifoldType2[\"e_faceB\"] = 2] = \"e_faceB\";\n})(ManifoldType || (ManifoldType = {}));\nvar ContactFeatureType;\n(function(ContactFeatureType2) {\n ContactFeatureType2[ContactFeatureType2[\"e_unset\"] = -1] = \"e_unset\";\n ContactFeatureType2[ContactFeatureType2[\"e_vertex\"] = 0] = \"e_vertex\";\n ContactFeatureType2[ContactFeatureType2[\"e_face\"] = 1] = \"e_face\";\n})(ContactFeatureType || (ContactFeatureType = {}));\nvar PointState;\n(function(PointState2) {\n PointState2[PointState2[\"nullState\"] = 0] = \"nullState\";\n PointState2[PointState2[\"addState\"] = 1] = \"addState\";\n PointState2[PointState2[\"persistState\"] = 2] = \"persistState\";\n PointState2[PointState2[\"removeState\"] = 3] = \"removeState\";\n})(PointState || (PointState = {}));\nvar ClipVertex = (\n /** @class */\n function() {\n function ClipVertex2() {\n this.v = vec2(0, 0);\n this.id = new ContactID();\n }\n ClipVertex2.prototype.set = function(o) {\n copyVec2(this.v, o.v);\n this.id.set(o.id);\n };\n ClipVertex2.prototype.recycle = function() {\n zeroVec2(this.v);\n this.id.recycle();\n };\n return ClipVertex2;\n }()\n);\nvar Manifold = (\n /** @class */\n function() {\n function Manifold2() {\n this.localNormal = vec2(0, 0);\n this.localPoint = vec2(0, 0);\n this.points = [new ManifoldPoint(), new ManifoldPoint()];\n this.pointCount = 0;\n }\n Manifold2.prototype.set = function(that) {\n this.type = that.type;\n copyVec2(this.localNormal, that.localNormal);\n copyVec2(this.localPoint, that.localPoint);\n this.pointCount = that.pointCount;\n this.points[0].set(that.points[0]);\n this.points[1].set(that.points[1]);\n };\n Manifold2.prototype.recycle = function() {\n this.type = ManifoldType.e_unset;\n zeroVec2(this.localNormal);\n zeroVec2(this.localPoint);\n this.pointCount = 0;\n this.points[0].recycle();\n this.points[1].recycle();\n };\n Manifold2.prototype.getWorldManifold = function(wm, xfA2, radiusA, xfB2, radiusB) {\n if (this.pointCount == 0) {\n return wm;\n }\n wm = wm || new WorldManifold();\n wm.pointCount = this.pointCount;\n var normal3 = wm.normal;\n var points = wm.points;\n var separations = wm.separations;\n switch (this.type) {\n case ManifoldType.e_circles: {\n setVec2(normal3, 1, 0);\n var manifoldPoint = this.points[0];\n transformVec2(pointA$1, xfA2, this.localPoint);\n transformVec2(pointB$1, xfB2, manifoldPoint.localPoint);\n subVec2(dist, pointB$1, pointA$1);\n var lengthSqr = lengthSqrVec2(dist);\n if (lengthSqr > EPSILON * EPSILON) {\n var length_1 = math_sqrt$2(lengthSqr);\n scaleVec2(normal3, 1 / length_1, dist);\n }\n combine2Vec2(cA$1, 1, pointA$1, radiusA, normal3);\n combine2Vec2(cB$1, 1, pointB$1, -radiusB, normal3);\n combine2Vec2(points[0], 0.5, cA$1, 0.5, cB$1);\n separations[0] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal3);\n break;\n }\n case ManifoldType.e_faceA: {\n rotVec2(normal3, xfA2.q, this.localNormal);\n transformVec2(planePoint$2, xfA2, this.localPoint);\n for (var i = 0; i < this.pointCount; ++i) {\n var manifoldPoint = this.points[i];\n transformVec2(clipPoint$1, xfB2, manifoldPoint.localPoint);\n combine2Vec2(cA$1, 1, clipPoint$1, radiusA - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal3), normal3);\n combine2Vec2(cB$1, 1, clipPoint$1, -radiusB, normal3);\n combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1);\n separations[i] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal3);\n }\n break;\n }\n case ManifoldType.e_faceB: {\n rotVec2(normal3, xfB2.q, this.localNormal);\n transformVec2(planePoint$2, xfB2, this.localPoint);\n for (var i = 0; i < this.pointCount; ++i) {\n var manifoldPoint = this.points[i];\n transformVec2(clipPoint$1, xfA2, manifoldPoint.localPoint);\n combine2Vec2(cB$1, 1, clipPoint$1, radiusB - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal3), normal3);\n combine2Vec2(cA$1, 1, clipPoint$1, -radiusA, normal3);\n combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1);\n separations[i] = dotVec2(subVec2(temp$3, cA$1, cB$1), normal3);\n }\n negVec2(normal3);\n break;\n }\n }\n return wm;\n };\n Manifold2.clipSegmentToLine = clipSegmentToLine;\n Manifold2.ClipVertex = ClipVertex;\n Manifold2.getPointStates = getPointStates;\n Manifold2.PointState = PointState;\n return Manifold2;\n }()\n);\nvar ManifoldPoint = (\n /** @class */\n function() {\n function ManifoldPoint2() {\n this.localPoint = vec2(0, 0);\n this.normalImpulse = 0;\n this.tangentImpulse = 0;\n this.id = new ContactID();\n }\n ManifoldPoint2.prototype.set = function(that) {\n copyVec2(this.localPoint, that.localPoint);\n this.normalImpulse = that.normalImpulse;\n this.tangentImpulse = that.tangentImpulse;\n this.id.set(that.id);\n };\n ManifoldPoint2.prototype.recycle = function() {\n zeroVec2(this.localPoint);\n this.normalImpulse = 0;\n this.tangentImpulse = 0;\n this.id.recycle();\n };\n return ManifoldPoint2;\n }()\n);\nvar ContactID = (\n /** @class */\n function() {\n function ContactID2() {\n this.key = -1;\n this.indexA = -1;\n this.indexB = -1;\n this.typeA = ContactFeatureType.e_unset;\n this.typeB = ContactFeatureType.e_unset;\n }\n ContactID2.prototype.setFeatures = function(indexA, typeA, indexB, typeB) {\n this.indexA = indexA;\n this.indexB = indexB;\n this.typeA = typeA;\n this.typeB = typeB;\n this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64;\n };\n ContactID2.prototype.set = function(that) {\n this.indexA = that.indexA;\n this.indexB = that.indexB;\n this.typeA = that.typeA;\n this.typeB = that.typeB;\n this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64;\n };\n ContactID2.prototype.swapFeatures = function() {\n var indexA = this.indexA;\n var indexB = this.indexB;\n var typeA = this.typeA;\n var typeB = this.typeB;\n this.indexA = indexB;\n this.indexB = indexA;\n this.typeA = typeB;\n this.typeB = typeA;\n this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64;\n };\n ContactID2.prototype.recycle = function() {\n this.indexA = 0;\n this.indexB = 0;\n this.typeA = ContactFeatureType.e_unset;\n this.typeB = ContactFeatureType.e_unset;\n this.key = -1;\n };\n return ContactID2;\n }()\n);\nvar WorldManifold = (\n /** @class */\n function() {\n function WorldManifold2() {\n this.normal = vec2(0, 0);\n this.points = [vec2(0, 0), vec2(0, 0)];\n this.separations = [0, 0];\n this.pointCount = 0;\n }\n WorldManifold2.prototype.recycle = function() {\n zeroVec2(this.normal);\n zeroVec2(this.points[0]);\n zeroVec2(this.points[1]);\n this.separations[0] = 0;\n this.separations[1] = 0;\n this.pointCount = 0;\n };\n return WorldManifold2;\n }()\n);\nfunction getPointStates(state1, state2, manifold1, manifold2) {\n for (var i = 0; i < manifold1.pointCount; ++i) {\n var id = manifold1.points[i].id;\n state1[i] = PointState.removeState;\n for (var j = 0; j < manifold2.pointCount; ++j) {\n if (manifold2.points[j].id.key === id.key) {\n state1[i] = PointState.persistState;\n break;\n }\n }\n }\n for (var i = 0; i < manifold2.pointCount; ++i) {\n var id = manifold2.points[i].id;\n state2[i] = PointState.addState;\n for (var j = 0; j < manifold1.pointCount; ++j) {\n if (manifold1.points[j].id.key === id.key) {\n state2[i] = PointState.persistState;\n break;\n }\n }\n }\n}\nfunction clipSegmentToLine(vOut, vIn, normal3, offset, vertexIndexA) {\n var numOut = 0;\n var distance0 = dotVec2(normal3, vIn[0].v) - offset;\n var distance1 = dotVec2(normal3, vIn[1].v) - offset;\n if (distance0 <= 0)\n vOut[numOut++].set(vIn[0]);\n if (distance1 <= 0)\n vOut[numOut++].set(vIn[1]);\n if (distance0 * distance1 < 0) {\n var interp = distance0 / (distance0 - distance1);\n combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v);\n vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face);\n ++numOut;\n }\n return numOut;\n}\nvar math_sqrt$1 = Math.sqrt;\nvar math_max$2 = Math.max;\nvar math_min$4 = Math.min;\nvar contactPool = new Pool({\n create: function() {\n return new Contact();\n },\n release: function(contact) {\n contact.recycle();\n }\n});\nvar oldManifold = new Manifold();\nvar worldManifold = new WorldManifold();\nvar ContactEdge = (\n /** @class */\n function() {\n function ContactEdge2(contact) {\n this.prev = null;\n this.next = null;\n this.other = null;\n this.contact = contact;\n }\n ContactEdge2.prototype.recycle = function() {\n this.prev = null;\n this.next = null;\n this.other = null;\n };\n return ContactEdge2;\n }()\n);\nfunction mixFriction(friction1, friction2) {\n return math_sqrt$1(friction1 * friction2);\n}\nfunction mixRestitution(restitution1, restitution2) {\n return restitution1 > restitution2 ? restitution1 : restitution2;\n}\nvar s_registers = [];\nvar VelocityConstraintPoint = (\n /** @class */\n function() {\n function VelocityConstraintPoint2() {\n this.rA = vec2(0, 0);\n this.rB = vec2(0, 0);\n this.normalImpulse = 0;\n this.tangentImpulse = 0;\n this.normalMass = 0;\n this.tangentMass = 0;\n this.velocityBias = 0;\n }\n VelocityConstraintPoint2.prototype.recycle = function() {\n zeroVec2(this.rA);\n zeroVec2(this.rB);\n this.normalImpulse = 0;\n this.tangentImpulse = 0;\n this.normalMass = 0;\n this.tangentMass = 0;\n this.velocityBias = 0;\n };\n return VelocityConstraintPoint2;\n }()\n);\nvar cA = vec2(0, 0);\nvar vA = vec2(0, 0);\nvar cB = vec2(0, 0);\nvar vB = vec2(0, 0);\nvar tangent$1 = vec2(0, 0);\nvar xfA = transform(0, 0, 0);\nvar xfB = transform(0, 0, 0);\nvar pointA = vec2(0, 0);\nvar pointB = vec2(0, 0);\nvar clipPoint = vec2(0, 0);\nvar planePoint$1 = vec2(0, 0);\nvar rA = vec2(0, 0);\nvar rB = vec2(0, 0);\nvar P$1 = vec2(0, 0);\nvar normal$2 = vec2(0, 0);\nvar point = vec2(0, 0);\nvar dv = vec2(0, 0);\nvar dv1 = vec2(0, 0);\nvar dv2 = vec2(0, 0);\nvar b = vec2(0, 0);\nvar a = vec2(0, 0);\nvar x = vec2(0, 0);\nvar d = vec2(0, 0);\nvar P1 = vec2(0, 0);\nvar P2 = vec2(0, 0);\nvar temp$2 = vec2(0, 0);\nvar Contact = (\n /** @class */\n function() {\n function Contact2() {\n this.m_nodeA = new ContactEdge(this);\n this.m_nodeB = new ContactEdge(this);\n this.m_fixtureA = null;\n this.m_fixtureB = null;\n this.m_indexA = -1;\n this.m_indexB = -1;\n this.m_evaluateFcn = null;\n this.m_manifold = new Manifold();\n this.m_prev = null;\n this.m_next = null;\n this.m_toi = 1;\n this.m_toiCount = 0;\n this.m_toiFlag = false;\n this.m_friction = 0;\n this.m_restitution = 0;\n this.m_tangentSpeed = 0;\n this.m_enabledFlag = true;\n this.m_islandFlag = false;\n this.m_touchingFlag = false;\n this.m_filterFlag = false;\n this.m_bulletHitFlag = false;\n this.m_impulse = new ContactImpulse(this);\n this.v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()];\n this.v_normal = vec2(0, 0);\n this.v_normalMass = new Mat22();\n this.v_K = new Mat22();\n this.v_pointCount = 0;\n this.v_tangentSpeed = 0;\n this.v_friction = 0;\n this.v_restitution = 0;\n this.v_invMassA = 0;\n this.v_invMassB = 0;\n this.v_invIA = 0;\n this.v_invIB = 0;\n this.p_localPoints = [vec2(0, 0), vec2(0, 0)];\n this.p_localNormal = vec2(0, 0);\n this.p_localPoint = vec2(0, 0);\n this.p_localCenterA = vec2(0, 0);\n this.p_localCenterB = vec2(0, 0);\n this.p_type = ManifoldType.e_unset;\n this.p_radiusA = 0;\n this.p_radiusB = 0;\n this.p_pointCount = 0;\n this.p_invMassA = 0;\n this.p_invMassB = 0;\n this.p_invIA = 0;\n this.p_invIB = 0;\n }\n Contact2.prototype.initialize = function(fA, indexA, fB, indexB, evaluateFcn) {\n this.m_fixtureA = fA;\n this.m_fixtureB = fB;\n this.m_indexA = indexA;\n this.m_indexB = indexB;\n this.m_evaluateFcn = evaluateFcn;\n this.m_friction = mixFriction(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction);\n this.m_restitution = mixRestitution(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution);\n };\n Contact2.prototype.recycle = function() {\n this.m_nodeA.recycle();\n this.m_nodeB.recycle();\n this.m_fixtureA = null;\n this.m_fixtureB = null;\n this.m_indexA = -1;\n this.m_indexB = -1;\n this.m_evaluateFcn = null;\n this.m_manifold.recycle();\n this.m_prev = null;\n this.m_next = null;\n this.m_toi = 1;\n this.m_toiCount = 0;\n this.m_toiFlag = false;\n this.m_friction = 0;\n this.m_restitution = 0;\n this.m_tangentSpeed = 0;\n this.m_enabledFlag = true;\n this.m_islandFlag = false;\n this.m_touchingFlag = false;\n this.m_filterFlag = false;\n this.m_bulletHitFlag = false;\n this.m_impulse.recycle();\n for (var _i = 0, _a2 = this.v_points; _i < _a2.length; _i++) {\n var point_1 = _a2[_i];\n point_1.recycle();\n }\n zeroVec2(this.v_normal);\n this.v_normalMass.setZero();\n this.v_K.setZero();\n this.v_pointCount = 0;\n this.v_tangentSpeed = 0;\n this.v_friction = 0;\n this.v_restitution = 0;\n this.v_invMassA = 0;\n this.v_invMassB = 0;\n this.v_invIA = 0;\n this.v_invIB = 0;\n for (var _b = 0, _c = this.p_localPoints; _b < _c.length; _b++) {\n var point_2 = _c[_b];\n zeroVec2(point_2);\n }\n zeroVec2(this.p_localNormal);\n zeroVec2(this.p_localPoint);\n zeroVec2(this.p_localCenterA);\n zeroVec2(this.p_localCenterB);\n this.p_type = ManifoldType.e_unset;\n this.p_radiusA = 0;\n this.p_radiusB = 0;\n this.p_pointCount = 0;\n this.p_invMassA = 0;\n this.p_invMassB = 0;\n this.p_invIA = 0;\n this.p_invIB = 0;\n };\n Contact2.prototype.initConstraint = function(step) {\n var fixtureA = this.m_fixtureA;\n var fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null)\n return;\n var bodyA = fixtureA.m_body;\n var bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null)\n return;\n var shapeA = fixtureA.m_shape;\n var shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null)\n return;\n var manifold = this.m_manifold;\n var pointCount = manifold.pointCount;\n this.v_invMassA = bodyA.m_invMass;\n this.v_invMassB = bodyB.m_invMass;\n this.v_invIA = bodyA.m_invI;\n this.v_invIB = bodyB.m_invI;\n this.v_friction = this.m_friction;\n this.v_restitution = this.m_restitution;\n this.v_tangentSpeed = this.m_tangentSpeed;\n this.v_pointCount = pointCount;\n this.v_K.setZero();\n this.v_normalMass.setZero();\n this.p_invMassA = bodyA.m_invMass;\n this.p_invMassB = bodyB.m_invMass;\n this.p_invIA = bodyA.m_invI;\n this.p_invIB = bodyB.m_invI;\n copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter);\n copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter);\n this.p_radiusA = shapeA.m_radius;\n this.p_radiusB = shapeB.m_radius;\n this.p_type = manifold.type;\n copyVec2(this.p_localNormal, manifold.localNormal);\n copyVec2(this.p_localPoint, manifold.localPoint);\n this.p_pointCount = pointCount;\n for (var j = 0; j < SettingsInternal.maxManifoldPoints; ++j) {\n this.v_points[j].recycle();\n zeroVec2(this.p_localPoints[j]);\n }\n for (var j = 0; j < pointCount; ++j) {\n var cp = manifold.points[j];\n var vcp = this.v_points[j];\n if (step.warmStarting) {\n vcp.normalImpulse = step.dtRatio * cp.normalImpulse;\n vcp.tangentImpulse = step.dtRatio * cp.tangentImpulse;\n }\n copyVec2(this.p_localPoints[j], cp.localPoint);\n }\n };\n Contact2.prototype.getManifold = function() {\n return this.m_manifold;\n };\n Contact2.prototype.getWorldManifold = function(worldManifold2) {\n var fixtureA = this.m_fixtureA;\n var fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null)\n return;\n var bodyA = fixtureA.m_body;\n var bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null)\n return;\n var shapeA = fixtureA.m_shape;\n var shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null)\n return;\n return this.m_manifold.getWorldManifold(worldManifold2, bodyA.getTransform(), shapeA.m_radius, bodyB.getTransform(), shapeB.m_radius);\n };\n Contact2.prototype.setEnabled = function(flag) {\n this.m_enabledFlag = !!flag;\n };\n Contact2.prototype.isEnabled = function() {\n return this.m_enabledFlag;\n };\n Contact2.prototype.isTouching = function() {\n return this.m_touchingFlag;\n };\n Contact2.prototype.getNext = function() {\n return this.m_next;\n };\n Contact2.prototype.getFixtureA = function() {\n return this.m_fixtureA;\n };\n Contact2.prototype.getFixtureB = function() {\n return this.m_fixtureB;\n };\n Contact2.prototype.getChildIndexA = function() {\n return this.m_indexA;\n };\n Contact2.prototype.getChildIndexB = function() {\n return this.m_indexB;\n };\n Contact2.prototype.flagForFiltering = function() {\n this.m_filterFlag = true;\n };\n Contact2.prototype.setFriction = function(friction) {\n this.m_friction = friction;\n };\n Contact2.prototype.getFriction = function() {\n return this.m_friction;\n };\n Contact2.prototype.resetFriction = function() {\n var fixtureA = this.m_fixtureA;\n var fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null)\n return;\n this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction);\n };\n Contact2.prototype.setRestitution = function(restitution) {\n this.m_restitution = restitution;\n };\n Contact2.prototype.getRestitution = function() {\n return this.m_restitution;\n };\n Contact2.prototype.resetRestitution = function() {\n var fixtureA = this.m_fixtureA;\n var fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null)\n return;\n this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution);\n };\n Contact2.prototype.setTangentSpeed = function(speed) {\n this.m_tangentSpeed = speed;\n };\n Contact2.prototype.getTangentSpeed = function() {\n return this.m_tangentSpeed;\n };\n Contact2.prototype.evaluate = function(manifold, xfA2, xfB2) {\n var fixtureA = this.m_fixtureA;\n var fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null)\n return;\n this.m_evaluateFcn(manifold, xfA2, fixtureA, this.m_indexA, xfB2, fixtureB, this.m_indexB);\n };\n Contact2.prototype.update = function(listener) {\n var fixtureA = this.m_fixtureA;\n var fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null)\n return;\n var bodyA = fixtureA.m_body;\n var bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null)\n return;\n var shapeA = fixtureA.m_shape;\n var shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null)\n return;\n this.m_enabledFlag = true;\n var touching = false;\n var wasTouching = this.m_touchingFlag;\n var sensorA = fixtureA.m_isSensor;\n var sensorB = fixtureB.m_isSensor;\n var sensor = sensorA || sensorB;\n var xfA2 = bodyA.m_xf;\n var xfB2 = bodyB.m_xf;\n if (sensor) {\n touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA2, xfB2);\n this.m_manifold.pointCount = 0;\n } else {\n oldManifold.recycle();\n oldManifold.set(this.m_manifold);\n this.m_manifold.recycle();\n this.evaluate(this.m_manifold, xfA2, xfB2);\n touching = this.m_manifold.pointCount > 0;\n for (var i = 0; i < this.m_manifold.pointCount; ++i) {\n var nmp = this.m_manifold.points[i];\n nmp.normalImpulse = 0;\n nmp.tangentImpulse = 0;\n for (var j = 0; j < oldManifold.pointCount; ++j) {\n var omp = oldManifold.points[j];\n if (omp.id.key === nmp.id.key) {\n nmp.normalImpulse = omp.normalImpulse;\n nmp.tangentImpulse = omp.tangentImpulse;\n break;\n }\n }\n }\n if (touching !== wasTouching) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n }\n this.m_touchingFlag = touching;\n var hasListener = typeof listener === \"object\" && listener !== null;\n if (!wasTouching && touching && hasListener) {\n listener.beginContact(this);\n }\n if (wasTouching && !touching && hasListener) {\n listener.endContact(this);\n }\n if (!sensor && touching && hasListener && oldManifold) {\n listener.preSolve(this, oldManifold);\n }\n };\n Contact2.prototype.solvePositionConstraint = function(step) {\n return this._solvePositionConstraint(step, null, null);\n };\n Contact2.prototype.solvePositionConstraintTOI = function(step, toiA, toiB) {\n return this._solvePositionConstraint(step, toiA, toiB);\n };\n Contact2.prototype._solvePositionConstraint = function(step, toiA, toiB) {\n var toi = toiA !== null && toiB !== null ? true : false;\n var minSeparation = 0;\n var fixtureA = this.m_fixtureA;\n var fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null)\n return minSeparation;\n var bodyA = fixtureA.m_body;\n var bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null)\n return minSeparation;\n var positionA = bodyA.c_position;\n var positionB = bodyB.c_position;\n var localCenterA = this.p_localCenterA;\n var localCenterB = this.p_localCenterB;\n var mA = 0;\n var iA = 0;\n if (!toi || bodyA === toiA || bodyA === toiB) {\n mA = this.p_invMassA;\n iA = this.p_invIA;\n }\n var mB = 0;\n var iB = 0;\n if (!toi || bodyB === toiA || bodyB === toiB) {\n mB = this.p_invMassB;\n iB = this.p_invIB;\n }\n copyVec2(cA, positionA.c);\n var aA = positionA.a;\n copyVec2(cB, positionB.c);\n var aB = positionB.a;\n for (var j = 0; j < this.p_pointCount; ++j) {\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n var separation = void 0;\n switch (this.p_type) {\n case ManifoldType.e_circles: {\n transformVec2(pointA, xfA, this.p_localPoint);\n transformVec2(pointB, xfB, this.p_localPoints[0]);\n subVec2(normal$2, pointB, pointA);\n normalizeVec2(normal$2);\n combine2Vec2(point, 0.5, pointA, 0.5, pointB);\n separation = dotVec2(pointB, normal$2) - dotVec2(pointA, normal$2) - this.p_radiusA - this.p_radiusB;\n break;\n }\n case ManifoldType.e_faceA: {\n rotVec2(normal$2, xfA.q, this.p_localNormal);\n transformVec2(planePoint$1, xfA, this.p_localPoint);\n transformVec2(clipPoint, xfB, this.p_localPoints[j]);\n separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB;\n copyVec2(point, clipPoint);\n break;\n }\n case ManifoldType.e_faceB: {\n rotVec2(normal$2, xfB.q, this.p_localNormal);\n transformVec2(planePoint$1, xfB, this.p_localPoint);\n transformVec2(clipPoint, xfA, this.p_localPoints[j]);\n separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB;\n copyVec2(point, clipPoint);\n negVec2(normal$2);\n break;\n }\n default: {\n return minSeparation;\n }\n }\n subVec2(rA, point, cA);\n subVec2(rB, point, cB);\n minSeparation = math_min$4(minSeparation, separation);\n var baumgarte = toi ? SettingsInternal.toiBaugarte : SettingsInternal.baumgarte;\n var linearSlop = SettingsInternal.linearSlop;\n var maxLinearCorrection = SettingsInternal.maxLinearCorrection;\n var C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0);\n var rnA = crossVec2Vec2(rA, normal$2);\n var rnB = crossVec2Vec2(rB, normal$2);\n var K = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n var impulse = K > 0 ? -C / K : 0;\n scaleVec2(P$1, impulse, normal$2);\n minusScaleVec2(cA, mA, P$1);\n aA -= iA * crossVec2Vec2(rA, P$1);\n plusScaleVec2(cB, mB, P$1);\n aB += iB * crossVec2Vec2(rB, P$1);\n }\n copyVec2(positionA.c, cA);\n positionA.a = aA;\n copyVec2(positionB.c, cB);\n positionB.a = aB;\n return minSeparation;\n };\n Contact2.prototype.initVelocityConstraint = function(step) {\n var fixtureA = this.m_fixtureA;\n var fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null)\n return;\n var bodyA = fixtureA.m_body;\n var bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null)\n return;\n var velocityA = bodyA.c_velocity;\n var velocityB = bodyB.c_velocity;\n var positionA = bodyA.c_position;\n var positionB = bodyB.c_position;\n var radiusA = this.p_radiusA;\n var radiusB = this.p_radiusB;\n var manifold = this.m_manifold;\n var mA = this.v_invMassA;\n var mB = this.v_invMassB;\n var iA = this.v_invIA;\n var iB = this.v_invIB;\n var localCenterA = this.p_localCenterA;\n var localCenterB = this.p_localCenterB;\n copyVec2(cA, positionA.c);\n var aA = positionA.a;\n copyVec2(vA, velocityA.v);\n var wA = velocityA.w;\n copyVec2(cB, positionB.c);\n var aB = positionB.a;\n copyVec2(vB, velocityB.v);\n var wB = velocityB.w;\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n worldManifold.recycle();\n manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB);\n copyVec2(this.v_normal, worldManifold.normal);\n for (var j = 0; j < this.v_pointCount; ++j) {\n var vcp = this.v_points[j];\n var wmp = worldManifold.points[j];\n subVec2(vcp.rA, wmp, cA);\n subVec2(vcp.rB, wmp, cB);\n var rnA = crossVec2Vec2(vcp.rA, this.v_normal);\n var rnB = crossVec2Vec2(vcp.rB, this.v_normal);\n var kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n vcp.normalMass = kNormal > 0 ? 1 / kNormal : 0;\n crossVec2Num(tangent$1, this.v_normal, 1);\n var rtA = crossVec2Vec2(vcp.rA, tangent$1);\n var rtB = crossVec2Vec2(vcp.rB, tangent$1);\n var kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB;\n vcp.tangentMass = kTangent > 0 ? 1 / kTangent : 0;\n vcp.velocityBias = 0;\n var vRel = 0;\n vRel += dotVec2(this.v_normal, vB);\n vRel += dotVec2(this.v_normal, crossNumVec2(temp$2, wB, vcp.rB));\n vRel -= dotVec2(this.v_normal, vA);\n vRel -= dotVec2(this.v_normal, crossNumVec2(temp$2, wA, vcp.rA));\n if (vRel < -SettingsInternal.velocityThreshold) {\n vcp.velocityBias = -this.v_restitution * vRel;\n }\n }\n if (this.v_pointCount == 2 && step.blockSolve) {\n var vcp1 = this.v_points[0];\n var vcp2 = this.v_points[1];\n var rn1A = crossVec2Vec2(vcp1.rA, this.v_normal);\n var rn1B = crossVec2Vec2(vcp1.rB, this.v_normal);\n var rn2A = crossVec2Vec2(vcp2.rA, this.v_normal);\n var rn2B = crossVec2Vec2(vcp2.rB, this.v_normal);\n var k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B;\n var k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B;\n var k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B;\n var k_maxConditionNumber = 1e3;\n if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) {\n this.v_K.ex.setNum(k11, k12);\n this.v_K.ey.setNum(k12, k22);\n var a_1 = this.v_K.ex.x;\n var b_1 = this.v_K.ey.x;\n var c2 = this.v_K.ex.y;\n var d_1 = this.v_K.ey.y;\n var det = a_1 * d_1 - b_1 * c2;\n if (det !== 0) {\n det = 1 / det;\n }\n this.v_normalMass.ex.x = det * d_1;\n this.v_normalMass.ey.x = -det * b_1;\n this.v_normalMass.ex.y = -det * c2;\n this.v_normalMass.ey.y = det * a_1;\n } else {\n this.v_pointCount = 1;\n }\n }\n copyVec2(positionA.c, cA);\n positionA.a = aA;\n copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n copyVec2(positionB.c, cB);\n positionB.a = aB;\n copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n };\n Contact2.prototype.warmStartConstraint = function(step) {\n var fixtureA = this.m_fixtureA;\n var fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null)\n return;\n var bodyA = fixtureA.m_body;\n var bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null)\n return;\n var velocityA = bodyA.c_velocity;\n var velocityB = bodyB.c_velocity;\n var mA = this.v_invMassA;\n var iA = this.v_invIA;\n var mB = this.v_invMassB;\n var iB = this.v_invIB;\n copyVec2(vA, velocityA.v);\n var wA = velocityA.w;\n copyVec2(vB, velocityB.v);\n var wB = velocityB.w;\n copyVec2(normal$2, this.v_normal);\n crossVec2Num(tangent$1, normal$2, 1);\n for (var j = 0; j < this.v_pointCount; ++j) {\n var vcp = this.v_points[j];\n combine2Vec2(P$1, vcp.normalImpulse, normal$2, vcp.tangentImpulse, tangent$1);\n wA -= iA * crossVec2Vec2(vcp.rA, P$1);\n minusScaleVec2(vA, mA, P$1);\n wB += iB * crossVec2Vec2(vcp.rB, P$1);\n plusScaleVec2(vB, mB, P$1);\n }\n copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n };\n Contact2.prototype.storeConstraintImpulses = function(step) {\n var manifold = this.m_manifold;\n for (var j = 0; j < this.v_pointCount; ++j) {\n manifold.points[j].normalImpulse = this.v_points[j].normalImpulse;\n manifold.points[j].tangentImpulse = this.v_points[j].tangentImpulse;\n }\n };\n Contact2.prototype.solveVelocityConstraint = function(step) {\n var fixtureA = this.m_fixtureA;\n var fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null)\n return;\n var bodyA = fixtureA.m_body;\n var bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null)\n return;\n var velocityA = bodyA.c_velocity;\n var velocityB = bodyB.c_velocity;\n var mA = this.v_invMassA;\n var iA = this.v_invIA;\n var mB = this.v_invMassB;\n var iB = this.v_invIB;\n copyVec2(vA, velocityA.v);\n var wA = velocityA.w;\n copyVec2(vB, velocityB.v);\n var wB = velocityB.w;\n copyVec2(normal$2, this.v_normal);\n crossVec2Num(tangent$1, normal$2, 1);\n var friction = this.v_friction;\n for (var j = 0; j < this.v_pointCount; ++j) {\n var vcp = this.v_points[j];\n zeroVec2(dv);\n plusVec2(dv, vB);\n plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB));\n minusVec2(dv, vA);\n minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA));\n var vt = dotVec2(dv, tangent$1) - this.v_tangentSpeed;\n var lambda = vcp.tangentMass * -vt;\n var maxFriction = friction * vcp.normalImpulse;\n var newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction);\n lambda = newImpulse - vcp.tangentImpulse;\n vcp.tangentImpulse = newImpulse;\n scaleVec2(P$1, lambda, tangent$1);\n minusScaleVec2(vA, mA, P$1);\n wA -= iA * crossVec2Vec2(vcp.rA, P$1);\n plusScaleVec2(vB, mB, P$1);\n wB += iB * crossVec2Vec2(vcp.rB, P$1);\n }\n if (this.v_pointCount == 1 || step.blockSolve == false) {\n for (var i = 0; i < this.v_pointCount; ++i) {\n var vcp = this.v_points[i];\n zeroVec2(dv);\n plusVec2(dv, vB);\n plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB));\n minusVec2(dv, vA);\n minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA));\n var vn = dotVec2(dv, normal$2);\n var lambda = -vcp.normalMass * (vn - vcp.velocityBias);\n var newImpulse = math_max$2(vcp.normalImpulse + lambda, 0);\n lambda = newImpulse - vcp.normalImpulse;\n vcp.normalImpulse = newImpulse;\n scaleVec2(P$1, lambda, normal$2);\n minusScaleVec2(vA, mA, P$1);\n wA -= iA * crossVec2Vec2(vcp.rA, P$1);\n plusScaleVec2(vB, mB, P$1);\n wB += iB * crossVec2Vec2(vcp.rB, P$1);\n }\n } else {\n var vcp1 = this.v_points[0];\n var vcp2 = this.v_points[1];\n setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse);\n zeroVec2(dv1);\n plusVec2(dv1, vB);\n plusVec2(dv1, crossNumVec2(temp$2, wB, vcp1.rB));\n minusVec2(dv1, vA);\n minusVec2(dv1, crossNumVec2(temp$2, wA, vcp1.rA));\n zeroVec2(dv2);\n plusVec2(dv2, vB);\n plusVec2(dv2, crossNumVec2(temp$2, wB, vcp2.rB));\n minusVec2(dv2, vA);\n minusVec2(dv2, crossNumVec2(temp$2, wA, vcp2.rA));\n var vn1 = dotVec2(dv1, normal$2);\n var vn2 = dotVec2(dv2, normal$2);\n setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias);\n b.x -= this.v_K.ex.x * a.x + this.v_K.ey.x * a.y;\n b.y -= this.v_K.ex.y * a.x + this.v_K.ey.y * a.y;\n while (true) {\n zeroVec2(x);\n x.x = -(this.v_normalMass.ex.x * b.x + this.v_normalMass.ey.x * b.y);\n x.y = -(this.v_normalMass.ex.y * b.x + this.v_normalMass.ey.y * b.y);\n if (x.x >= 0 && x.y >= 0) {\n subVec2(d, x, a);\n scaleVec2(P1, d.x, normal$2);\n scaleVec2(P2, d.y, normal$2);\n combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2));\n combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2));\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n break;\n }\n x.x = -vcp1.normalMass * b.x;\n x.y = 0;\n vn1 = 0;\n vn2 = this.v_K.ex.y * x.x + b.y;\n if (x.x >= 0 && vn2 >= 0) {\n subVec2(d, x, a);\n scaleVec2(P1, d.x, normal$2);\n scaleVec2(P2, d.y, normal$2);\n combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2));\n combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2));\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n break;\n }\n x.x = 0;\n x.y = -vcp2.normalMass * b.y;\n vn1 = this.v_K.ey.x * x.y + b.x;\n vn2 = 0;\n if (x.y >= 0 && vn1 >= 0) {\n subVec2(d, x, a);\n scaleVec2(P1, d.x, normal$2);\n scaleVec2(P2, d.y, normal$2);\n combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2));\n combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2));\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n break;\n }\n x.x = 0;\n x.y = 0;\n vn1 = b.x;\n vn2 = b.y;\n if (vn1 >= 0 && vn2 >= 0) {\n subVec2(d, x, a);\n scaleVec2(P1, d.x, normal$2);\n scaleVec2(P2, d.y, normal$2);\n combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2));\n combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2));\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n break;\n }\n break;\n }\n }\n copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n };\n Contact2.addType = function(type1, type2, callback) {\n s_registers[type1] = s_registers[type1] || {};\n s_registers[type1][type2] = callback;\n };\n Contact2.create = function(fixtureA, indexA, fixtureB, indexB) {\n var typeA = fixtureA.m_shape.m_type;\n var typeB = fixtureB.m_shape.m_type;\n var contact = contactPool.allocate();\n var evaluateFcn;\n if (evaluateFcn = s_registers[typeA] && s_registers[typeA][typeB]) {\n contact.initialize(fixtureA, indexA, fixtureB, indexB, evaluateFcn);\n } else if (evaluateFcn = s_registers[typeB] && s_registers[typeB][typeA]) {\n contact.initialize(fixtureB, indexB, fixtureA, indexA, evaluateFcn);\n } else {\n return null;\n }\n fixtureA = contact.m_fixtureA;\n fixtureB = contact.m_fixtureB;\n indexA = contact.getChildIndexA();\n indexB = contact.getChildIndexB();\n var bodyA = fixtureA.m_body;\n var bodyB = fixtureB.m_body;\n contact.m_nodeA.contact = contact;\n contact.m_nodeA.other = bodyB;\n contact.m_nodeA.prev = null;\n contact.m_nodeA.next = bodyA.m_contactList;\n if (bodyA.m_contactList != null) {\n bodyA.m_contactList.prev = contact.m_nodeA;\n }\n bodyA.m_contactList = contact.m_nodeA;\n contact.m_nodeB.contact = contact;\n contact.m_nodeB.other = bodyA;\n contact.m_nodeB.prev = null;\n contact.m_nodeB.next = bodyB.m_contactList;\n if (bodyB.m_contactList != null) {\n bodyB.m_contactList.prev = contact.m_nodeB;\n }\n bodyB.m_contactList = contact.m_nodeB;\n if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n return contact;\n };\n Contact2.destroy = function(contact, listener) {\n var fixtureA = contact.m_fixtureA;\n var fixtureB = contact.m_fixtureB;\n if (fixtureA === null || fixtureB === null)\n return;\n var bodyA = fixtureA.m_body;\n var bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null)\n return;\n if (contact.isTouching()) {\n listener.endContact(contact);\n }\n if (contact.m_nodeA.prev) {\n contact.m_nodeA.prev.next = contact.m_nodeA.next;\n }\n if (contact.m_nodeA.next) {\n contact.m_nodeA.next.prev = contact.m_nodeA.prev;\n }\n if (contact.m_nodeA == bodyA.m_contactList) {\n bodyA.m_contactList = contact.m_nodeA.next;\n }\n if (contact.m_nodeB.prev) {\n contact.m_nodeB.prev.next = contact.m_nodeB.next;\n }\n if (contact.m_nodeB.next) {\n contact.m_nodeB.next.prev = contact.m_nodeB.prev;\n }\n if (contact.m_nodeB == bodyB.m_contactList) {\n bodyB.m_contactList = contact.m_nodeB.next;\n }\n if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n contactPool.release(contact);\n };\n return Contact2;\n }()\n);\nvar DEFAULTS$b = {\n gravity: Vec2.zero(),\n allowSleep: true,\n warmStarting: true,\n continuousPhysics: true,\n subStepping: false,\n blockSolve: true,\n velocityIterations: 8,\n positionIterations: 3\n};\nvar World = (\n /** @class */\n function() {\n function World2(def) {\n if (!(this instanceof World2)) {\n return new World2(def);\n }\n this.s_step = new TimeStep();\n if (!def) {\n def = {};\n } else if (Vec2.isValid(def)) {\n def = { gravity: def };\n }\n def = options(def, DEFAULTS$b);\n this.m_solver = new Solver(this);\n this.m_broadPhase = new BroadPhase();\n this.m_contactList = null;\n this.m_contactCount = 0;\n this.m_bodyList = null;\n this.m_bodyCount = 0;\n this.m_jointList = null;\n this.m_jointCount = 0;\n this.m_stepComplete = true;\n this.m_allowSleep = def.allowSleep;\n this.m_gravity = Vec2.clone(def.gravity);\n this.m_clearForces = true;\n this.m_newFixture = false;\n this.m_locked = false;\n this.m_warmStarting = def.warmStarting;\n this.m_continuousPhysics = def.continuousPhysics;\n this.m_subStepping = def.subStepping;\n this.m_blockSolve = def.blockSolve;\n this.m_velocityIterations = def.velocityIterations;\n this.m_positionIterations = def.positionIterations;\n this.m_t = 0;\n this.m_step_callback = [];\n }\n World2.prototype._serialize = function() {\n var bodies = [];\n var joints = [];\n for (var b2 = this.getBodyList(); b2; b2 = b2.getNext()) {\n bodies.push(b2);\n }\n for (var j = this.getJointList(); j; j = j.getNext()) {\n if (typeof j._serialize === \"function\") {\n joints.push(j);\n }\n }\n return {\n gravity: this.m_gravity,\n bodies,\n joints\n };\n };\n World2._deserialize = function(data, context, restore) {\n if (!data) {\n return new World2();\n }\n var world = new World2(data.gravity);\n if (data.bodies) {\n for (var i = data.bodies.length - 1; i >= 0; i -= 1) {\n world._addBody(restore(Body, data.bodies[i], world));\n }\n }\n if (data.joints) {\n for (var i = data.joints.length - 1; i >= 0; i--) {\n world.createJoint(restore(Joint, data.joints[i], world));\n }\n }\n return world;\n };\n World2.prototype.getBodyList = function() {\n return this.m_bodyList;\n };\n World2.prototype.getJointList = function() {\n return this.m_jointList;\n };\n World2.prototype.getContactList = function() {\n return this.m_contactList;\n };\n World2.prototype.getBodyCount = function() {\n return this.m_bodyCount;\n };\n World2.prototype.getJointCount = function() {\n return this.m_jointCount;\n };\n World2.prototype.getContactCount = function() {\n return this.m_contactCount;\n };\n World2.prototype.setGravity = function(gravity) {\n this.m_gravity.set(gravity);\n };\n World2.prototype.getGravity = function() {\n return this.m_gravity;\n };\n World2.prototype.isLocked = function() {\n return this.m_locked;\n };\n World2.prototype.setAllowSleeping = function(flag) {\n if (flag == this.m_allowSleep) {\n return;\n }\n this.m_allowSleep = flag;\n if (this.m_allowSleep == false) {\n for (var b2 = this.m_bodyList; b2; b2 = b2.m_next) {\n b2.setAwake(true);\n }\n }\n };\n World2.prototype.getAllowSleeping = function() {\n return this.m_allowSleep;\n };\n World2.prototype.setWarmStarting = function(flag) {\n this.m_warmStarting = flag;\n };\n World2.prototype.getWarmStarting = function() {\n return this.m_warmStarting;\n };\n World2.prototype.setContinuousPhysics = function(flag) {\n this.m_continuousPhysics = flag;\n };\n World2.prototype.getContinuousPhysics = function() {\n return this.m_continuousPhysics;\n };\n World2.prototype.setSubStepping = function(flag) {\n this.m_subStepping = flag;\n };\n World2.prototype.getSubStepping = function() {\n return this.m_subStepping;\n };\n World2.prototype.setAutoClearForces = function(flag) {\n this.m_clearForces = flag;\n };\n World2.prototype.getAutoClearForces = function() {\n return this.m_clearForces;\n };\n World2.prototype.clearForces = function() {\n for (var body = this.m_bodyList; body; body = body.getNext()) {\n body.m_force.setZero();\n body.m_torque = 0;\n }\n };\n World2.prototype.queryAABB = function(aabb, callback) {\n var broadPhase = this.m_broadPhase;\n this.m_broadPhase.query(aabb, function(proxyId) {\n var proxy = broadPhase.getUserData(proxyId);\n return callback(proxy.fixture);\n });\n };\n World2.prototype.rayCast = function(point1, point2, callback) {\n var broadPhase = this.m_broadPhase;\n this.m_broadPhase.rayCast({\n maxFraction: 1,\n p1: point1,\n p2: point2\n }, function(input2, proxyId) {\n var proxy = broadPhase.getUserData(proxyId);\n var fixture = proxy.fixture;\n var index = proxy.childIndex;\n var output2 = {};\n var hit = fixture.rayCast(output2, input2, index);\n if (hit) {\n var fraction = output2.fraction;\n var point3 = Vec2.add(Vec2.mulNumVec2(1 - fraction, input2.p1), Vec2.mulNumVec2(fraction, input2.p2));\n return callback(fixture, point3, output2.normal, fraction);\n }\n return input2.maxFraction;\n });\n };\n World2.prototype.getProxyCount = function() {\n return this.m_broadPhase.getProxyCount();\n };\n World2.prototype.getTreeHeight = function() {\n return this.m_broadPhase.getTreeHeight();\n };\n World2.prototype.getTreeBalance = function() {\n return this.m_broadPhase.getTreeBalance();\n };\n World2.prototype.getTreeQuality = function() {\n return this.m_broadPhase.getTreeQuality();\n };\n World2.prototype.shiftOrigin = function(newOrigin) {\n if (this.isLocked()) {\n return;\n }\n for (var b2 = this.m_bodyList; b2; b2 = b2.m_next) {\n b2.m_xf.p.sub(newOrigin);\n b2.m_sweep.c0.sub(newOrigin);\n b2.m_sweep.c.sub(newOrigin);\n }\n for (var j = this.m_jointList; j; j = j.m_next) {\n j.shiftOrigin(newOrigin);\n }\n this.m_broadPhase.shiftOrigin(newOrigin);\n };\n World2.prototype._addBody = function(body) {\n if (this.isLocked()) {\n return;\n }\n body.m_prev = null;\n body.m_next = this.m_bodyList;\n if (this.m_bodyList) {\n this.m_bodyList.m_prev = body;\n }\n this.m_bodyList = body;\n ++this.m_bodyCount;\n };\n World2.prototype.createBody = function(arg1, arg2) {\n if (this.isLocked()) {\n return null;\n }\n var def = {};\n if (!arg1) ;\n else if (Vec2.isValid(arg1)) {\n def = { position: arg1, angle: arg2 };\n } else if (typeof arg1 === \"object\") {\n def = arg1;\n }\n var body = new Body(this, def);\n this._addBody(body);\n return body;\n };\n World2.prototype.createDynamicBody = function(arg1, arg2) {\n var def = {};\n if (!arg1) ;\n else if (Vec2.isValid(arg1)) {\n def = { position: arg1, angle: arg2 };\n } else if (typeof arg1 === \"object\") {\n def = arg1;\n }\n def.type = \"dynamic\";\n return this.createBody(def);\n };\n World2.prototype.createKinematicBody = function(arg1, arg2) {\n var def = {};\n if (!arg1) ;\n else if (Vec2.isValid(arg1)) {\n def = { position: arg1, angle: arg2 };\n } else if (typeof arg1 === \"object\") {\n def = arg1;\n }\n def.type = \"kinematic\";\n return this.createBody(def);\n };\n World2.prototype.destroyBody = function(b2) {\n if (this.isLocked()) {\n return;\n }\n if (b2.m_destroyed) {\n return false;\n }\n var je = b2.m_jointList;\n while (je) {\n var je0 = je;\n je = je.next;\n this.publish(\"remove-joint\", je0.joint);\n this.destroyJoint(je0.joint);\n b2.m_jointList = je;\n }\n b2.m_jointList = null;\n var ce = b2.m_contactList;\n while (ce) {\n var ce0 = ce;\n ce = ce.next;\n this.destroyContact(ce0.contact);\n b2.m_contactList = ce;\n }\n b2.m_contactList = null;\n var f = b2.m_fixtureList;\n while (f) {\n var f0 = f;\n f = f.m_next;\n this.publish(\"remove-fixture\", f0);\n f0.destroyProxies(this.m_broadPhase);\n b2.m_fixtureList = f;\n }\n b2.m_fixtureList = null;\n if (b2.m_prev) {\n b2.m_prev.m_next = b2.m_next;\n }\n if (b2.m_next) {\n b2.m_next.m_prev = b2.m_prev;\n }\n if (b2 == this.m_bodyList) {\n this.m_bodyList = b2.m_next;\n }\n b2.m_destroyed = true;\n --this.m_bodyCount;\n this.publish(\"remove-body\", b2);\n return true;\n };\n World2.prototype.createJoint = function(joint) {\n if (this.isLocked()) {\n return null;\n }\n joint.m_prev = null;\n joint.m_next = this.m_jointList;\n if (this.m_jointList) {\n this.m_jointList.m_prev = joint;\n }\n this.m_jointList = joint;\n ++this.m_jointCount;\n joint.m_edgeA.joint = joint;\n joint.m_edgeA.other = joint.m_bodyB;\n joint.m_edgeA.prev = null;\n joint.m_edgeA.next = joint.m_bodyA.m_jointList;\n if (joint.m_bodyA.m_jointList)\n joint.m_bodyA.m_jointList.prev = joint.m_edgeA;\n joint.m_bodyA.m_jointList = joint.m_edgeA;\n joint.m_edgeB.joint = joint;\n joint.m_edgeB.other = joint.m_bodyA;\n joint.m_edgeB.prev = null;\n joint.m_edgeB.next = joint.m_bodyB.m_jointList;\n if (joint.m_bodyB.m_jointList)\n joint.m_bodyB.m_jointList.prev = joint.m_edgeB;\n joint.m_bodyB.m_jointList = joint.m_edgeB;\n if (joint.m_collideConnected == false) {\n for (var edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) {\n if (edge.other == joint.m_bodyA) {\n edge.contact.flagForFiltering();\n }\n }\n }\n return joint;\n };\n World2.prototype.destroyJoint = function(joint) {\n if (this.isLocked()) {\n return;\n }\n if (joint.m_prev) {\n joint.m_prev.m_next = joint.m_next;\n }\n if (joint.m_next) {\n joint.m_next.m_prev = joint.m_prev;\n }\n if (joint == this.m_jointList) {\n this.m_jointList = joint.m_next;\n }\n var bodyA = joint.m_bodyA;\n var bodyB = joint.m_bodyB;\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n if (joint.m_edgeA.prev) {\n joint.m_edgeA.prev.next = joint.m_edgeA.next;\n }\n if (joint.m_edgeA.next) {\n joint.m_edgeA.next.prev = joint.m_edgeA.prev;\n }\n if (joint.m_edgeA == bodyA.m_jointList) {\n bodyA.m_jointList = joint.m_edgeA.next;\n }\n joint.m_edgeA.prev = null;\n joint.m_edgeA.next = null;\n if (joint.m_edgeB.prev) {\n joint.m_edgeB.prev.next = joint.m_edgeB.next;\n }\n if (joint.m_edgeB.next) {\n joint.m_edgeB.next.prev = joint.m_edgeB.prev;\n }\n if (joint.m_edgeB == bodyB.m_jointList) {\n bodyB.m_jointList = joint.m_edgeB.next;\n }\n joint.m_edgeB.prev = null;\n joint.m_edgeB.next = null;\n --this.m_jointCount;\n if (joint.m_collideConnected == false) {\n var edge = bodyB.getContactList();\n while (edge) {\n if (edge.other == bodyA) {\n edge.contact.flagForFiltering();\n }\n edge = edge.next;\n }\n }\n this.publish(\"remove-joint\", joint);\n };\n World2.prototype.step = function(timeStep, velocityIterations, positionIterations) {\n this.publish(\"pre-step\", timeStep);\n if ((velocityIterations | 0) !== velocityIterations) {\n velocityIterations = 0;\n }\n velocityIterations = velocityIterations || this.m_velocityIterations;\n positionIterations = positionIterations || this.m_positionIterations;\n if (this.m_newFixture) {\n this.findNewContacts();\n this.m_newFixture = false;\n }\n this.m_locked = true;\n this.s_step.reset(timeStep);\n this.s_step.velocityIterations = velocityIterations;\n this.s_step.positionIterations = positionIterations;\n this.s_step.warmStarting = this.m_warmStarting;\n this.s_step.blockSolve = this.m_blockSolve;\n this.updateContacts();\n if (this.m_stepComplete && timeStep > 0) {\n this.m_solver.solveWorld(this.s_step);\n for (var b2 = this.m_bodyList; b2; b2 = b2.getNext()) {\n if (b2.m_islandFlag == false) {\n continue;\n }\n if (b2.isStatic()) {\n continue;\n }\n b2.synchronizeFixtures();\n }\n this.findNewContacts();\n }\n if (this.m_continuousPhysics && timeStep > 0) {\n this.m_solver.solveWorldTOI(this.s_step);\n }\n if (this.m_clearForces) {\n this.clearForces();\n }\n this.m_locked = false;\n var callback;\n while (callback = this.m_step_callback.shift()) {\n callback(this);\n }\n this.publish(\"post-step\", timeStep);\n };\n World2.prototype.queueUpdate = function(callback) {\n if (!this.isLocked()) {\n callback(this);\n } else {\n this.m_step_callback.push(callback);\n }\n };\n World2.prototype.findNewContacts = function() {\n var _this = this;\n this.m_broadPhase.updatePairs(function(proxyA, proxyB) {\n return _this.createContact(proxyA, proxyB);\n });\n };\n World2.prototype.createContact = function(proxyA, proxyB) {\n var fixtureA = proxyA.fixture;\n var fixtureB = proxyB.fixture;\n var indexA = proxyA.childIndex;\n var indexB = proxyB.childIndex;\n var bodyA = fixtureA.getBody();\n var bodyB = fixtureB.getBody();\n if (bodyA == bodyB) {\n return;\n }\n var edge = bodyB.getContactList();\n while (edge) {\n if (edge.other == bodyA) {\n var fA = edge.contact.getFixtureA();\n var fB = edge.contact.getFixtureB();\n var iA = edge.contact.getChildIndexA();\n var iB = edge.contact.getChildIndexB();\n if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) {\n return;\n }\n if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) {\n return;\n }\n }\n edge = edge.next;\n }\n if (bodyB.shouldCollide(bodyA) == false) {\n return;\n }\n if (fixtureB.shouldCollide(fixtureA) == false) {\n return;\n }\n var contact = Contact.create(fixtureA, indexA, fixtureB, indexB);\n if (contact == null) {\n return;\n }\n contact.m_prev = null;\n if (this.m_contactList != null) {\n contact.m_next = this.m_contactList;\n this.m_contactList.m_prev = contact;\n }\n this.m_contactList = contact;\n ++this.m_contactCount;\n };\n World2.prototype.updateContacts = function() {\n var c2;\n var next_c = this.m_contactList;\n while (c2 = next_c) {\n next_c = c2.getNext();\n var fixtureA = c2.getFixtureA();\n var fixtureB = c2.getFixtureB();\n var indexA = c2.getChildIndexA();\n var indexB = c2.getChildIndexB();\n var bodyA = fixtureA.getBody();\n var bodyB = fixtureB.getBody();\n if (c2.m_filterFlag) {\n if (bodyB.shouldCollide(bodyA) == false) {\n this.destroyContact(c2);\n continue;\n }\n if (fixtureB.shouldCollide(fixtureA) == false) {\n this.destroyContact(c2);\n continue;\n }\n c2.m_filterFlag = false;\n }\n var activeA = bodyA.isAwake() && !bodyA.isStatic();\n var activeB = bodyB.isAwake() && !bodyB.isStatic();\n if (activeA == false && activeB == false) {\n continue;\n }\n var proxyIdA = fixtureA.m_proxies[indexA].proxyId;\n var proxyIdB = fixtureB.m_proxies[indexB].proxyId;\n var overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB);\n if (overlap == false) {\n this.destroyContact(c2);\n continue;\n }\n c2.update(this);\n }\n };\n World2.prototype.destroyContact = function(contact) {\n if (contact.m_prev) {\n contact.m_prev.m_next = contact.m_next;\n }\n if (contact.m_next) {\n contact.m_next.m_prev = contact.m_prev;\n }\n if (contact == this.m_contactList) {\n this.m_contactList = contact.m_next;\n }\n Contact.destroy(contact, this);\n --this.m_contactCount;\n };\n World2.prototype.on = function(name, listener) {\n if (typeof name !== \"string\" || typeof listener !== \"function\") {\n return this;\n }\n if (!this._listeners) {\n this._listeners = {};\n }\n if (!this._listeners[name]) {\n this._listeners[name] = [];\n }\n this._listeners[name].push(listener);\n return this;\n };\n World2.prototype.off = function(name, listener) {\n if (typeof name !== \"string\" || typeof listener !== \"function\") {\n return this;\n }\n var listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return this;\n }\n var index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n return this;\n };\n World2.prototype.publish = function(name, arg1, arg2, arg3) {\n var listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return 0;\n }\n for (var l = 0; l < listeners.length; l++) {\n listeners[l].call(this, arg1, arg2, arg3);\n }\n return listeners.length;\n };\n World2.prototype.beginContact = function(contact) {\n this.publish(\"begin-contact\", contact);\n };\n World2.prototype.endContact = function(contact) {\n this.publish(\"end-contact\", contact);\n };\n World2.prototype.preSolve = function(contact, oldManifold2) {\n this.publish(\"pre-solve\", contact, oldManifold2);\n };\n World2.prototype.postSolve = function(contact, impulse) {\n this.publish(\"post-solve\", contact, impulse);\n };\n return World2;\n }()\n);\nvar Vec3 = (\n /** @class */\n function() {\n function Vec32(x2, y, z) {\n if (!(this instanceof Vec32)) {\n return new Vec32(x2, y, z);\n }\n if (typeof x2 === \"undefined\") {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n } else if (typeof x2 === \"object\") {\n this.x = x2.x;\n this.y = x2.y;\n this.z = x2.z;\n } else {\n this.x = x2;\n this.y = y;\n this.z = z;\n }\n }\n Vec32.prototype._serialize = function() {\n return {\n x: this.x,\n y: this.y,\n z: this.z\n };\n };\n Vec32._deserialize = function(data) {\n var obj = Object.create(Vec32.prototype);\n obj.x = data.x;\n obj.y = data.y;\n obj.z = data.z;\n return obj;\n };\n Vec32.neo = function(x2, y, z) {\n var obj = Object.create(Vec32.prototype);\n obj.x = x2;\n obj.y = y;\n obj.z = z;\n return obj;\n };\n Vec32.zero = function() {\n var obj = Object.create(Vec32.prototype);\n obj.x = 0;\n obj.y = 0;\n obj.z = 0;\n return obj;\n };\n Vec32.clone = function(v3) {\n return Vec32.neo(v3.x, v3.y, v3.z);\n };\n Vec32.prototype.toString = function() {\n return JSON.stringify(this);\n };\n Vec32.isValid = function(obj) {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.x) && Number.isFinite(obj.y) && Number.isFinite(obj.z);\n };\n Vec32.assert = function(o) {\n };\n Vec32.prototype.setZero = function() {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n return this;\n };\n Vec32.prototype.set = function(x2, y, z) {\n this.x = x2;\n this.y = y;\n this.z = z;\n return this;\n };\n Vec32.prototype.add = function(w) {\n this.x += w.x;\n this.y += w.y;\n this.z += w.z;\n return this;\n };\n Vec32.prototype.sub = function(w) {\n this.x -= w.x;\n this.y -= w.y;\n this.z -= w.z;\n return this;\n };\n Vec32.prototype.mul = function(m) {\n this.x *= m;\n this.y *= m;\n this.z *= m;\n return this;\n };\n Vec32.areEqual = function(v3, w) {\n return v3 === w || typeof v3 === \"object\" && v3 !== null && typeof w === \"object\" && w !== null && v3.x === w.x && v3.y === w.y && v3.z === w.z;\n };\n Vec32.dot = function(v3, w) {\n return v3.x * w.x + v3.y * w.y + v3.z * w.z;\n };\n Vec32.cross = function(v3, w) {\n return new Vec32(v3.y * w.z - v3.z * w.y, v3.z * w.x - v3.x * w.z, v3.x * w.y - v3.y * w.x);\n };\n Vec32.add = function(v3, w) {\n return new Vec32(v3.x + w.x, v3.y + w.y, v3.z + w.z);\n };\n Vec32.sub = function(v3, w) {\n return new Vec32(v3.x - w.x, v3.y - w.y, v3.z - w.z);\n };\n Vec32.mul = function(v3, m) {\n return new Vec32(m * v3.x, m * v3.y, m * v3.z);\n };\n Vec32.prototype.neg = function() {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n };\n Vec32.neg = function(v3) {\n return new Vec32(-v3.x, -v3.y, -v3.z);\n };\n return Vec32;\n }()\n);\nvar v1$2 = vec2(0, 0);\nvar v2$1 = vec2(0, 0);\nvar EdgeShape = (\n /** @class */\n function(_super) {\n __extends(EdgeShape2, _super);\n function EdgeShape2(v122, v22) {\n var _this = this;\n if (!(_this instanceof EdgeShape2)) {\n return new EdgeShape2(v122, v22);\n }\n _this = _super.call(this) || this;\n _this.m_type = EdgeShape2.TYPE;\n _this.m_radius = SettingsInternal.polygonRadius;\n _this.m_vertex1 = v122 ? Vec2.clone(v122) : Vec2.zero();\n _this.m_vertex2 = v22 ? Vec2.clone(v22) : Vec2.zero();\n _this.m_vertex0 = Vec2.zero();\n _this.m_vertex3 = Vec2.zero();\n _this.m_hasVertex0 = false;\n _this.m_hasVertex3 = false;\n return _this;\n }\n EdgeShape2.prototype._serialize = function() {\n return {\n type: this.m_type,\n vertex1: this.m_vertex1,\n vertex2: this.m_vertex2,\n vertex0: this.m_vertex0,\n vertex3: this.m_vertex3,\n hasVertex0: this.m_hasVertex0,\n hasVertex3: this.m_hasVertex3\n };\n };\n EdgeShape2._deserialize = function(data) {\n var shape = new EdgeShape2(data.vertex1, data.vertex2);\n if (shape.m_hasVertex0) {\n shape.setPrevVertex(data.vertex0);\n }\n if (shape.m_hasVertex3) {\n shape.setNextVertex(data.vertex3);\n }\n return shape;\n };\n EdgeShape2.prototype._reset = function() {\n };\n EdgeShape2.prototype.getRadius = function() {\n return this.m_radius;\n };\n EdgeShape2.prototype.getType = function() {\n return this.m_type;\n };\n EdgeShape2.prototype.setNext = function(v3) {\n return this.setNextVertex(v3);\n };\n EdgeShape2.prototype.setNextVertex = function(v3) {\n if (v3) {\n this.m_vertex3.setVec2(v3);\n this.m_hasVertex3 = true;\n } else {\n this.m_vertex3.setZero();\n this.m_hasVertex3 = false;\n }\n return this;\n };\n EdgeShape2.prototype.getNextVertex = function() {\n return this.m_vertex3;\n };\n EdgeShape2.prototype.setPrev = function(v3) {\n return this.setPrevVertex(v3);\n };\n EdgeShape2.prototype.setPrevVertex = function(v3) {\n if (v3) {\n this.m_vertex0.setVec2(v3);\n this.m_hasVertex0 = true;\n } else {\n this.m_vertex0.setZero();\n this.m_hasVertex0 = false;\n }\n return this;\n };\n EdgeShape2.prototype.getPrevVertex = function() {\n return this.m_vertex0;\n };\n EdgeShape2.prototype._set = function(v122, v22) {\n this.m_vertex1.setVec2(v122);\n this.m_vertex2.setVec2(v22);\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n return this;\n };\n EdgeShape2.prototype._clone = function() {\n var clone = new EdgeShape2();\n clone.m_type = this.m_type;\n clone.m_radius = this.m_radius;\n clone.m_vertex1.setVec2(this.m_vertex1);\n clone.m_vertex2.setVec2(this.m_vertex2);\n clone.m_vertex0.setVec2(this.m_vertex0);\n clone.m_vertex3.setVec2(this.m_vertex3);\n clone.m_hasVertex0 = this.m_hasVertex0;\n clone.m_hasVertex3 = this.m_hasVertex3;\n return clone;\n };\n EdgeShape2.prototype.getChildCount = function() {\n return 1;\n };\n EdgeShape2.prototype.testPoint = function(xf2, p) {\n return false;\n };\n EdgeShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) {\n var p1 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p1, xf2.p));\n var p2 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p2, xf2.p));\n var d2 = Vec2.sub(p2, p1);\n var v122 = this.m_vertex1;\n var v22 = this.m_vertex2;\n var e3 = Vec2.sub(v22, v122);\n var normal3 = Vec2.neo(e3.y, -e3.x);\n normal3.normalize();\n var numerator = Vec2.dot(normal3, Vec2.sub(v122, p1));\n var denominator = Vec2.dot(normal3, d2);\n if (denominator == 0) {\n return false;\n }\n var t = numerator / denominator;\n if (t < 0 || input2.maxFraction < t) {\n return false;\n }\n var q = Vec2.add(p1, Vec2.mulNumVec2(t, d2));\n var r = Vec2.sub(v22, v122);\n var rr = Vec2.dot(r, r);\n if (rr == 0) {\n return false;\n }\n var s2 = Vec2.dot(Vec2.sub(q, v122), r) / rr;\n if (s2 < 0 || 1 < s2) {\n return false;\n }\n output2.fraction = t;\n if (numerator > 0) {\n output2.normal = Rot.mulVec2(xf2.q, normal3).neg();\n } else {\n output2.normal = Rot.mulVec2(xf2.q, normal3);\n }\n return true;\n };\n EdgeShape2.prototype.computeAABB = function(aabb, xf2, childIndex) {\n transformVec2(v1$2, xf2, this.m_vertex1);\n transformVec2(v2$1, xf2, this.m_vertex2);\n AABB.combinePoints(aabb, v1$2, v2$1);\n AABB.extend(aabb, this.m_radius);\n };\n EdgeShape2.prototype.computeMass = function(massData, density) {\n massData.mass = 0;\n combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2);\n massData.I = 0;\n };\n EdgeShape2.prototype.computeDistanceProxy = function(proxy) {\n proxy.m_vertices[0] = this.m_vertex1;\n proxy.m_vertices[1] = this.m_vertex2;\n proxy.m_vertices.length = 2;\n proxy.m_count = 2;\n proxy.m_radius = this.m_radius;\n };\n EdgeShape2.TYPE = \"edge\";\n return EdgeShape2;\n }(Shape)\n);\nvar v1$1 = vec2(0, 0);\nvar v2 = vec2(0, 0);\nvar ChainShape = (\n /** @class */\n function(_super) {\n __extends(ChainShape2, _super);\n function ChainShape2(vertices, loop) {\n var _this = this;\n if (!(_this instanceof ChainShape2)) {\n return new ChainShape2(vertices, loop);\n }\n _this = _super.call(this) || this;\n _this.m_type = ChainShape2.TYPE;\n _this.m_radius = SettingsInternal.polygonRadius;\n _this.m_vertices = [];\n _this.m_count = 0;\n _this.m_prevVertex = null;\n _this.m_nextVertex = null;\n _this.m_hasPrevVertex = false;\n _this.m_hasNextVertex = false;\n _this.m_isLoop = !!loop;\n if (vertices && vertices.length) {\n if (loop) {\n _this._createLoop(vertices);\n } else {\n _this._createChain(vertices);\n }\n }\n return _this;\n }\n ChainShape2.prototype._serialize = function() {\n var data = {\n type: this.m_type,\n vertices: this.m_isLoop ? this.m_vertices.slice(0, this.m_vertices.length - 1) : this.m_vertices,\n isLoop: this.m_isLoop,\n hasPrevVertex: this.m_hasPrevVertex,\n hasNextVertex: this.m_hasNextVertex,\n prevVertex: null,\n nextVertex: null\n };\n if (this.m_prevVertex) {\n data.prevVertex = this.m_prevVertex;\n }\n if (this.m_nextVertex) {\n data.nextVertex = this.m_nextVertex;\n }\n return data;\n };\n ChainShape2._deserialize = function(data, fixture, restore) {\n var vertices = [];\n if (data.vertices) {\n for (var i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n var shape = new ChainShape2(vertices, data.isLoop);\n if (data.prevVertex) {\n shape.setPrevVertex(data.prevVertex);\n }\n if (data.nextVertex) {\n shape.setNextVertex(data.nextVertex);\n }\n return shape;\n };\n ChainShape2.prototype.getType = function() {\n return this.m_type;\n };\n ChainShape2.prototype.getRadius = function() {\n return this.m_radius;\n };\n ChainShape2.prototype._createLoop = function(vertices) {\n if (vertices.length < 3) {\n return;\n }\n var i;\n this.m_vertices = [];\n this.m_count = vertices.length + 1;\n for (var i = 0; i < vertices.length; ++i) {\n this.m_vertices[i] = Vec2.clone(vertices[i]);\n }\n this.m_vertices[vertices.length] = Vec2.clone(vertices[0]);\n this.m_prevVertex = this.m_vertices[this.m_count - 2];\n this.m_nextVertex = this.m_vertices[1];\n this.m_hasPrevVertex = true;\n this.m_hasNextVertex = true;\n return this;\n };\n ChainShape2.prototype._createChain = function(vertices) {\n var i;\n this.m_vertices = [];\n this.m_count = vertices.length;\n for (var i = 0; i < vertices.length; ++i) {\n this.m_vertices[i] = Vec2.clone(vertices[i]);\n }\n this.m_prevVertex = null;\n this.m_nextVertex = null;\n this.m_hasPrevVertex = false;\n this.m_hasNextVertex = false;\n return this;\n };\n ChainShape2.prototype._reset = function() {\n if (this.m_isLoop) {\n this._createLoop(this.m_vertices.slice(0, this.m_vertices.length - 1));\n } else {\n this._createChain(this.m_vertices);\n }\n };\n ChainShape2.prototype.setPrevVertex = function(prevVertex) {\n this.m_prevVertex = prevVertex;\n this.m_hasPrevVertex = true;\n };\n ChainShape2.prototype.getPrevVertex = function() {\n return this.m_prevVertex;\n };\n ChainShape2.prototype.setNextVertex = function(nextVertex) {\n this.m_nextVertex = nextVertex;\n this.m_hasNextVertex = true;\n };\n ChainShape2.prototype.getNextVertex = function() {\n return this.m_nextVertex;\n };\n ChainShape2.prototype._clone = function() {\n var clone = new ChainShape2();\n clone._createChain(this.m_vertices);\n clone.m_type = this.m_type;\n clone.m_radius = this.m_radius;\n clone.m_prevVertex = this.m_prevVertex;\n clone.m_nextVertex = this.m_nextVertex;\n clone.m_hasPrevVertex = this.m_hasPrevVertex;\n clone.m_hasNextVertex = this.m_hasNextVertex;\n return clone;\n };\n ChainShape2.prototype.getChildCount = function() {\n return this.m_count - 1;\n };\n ChainShape2.prototype.getChildEdge = function(edge, childIndex) {\n edge.m_type = EdgeShape.TYPE;\n edge.m_radius = this.m_radius;\n edge.m_vertex1 = this.m_vertices[childIndex];\n edge.m_vertex2 = this.m_vertices[childIndex + 1];\n if (childIndex > 0) {\n edge.m_vertex0 = this.m_vertices[childIndex - 1];\n edge.m_hasVertex0 = true;\n } else {\n edge.m_vertex0 = this.m_prevVertex;\n edge.m_hasVertex0 = this.m_hasPrevVertex;\n }\n if (childIndex < this.m_count - 2) {\n edge.m_vertex3 = this.m_vertices[childIndex + 2];\n edge.m_hasVertex3 = true;\n } else {\n edge.m_vertex3 = this.m_nextVertex;\n edge.m_hasVertex3 = this.m_hasNextVertex;\n }\n };\n ChainShape2.prototype.getVertex = function(index) {\n if (index < this.m_count) {\n return this.m_vertices[index];\n } else {\n return this.m_vertices[0];\n }\n };\n ChainShape2.prototype.isLoop = function() {\n return this.m_isLoop;\n };\n ChainShape2.prototype.testPoint = function(xf2, p) {\n return false;\n };\n ChainShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) {\n var edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1));\n return edgeShape.rayCast(output2, input2, xf2, 0);\n };\n ChainShape2.prototype.computeAABB = function(aabb, xf2, childIndex) {\n transformVec2(v1$1, xf2, this.getVertex(childIndex));\n transformVec2(v2, xf2, this.getVertex(childIndex + 1));\n AABB.combinePoints(aabb, v1$1, v2);\n };\n ChainShape2.prototype.computeMass = function(massData, density) {\n massData.mass = 0;\n zeroVec2(massData.center);\n massData.I = 0;\n };\n ChainShape2.prototype.computeDistanceProxy = function(proxy, childIndex) {\n proxy.m_vertices[0] = this.getVertex(childIndex);\n proxy.m_vertices[1] = this.getVertex(childIndex + 1);\n proxy.m_count = 2;\n proxy.m_radius = this.m_radius;\n };\n ChainShape2.TYPE = \"chain\";\n return ChainShape2;\n }(Shape)\n);\nvar math_max$1 = Math.max;\nvar math_min$3 = Math.min;\nvar temp$1 = vec2(0, 0);\nvar e$1 = vec2(0, 0);\nvar e1$1 = vec2(0, 0);\nvar e2$1 = vec2(0, 0);\nvar center = vec2(0, 0);\nvar s = vec2(0, 0);\nvar PolygonShape = (\n /** @class */\n function(_super) {\n __extends(PolygonShape2, _super);\n function PolygonShape2(vertices) {\n var _this = this;\n if (!(_this instanceof PolygonShape2)) {\n return new PolygonShape2(vertices);\n }\n _this = _super.call(this) || this;\n _this.m_type = PolygonShape2.TYPE;\n _this.m_radius = SettingsInternal.polygonRadius;\n _this.m_centroid = Vec2.zero();\n _this.m_vertices = [];\n _this.m_normals = [];\n _this.m_count = 0;\n if (vertices && vertices.length) {\n _this._set(vertices);\n }\n return _this;\n }\n PolygonShape2.prototype._serialize = function() {\n return {\n type: this.m_type,\n vertices: this.m_vertices\n };\n };\n PolygonShape2._deserialize = function(data, fixture, restore) {\n var vertices = [];\n if (data.vertices) {\n for (var i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n var shape = new PolygonShape2(vertices);\n return shape;\n };\n PolygonShape2.prototype.getType = function() {\n return this.m_type;\n };\n PolygonShape2.prototype.getRadius = function() {\n return this.m_radius;\n };\n PolygonShape2.prototype._clone = function() {\n var clone = new PolygonShape2();\n clone.m_type = this.m_type;\n clone.m_radius = this.m_radius;\n clone.m_count = this.m_count;\n clone.m_centroid.setVec2(this.m_centroid);\n for (var i = 0; i < this.m_count; i++) {\n clone.m_vertices.push(this.m_vertices[i].clone());\n }\n for (var i = 0; i < this.m_normals.length; i++) {\n clone.m_normals.push(this.m_normals[i].clone());\n }\n return clone;\n };\n PolygonShape2.prototype.getChildCount = function() {\n return 1;\n };\n PolygonShape2.prototype._reset = function() {\n this._set(this.m_vertices);\n };\n PolygonShape2.prototype._set = function(vertices) {\n if (vertices.length < 3) {\n this._setAsBox(1, 1);\n return;\n }\n var n2 = math_min$3(vertices.length, SettingsInternal.maxPolygonVertices);\n var ps = [];\n for (var i = 0; i < n2; ++i) {\n var v3 = vertices[i];\n var unique = true;\n for (var j = 0; j < ps.length; ++j) {\n if (Vec2.distanceSquared(v3, ps[j]) < 0.25 * SettingsInternal.linearSlopSquared) {\n unique = false;\n break;\n }\n }\n if (unique) {\n ps.push(Vec2.clone(v3));\n }\n }\n n2 = ps.length;\n if (n2 < 3) {\n this._setAsBox(1, 1);\n return;\n }\n var i0 = 0;\n var x0 = ps[0].x;\n for (var i = 1; i < n2; ++i) {\n var x2 = ps[i].x;\n if (x2 > x0 || x2 === x0 && ps[i].y < ps[i0].y) {\n i0 = i;\n x0 = x2;\n }\n }\n var hull = [];\n var m = 0;\n var ih = i0;\n while (true) {\n hull[m] = ih;\n var ie2 = 0;\n for (var j = 1; j < n2; ++j) {\n if (ie2 === ih) {\n ie2 = j;\n continue;\n }\n var r = Vec2.sub(ps[ie2], ps[hull[m]]);\n var v3 = Vec2.sub(ps[j], ps[hull[m]]);\n var c2 = Vec2.crossVec2Vec2(r, v3);\n if (c2 < 0) {\n ie2 = j;\n }\n if (c2 === 0 && v3.lengthSquared() > r.lengthSquared()) {\n ie2 = j;\n }\n }\n ++m;\n ih = ie2;\n if (ie2 === i0) {\n break;\n }\n }\n if (m < 3) {\n this._setAsBox(1, 1);\n return;\n }\n this.m_count = m;\n this.m_vertices = [];\n for (var i = 0; i < m; ++i) {\n this.m_vertices[i] = ps[hull[i]];\n }\n for (var i = 0; i < m; ++i) {\n var i1 = i;\n var i2 = i + 1 < m ? i + 1 : 0;\n var edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]);\n this.m_normals[i] = Vec2.crossVec2Num(edge, 1);\n this.m_normals[i].normalize();\n }\n this.m_centroid = computeCentroid(this.m_vertices, m);\n };\n PolygonShape2.prototype._setAsBox = function(hx, hy, center2, angle) {\n this.m_vertices[0] = Vec2.neo(hx, -hy);\n this.m_vertices[1] = Vec2.neo(hx, hy);\n this.m_vertices[2] = Vec2.neo(-hx, hy);\n this.m_vertices[3] = Vec2.neo(-hx, -hy);\n this.m_normals[0] = Vec2.neo(1, 0);\n this.m_normals[1] = Vec2.neo(0, 1);\n this.m_normals[2] = Vec2.neo(-1, 0);\n this.m_normals[3] = Vec2.neo(0, -1);\n this.m_count = 4;\n if (center2 && Vec2.isValid(center2)) {\n angle = angle || 0;\n copyVec2(this.m_centroid, center2);\n var xf2 = Transform.identity();\n xf2.p.setVec2(center2);\n xf2.q.setAngle(angle);\n for (var i = 0; i < this.m_count; ++i) {\n this.m_vertices[i] = Transform.mulVec2(xf2, this.m_vertices[i]);\n this.m_normals[i] = Rot.mulVec2(xf2.q, this.m_normals[i]);\n }\n }\n };\n PolygonShape2.prototype.testPoint = function(xf2, p) {\n var pLocal = detransformVec2(temp$1, xf2, p);\n for (var i = 0; i < this.m_count; ++i) {\n var dot = dotVec2(this.m_normals[i], pLocal) - dotVec2(this.m_normals[i], this.m_vertices[i]);\n if (dot > 0) {\n return false;\n }\n }\n return true;\n };\n PolygonShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) {\n var p1 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p1, xf2.p));\n var p2 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p2, xf2.p));\n var d2 = Vec2.sub(p2, p1);\n var lower = 0;\n var upper = input2.maxFraction;\n var index = -1;\n for (var i = 0; i < this.m_count; ++i) {\n var numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1));\n var denominator = Vec2.dot(this.m_normals[i], d2);\n if (denominator == 0) {\n if (numerator < 0) {\n return false;\n }\n } else {\n if (denominator < 0 && numerator < lower * denominator) {\n lower = numerator / denominator;\n index = i;\n } else if (denominator > 0 && numerator < upper * denominator) {\n upper = numerator / denominator;\n }\n }\n if (upper < lower) {\n return false;\n }\n }\n if (index >= 0) {\n output2.fraction = lower;\n output2.normal = Rot.mulVec2(xf2.q, this.m_normals[index]);\n return true;\n }\n return false;\n };\n PolygonShape2.prototype.computeAABB = function(aabb, xf2, childIndex) {\n var minX = Infinity;\n var minY = Infinity;\n var maxX = -Infinity;\n var maxY = -Infinity;\n for (var i = 0; i < this.m_count; ++i) {\n var v3 = transformVec2(temp$1, xf2, this.m_vertices[i]);\n minX = math_min$3(minX, v3.x);\n maxX = math_max$1(maxX, v3.x);\n minY = math_min$3(minY, v3.y);\n maxY = math_max$1(maxY, v3.y);\n }\n setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius);\n setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius);\n };\n PolygonShape2.prototype.computeMass = function(massData, density) {\n zeroVec2(center);\n var area = 0;\n var I = 0;\n zeroVec2(s);\n for (var i = 0; i < this.m_count; ++i) {\n plusVec2(s, this.m_vertices[i]);\n }\n scaleVec2(s, 1 / this.m_count, s);\n var k_inv3 = 1 / 3;\n for (var i = 0; i < this.m_count; ++i) {\n subVec2(e1$1, this.m_vertices[i], s);\n if (i + 1 < this.m_count) {\n subVec2(e2$1, this.m_vertices[i + 1], s);\n } else {\n subVec2(e2$1, this.m_vertices[0], s);\n }\n var D = crossVec2Vec2(e1$1, e2$1);\n var triangleArea = 0.5 * D;\n area += triangleArea;\n combine2Vec2(temp$1, triangleArea * k_inv3, e1$1, triangleArea * k_inv3, e2$1);\n plusVec2(center, temp$1);\n var ex1 = e1$1.x;\n var ey1 = e1$1.y;\n var ex2 = e2$1.x;\n var ey2 = e2$1.y;\n var intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2;\n var inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2;\n I += 0.25 * k_inv3 * D * (intx2 + inty2);\n }\n massData.mass = density * area;\n scaleVec2(center, 1 / area, center);\n addVec2(massData.center, center, s);\n massData.I = density * I;\n massData.I += massData.mass * (dotVec2(massData.center, massData.center) - dotVec2(center, center));\n };\n PolygonShape2.prototype.validate = function() {\n for (var i = 0; i < this.m_count; ++i) {\n var i1 = i;\n var i2 = i < this.m_count - 1 ? i1 + 1 : 0;\n var p = this.m_vertices[i1];\n subVec2(e$1, this.m_vertices[i2], p);\n for (var j = 0; j < this.m_count; ++j) {\n if (j == i1 || j == i2) {\n continue;\n }\n var c2 = crossVec2Vec2(e$1, subVec2(temp$1, this.m_vertices[j], p));\n if (c2 < 0) {\n return false;\n }\n }\n }\n return true;\n };\n PolygonShape2.prototype.computeDistanceProxy = function(proxy) {\n for (var i = 0; i < this.m_count; ++i) {\n proxy.m_vertices[i] = this.m_vertices[i];\n }\n proxy.m_vertices.length = this.m_count;\n proxy.m_count = this.m_count;\n proxy.m_radius = this.m_radius;\n };\n PolygonShape2.TYPE = \"polygon\";\n return PolygonShape2;\n }(Shape)\n);\nfunction computeCentroid(vs, count) {\n var c2 = Vec2.zero();\n var area = 0;\n var pRef = Vec2.zero();\n var i;\n var inv3 = 1 / 3;\n for (var i = 0; i < count; ++i) {\n var p1 = pRef;\n var p2 = vs[i];\n var p3 = i + 1 < count ? vs[i + 1] : vs[0];\n var e1_1 = Vec2.sub(p2, p1);\n var e2_1 = Vec2.sub(p3, p1);\n var D = Vec2.crossVec2Vec2(e1_1, e2_1);\n var triangleArea = 0.5 * D;\n area += triangleArea;\n combine3Vec2(temp$1, 1, p1, 1, p2, 1, p3);\n plusScaleVec2(c2, triangleArea * inv3, temp$1);\n }\n c2.mul(1 / area);\n return c2;\n}\nvar math_sqrt = Math.sqrt;\nvar math_PI$4 = Math.PI;\nvar temp = vec2(0, 0);\nvar CircleShape = (\n /** @class */\n function(_super) {\n __extends(CircleShape2, _super);\n function CircleShape2(a2, b2) {\n var _this = this;\n if (!(_this instanceof CircleShape2)) {\n return new CircleShape2(a2, b2);\n }\n _this = _super.call(this) || this;\n _this.m_type = CircleShape2.TYPE;\n _this.m_p = Vec2.zero();\n _this.m_radius = 1;\n if (typeof a2 === \"object\" && Vec2.isValid(a2)) {\n _this.m_p.setVec2(a2);\n if (typeof b2 === \"number\") {\n _this.m_radius = b2;\n }\n } else if (typeof a2 === \"number\") {\n _this.m_radius = a2;\n }\n return _this;\n }\n CircleShape2.prototype._serialize = function() {\n return {\n type: this.m_type,\n p: this.m_p,\n radius: this.m_radius\n };\n };\n CircleShape2._deserialize = function(data) {\n return new CircleShape2(data.p, data.radius);\n };\n CircleShape2.prototype._reset = function() {\n };\n CircleShape2.prototype.getType = function() {\n return this.m_type;\n };\n CircleShape2.prototype.getRadius = function() {\n return this.m_radius;\n };\n CircleShape2.prototype.getCenter = function() {\n return this.m_p;\n };\n CircleShape2.prototype._clone = function() {\n var clone = new CircleShape2();\n clone.m_type = this.m_type;\n clone.m_radius = this.m_radius;\n clone.m_p = this.m_p.clone();\n return clone;\n };\n CircleShape2.prototype.getChildCount = function() {\n return 1;\n };\n CircleShape2.prototype.testPoint = function(xf2, p) {\n var center2 = transformVec2(temp, xf2, this.m_p);\n return distSqrVec2(p, center2) <= this.m_radius * this.m_radius;\n };\n CircleShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) {\n var position = Vec2.add(xf2.p, Rot.mulVec2(xf2.q, this.m_p));\n var s2 = Vec2.sub(input2.p1, position);\n var b2 = Vec2.dot(s2, s2) - this.m_radius * this.m_radius;\n var r = Vec2.sub(input2.p2, input2.p1);\n var c2 = Vec2.dot(s2, r);\n var rr = Vec2.dot(r, r);\n var sigma = c2 * c2 - rr * b2;\n if (sigma < 0 || rr < EPSILON) {\n return false;\n }\n var a2 = -(c2 + math_sqrt(sigma));\n if (0 <= a2 && a2 <= input2.maxFraction * rr) {\n a2 /= rr;\n output2.fraction = a2;\n output2.normal = Vec2.add(s2, Vec2.mulNumVec2(a2, r));\n output2.normal.normalize();\n return true;\n }\n return false;\n };\n CircleShape2.prototype.computeAABB = function(aabb, xf2, childIndex) {\n var p = transformVec2(temp, xf2, this.m_p);\n setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius);\n setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius);\n };\n CircleShape2.prototype.computeMass = function(massData, density) {\n massData.mass = density * math_PI$4 * this.m_radius * this.m_radius;\n copyVec2(massData.center, this.m_p);\n massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + lengthSqrVec2(this.m_p));\n };\n CircleShape2.prototype.computeDistanceProxy = function(proxy) {\n proxy.m_vertices[0] = this.m_p;\n proxy.m_vertices.length = 1;\n proxy.m_count = 1;\n proxy.m_radius = this.m_radius;\n };\n CircleShape2.TYPE = \"circle\";\n return CircleShape2;\n }(Shape)\n);\nvar math_abs$5 = Math.abs;\nvar math_PI$3 = Math.PI;\nvar DEFAULTS$a = {\n frequencyHz: 0,\n dampingRatio: 0\n};\nvar DistanceJoint = (\n /** @class */\n function(_super) {\n __extends(DistanceJoint2, _super);\n function DistanceJoint2(def, bodyA, bodyB, anchorA, anchorB) {\n var _this = this;\n if (!(_this instanceof DistanceJoint2)) {\n return new DistanceJoint2(def, bodyA, bodyB, anchorA, anchorB);\n }\n if (bodyB && anchorA && \"m_type\" in anchorA && \"x\" in bodyB && \"y\" in bodyB) {\n var temp3 = bodyB;\n bodyB = anchorA;\n anchorA = temp3;\n }\n def = options(def, DEFAULTS$a);\n _this = _super.call(this, def, bodyA, bodyB) || this;\n bodyA = _this.m_bodyA;\n bodyB = _this.m_bodyB;\n _this.m_type = DistanceJoint2.TYPE;\n _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.zero());\n _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.zero());\n _this.m_length = Number.isFinite(def.length) ? def.length : Vec2.distance(bodyA.getWorldPoint(_this.m_localAnchorA), bodyB.getWorldPoint(_this.m_localAnchorB));\n _this.m_frequencyHz = def.frequencyHz;\n _this.m_dampingRatio = def.dampingRatio;\n _this.m_impulse = 0;\n _this.m_gamma = 0;\n _this.m_bias = 0;\n return _this;\n }\n DistanceJoint2.prototype._serialize = function() {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n length: this.m_length,\n impulse: this.m_impulse,\n gamma: this.m_gamma,\n bias: this.m_bias\n };\n };\n DistanceJoint2._deserialize = function(data, world, restore) {\n data = __assign({}, data);\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n var joint = new DistanceJoint2(data);\n return joint;\n };\n DistanceJoint2.prototype._reset = function(def) {\n if (def.anchorA) {\n this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA));\n } else if (def.localAnchorA) {\n this.m_localAnchorA.setVec2(def.localAnchorA);\n }\n if (def.anchorB) {\n this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB));\n } else if (def.localAnchorB) {\n this.m_localAnchorB.setVec2(def.localAnchorB);\n }\n if (def.length > 0) {\n this.m_length = +def.length;\n } else if (def.length < 0) ;\n else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) {\n this.m_length = Vec2.distance(this.m_bodyA.getWorldPoint(this.m_localAnchorA), this.m_bodyB.getWorldPoint(this.m_localAnchorB));\n }\n if (Number.isFinite(def.frequencyHz)) {\n this.m_frequencyHz = def.frequencyHz;\n }\n if (Number.isFinite(def.dampingRatio)) {\n this.m_dampingRatio = def.dampingRatio;\n }\n };\n DistanceJoint2.prototype.getLocalAnchorA = function() {\n return this.m_localAnchorA;\n };\n DistanceJoint2.prototype.getLocalAnchorB = function() {\n return this.m_localAnchorB;\n };\n DistanceJoint2.prototype.setLength = function(length) {\n this.m_length = length;\n };\n DistanceJoint2.prototype.getLength = function() {\n return this.m_length;\n };\n DistanceJoint2.prototype.setFrequency = function(hz) {\n this.m_frequencyHz = hz;\n };\n DistanceJoint2.prototype.getFrequency = function() {\n return this.m_frequencyHz;\n };\n DistanceJoint2.prototype.setDampingRatio = function(ratio) {\n this.m_dampingRatio = ratio;\n };\n DistanceJoint2.prototype.getDampingRatio = function() {\n return this.m_dampingRatio;\n };\n DistanceJoint2.prototype.getAnchorA = function() {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n };\n DistanceJoint2.prototype.getAnchorB = function() {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n };\n DistanceJoint2.prototype.getReactionForce = function(inv_dt) {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n };\n DistanceJoint2.prototype.getReactionTorque = function(inv_dt) {\n return 0;\n };\n DistanceJoint2.prototype.initVelocityConstraints = function(step) {\n this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n this.m_invMassA = this.m_bodyA.m_invMass;\n this.m_invMassB = this.m_bodyB.m_invMass;\n this.m_invIA = this.m_bodyA.m_invI;\n this.m_invIB = this.m_bodyB.m_invI;\n var cA2 = this.m_bodyA.c_position.c;\n var aA = this.m_bodyA.c_position.a;\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var cB2 = this.m_bodyB.c_position.c;\n var aB = this.m_bodyB.c_position.a;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n this.m_u = Vec2.sub(Vec2.add(cB2, this.m_rB), Vec2.add(cA2, this.m_rA));\n var length = this.m_u.length();\n if (length > SettingsInternal.linearSlop) {\n this.m_u.mul(1 / length);\n } else {\n this.m_u.setNum(0, 0);\n }\n var crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n var crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n var invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu;\n this.m_mass = invMass != 0 ? 1 / invMass : 0;\n if (this.m_frequencyHz > 0) {\n var C = length - this.m_length;\n var omega = 2 * math_PI$3 * this.m_frequencyHz;\n var d2 = 2 * this.m_mass * this.m_dampingRatio * omega;\n var k = this.m_mass * omega * omega;\n var h = step.dt;\n this.m_gamma = h * (d2 + h * k);\n this.m_gamma = this.m_gamma != 0 ? 1 / this.m_gamma : 0;\n this.m_bias = C * h * k * this.m_gamma;\n invMass += this.m_gamma;\n this.m_mass = invMass != 0 ? 1 / invMass : 0;\n } else {\n this.m_gamma = 0;\n this.m_bias = 0;\n }\n if (step.warmStarting) {\n this.m_impulse *= step.dtRatio;\n var P3 = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n vA2.subMul(this.m_invMassA, P3);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3);\n vB2.addMul(this.m_invMassB, P3);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3);\n } else {\n this.m_impulse = 0;\n }\n this.m_bodyA.c_velocity.v.setVec2(vA2);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB2);\n this.m_bodyB.c_velocity.w = wB;\n };\n DistanceJoint2.prototype.solveVelocityConstraints = function(step) {\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var vpA = Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA));\n var vpB = Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB));\n var Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA);\n var impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse);\n this.m_impulse += impulse;\n var P3 = Vec2.mulNumVec2(impulse, this.m_u);\n vA2.subMul(this.m_invMassA, P3);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3);\n vB2.addMul(this.m_invMassB, P3);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3);\n this.m_bodyA.c_velocity.v.setVec2(vA2);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB2);\n this.m_bodyB.c_velocity.w = wB;\n };\n DistanceJoint2.prototype.solvePositionConstraints = function(step) {\n if (this.m_frequencyHz > 0) {\n return true;\n }\n var cA2 = this.m_bodyA.c_position.c;\n var aA = this.m_bodyA.c_position.a;\n var cB2 = this.m_bodyB.c_position.c;\n var aB = this.m_bodyB.c_position.a;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n var u = Vec2.sub(Vec2.add(cB2, rB2), Vec2.add(cA2, rA2));\n var length = u.normalize();\n var C = clamp(length - this.m_length, -SettingsInternal.maxLinearCorrection, SettingsInternal.maxLinearCorrection);\n var impulse = -this.m_mass * C;\n var P3 = Vec2.mulNumVec2(impulse, u);\n cA2.subMul(this.m_invMassA, P3);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA2, P3);\n cB2.addMul(this.m_invMassB, P3);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, P3);\n this.m_bodyA.c_position.c.setVec2(cA2);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB2);\n this.m_bodyB.c_position.a = aB;\n return math_abs$5(C) < SettingsInternal.linearSlop;\n };\n DistanceJoint2.TYPE = \"distance-joint\";\n return DistanceJoint2;\n }(Joint)\n);\nvar DEFAULTS$9 = {\n maxForce: 0,\n maxTorque: 0\n};\nvar FrictionJoint = (\n /** @class */\n function(_super) {\n __extends(FrictionJoint2, _super);\n function FrictionJoint2(def, bodyA, bodyB, anchor) {\n var _this = this;\n if (!(_this instanceof FrictionJoint2)) {\n return new FrictionJoint2(def, bodyA, bodyB, anchor);\n }\n def = options(def, DEFAULTS$9);\n _this = _super.call(this, def, bodyA, bodyB) || this;\n bodyA = _this.m_bodyA;\n bodyB = _this.m_bodyB;\n _this.m_type = FrictionJoint2.TYPE;\n _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero());\n _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero());\n _this.m_linearImpulse = Vec2.zero();\n _this.m_angularImpulse = 0;\n _this.m_maxForce = def.maxForce;\n _this.m_maxTorque = def.maxTorque;\n return _this;\n }\n FrictionJoint2.prototype._serialize = function() {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB\n };\n };\n FrictionJoint2._deserialize = function(data, world, restore) {\n data = __assign({}, data);\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n var joint = new FrictionJoint2(data);\n return joint;\n };\n FrictionJoint2.prototype._reset = function(def) {\n if (def.anchorA) {\n this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA));\n } else if (def.localAnchorA) {\n this.m_localAnchorA.setVec2(def.localAnchorA);\n }\n if (def.anchorB) {\n this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB));\n } else if (def.localAnchorB) {\n this.m_localAnchorB.setVec2(def.localAnchorB);\n }\n if (Number.isFinite(def.maxForce)) {\n this.m_maxForce = def.maxForce;\n }\n if (Number.isFinite(def.maxTorque)) {\n this.m_maxTorque = def.maxTorque;\n }\n };\n FrictionJoint2.prototype.getLocalAnchorA = function() {\n return this.m_localAnchorA;\n };\n FrictionJoint2.prototype.getLocalAnchorB = function() {\n return this.m_localAnchorB;\n };\n FrictionJoint2.prototype.setMaxForce = function(force) {\n this.m_maxForce = force;\n };\n FrictionJoint2.prototype.getMaxForce = function() {\n return this.m_maxForce;\n };\n FrictionJoint2.prototype.setMaxTorque = function(torque) {\n this.m_maxTorque = torque;\n };\n FrictionJoint2.prototype.getMaxTorque = function() {\n return this.m_maxTorque;\n };\n FrictionJoint2.prototype.getAnchorA = function() {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n };\n FrictionJoint2.prototype.getAnchorB = function() {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n };\n FrictionJoint2.prototype.getReactionForce = function(inv_dt) {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n };\n FrictionJoint2.prototype.getReactionTorque = function(inv_dt) {\n return inv_dt * this.m_angularImpulse;\n };\n FrictionJoint2.prototype.initVelocityConstraints = function(step) {\n this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n this.m_invMassA = this.m_bodyA.m_invMass;\n this.m_invMassB = this.m_bodyB.m_invMass;\n this.m_invIA = this.m_bodyA.m_invI;\n this.m_invIB = this.m_bodyB.m_invI;\n var aA = this.m_bodyA.c_position.a;\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var aB = this.m_bodyB.c_position.a;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n var mA = this.m_invMassA;\n var mB = this.m_invMassB;\n var iA = this.m_invIA;\n var iB = this.m_invIB;\n var K = new Mat22();\n K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y;\n K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y;\n K.ey.x = K.ex.y;\n K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x;\n this.m_linearMass = K.getInverse();\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0) {\n this.m_angularMass = 1 / this.m_angularMass;\n }\n if (step.warmStarting) {\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n var P3 = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n vA2.subMul(mA, P3);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_angularImpulse);\n vB2.addMul(mB, P3);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_angularImpulse);\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0;\n }\n this.m_bodyA.c_velocity.v = vA2;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB2;\n this.m_bodyB.c_velocity.w = wB;\n };\n FrictionJoint2.prototype.solveVelocityConstraints = function(step) {\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var mA = this.m_invMassA;\n var mB = this.m_invMassB;\n var iA = this.m_invIA;\n var iB = this.m_invIB;\n var h = step.dt;\n {\n var Cdot = wB - wA;\n var impulse = -this.m_angularMass * Cdot;\n var oldImpulse = this.m_angularImpulse;\n var maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n {\n var Cdot = Vec2.sub(Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB)), Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA)));\n var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n var oldImpulse = this.m_linearImpulse;\n this.m_linearImpulse.add(impulse);\n var maxImpulse = h * this.m_maxForce;\n if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) {\n this.m_linearImpulse.normalize();\n this.m_linearImpulse.mul(maxImpulse);\n }\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n vA2.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n vB2.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n this.m_bodyA.c_velocity.v = vA2;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB2;\n this.m_bodyB.c_velocity.w = wB;\n };\n FrictionJoint2.prototype.solvePositionConstraints = function(step) {\n return true;\n };\n FrictionJoint2.TYPE = \"friction-joint\";\n return FrictionJoint2;\n }(Joint)\n);\nvar Mat33 = (\n /** @class */\n function() {\n function Mat332(a2, b2, c2) {\n if (typeof a2 === \"object\" && a2 !== null) {\n this.ex = Vec3.clone(a2);\n this.ey = Vec3.clone(b2);\n this.ez = Vec3.clone(c2);\n } else {\n this.ex = Vec3.zero();\n this.ey = Vec3.zero();\n this.ez = Vec3.zero();\n }\n }\n Mat332.prototype.toString = function() {\n return JSON.stringify(this);\n };\n Mat332.isValid = function(obj) {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec3.isValid(obj.ex) && Vec3.isValid(obj.ey) && Vec3.isValid(obj.ez);\n };\n Mat332.assert = function(o) {\n };\n Mat332.prototype.setZero = function() {\n this.ex.setZero();\n this.ey.setZero();\n this.ez.setZero();\n return this;\n };\n Mat332.prototype.solve33 = function(v3) {\n var cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y;\n var cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z;\n var cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x;\n var det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z;\n if (det !== 0) {\n det = 1 / det;\n }\n var r = new Vec3();\n cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y;\n cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z;\n cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x;\n r.x = det * (v3.x * cross_x + v3.y * cross_y + v3.z * cross_z);\n cross_x = v3.y * this.ez.z - v3.z * this.ez.y;\n cross_y = v3.z * this.ez.x - v3.x * this.ez.z;\n cross_z = v3.x * this.ez.y - v3.y * this.ez.x;\n r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z);\n cross_x = this.ey.y * v3.z - this.ey.z * v3.y;\n cross_y = this.ey.z * v3.x - this.ey.x * v3.z;\n cross_z = this.ey.x * v3.y - this.ey.y * v3.x;\n r.z = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z);\n return r;\n };\n Mat332.prototype.solve22 = function(v3) {\n var a11 = this.ex.x;\n var a12 = this.ey.x;\n var a21 = this.ex.y;\n var a22 = this.ey.y;\n var det = a11 * a22 - a12 * a21;\n if (det !== 0) {\n det = 1 / det;\n }\n var r = Vec2.zero();\n r.x = det * (a22 * v3.x - a12 * v3.y);\n r.y = det * (a11 * v3.y - a21 * v3.x);\n return r;\n };\n Mat332.prototype.getInverse22 = function(M) {\n var a2 = this.ex.x;\n var b2 = this.ey.x;\n var c2 = this.ex.y;\n var d2 = this.ey.y;\n var det = a2 * d2 - b2 * c2;\n if (det !== 0) {\n det = 1 / det;\n }\n M.ex.x = det * d2;\n M.ey.x = -det * b2;\n M.ex.z = 0;\n M.ex.y = -det * c2;\n M.ey.y = det * a2;\n M.ey.z = 0;\n M.ez.x = 0;\n M.ez.y = 0;\n M.ez.z = 0;\n };\n Mat332.prototype.getSymInverse33 = function(M) {\n var det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez));\n if (det !== 0) {\n det = 1 / det;\n }\n var a11 = this.ex.x;\n var a12 = this.ey.x;\n var a13 = this.ez.x;\n var a22 = this.ey.y;\n var a23 = this.ez.y;\n var a33 = this.ez.z;\n M.ex.x = det * (a22 * a33 - a23 * a23);\n M.ex.y = det * (a13 * a23 - a12 * a33);\n M.ex.z = det * (a12 * a23 - a13 * a22);\n M.ey.x = M.ex.y;\n M.ey.y = det * (a11 * a33 - a13 * a13);\n M.ey.z = det * (a13 * a12 - a11 * a23);\n M.ez.x = M.ex.z;\n M.ez.y = M.ey.z;\n M.ez.z = det * (a11 * a22 - a12 * a12);\n };\n Mat332.mul = function(a2, b2) {\n if (b2 && \"z\" in b2 && \"y\" in b2 && \"x\" in b2) {\n var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y + a2.ez.x * b2.z;\n var y = a2.ex.y * b2.x + a2.ey.y * b2.y + a2.ez.y * b2.z;\n var z = a2.ex.z * b2.x + a2.ey.z * b2.y + a2.ez.z * b2.z;\n return new Vec3(x2, y, z);\n } else if (b2 && \"y\" in b2 && \"x\" in b2) {\n var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y;\n var y = a2.ex.y * b2.x + a2.ey.y * b2.y;\n return Vec2.neo(x2, y);\n }\n };\n Mat332.mulVec3 = function(a2, b2) {\n var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y + a2.ez.x * b2.z;\n var y = a2.ex.y * b2.x + a2.ey.y * b2.y + a2.ez.y * b2.z;\n var z = a2.ex.z * b2.x + a2.ey.z * b2.y + a2.ez.z * b2.z;\n return new Vec3(x2, y, z);\n };\n Mat332.mulVec2 = function(a2, b2) {\n var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y;\n var y = a2.ex.y * b2.x + a2.ey.y * b2.y;\n return Vec2.neo(x2, y);\n };\n Mat332.add = function(a2, b2) {\n return new Mat332(Vec3.add(a2.ex, b2.ex), Vec3.add(a2.ey, b2.ey), Vec3.add(a2.ez, b2.ez));\n };\n return Mat332;\n }()\n);\nvar math_abs$4 = Math.abs;\nvar LimitState$2;\n(function(LimitState2) {\n LimitState2[LimitState2[\"inactiveLimit\"] = 0] = \"inactiveLimit\";\n LimitState2[LimitState2[\"atLowerLimit\"] = 1] = \"atLowerLimit\";\n LimitState2[LimitState2[\"atUpperLimit\"] = 2] = \"atUpperLimit\";\n LimitState2[LimitState2[\"equalLimits\"] = 3] = \"equalLimits\";\n})(LimitState$2 || (LimitState$2 = {}));\nvar DEFAULTS$8 = {\n lowerAngle: 0,\n upperAngle: 0,\n maxMotorTorque: 0,\n motorSpeed: 0,\n enableLimit: false,\n enableMotor: false\n};\nvar RevoluteJoint = (\n /** @class */\n function(_super) {\n __extends(RevoluteJoint2, _super);\n function RevoluteJoint2(def, bodyA, bodyB, anchor) {\n var _this = this;\n var _a2, _b, _c, _d, _e, _f;\n if (!(_this instanceof RevoluteJoint2)) {\n return new RevoluteJoint2(def, bodyA, bodyB, anchor);\n }\n def = def !== null && def !== void 0 ? def : {};\n _this = _super.call(this, def, bodyA, bodyB) || this;\n bodyA = _this.m_bodyA;\n bodyB = _this.m_bodyB;\n _this.m_mass = new Mat33();\n _this.m_limitState = LimitState$2.inactiveLimit;\n _this.m_type = RevoluteJoint2.TYPE;\n if (Vec2.isValid(anchor)) {\n _this.m_localAnchorA = bodyA.getLocalPoint(anchor);\n } else if (Vec2.isValid(def.localAnchorA)) {\n _this.m_localAnchorA = Vec2.clone(def.localAnchorA);\n } else {\n _this.m_localAnchorA = Vec2.zero();\n }\n if (Vec2.isValid(anchor)) {\n _this.m_localAnchorB = bodyB.getLocalPoint(anchor);\n } else if (Vec2.isValid(def.localAnchorB)) {\n _this.m_localAnchorB = Vec2.clone(def.localAnchorB);\n } else {\n _this.m_localAnchorB = Vec2.zero();\n }\n if (Number.isFinite(def.referenceAngle)) {\n _this.m_referenceAngle = def.referenceAngle;\n } else {\n _this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle();\n }\n _this.m_impulse = new Vec3();\n _this.m_motorImpulse = 0;\n _this.m_lowerAngle = (_a2 = def.lowerAngle) !== null && _a2 !== void 0 ? _a2 : DEFAULTS$8.lowerAngle;\n _this.m_upperAngle = (_b = def.upperAngle) !== null && _b !== void 0 ? _b : DEFAULTS$8.upperAngle;\n _this.m_maxMotorTorque = (_c = def.maxMotorTorque) !== null && _c !== void 0 ? _c : DEFAULTS$8.maxMotorTorque;\n _this.m_motorSpeed = (_d = def.motorSpeed) !== null && _d !== void 0 ? _d : DEFAULTS$8.motorSpeed;\n _this.m_enableLimit = (_e = def.enableLimit) !== null && _e !== void 0 ? _e : DEFAULTS$8.enableLimit;\n _this.m_enableMotor = (_f = def.enableMotor) !== null && _f !== void 0 ? _f : DEFAULTS$8.enableMotor;\n return _this;\n }\n RevoluteJoint2.prototype._serialize = function() {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n lowerAngle: this.m_lowerAngle,\n upperAngle: this.m_upperAngle,\n maxMotorTorque: this.m_maxMotorTorque,\n motorSpeed: this.m_motorSpeed,\n enableLimit: this.m_enableLimit,\n enableMotor: this.m_enableMotor,\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle\n };\n };\n RevoluteJoint2._deserialize = function(data, world, restore) {\n data = __assign({}, data);\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n var joint = new RevoluteJoint2(data);\n return joint;\n };\n RevoluteJoint2.prototype._reset = function(def) {\n if (def.anchorA) {\n this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA));\n } else if (def.localAnchorA) {\n this.m_localAnchorA.setVec2(def.localAnchorA);\n }\n if (def.anchorB) {\n this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB));\n } else if (def.localAnchorB) {\n this.m_localAnchorB.setVec2(def.localAnchorB);\n }\n if (Number.isFinite(def.referenceAngle)) {\n this.m_referenceAngle = def.referenceAngle;\n }\n if (def.enableLimit !== void 0) {\n this.m_enableLimit = def.enableLimit;\n }\n if (Number.isFinite(def.lowerAngle)) {\n this.m_lowerAngle = def.lowerAngle;\n }\n if (Number.isFinite(def.upperAngle)) {\n this.m_upperAngle = def.upperAngle;\n }\n if (Number.isFinite(def.maxMotorTorque)) {\n this.m_maxMotorTorque = def.maxMotorTorque;\n }\n if (Number.isFinite(def.motorSpeed)) {\n this.m_motorSpeed = def.motorSpeed;\n }\n if (def.enableMotor !== void 0) {\n this.m_enableMotor = def.enableMotor;\n }\n };\n RevoluteJoint2.prototype.getLocalAnchorA = function() {\n return this.m_localAnchorA;\n };\n RevoluteJoint2.prototype.getLocalAnchorB = function() {\n return this.m_localAnchorB;\n };\n RevoluteJoint2.prototype.getReferenceAngle = function() {\n return this.m_referenceAngle;\n };\n RevoluteJoint2.prototype.getJointAngle = function() {\n var bA = this.m_bodyA;\n var bB = this.m_bodyB;\n return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;\n };\n RevoluteJoint2.prototype.getJointSpeed = function() {\n var bA = this.m_bodyA;\n var bB = this.m_bodyB;\n return bB.m_angularVelocity - bA.m_angularVelocity;\n };\n RevoluteJoint2.prototype.isMotorEnabled = function() {\n return this.m_enableMotor;\n };\n RevoluteJoint2.prototype.enableMotor = function(flag) {\n if (flag == this.m_enableMotor)\n return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n };\n RevoluteJoint2.prototype.getMotorTorque = function(inv_dt) {\n return inv_dt * this.m_motorImpulse;\n };\n RevoluteJoint2.prototype.setMotorSpeed = function(speed) {\n if (speed == this.m_motorSpeed)\n return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n };\n RevoluteJoint2.prototype.getMotorSpeed = function() {\n return this.m_motorSpeed;\n };\n RevoluteJoint2.prototype.setMaxMotorTorque = function(torque) {\n if (torque == this.m_maxMotorTorque)\n return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n };\n RevoluteJoint2.prototype.getMaxMotorTorque = function() {\n return this.m_maxMotorTorque;\n };\n RevoluteJoint2.prototype.isLimitEnabled = function() {\n return this.m_enableLimit;\n };\n RevoluteJoint2.prototype.enableLimit = function(flag) {\n if (flag != this.m_enableLimit) {\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableLimit = flag;\n this.m_impulse.z = 0;\n }\n };\n RevoluteJoint2.prototype.getLowerLimit = function() {\n return this.m_lowerAngle;\n };\n RevoluteJoint2.prototype.getUpperLimit = function() {\n return this.m_upperAngle;\n };\n RevoluteJoint2.prototype.setLimits = function(lower, upper) {\n if (lower != this.m_lowerAngle || upper != this.m_upperAngle) {\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_impulse.z = 0;\n this.m_lowerAngle = lower;\n this.m_upperAngle = upper;\n }\n };\n RevoluteJoint2.prototype.getAnchorA = function() {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n };\n RevoluteJoint2.prototype.getAnchorB = function() {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n };\n RevoluteJoint2.prototype.getReactionForce = function(inv_dt) {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n };\n RevoluteJoint2.prototype.getReactionTorque = function(inv_dt) {\n return inv_dt * this.m_impulse.z;\n };\n RevoluteJoint2.prototype.initVelocityConstraints = function(step) {\n this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n this.m_invMassA = this.m_bodyA.m_invMass;\n this.m_invMassB = this.m_bodyB.m_invMass;\n this.m_invIA = this.m_bodyA.m_invI;\n this.m_invIB = this.m_bodyB.m_invI;\n var aA = this.m_bodyA.c_position.a;\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var aB = this.m_bodyB.c_position.a;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n var mA = this.m_invMassA;\n var mB = this.m_invMassB;\n var iA = this.m_invIA;\n var iB = this.m_invIB;\n var fixedRotation = iA + iB === 0;\n this.m_mass.ex.x = mA + mB + this.m_rA.y * this.m_rA.y * iA + this.m_rB.y * this.m_rB.y * iB;\n this.m_mass.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB;\n this.m_mass.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB;\n this.m_mass.ex.y = this.m_mass.ey.x;\n this.m_mass.ey.y = mA + mB + this.m_rA.x * this.m_rA.x * iA + this.m_rB.x * this.m_rB.x * iB;\n this.m_mass.ez.y = this.m_rA.x * iA + this.m_rB.x * iB;\n this.m_mass.ex.z = this.m_mass.ez.x;\n this.m_mass.ey.z = this.m_mass.ez.y;\n this.m_mass.ez.z = iA + iB;\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0) {\n this.m_motorMass = 1 / this.m_motorMass;\n }\n if (this.m_enableMotor == false || fixedRotation) {\n this.m_motorImpulse = 0;\n }\n if (this.m_enableLimit && fixedRotation == false) {\n var jointAngle = aB - aA - this.m_referenceAngle;\n if (math_abs$4(this.m_upperAngle - this.m_lowerAngle) < 2 * SettingsInternal.angularSlop) {\n this.m_limitState = LimitState$2.equalLimits;\n } else if (jointAngle <= this.m_lowerAngle) {\n if (this.m_limitState != LimitState$2.atLowerLimit) {\n this.m_impulse.z = 0;\n }\n this.m_limitState = LimitState$2.atLowerLimit;\n } else if (jointAngle >= this.m_upperAngle) {\n if (this.m_limitState != LimitState$2.atUpperLimit) {\n this.m_impulse.z = 0;\n }\n this.m_limitState = LimitState$2.atUpperLimit;\n } else {\n this.m_limitState = LimitState$2.inactiveLimit;\n this.m_impulse.z = 0;\n }\n } else {\n this.m_limitState = LimitState$2.inactiveLimit;\n }\n if (step.warmStarting) {\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n var P3 = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n vA2.subMul(mA, P3);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_motorImpulse + this.m_impulse.z);\n vB2.addMul(mB, P3);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_motorImpulse + this.m_impulse.z);\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0;\n }\n this.m_bodyA.c_velocity.v = vA2;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB2;\n this.m_bodyB.c_velocity.w = wB;\n };\n RevoluteJoint2.prototype.solveVelocityConstraints = function(step) {\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var mA = this.m_invMassA;\n var mB = this.m_invMassB;\n var iA = this.m_invIA;\n var iB = this.m_invIB;\n var fixedRotation = iA + iB === 0;\n if (this.m_enableMotor && this.m_limitState != LimitState$2.equalLimits && fixedRotation == false) {\n var Cdot = wB - wA - this.m_motorSpeed;\n var impulse = -this.m_motorMass * Cdot;\n var oldImpulse = this.m_motorImpulse;\n var maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) {\n var Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA));\n var Cdot2 = wB - wA;\n var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n var impulse = Vec3.neg(this.m_mass.solve33(Cdot));\n if (this.m_limitState == LimitState$2.equalLimits) {\n this.m_impulse.add(impulse);\n } else if (this.m_limitState == LimitState$2.atLowerLimit) {\n var newImpulse = this.m_impulse.z + impulse.z;\n if (newImpulse < 0) {\n var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n var reduced = this.m_mass.solve22(rhs);\n impulse.x = reduced.x;\n impulse.y = reduced.y;\n impulse.z = -this.m_impulse.z;\n this.m_impulse.x += reduced.x;\n this.m_impulse.y += reduced.y;\n this.m_impulse.z = 0;\n } else {\n this.m_impulse.add(impulse);\n }\n } else if (this.m_limitState == LimitState$2.atUpperLimit) {\n var newImpulse = this.m_impulse.z + impulse.z;\n if (newImpulse > 0) {\n var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n var reduced = this.m_mass.solve22(rhs);\n impulse.x = reduced.x;\n impulse.y = reduced.y;\n impulse.z = -this.m_impulse.z;\n this.m_impulse.x += reduced.x;\n this.m_impulse.y += reduced.y;\n this.m_impulse.z = 0;\n } else {\n this.m_impulse.add(impulse);\n }\n }\n var P3 = Vec2.neo(impulse.x, impulse.y);\n vA2.subMul(mA, P3);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + impulse.z);\n vB2.addMul(mB, P3);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + impulse.z);\n } else {\n var Cdot = Vec2.zero();\n Cdot.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA));\n var impulse = this.m_mass.solve22(Vec2.neg(Cdot));\n this.m_impulse.x += impulse.x;\n this.m_impulse.y += impulse.y;\n vA2.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n vB2.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n this.m_bodyA.c_velocity.v = vA2;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB2;\n this.m_bodyB.c_velocity.w = wB;\n };\n RevoluteJoint2.prototype.solvePositionConstraints = function(step) {\n var cA2 = this.m_bodyA.c_position.c;\n var aA = this.m_bodyA.c_position.a;\n var cB2 = this.m_bodyB.c_position.c;\n var aB = this.m_bodyB.c_position.a;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n var angularError = 0;\n var positionError = 0;\n var fixedRotation = this.m_invIA + this.m_invIB == 0;\n if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) {\n var angle = aB - aA - this.m_referenceAngle;\n var limitImpulse = 0;\n if (this.m_limitState == LimitState$2.equalLimits) {\n var C = clamp(angle - this.m_lowerAngle, -SettingsInternal.maxAngularCorrection, SettingsInternal.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n angularError = math_abs$4(C);\n } else if (this.m_limitState == LimitState$2.atLowerLimit) {\n var C = angle - this.m_lowerAngle;\n angularError = -C;\n C = clamp(C + SettingsInternal.angularSlop, -SettingsInternal.maxAngularCorrection, 0);\n limitImpulse = -this.m_motorMass * C;\n } else if (this.m_limitState == LimitState$2.atUpperLimit) {\n var C = angle - this.m_upperAngle;\n angularError = C;\n C = clamp(C - SettingsInternal.angularSlop, 0, SettingsInternal.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n }\n aA -= this.m_invIA * limitImpulse;\n aB += this.m_invIB * limitImpulse;\n }\n {\n qA.setAngle(aA);\n qB.setAngle(aB);\n var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n var C = Vec2.zero();\n C.addCombine(1, cB2, 1, rB2);\n C.subCombine(1, cA2, 1, rA2);\n positionError = C.length();\n var mA = this.m_invMassA;\n var mB = this.m_invMassB;\n var iA = this.m_invIA;\n var iB = this.m_invIB;\n var K = new Mat22();\n K.ex.x = mA + mB + iA * rA2.y * rA2.y + iB * rB2.y * rB2.y;\n K.ex.y = -iA * rA2.x * rA2.y - iB * rB2.x * rB2.y;\n K.ey.x = K.ex.y;\n K.ey.y = mA + mB + iA * rA2.x * rA2.x + iB * rB2.x * rB2.x;\n var impulse = Vec2.neg(K.solve(C));\n cA2.subMul(mA, impulse);\n aA -= iA * Vec2.crossVec2Vec2(rA2, impulse);\n cB2.addMul(mB, impulse);\n aB += iB * Vec2.crossVec2Vec2(rB2, impulse);\n }\n this.m_bodyA.c_position.c.setVec2(cA2);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB2);\n this.m_bodyB.c_position.a = aB;\n return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop;\n };\n RevoluteJoint2.TYPE = \"revolute-joint\";\n return RevoluteJoint2;\n }(Joint)\n);\nvar math_abs$3 = Math.abs;\nvar math_max = Math.max;\nvar math_min$2 = Math.min;\nvar LimitState$1;\n(function(LimitState2) {\n LimitState2[LimitState2[\"inactiveLimit\"] = 0] = \"inactiveLimit\";\n LimitState2[LimitState2[\"atLowerLimit\"] = 1] = \"atLowerLimit\";\n LimitState2[LimitState2[\"atUpperLimit\"] = 2] = \"atUpperLimit\";\n LimitState2[LimitState2[\"equalLimits\"] = 3] = \"equalLimits\";\n})(LimitState$1 || (LimitState$1 = {}));\nvar DEFAULTS$7 = {\n enableLimit: false,\n lowerTranslation: 0,\n upperTranslation: 0,\n enableMotor: false,\n maxMotorForce: 0,\n motorSpeed: 0\n};\nvar PrismaticJoint = (\n /** @class */\n function(_super) {\n __extends(PrismaticJoint2, _super);\n function PrismaticJoint2(def, bodyA, bodyB, anchor, axis) {\n var _this = this;\n if (!(_this instanceof PrismaticJoint2)) {\n return new PrismaticJoint2(def, bodyA, bodyB, anchor, axis);\n }\n def = options(def, DEFAULTS$7);\n _this = _super.call(this, def, bodyA, bodyB) || this;\n bodyA = _this.m_bodyA;\n bodyB = _this.m_bodyB;\n _this.m_type = PrismaticJoint2.TYPE;\n _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero());\n _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero());\n _this.m_localXAxisA = Vec2.clone(axis ? bodyA.getLocalVector(axis) : def.localAxisA || Vec2.neo(1, 0));\n _this.m_localXAxisA.normalize();\n _this.m_localYAxisA = Vec2.crossNumVec2(1, _this.m_localXAxisA);\n _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle();\n _this.m_impulse = new Vec3();\n _this.m_motorMass = 0;\n _this.m_motorImpulse = 0;\n _this.m_lowerTranslation = def.lowerTranslation;\n _this.m_upperTranslation = def.upperTranslation;\n _this.m_maxMotorForce = def.maxMotorForce;\n _this.m_motorSpeed = def.motorSpeed;\n _this.m_enableLimit = def.enableLimit;\n _this.m_enableMotor = def.enableMotor;\n _this.m_limitState = LimitState$1.inactiveLimit;\n _this.m_axis = Vec2.zero();\n _this.m_perp = Vec2.zero();\n _this.m_K = new Mat33();\n return _this;\n }\n PrismaticJoint2.prototype._serialize = function() {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n lowerTranslation: this.m_lowerTranslation,\n upperTranslation: this.m_upperTranslation,\n maxMotorForce: this.m_maxMotorForce,\n motorSpeed: this.m_motorSpeed,\n enableLimit: this.m_enableLimit,\n enableMotor: this.m_enableMotor,\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n referenceAngle: this.m_referenceAngle\n };\n };\n PrismaticJoint2._deserialize = function(data, world, restore) {\n data = __assign({}, data);\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n data.localAxisA = Vec2.clone(data.localAxisA);\n var joint = new PrismaticJoint2(data);\n return joint;\n };\n PrismaticJoint2.prototype._reset = function(def) {\n if (def.anchorA) {\n this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA));\n } else if (def.localAnchorA) {\n this.m_localAnchorA.setVec2(def.localAnchorA);\n }\n if (def.anchorB) {\n this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB));\n } else if (def.localAnchorB) {\n this.m_localAnchorB.setVec2(def.localAnchorB);\n }\n if (def.localAxisA) {\n this.m_localXAxisA.setVec2(def.localAxisA);\n this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1, def.localAxisA));\n }\n if (Number.isFinite(def.referenceAngle)) {\n this.m_referenceAngle = def.referenceAngle;\n }\n if (typeof def.enableLimit !== \"undefined\") {\n this.m_enableLimit = !!def.enableLimit;\n }\n if (Number.isFinite(def.lowerTranslation)) {\n this.m_lowerTranslation = def.lowerTranslation;\n }\n if (Number.isFinite(def.upperTranslation)) {\n this.m_upperTranslation = def.upperTranslation;\n }\n if (typeof def.enableMotor !== \"undefined\") {\n this.m_enableMotor = !!def.enableMotor;\n }\n if (Number.isFinite(def.maxMotorForce)) {\n this.m_maxMotorForce = def.maxMotorForce;\n }\n if (Number.isFinite(def.motorSpeed)) {\n this.m_motorSpeed = def.motorSpeed;\n }\n };\n PrismaticJoint2.prototype.getLocalAnchorA = function() {\n return this.m_localAnchorA;\n };\n PrismaticJoint2.prototype.getLocalAnchorB = function() {\n return this.m_localAnchorB;\n };\n PrismaticJoint2.prototype.getLocalAxisA = function() {\n return this.m_localXAxisA;\n };\n PrismaticJoint2.prototype.getReferenceAngle = function() {\n return this.m_referenceAngle;\n };\n PrismaticJoint2.prototype.getJointTranslation = function() {\n var pA2 = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n var pB2 = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n var d2 = Vec2.sub(pB2, pA2);\n var axis = this.m_bodyA.getWorldVector(this.m_localXAxisA);\n var translation2 = Vec2.dot(d2, axis);\n return translation2;\n };\n PrismaticJoint2.prototype.getJointSpeed = function() {\n var bA = this.m_bodyA;\n var bB = this.m_bodyB;\n var rA2 = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter));\n var rB2 = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter));\n var p1 = Vec2.add(bA.m_sweep.c, rA2);\n var p2 = Vec2.add(bB.m_sweep.c, rB2);\n var d2 = Vec2.sub(p2, p1);\n var axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA);\n var vA2 = bA.m_linearVelocity;\n var vB2 = bB.m_linearVelocity;\n var wA = bA.m_angularVelocity;\n var wB = bB.m_angularVelocity;\n var speed = Vec2.dot(d2, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB2, wB, rB2), Vec2.addCrossNumVec2(vA2, wA, rA2)));\n return speed;\n };\n PrismaticJoint2.prototype.isLimitEnabled = function() {\n return this.m_enableLimit;\n };\n PrismaticJoint2.prototype.enableLimit = function(flag) {\n if (flag != this.m_enableLimit) {\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableLimit = flag;\n this.m_impulse.z = 0;\n }\n };\n PrismaticJoint2.prototype.getLowerLimit = function() {\n return this.m_lowerTranslation;\n };\n PrismaticJoint2.prototype.getUpperLimit = function() {\n return this.m_upperTranslation;\n };\n PrismaticJoint2.prototype.setLimits = function(lower, upper) {\n if (lower != this.m_lowerTranslation || upper != this.m_upperTranslation) {\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_lowerTranslation = lower;\n this.m_upperTranslation = upper;\n this.m_impulse.z = 0;\n }\n };\n PrismaticJoint2.prototype.isMotorEnabled = function() {\n return this.m_enableMotor;\n };\n PrismaticJoint2.prototype.enableMotor = function(flag) {\n if (flag == this.m_enableMotor)\n return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n };\n PrismaticJoint2.prototype.setMotorSpeed = function(speed) {\n if (speed == this.m_motorSpeed)\n return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n };\n PrismaticJoint2.prototype.setMaxMotorForce = function(force) {\n if (force == this.m_maxMotorForce)\n return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorForce = force;\n };\n PrismaticJoint2.prototype.getMaxMotorForce = function() {\n return this.m_maxMotorForce;\n };\n PrismaticJoint2.prototype.getMotorSpeed = function() {\n return this.m_motorSpeed;\n };\n PrismaticJoint2.prototype.getMotorForce = function(inv_dt) {\n return inv_dt * this.m_motorImpulse;\n };\n PrismaticJoint2.prototype.getAnchorA = function() {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n };\n PrismaticJoint2.prototype.getAnchorB = function() {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n };\n PrismaticJoint2.prototype.getReactionForce = function(inv_dt) {\n return Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis).mul(inv_dt);\n };\n PrismaticJoint2.prototype.getReactionTorque = function(inv_dt) {\n return inv_dt * this.m_impulse.y;\n };\n PrismaticJoint2.prototype.initVelocityConstraints = function(step) {\n this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n this.m_invMassA = this.m_bodyA.m_invMass;\n this.m_invMassB = this.m_bodyB.m_invMass;\n this.m_invIA = this.m_bodyA.m_invI;\n this.m_invIB = this.m_bodyB.m_invI;\n var cA2 = this.m_bodyA.c_position.c;\n var aA = this.m_bodyA.c_position.a;\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var cB2 = this.m_bodyB.c_position.c;\n var aB = this.m_bodyB.c_position.a;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n var d2 = Vec2.zero();\n d2.addCombine(1, cB2, 1, rB2);\n d2.subCombine(1, cA2, 1, rA2);\n var mA = this.m_invMassA;\n var mB = this.m_invMassB;\n var iA = this.m_invIA;\n var iB = this.m_invIB;\n {\n this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_axis);\n this.m_a2 = Vec2.crossVec2Vec2(rB2, this.m_axis);\n this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2;\n if (this.m_motorMass > 0) {\n this.m_motorMass = 1 / this.m_motorMass;\n }\n }\n {\n this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA);\n this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_perp);\n this.m_s2 = Vec2.crossVec2Vec2(rB2, this.m_perp);\n Vec2.crossVec2Vec2(rA2, this.m_perp);\n var k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2;\n var k12 = iA * this.m_s1 + iB * this.m_s2;\n var k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2;\n var k22 = iA + iB;\n if (k22 == 0) {\n k22 = 1;\n }\n var k23 = iA * this.m_a1 + iB * this.m_a2;\n var k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2;\n this.m_K.ex.set(k11, k12, k13);\n this.m_K.ey.set(k12, k22, k23);\n this.m_K.ez.set(k13, k23, k33);\n }\n if (this.m_enableLimit) {\n var jointTranslation = Vec2.dot(this.m_axis, d2);\n if (math_abs$3(this.m_upperTranslation - this.m_lowerTranslation) < 2 * SettingsInternal.linearSlop) {\n this.m_limitState = LimitState$1.equalLimits;\n } else if (jointTranslation <= this.m_lowerTranslation) {\n if (this.m_limitState != LimitState$1.atLowerLimit) {\n this.m_limitState = LimitState$1.atLowerLimit;\n this.m_impulse.z = 0;\n }\n } else if (jointTranslation >= this.m_upperTranslation) {\n if (this.m_limitState != LimitState$1.atUpperLimit) {\n this.m_limitState = LimitState$1.atUpperLimit;\n this.m_impulse.z = 0;\n }\n } else {\n this.m_limitState = LimitState$1.inactiveLimit;\n this.m_impulse.z = 0;\n }\n } else {\n this.m_limitState = LimitState$1.inactiveLimit;\n this.m_impulse.z = 0;\n }\n if (this.m_enableMotor == false) {\n this.m_motorImpulse = 0;\n }\n if (step.warmStarting) {\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n var P3 = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis);\n var LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1;\n var LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;\n vA2.subMul(mA, P3);\n wA -= iA * LA;\n vB2.addMul(mB, P3);\n wB += iB * LB;\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0;\n }\n this.m_bodyA.c_velocity.v.setVec2(vA2);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB2);\n this.m_bodyB.c_velocity.w = wB;\n };\n PrismaticJoint2.prototype.solveVelocityConstraints = function(step) {\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var mA = this.m_invMassA;\n var mB = this.m_invMassB;\n var iA = this.m_invIA;\n var iB = this.m_invIB;\n if (this.m_enableMotor && this.m_limitState != LimitState$1.equalLimits) {\n var Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB2, vA2)) + this.m_a2 * wB - this.m_a1 * wA;\n var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);\n var oldImpulse = this.m_motorImpulse;\n var maxImpulse = step.dt * this.m_maxMotorForce;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n var P3 = Vec2.mulNumVec2(impulse, this.m_axis);\n var LA = impulse * this.m_a1;\n var LB = impulse * this.m_a2;\n vA2.subMul(mA, P3);\n wA -= iA * LA;\n vB2.addMul(mB, P3);\n wB += iB * LB;\n }\n var Cdot1 = Vec2.zero();\n Cdot1.x += Vec2.dot(this.m_perp, vB2) + this.m_s2 * wB;\n Cdot1.x -= Vec2.dot(this.m_perp, vA2) + this.m_s1 * wA;\n Cdot1.y = wB - wA;\n if (this.m_enableLimit && this.m_limitState != LimitState$1.inactiveLimit) {\n var Cdot2 = 0;\n Cdot2 += Vec2.dot(this.m_axis, vB2) + this.m_a2 * wB;\n Cdot2 -= Vec2.dot(this.m_axis, vA2) + this.m_a1 * wA;\n var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n var f1 = Vec3.clone(this.m_impulse);\n var df = this.m_K.solve33(Vec3.neg(Cdot));\n this.m_impulse.add(df);\n if (this.m_limitState == LimitState$1.atLowerLimit) {\n this.m_impulse.z = math_max(this.m_impulse.z, 0);\n } else if (this.m_limitState == LimitState$1.atUpperLimit) {\n this.m_impulse.z = math_min$2(this.m_impulse.z, 0);\n }\n var b2 = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y));\n var f2r = Vec2.add(this.m_K.solve22(b2), Vec2.neo(f1.x, f1.y));\n this.m_impulse.x = f2r.x;\n this.m_impulse.y = f2r.y;\n df = Vec3.sub(this.m_impulse, f1);\n var P3 = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis);\n var LA = df.x * this.m_s1 + df.y + df.z * this.m_a1;\n var LB = df.x * this.m_s2 + df.y + df.z * this.m_a2;\n vA2.subMul(mA, P3);\n wA -= iA * LA;\n vB2.addMul(mB, P3);\n wB += iB * LB;\n } else {\n var df = this.m_K.solve22(Vec2.neg(Cdot1));\n this.m_impulse.x += df.x;\n this.m_impulse.y += df.y;\n var P3 = Vec2.mulNumVec2(df.x, this.m_perp);\n var LA = df.x * this.m_s1 + df.y;\n var LB = df.x * this.m_s2 + df.y;\n vA2.subMul(mA, P3);\n wA -= iA * LA;\n vB2.addMul(mB, P3);\n wB += iB * LB;\n }\n this.m_bodyA.c_velocity.v = vA2;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB2;\n this.m_bodyB.c_velocity.w = wB;\n };\n PrismaticJoint2.prototype.solvePositionConstraints = function(step) {\n var cA2 = this.m_bodyA.c_position.c;\n var aA = this.m_bodyA.c_position.a;\n var cB2 = this.m_bodyB.c_position.c;\n var aB = this.m_bodyB.c_position.a;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n var mA = this.m_invMassA;\n var mB = this.m_invMassB;\n var iA = this.m_invIA;\n var iB = this.m_invIB;\n var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n var d2 = Vec2.sub(Vec2.add(cB2, rB2), Vec2.add(cA2, rA2));\n var axis = Rot.mulVec2(qA, this.m_localXAxisA);\n var a1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), axis);\n var a2 = Vec2.crossVec2Vec2(rB2, axis);\n var perp2 = Rot.mulVec2(qA, this.m_localYAxisA);\n var s1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), perp2);\n var s2 = Vec2.crossVec2Vec2(rB2, perp2);\n var impulse = new Vec3();\n var C1 = Vec2.zero();\n C1.x = Vec2.dot(perp2, d2);\n C1.y = aB - aA - this.m_referenceAngle;\n var linearError = math_abs$3(C1.x);\n var angularError = math_abs$3(C1.y);\n var linearSlop = SettingsInternal.linearSlop;\n var maxLinearCorrection = SettingsInternal.maxLinearCorrection;\n var active = false;\n var C2 = 0;\n if (this.m_enableLimit) {\n var translation2 = Vec2.dot(axis, d2);\n if (math_abs$3(this.m_upperTranslation - this.m_lowerTranslation) < 2 * linearSlop) {\n C2 = clamp(translation2, -maxLinearCorrection, maxLinearCorrection);\n linearError = math_max(linearError, math_abs$3(translation2));\n active = true;\n } else if (translation2 <= this.m_lowerTranslation) {\n C2 = clamp(translation2 - this.m_lowerTranslation + linearSlop, -maxLinearCorrection, 0);\n linearError = Math.max(linearError, this.m_lowerTranslation - translation2);\n active = true;\n } else if (translation2 >= this.m_upperTranslation) {\n C2 = clamp(translation2 - this.m_upperTranslation - linearSlop, 0, maxLinearCorrection);\n linearError = Math.max(linearError, translation2 - this.m_upperTranslation);\n active = true;\n }\n }\n if (active) {\n var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n var k12 = iA * s1 + iB * s2;\n var k13 = iA * s1 * a1 + iB * s2 * a2;\n var k22 = iA + iB;\n if (k22 == 0) {\n k22 = 1;\n }\n var k23 = iA * a1 + iB * a2;\n var k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2;\n var K = new Mat33();\n K.ex.set(k11, k12, k13);\n K.ey.set(k12, k22, k23);\n K.ez.set(k13, k23, k33);\n var C = new Vec3();\n C.x = C1.x;\n C.y = C1.y;\n C.z = C2;\n impulse = K.solve33(Vec3.neg(C));\n } else {\n var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n var k12 = iA * s1 + iB * s2;\n var k22 = iA + iB;\n if (k22 == 0) {\n k22 = 1;\n }\n var K = new Mat22();\n K.ex.setNum(k11, k12);\n K.ey.setNum(k12, k22);\n var impulse1 = K.solve(Vec2.neg(C1));\n impulse.x = impulse1.x;\n impulse.y = impulse1.y;\n impulse.z = 0;\n }\n var P3 = Vec2.combine(impulse.x, perp2, impulse.z, axis);\n var LA = impulse.x * s1 + impulse.y + impulse.z * a1;\n var LB = impulse.x * s2 + impulse.y + impulse.z * a2;\n cA2.subMul(mA, P3);\n aA -= iA * LA;\n cB2.addMul(mB, P3);\n aB += iB * LB;\n this.m_bodyA.c_position.c = cA2;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB2;\n this.m_bodyB.c_position.a = aB;\n return linearError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop;\n };\n PrismaticJoint2.TYPE = \"prismatic-joint\";\n return PrismaticJoint2;\n }(Joint)\n);\nvar DEFAULTS$6 = {\n ratio: 1\n};\nvar GearJoint = (\n /** @class */\n function(_super) {\n __extends(GearJoint2, _super);\n function GearJoint2(def, bodyA, bodyB, joint1, joint2, ratio) {\n var _this = this;\n if (!(_this instanceof GearJoint2)) {\n return new GearJoint2(def, bodyA, bodyB, joint1, joint2, ratio);\n }\n def = options(def, DEFAULTS$6);\n _this = _super.call(this, def, bodyA, bodyB) || this;\n bodyA = _this.m_bodyA;\n bodyB = _this.m_bodyB;\n _this.m_type = GearJoint2.TYPE;\n _this.m_joint1 = joint1 ? joint1 : def.joint1;\n _this.m_joint2 = joint2 ? joint2 : def.joint2;\n _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio;\n _this.m_type1 = _this.m_joint1.getType();\n _this.m_type2 = _this.m_joint2.getType();\n var coordinateA;\n var coordinateB;\n _this.m_bodyC = _this.m_joint1.getBodyA();\n _this.m_bodyA = _this.m_joint1.getBodyB();\n var xfA2 = _this.m_bodyA.m_xf;\n var aA = _this.m_bodyA.m_sweep.a;\n var xfC = _this.m_bodyC.m_xf;\n var aC = _this.m_bodyC.m_sweep.a;\n if (_this.m_type1 === RevoluteJoint.TYPE) {\n var revolute = _this.m_joint1;\n _this.m_localAnchorC = revolute.m_localAnchorA;\n _this.m_localAnchorA = revolute.m_localAnchorB;\n _this.m_referenceAngleA = revolute.m_referenceAngle;\n _this.m_localAxisC = Vec2.zero();\n coordinateA = aA - aC - _this.m_referenceAngleA;\n } else {\n var prismatic = _this.m_joint1;\n _this.m_localAnchorC = prismatic.m_localAnchorA;\n _this.m_localAnchorA = prismatic.m_localAnchorB;\n _this.m_referenceAngleA = prismatic.m_referenceAngle;\n _this.m_localAxisC = prismatic.m_localXAxisA;\n var pC = _this.m_localAnchorC;\n var pA2 = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA2.q, _this.m_localAnchorA), Vec2.sub(xfA2.p, xfC.p)));\n coordinateA = Vec2.dot(pA2, _this.m_localAxisC) - Vec2.dot(pC, _this.m_localAxisC);\n }\n _this.m_bodyD = _this.m_joint2.getBodyA();\n _this.m_bodyB = _this.m_joint2.getBodyB();\n var xfB2 = _this.m_bodyB.m_xf;\n var aB = _this.m_bodyB.m_sweep.a;\n var xfD = _this.m_bodyD.m_xf;\n var aD = _this.m_bodyD.m_sweep.a;\n if (_this.m_type2 === RevoluteJoint.TYPE) {\n var revolute = _this.m_joint2;\n _this.m_localAnchorD = revolute.m_localAnchorA;\n _this.m_localAnchorB = revolute.m_localAnchorB;\n _this.m_referenceAngleB = revolute.m_referenceAngle;\n _this.m_localAxisD = Vec2.zero();\n coordinateB = aB - aD - _this.m_referenceAngleB;\n } else {\n var prismatic = _this.m_joint2;\n _this.m_localAnchorD = prismatic.m_localAnchorA;\n _this.m_localAnchorB = prismatic.m_localAnchorB;\n _this.m_referenceAngleB = prismatic.m_referenceAngle;\n _this.m_localAxisD = prismatic.m_localXAxisA;\n var pD = _this.m_localAnchorD;\n var pB2 = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB2.q, _this.m_localAnchorB), Vec2.sub(xfB2.p, xfD.p)));\n coordinateB = Vec2.dot(pB2, _this.m_localAxisD) - Vec2.dot(pD, _this.m_localAxisD);\n }\n _this.m_constant = coordinateA + _this.m_ratio * coordinateB;\n _this.m_impulse = 0;\n return _this;\n }\n GearJoint2.prototype._serialize = function() {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n joint1: this.m_joint1,\n joint2: this.m_joint2,\n ratio: this.m_ratio\n // _constant: this.m_constant,\n };\n };\n GearJoint2._deserialize = function(data, world, restore) {\n data = __assign({}, data);\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n data.joint1 = restore(Joint, data.joint1, world);\n data.joint2 = restore(Joint, data.joint2, world);\n var joint = new GearJoint2(data);\n return joint;\n };\n GearJoint2.prototype._reset = function(def) {\n if (Number.isFinite(def.ratio)) {\n this.m_ratio = def.ratio;\n }\n };\n GearJoint2.prototype.getJoint1 = function() {\n return this.m_joint1;\n };\n GearJoint2.prototype.getJoint2 = function() {\n return this.m_joint2;\n };\n GearJoint2.prototype.setRatio = function(ratio) {\n this.m_ratio = ratio;\n };\n GearJoint2.prototype.getRatio = function() {\n return this.m_ratio;\n };\n GearJoint2.prototype.getAnchorA = function() {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n };\n GearJoint2.prototype.getAnchorB = function() {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n };\n GearJoint2.prototype.getReactionForce = function(inv_dt) {\n return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt);\n };\n GearJoint2.prototype.getReactionTorque = function(inv_dt) {\n var L = this.m_impulse * this.m_JwA;\n return inv_dt * L;\n };\n GearJoint2.prototype.initVelocityConstraints = function(step) {\n this.m_lcA = this.m_bodyA.m_sweep.localCenter;\n this.m_lcB = this.m_bodyB.m_sweep.localCenter;\n this.m_lcC = this.m_bodyC.m_sweep.localCenter;\n this.m_lcD = this.m_bodyD.m_sweep.localCenter;\n this.m_mA = this.m_bodyA.m_invMass;\n this.m_mB = this.m_bodyB.m_invMass;\n this.m_mC = this.m_bodyC.m_invMass;\n this.m_mD = this.m_bodyD.m_invMass;\n this.m_iA = this.m_bodyA.m_invI;\n this.m_iB = this.m_bodyB.m_invI;\n this.m_iC = this.m_bodyC.m_invI;\n this.m_iD = this.m_bodyD.m_invI;\n var aA = this.m_bodyA.c_position.a;\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var aB = this.m_bodyB.c_position.a;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var aC = this.m_bodyC.c_position.a;\n var vC = this.m_bodyC.c_velocity.v;\n var wC = this.m_bodyC.c_velocity.w;\n var aD = this.m_bodyD.c_position.a;\n var vD = this.m_bodyD.c_velocity.v;\n var wD = this.m_bodyD.c_velocity.w;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n var qC = Rot.neo(aC);\n var qD = Rot.neo(aD);\n this.m_mass = 0;\n if (this.m_type1 == RevoluteJoint.TYPE) {\n this.m_JvAC = Vec2.zero();\n this.m_JwA = 1;\n this.m_JwC = 1;\n this.m_mass += this.m_iA + this.m_iC;\n } else {\n var u = Rot.mulVec2(qC, this.m_localAxisC);\n var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA);\n this.m_JvAC = u;\n this.m_JwC = Vec2.crossVec2Vec2(rC, u);\n this.m_JwA = Vec2.crossVec2Vec2(rA2, u);\n this.m_mass += this.m_mC + this.m_mA + this.m_iC * this.m_JwC * this.m_JwC + this.m_iA * this.m_JwA * this.m_JwA;\n }\n if (this.m_type2 == RevoluteJoint.TYPE) {\n this.m_JvBD = Vec2.zero();\n this.m_JwB = this.m_ratio;\n this.m_JwD = this.m_ratio;\n this.m_mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD);\n } else {\n var u = Rot.mulVec2(qD, this.m_localAxisD);\n var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB);\n this.m_JvBD = Vec2.mulNumVec2(this.m_ratio, u);\n this.m_JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u);\n this.m_JwB = this.m_ratio * Vec2.crossVec2Vec2(rB2, u);\n this.m_mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * this.m_JwD * this.m_JwD + this.m_iB * this.m_JwB * this.m_JwB;\n }\n this.m_mass = this.m_mass > 0 ? 1 / this.m_mass : 0;\n if (step.warmStarting) {\n vA2.addMul(this.m_mA * this.m_impulse, this.m_JvAC);\n wA += this.m_iA * this.m_impulse * this.m_JwA;\n vB2.addMul(this.m_mB * this.m_impulse, this.m_JvBD);\n wB += this.m_iB * this.m_impulse * this.m_JwB;\n vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC);\n wC -= this.m_iC * this.m_impulse * this.m_JwC;\n vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD);\n wD -= this.m_iD * this.m_impulse * this.m_JwD;\n } else {\n this.m_impulse = 0;\n }\n this.m_bodyA.c_velocity.v.setVec2(vA2);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB2);\n this.m_bodyB.c_velocity.w = wB;\n this.m_bodyC.c_velocity.v.setVec2(vC);\n this.m_bodyC.c_velocity.w = wC;\n this.m_bodyD.c_velocity.v.setVec2(vD);\n this.m_bodyD.c_velocity.w = wD;\n };\n GearJoint2.prototype.solveVelocityConstraints = function(step) {\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var vC = this.m_bodyC.c_velocity.v;\n var wC = this.m_bodyC.c_velocity.w;\n var vD = this.m_bodyD.c_velocity.v;\n var wD = this.m_bodyD.c_velocity.w;\n var Cdot = Vec2.dot(this.m_JvAC, vA2) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB2) - Vec2.dot(this.m_JvBD, vD);\n Cdot += this.m_JwA * wA - this.m_JwC * wC + (this.m_JwB * wB - this.m_JwD * wD);\n var impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n vA2.addMul(this.m_mA * impulse, this.m_JvAC);\n wA += this.m_iA * impulse * this.m_JwA;\n vB2.addMul(this.m_mB * impulse, this.m_JvBD);\n wB += this.m_iB * impulse * this.m_JwB;\n vC.subMul(this.m_mC * impulse, this.m_JvAC);\n wC -= this.m_iC * impulse * this.m_JwC;\n vD.subMul(this.m_mD * impulse, this.m_JvBD);\n wD -= this.m_iD * impulse * this.m_JwD;\n this.m_bodyA.c_velocity.v.setVec2(vA2);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB2);\n this.m_bodyB.c_velocity.w = wB;\n this.m_bodyC.c_velocity.v.setVec2(vC);\n this.m_bodyC.c_velocity.w = wC;\n this.m_bodyD.c_velocity.v.setVec2(vD);\n this.m_bodyD.c_velocity.w = wD;\n };\n GearJoint2.prototype.solvePositionConstraints = function(step) {\n var cA2 = this.m_bodyA.c_position.c;\n var aA = this.m_bodyA.c_position.a;\n var cB2 = this.m_bodyB.c_position.c;\n var aB = this.m_bodyB.c_position.a;\n var cC = this.m_bodyC.c_position.c;\n var aC = this.m_bodyC.c_position.a;\n var cD = this.m_bodyD.c_position.c;\n var aD = this.m_bodyD.c_position.a;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n var qC = Rot.neo(aC);\n var qD = Rot.neo(aD);\n var linearError = 0;\n var coordinateA;\n var coordinateB;\n var JvAC;\n var JvBD;\n var JwA;\n var JwB;\n var JwC;\n var JwD;\n var mass = 0;\n if (this.m_type1 == RevoluteJoint.TYPE) {\n JvAC = Vec2.zero();\n JwA = 1;\n JwC = 1;\n mass += this.m_iA + this.m_iC;\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n var u = Rot.mulVec2(qC, this.m_localAxisC);\n var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA);\n JvAC = u;\n JwC = Vec2.crossVec2Vec2(rC, u);\n JwA = Vec2.crossVec2Vec2(rA2, u);\n mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA;\n var pC = Vec2.sub(this.m_localAnchorC, this.m_lcC);\n var pA2 = Rot.mulTVec2(qC, Vec2.add(rA2, Vec2.sub(cA2, cC)));\n coordinateA = Vec2.dot(Vec2.sub(pA2, pC), this.m_localAxisC);\n }\n if (this.m_type2 == RevoluteJoint.TYPE) {\n JvBD = Vec2.zero();\n JwB = this.m_ratio;\n JwD = this.m_ratio;\n mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD);\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n var u = Rot.mulVec2(qD, this.m_localAxisD);\n var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB);\n JvBD = Vec2.mulNumVec2(this.m_ratio, u);\n JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u);\n JwB = this.m_ratio * Vec2.crossVec2Vec2(rB2, u);\n mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * JwD * JwD + this.m_iB * JwB * JwB;\n var pD = Vec2.sub(this.m_localAnchorD, this.m_lcD);\n var pB2 = Rot.mulTVec2(qD, Vec2.add(rB2, Vec2.sub(cB2, cD)));\n coordinateB = Vec2.dot(pB2, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n var C = coordinateA + this.m_ratio * coordinateB - this.m_constant;\n var impulse = 0;\n if (mass > 0) {\n impulse = -C / mass;\n }\n cA2.addMul(this.m_mA * impulse, JvAC);\n aA += this.m_iA * impulse * JwA;\n cB2.addMul(this.m_mB * impulse, JvBD);\n aB += this.m_iB * impulse * JwB;\n cC.subMul(this.m_mC * impulse, JvAC);\n aC -= this.m_iC * impulse * JwC;\n cD.subMul(this.m_mD * impulse, JvBD);\n aD -= this.m_iD * impulse * JwD;\n this.m_bodyA.c_position.c.setVec2(cA2);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB2);\n this.m_bodyB.c_position.a = aB;\n this.m_bodyC.c_position.c.setVec2(cC);\n this.m_bodyC.c_position.a = aC;\n this.m_bodyD.c_position.c.setVec2(cD);\n this.m_bodyD.c_position.a = aD;\n return linearError < SettingsInternal.linearSlop;\n };\n GearJoint2.TYPE = \"gear-joint\";\n return GearJoint2;\n }(Joint)\n);\nvar DEFAULTS$5 = {\n maxForce: 1,\n maxTorque: 1,\n correctionFactor: 0.3\n};\nvar MotorJoint = (\n /** @class */\n function(_super) {\n __extends(MotorJoint2, _super);\n function MotorJoint2(def, bodyA, bodyB) {\n var _this = this;\n if (!(_this instanceof MotorJoint2)) {\n return new MotorJoint2(def, bodyA, bodyB);\n }\n def = options(def, DEFAULTS$5);\n _this = _super.call(this, def, bodyA, bodyB) || this;\n bodyA = _this.m_bodyA;\n bodyB = _this.m_bodyB;\n _this.m_type = MotorJoint2.TYPE;\n _this.m_linearOffset = Vec2.isValid(def.linearOffset) ? Vec2.clone(def.linearOffset) : bodyA.getLocalPoint(bodyB.getPosition());\n _this.m_angularOffset = Number.isFinite(def.angularOffset) ? def.angularOffset : bodyB.getAngle() - bodyA.getAngle();\n _this.m_linearImpulse = Vec2.zero();\n _this.m_angularImpulse = 0;\n _this.m_maxForce = def.maxForce;\n _this.m_maxTorque = def.maxTorque;\n _this.m_correctionFactor = def.correctionFactor;\n return _this;\n }\n MotorJoint2.prototype._serialize = function() {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n correctionFactor: this.m_correctionFactor,\n linearOffset: this.m_linearOffset,\n angularOffset: this.m_angularOffset\n };\n };\n MotorJoint2._deserialize = function(data, world, restore) {\n data = __assign({}, data);\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n var joint = new MotorJoint2(data);\n return joint;\n };\n MotorJoint2.prototype._reset = function(def) {\n if (Number.isFinite(def.angularOffset)) {\n this.m_angularOffset = def.angularOffset;\n }\n if (Number.isFinite(def.maxForce)) {\n this.m_maxForce = def.maxForce;\n }\n if (Number.isFinite(def.maxTorque)) {\n this.m_maxTorque = def.maxTorque;\n }\n if (Number.isFinite(def.correctionFactor)) {\n this.m_correctionFactor = def.correctionFactor;\n }\n if (Vec2.isValid(def.linearOffset)) {\n this.m_linearOffset.set(def.linearOffset);\n }\n };\n MotorJoint2.prototype.setMaxForce = function(force) {\n this.m_maxForce = force;\n };\n MotorJoint2.prototype.getMaxForce = function() {\n return this.m_maxForce;\n };\n MotorJoint2.prototype.setMaxTorque = function(torque) {\n this.m_maxTorque = torque;\n };\n MotorJoint2.prototype.getMaxTorque = function() {\n return this.m_maxTorque;\n };\n MotorJoint2.prototype.setCorrectionFactor = function(factor) {\n this.m_correctionFactor = factor;\n };\n MotorJoint2.prototype.getCorrectionFactor = function() {\n return this.m_correctionFactor;\n };\n MotorJoint2.prototype.setLinearOffset = function(linearOffset) {\n if (linearOffset.x != this.m_linearOffset.x || linearOffset.y != this.m_linearOffset.y) {\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_linearOffset.set(linearOffset);\n }\n };\n MotorJoint2.prototype.getLinearOffset = function() {\n return this.m_linearOffset;\n };\n MotorJoint2.prototype.setAngularOffset = function(angularOffset) {\n if (angularOffset != this.m_angularOffset) {\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_angularOffset = angularOffset;\n }\n };\n MotorJoint2.prototype.getAngularOffset = function() {\n return this.m_angularOffset;\n };\n MotorJoint2.prototype.getAnchorA = function() {\n return this.m_bodyA.getPosition();\n };\n MotorJoint2.prototype.getAnchorB = function() {\n return this.m_bodyB.getPosition();\n };\n MotorJoint2.prototype.getReactionForce = function(inv_dt) {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n };\n MotorJoint2.prototype.getReactionTorque = function(inv_dt) {\n return inv_dt * this.m_angularImpulse;\n };\n MotorJoint2.prototype.initVelocityConstraints = function(step) {\n this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n this.m_invMassA = this.m_bodyA.m_invMass;\n this.m_invMassB = this.m_bodyB.m_invMass;\n this.m_invIA = this.m_bodyA.m_invI;\n this.m_invIB = this.m_bodyB.m_invI;\n var cA2 = this.m_bodyA.c_position.c;\n var aA = this.m_bodyA.c_position.a;\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var cB2 = this.m_bodyB.c_position.c;\n var aB = this.m_bodyB.c_position.a;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_linearOffset, this.m_localCenterA));\n this.m_rB = Rot.mulVec2(qB, Vec2.neg(this.m_localCenterB));\n var mA = this.m_invMassA;\n var mB = this.m_invMassB;\n var iA = this.m_invIA;\n var iB = this.m_invIB;\n var K = new Mat22();\n K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y;\n K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y;\n K.ey.x = K.ex.y;\n K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x;\n this.m_linearMass = K.getInverse();\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0) {\n this.m_angularMass = 1 / this.m_angularMass;\n }\n this.m_linearError = Vec2.zero();\n this.m_linearError.addCombine(1, cB2, 1, this.m_rB);\n this.m_linearError.subCombine(1, cA2, 1, this.m_rA);\n this.m_angularError = aB - aA - this.m_angularOffset;\n if (step.warmStarting) {\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n var P3 = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n vA2.subMul(mA, P3);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_angularImpulse);\n vB2.addMul(mB, P3);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_angularImpulse);\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0;\n }\n this.m_bodyA.c_velocity.v = vA2;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB2;\n this.m_bodyB.c_velocity.w = wB;\n };\n MotorJoint2.prototype.solveVelocityConstraints = function(step) {\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var mA = this.m_invMassA;\n var mB = this.m_invMassB;\n var iA = this.m_invIA;\n var iB = this.m_invIB;\n var h = step.dt;\n var inv_h = step.inv_dt;\n {\n var Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError;\n var impulse = -this.m_angularMass * Cdot;\n var oldImpulse = this.m_angularImpulse;\n var maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n {\n var Cdot = Vec2.zero();\n Cdot.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA));\n Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError);\n var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n var oldImpulse = Vec2.clone(this.m_linearImpulse);\n this.m_linearImpulse.add(impulse);\n var maxImpulse = h * this.m_maxForce;\n this.m_linearImpulse.clamp(maxImpulse);\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n vA2.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n vB2.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n this.m_bodyA.c_velocity.v = vA2;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB2;\n this.m_bodyB.c_velocity.w = wB;\n };\n MotorJoint2.prototype.solvePositionConstraints = function(step) {\n return true;\n };\n MotorJoint2.TYPE = \"motor-joint\";\n return MotorJoint2;\n }(Joint)\n);\nvar math_PI$2 = Math.PI;\nvar DEFAULTS$4 = {\n maxForce: 0,\n frequencyHz: 5,\n dampingRatio: 0.7\n};\nvar MouseJoint = (\n /** @class */\n function(_super) {\n __extends(MouseJoint2, _super);\n function MouseJoint2(def, bodyA, bodyB, target) {\n var _this = this;\n if (!(_this instanceof MouseJoint2)) {\n return new MouseJoint2(def, bodyA, bodyB, target);\n }\n def = options(def, DEFAULTS$4);\n _this = _super.call(this, def, bodyA, bodyB) || this;\n bodyA = _this.m_bodyA;\n bodyB = _this.m_bodyB;\n _this.m_type = MouseJoint2.TYPE;\n if (Vec2.isValid(target)) {\n _this.m_targetA = Vec2.clone(target);\n } else if (Vec2.isValid(def.target)) {\n _this.m_targetA = Vec2.clone(def.target);\n } else {\n _this.m_targetA = Vec2.zero();\n }\n _this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), _this.m_targetA);\n _this.m_maxForce = def.maxForce;\n _this.m_impulse = Vec2.zero();\n _this.m_frequencyHz = def.frequencyHz;\n _this.m_dampingRatio = def.dampingRatio;\n _this.m_beta = 0;\n _this.m_gamma = 0;\n _this.m_rB = Vec2.zero();\n _this.m_localCenterB = Vec2.zero();\n _this.m_invMassB = 0;\n _this.m_invIB = 0;\n _this.m_mass = new Mat22();\n _this.m_C = Vec2.zero();\n return _this;\n }\n MouseJoint2.prototype._serialize = function() {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n target: this.m_targetA,\n maxForce: this.m_maxForce,\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n _localAnchorB: this.m_localAnchorB\n };\n };\n MouseJoint2._deserialize = function(data, world, restore) {\n data = __assign({}, data);\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n data.target = Vec2.clone(data.target);\n var joint = new MouseJoint2(data);\n if (data._localAnchorB) {\n joint.m_localAnchorB = data._localAnchorB;\n }\n return joint;\n };\n MouseJoint2.prototype._reset = function(def) {\n if (Number.isFinite(def.maxForce)) {\n this.m_maxForce = def.maxForce;\n }\n if (Number.isFinite(def.frequencyHz)) {\n this.m_frequencyHz = def.frequencyHz;\n }\n if (Number.isFinite(def.dampingRatio)) {\n this.m_dampingRatio = def.dampingRatio;\n }\n };\n MouseJoint2.prototype.setTarget = function(target) {\n if (Vec2.areEqual(target, this.m_targetA))\n return;\n this.m_bodyB.setAwake(true);\n this.m_targetA.set(target);\n };\n MouseJoint2.prototype.getTarget = function() {\n return this.m_targetA;\n };\n MouseJoint2.prototype.setMaxForce = function(force) {\n this.m_maxForce = force;\n };\n MouseJoint2.prototype.getMaxForce = function() {\n return this.m_maxForce;\n };\n MouseJoint2.prototype.setFrequency = function(hz) {\n this.m_frequencyHz = hz;\n };\n MouseJoint2.prototype.getFrequency = function() {\n return this.m_frequencyHz;\n };\n MouseJoint2.prototype.setDampingRatio = function(ratio) {\n this.m_dampingRatio = ratio;\n };\n MouseJoint2.prototype.getDampingRatio = function() {\n return this.m_dampingRatio;\n };\n MouseJoint2.prototype.getAnchorA = function() {\n return Vec2.clone(this.m_targetA);\n };\n MouseJoint2.prototype.getAnchorB = function() {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n };\n MouseJoint2.prototype.getReactionForce = function(inv_dt) {\n return Vec2.mulNumVec2(inv_dt, this.m_impulse);\n };\n MouseJoint2.prototype.getReactionTorque = function(inv_dt) {\n return inv_dt * 0;\n };\n MouseJoint2.prototype.shiftOrigin = function(newOrigin) {\n this.m_targetA.sub(newOrigin);\n };\n MouseJoint2.prototype.initVelocityConstraints = function(step) {\n this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n this.m_invMassB = this.m_bodyB.m_invMass;\n this.m_invIB = this.m_bodyB.m_invI;\n var position = this.m_bodyB.c_position;\n var velocity = this.m_bodyB.c_velocity;\n var cB2 = position.c;\n var aB = position.a;\n var vB2 = velocity.v;\n var wB = velocity.w;\n var qB = Rot.neo(aB);\n var mass = this.m_bodyB.getMass();\n var omega = 2 * math_PI$2 * this.m_frequencyHz;\n var d2 = 2 * mass * this.m_dampingRatio * omega;\n var k = mass * (omega * omega);\n var h = step.dt;\n this.m_gamma = h * (d2 + h * k);\n if (this.m_gamma != 0) {\n this.m_gamma = 1 / this.m_gamma;\n }\n this.m_beta = h * k * this.m_gamma;\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n var K = new Mat22();\n K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y + this.m_gamma;\n K.ex.y = -this.m_invIB * this.m_rB.x * this.m_rB.y;\n K.ey.x = K.ex.y;\n K.ey.y = this.m_invMassB + this.m_invIB * this.m_rB.x * this.m_rB.x + this.m_gamma;\n this.m_mass = K.getInverse();\n this.m_C.setVec2(cB2);\n this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA);\n this.m_C.mul(this.m_beta);\n wB *= 0.98;\n if (step.warmStarting) {\n this.m_impulse.mul(step.dtRatio);\n vB2.addMul(this.m_invMassB, this.m_impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse);\n } else {\n this.m_impulse.setZero();\n }\n velocity.v.setVec2(vB2);\n velocity.w = wB;\n };\n MouseJoint2.prototype.solveVelocityConstraints = function(step) {\n var velocity = this.m_bodyB.c_velocity;\n var vB2 = Vec2.clone(velocity.v);\n var wB = velocity.w;\n var Cdot = Vec2.crossNumVec2(wB, this.m_rB);\n Cdot.add(vB2);\n Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse);\n Cdot.neg();\n var impulse = Mat22.mulVec2(this.m_mass, Cdot);\n var oldImpulse = Vec2.clone(this.m_impulse);\n this.m_impulse.add(impulse);\n var maxImpulse = step.dt * this.m_maxForce;\n this.m_impulse.clamp(maxImpulse);\n impulse = Vec2.sub(this.m_impulse, oldImpulse);\n vB2.addMul(this.m_invMassB, impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n velocity.v.setVec2(vB2);\n velocity.w = wB;\n };\n MouseJoint2.prototype.solvePositionConstraints = function(step) {\n return true;\n };\n MouseJoint2.TYPE = \"mouse-joint\";\n return MouseJoint2;\n }(Joint)\n);\nvar math_abs$2 = Math.abs;\nvar DEFAULTS$3 = {\n collideConnected: true\n};\nvar PulleyJoint = (\n /** @class */\n function(_super) {\n __extends(PulleyJoint2, _super);\n function PulleyJoint2(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio) {\n var _this = this;\n if (!(_this instanceof PulleyJoint2)) {\n return new PulleyJoint2(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio);\n }\n def = options(def, DEFAULTS$3);\n _this = _super.call(this, def, bodyA, bodyB) || this;\n bodyA = _this.m_bodyA;\n bodyB = _this.m_bodyB;\n _this.m_type = PulleyJoint2.TYPE;\n _this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1, 1));\n _this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1, 1));\n _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1, 0));\n _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1, 0));\n _this.m_lengthA = Number.isFinite(def.lengthA) ? def.lengthA : Vec2.distance(anchorA, groundA);\n _this.m_lengthB = Number.isFinite(def.lengthB) ? def.lengthB : Vec2.distance(anchorB, groundB);\n _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio;\n _this.m_constant = _this.m_lengthA + _this.m_ratio * _this.m_lengthB;\n _this.m_impulse = 0;\n return _this;\n }\n PulleyJoint2.prototype._serialize = function() {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n groundAnchorA: this.m_groundAnchorA,\n groundAnchorB: this.m_groundAnchorB,\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n lengthA: this.m_lengthA,\n lengthB: this.m_lengthB,\n ratio: this.m_ratio\n };\n };\n PulleyJoint2._deserialize = function(data, world, restore) {\n data = __assign({}, data);\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n var joint = new PulleyJoint2(data);\n return joint;\n };\n PulleyJoint2.prototype._reset = function(def) {\n if (Vec2.isValid(def.groundAnchorA)) {\n this.m_groundAnchorA.set(def.groundAnchorA);\n }\n if (Vec2.isValid(def.groundAnchorB)) {\n this.m_groundAnchorB.set(def.groundAnchorB);\n }\n if (Vec2.isValid(def.localAnchorA)) {\n this.m_localAnchorA.set(def.localAnchorA);\n } else if (Vec2.isValid(def.anchorA)) {\n this.m_localAnchorA.set(this.m_bodyA.getLocalPoint(def.anchorA));\n }\n if (Vec2.isValid(def.localAnchorB)) {\n this.m_localAnchorB.set(def.localAnchorB);\n } else if (Vec2.isValid(def.anchorB)) {\n this.m_localAnchorB.set(this.m_bodyB.getLocalPoint(def.anchorB));\n }\n if (Number.isFinite(def.lengthA)) {\n this.m_lengthA = def.lengthA;\n }\n if (Number.isFinite(def.lengthB)) {\n this.m_lengthB = def.lengthB;\n }\n if (Number.isFinite(def.ratio)) {\n this.m_ratio = def.ratio;\n }\n };\n PulleyJoint2.prototype.getGroundAnchorA = function() {\n return this.m_groundAnchorA;\n };\n PulleyJoint2.prototype.getGroundAnchorB = function() {\n return this.m_groundAnchorB;\n };\n PulleyJoint2.prototype.getLengthA = function() {\n return this.m_lengthA;\n };\n PulleyJoint2.prototype.getLengthB = function() {\n return this.m_lengthB;\n };\n PulleyJoint2.prototype.getRatio = function() {\n return this.m_ratio;\n };\n PulleyJoint2.prototype.getCurrentLengthA = function() {\n var p = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n var s2 = this.m_groundAnchorA;\n return Vec2.distance(p, s2);\n };\n PulleyJoint2.prototype.getCurrentLengthB = function() {\n var p = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n var s2 = this.m_groundAnchorB;\n return Vec2.distance(p, s2);\n };\n PulleyJoint2.prototype.shiftOrigin = function(newOrigin) {\n this.m_groundAnchorA.sub(newOrigin);\n this.m_groundAnchorB.sub(newOrigin);\n };\n PulleyJoint2.prototype.getAnchorA = function() {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n };\n PulleyJoint2.prototype.getAnchorB = function() {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n };\n PulleyJoint2.prototype.getReactionForce = function(inv_dt) {\n return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt);\n };\n PulleyJoint2.prototype.getReactionTorque = function(inv_dt) {\n return 0;\n };\n PulleyJoint2.prototype.initVelocityConstraints = function(step) {\n this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n this.m_invMassA = this.m_bodyA.m_invMass;\n this.m_invMassB = this.m_bodyB.m_invMass;\n this.m_invIA = this.m_bodyA.m_invI;\n this.m_invIB = this.m_bodyB.m_invI;\n var cA2 = this.m_bodyA.c_position.c;\n var aA = this.m_bodyA.c_position.a;\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var cB2 = this.m_bodyB.c_position.c;\n var aB = this.m_bodyB.c_position.a;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n this.m_uA = Vec2.sub(Vec2.add(cA2, this.m_rA), this.m_groundAnchorA);\n this.m_uB = Vec2.sub(Vec2.add(cB2, this.m_rB), this.m_groundAnchorB);\n var lengthA = this.m_uA.length();\n var lengthB = this.m_uB.length();\n if (lengthA > 10 * SettingsInternal.linearSlop) {\n this.m_uA.mul(1 / lengthA);\n } else {\n this.m_uA.setZero();\n }\n if (lengthB > 10 * SettingsInternal.linearSlop) {\n this.m_uB.mul(1 / lengthB);\n } else {\n this.m_uB.setZero();\n }\n var ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA);\n var ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB);\n var mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n var mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n this.m_mass = mA + this.m_ratio * this.m_ratio * mB;\n if (this.m_mass > 0) {\n this.m_mass = 1 / this.m_mass;\n }\n if (step.warmStarting) {\n this.m_impulse *= step.dtRatio;\n var PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA);\n var PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB);\n vA2.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n vB2.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n } else {\n this.m_impulse = 0;\n }\n this.m_bodyA.c_velocity.v = vA2;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB2;\n this.m_bodyB.c_velocity.w = wB;\n };\n PulleyJoint2.prototype.solveVelocityConstraints = function(step) {\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var vpA = Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA));\n var vpB = Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB));\n var Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB);\n var impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n var PA = Vec2.mulNumVec2(-impulse, this.m_uA);\n var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB);\n vA2.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n vB2.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n this.m_bodyA.c_velocity.v = vA2;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB2;\n this.m_bodyB.c_velocity.w = wB;\n };\n PulleyJoint2.prototype.solvePositionConstraints = function(step) {\n var cA2 = this.m_bodyA.c_position.c;\n var aA = this.m_bodyA.c_position.a;\n var cB2 = this.m_bodyB.c_position.c;\n var aB = this.m_bodyB.c_position.a;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n var uA = Vec2.sub(Vec2.add(cA2, this.m_rA), this.m_groundAnchorA);\n var uB = Vec2.sub(Vec2.add(cB2, this.m_rB), this.m_groundAnchorB);\n var lengthA = uA.length();\n var lengthB = uB.length();\n if (lengthA > 10 * SettingsInternal.linearSlop) {\n uA.mul(1 / lengthA);\n } else {\n uA.setZero();\n }\n if (lengthB > 10 * SettingsInternal.linearSlop) {\n uB.mul(1 / lengthB);\n } else {\n uB.setZero();\n }\n var ruA = Vec2.crossVec2Vec2(rA2, uA);\n var ruB = Vec2.crossVec2Vec2(rB2, uB);\n var mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n var mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n var mass = mA + this.m_ratio * this.m_ratio * mB;\n if (mass > 0) {\n mass = 1 / mass;\n }\n var C = this.m_constant - lengthA - this.m_ratio * lengthB;\n var linearError = math_abs$2(C);\n var impulse = -mass * C;\n var PA = Vec2.mulNumVec2(-impulse, uA);\n var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB);\n cA2.addMul(this.m_invMassA, PA);\n aA += this.m_invIA * Vec2.crossVec2Vec2(rA2, PA);\n cB2.addMul(this.m_invMassB, PB);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, PB);\n this.m_bodyA.c_position.c = cA2;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB2;\n this.m_bodyB.c_position.a = aB;\n return linearError < SettingsInternal.linearSlop;\n };\n PulleyJoint2.TYPE = \"pulley-joint\";\n return PulleyJoint2;\n }(Joint)\n);\nvar math_min$1 = Math.min;\nvar LimitState;\n(function(LimitState2) {\n LimitState2[LimitState2[\"inactiveLimit\"] = 0] = \"inactiveLimit\";\n LimitState2[LimitState2[\"atLowerLimit\"] = 1] = \"atLowerLimit\";\n LimitState2[LimitState2[\"atUpperLimit\"] = 2] = \"atUpperLimit\";\n LimitState2[LimitState2[\"equalLimits\"] = 3] = \"equalLimits\";\n})(LimitState || (LimitState = {}));\nvar DEFAULTS$2 = {\n maxLength: 0\n};\nvar RopeJoint = (\n /** @class */\n function(_super) {\n __extends(RopeJoint2, _super);\n function RopeJoint2(def, bodyA, bodyB, anchor) {\n var _this = this;\n if (!(_this instanceof RopeJoint2)) {\n return new RopeJoint2(def, bodyA, bodyB, anchor);\n }\n def = options(def, DEFAULTS$2);\n _this = _super.call(this, def, bodyA, bodyB) || this;\n bodyA = _this.m_bodyA;\n bodyB = _this.m_bodyB;\n _this.m_type = RopeJoint2.TYPE;\n _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1, 0));\n _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1, 0));\n _this.m_maxLength = def.maxLength;\n _this.m_mass = 0;\n _this.m_impulse = 0;\n _this.m_length = 0;\n _this.m_state = LimitState.inactiveLimit;\n return _this;\n }\n RopeJoint2.prototype._serialize = function() {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n maxLength: this.m_maxLength\n };\n };\n RopeJoint2._deserialize = function(data, world, restore) {\n data = __assign({}, data);\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n var joint = new RopeJoint2(data);\n return joint;\n };\n RopeJoint2.prototype._reset = function(def) {\n if (Number.isFinite(def.maxLength)) {\n this.m_maxLength = def.maxLength;\n }\n };\n RopeJoint2.prototype.getLocalAnchorA = function() {\n return this.m_localAnchorA;\n };\n RopeJoint2.prototype.getLocalAnchorB = function() {\n return this.m_localAnchorB;\n };\n RopeJoint2.prototype.setMaxLength = function(length) {\n this.m_maxLength = length;\n };\n RopeJoint2.prototype.getMaxLength = function() {\n return this.m_maxLength;\n };\n RopeJoint2.prototype.getLimitState = function() {\n return this.m_state;\n };\n RopeJoint2.prototype.getAnchorA = function() {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n };\n RopeJoint2.prototype.getAnchorB = function() {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n };\n RopeJoint2.prototype.getReactionForce = function(inv_dt) {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n };\n RopeJoint2.prototype.getReactionTorque = function(inv_dt) {\n return 0;\n };\n RopeJoint2.prototype.initVelocityConstraints = function(step) {\n this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n this.m_invMassA = this.m_bodyA.m_invMass;\n this.m_invMassB = this.m_bodyB.m_invMass;\n this.m_invIA = this.m_bodyA.m_invI;\n this.m_invIB = this.m_bodyB.m_invI;\n var cA2 = this.m_bodyA.c_position.c;\n var aA = this.m_bodyA.c_position.a;\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var cB2 = this.m_bodyB.c_position.c;\n var aB = this.m_bodyB.c_position.a;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n this.m_rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n this.m_rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n this.m_u = Vec2.zero();\n this.m_u.addCombine(1, cB2, 1, this.m_rB);\n this.m_u.subCombine(1, cA2, 1, this.m_rA);\n this.m_length = this.m_u.length();\n var C = this.m_length - this.m_maxLength;\n if (C > 0) {\n this.m_state = LimitState.atUpperLimit;\n } else {\n this.m_state = LimitState.inactiveLimit;\n }\n if (this.m_length > SettingsInternal.linearSlop) {\n this.m_u.mul(1 / this.m_length);\n } else {\n this.m_u.setZero();\n this.m_mass = 0;\n this.m_impulse = 0;\n return;\n }\n var crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n var crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n var invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB;\n this.m_mass = invMass != 0 ? 1 / invMass : 0;\n if (step.warmStarting) {\n this.m_impulse *= step.dtRatio;\n var P3 = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n vA2.subMul(this.m_invMassA, P3);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3);\n vB2.addMul(this.m_invMassB, P3);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3);\n } else {\n this.m_impulse = 0;\n }\n this.m_bodyA.c_velocity.v.setVec2(vA2);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB2);\n this.m_bodyB.c_velocity.w = wB;\n };\n RopeJoint2.prototype.solveVelocityConstraints = function(step) {\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var vpA = Vec2.addCrossNumVec2(vA2, wA, this.m_rA);\n var vpB = Vec2.addCrossNumVec2(vB2, wB, this.m_rB);\n var C = this.m_length - this.m_maxLength;\n var Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA));\n if (C < 0) {\n Cdot += step.inv_dt * C;\n }\n var impulse = -this.m_mass * Cdot;\n var oldImpulse = this.m_impulse;\n this.m_impulse = math_min$1(0, this.m_impulse + impulse);\n impulse = this.m_impulse - oldImpulse;\n var P3 = Vec2.mulNumVec2(impulse, this.m_u);\n vA2.subMul(this.m_invMassA, P3);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3);\n vB2.addMul(this.m_invMassB, P3);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3);\n this.m_bodyA.c_velocity.v = vA2;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB2;\n this.m_bodyB.c_velocity.w = wB;\n };\n RopeJoint2.prototype.solvePositionConstraints = function(step) {\n var cA2 = this.m_bodyA.c_position.c;\n var aA = this.m_bodyA.c_position.a;\n var cB2 = this.m_bodyB.c_position.c;\n var aB = this.m_bodyB.c_position.a;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n var u = Vec2.zero();\n u.addCombine(1, cB2, 1, rB2);\n u.subCombine(1, cA2, 1, rA2);\n var length = u.normalize();\n var C = length - this.m_maxLength;\n C = clamp(C, 0, SettingsInternal.maxLinearCorrection);\n var impulse = -this.m_mass * C;\n var P3 = Vec2.mulNumVec2(impulse, u);\n cA2.subMul(this.m_invMassA, P3);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA2, P3);\n cB2.addMul(this.m_invMassB, P3);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, P3);\n this.m_bodyA.c_position.c.setVec2(cA2);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB2);\n this.m_bodyB.c_position.a = aB;\n return length - this.m_maxLength < SettingsInternal.linearSlop;\n };\n RopeJoint2.TYPE = \"rope-joint\";\n return RopeJoint2;\n }(Joint)\n);\nvar math_abs$1 = Math.abs;\nvar math_PI$1 = Math.PI;\nvar DEFAULTS$1 = {\n frequencyHz: 0,\n dampingRatio: 0\n};\nvar WeldJoint = (\n /** @class */\n function(_super) {\n __extends(WeldJoint2, _super);\n function WeldJoint2(def, bodyA, bodyB, anchor) {\n var _this = this;\n if (!(_this instanceof WeldJoint2)) {\n return new WeldJoint2(def, bodyA, bodyB, anchor);\n }\n def = options(def, DEFAULTS$1);\n _this = _super.call(this, def, bodyA, bodyB) || this;\n bodyA = _this.m_bodyA;\n bodyB = _this.m_bodyB;\n _this.m_type = WeldJoint2.TYPE;\n _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero());\n _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero());\n _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle();\n _this.m_frequencyHz = def.frequencyHz;\n _this.m_dampingRatio = def.dampingRatio;\n _this.m_impulse = new Vec3();\n _this.m_bias = 0;\n _this.m_gamma = 0;\n _this.m_mass = new Mat33();\n return _this;\n }\n WeldJoint2.prototype._serialize = function() {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle\n };\n };\n WeldJoint2._deserialize = function(data, world, restore) {\n data = __assign({}, data);\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n var joint = new WeldJoint2(data);\n return joint;\n };\n WeldJoint2.prototype._reset = function(def) {\n if (def.anchorA) {\n this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA));\n } else if (def.localAnchorA) {\n this.m_localAnchorA.setVec2(def.localAnchorA);\n }\n if (def.anchorB) {\n this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB));\n } else if (def.localAnchorB) {\n this.m_localAnchorB.setVec2(def.localAnchorB);\n }\n if (Number.isFinite(def.frequencyHz)) {\n this.m_frequencyHz = def.frequencyHz;\n }\n if (Number.isFinite(def.dampingRatio)) {\n this.m_dampingRatio = def.dampingRatio;\n }\n };\n WeldJoint2.prototype.getLocalAnchorA = function() {\n return this.m_localAnchorA;\n };\n WeldJoint2.prototype.getLocalAnchorB = function() {\n return this.m_localAnchorB;\n };\n WeldJoint2.prototype.getReferenceAngle = function() {\n return this.m_referenceAngle;\n };\n WeldJoint2.prototype.setFrequency = function(hz) {\n this.m_frequencyHz = hz;\n };\n WeldJoint2.prototype.getFrequency = function() {\n return this.m_frequencyHz;\n };\n WeldJoint2.prototype.setDampingRatio = function(ratio) {\n this.m_dampingRatio = ratio;\n };\n WeldJoint2.prototype.getDampingRatio = function() {\n return this.m_dampingRatio;\n };\n WeldJoint2.prototype.getAnchorA = function() {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n };\n WeldJoint2.prototype.getAnchorB = function() {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n };\n WeldJoint2.prototype.getReactionForce = function(inv_dt) {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n };\n WeldJoint2.prototype.getReactionTorque = function(inv_dt) {\n return inv_dt * this.m_impulse.z;\n };\n WeldJoint2.prototype.initVelocityConstraints = function(step) {\n this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n this.m_invMassA = this.m_bodyA.m_invMass;\n this.m_invMassB = this.m_bodyB.m_invMass;\n this.m_invIA = this.m_bodyA.m_invI;\n this.m_invIB = this.m_bodyB.m_invI;\n var aA = this.m_bodyA.c_position.a;\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var aB = this.m_bodyB.c_position.a;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n var mA = this.m_invMassA;\n var mB = this.m_invMassB;\n var iA = this.m_invIA;\n var iB = this.m_invIB;\n var K = new Mat33();\n K.ex.x = mA + mB + this.m_rA.y * this.m_rA.y * iA + this.m_rB.y * this.m_rB.y * iB;\n K.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB;\n K.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB;\n K.ex.y = K.ey.x;\n K.ey.y = mA + mB + this.m_rA.x * this.m_rA.x * iA + this.m_rB.x * this.m_rB.x * iB;\n K.ez.y = this.m_rA.x * iA + this.m_rB.x * iB;\n K.ex.z = K.ez.x;\n K.ey.z = K.ez.y;\n K.ez.z = iA + iB;\n if (this.m_frequencyHz > 0) {\n K.getInverse22(this.m_mass);\n var invM = iA + iB;\n var m = invM > 0 ? 1 / invM : 0;\n var C = aB - aA - this.m_referenceAngle;\n var omega = 2 * math_PI$1 * this.m_frequencyHz;\n var d2 = 2 * m * this.m_dampingRatio * omega;\n var k = m * omega * omega;\n var h = step.dt;\n this.m_gamma = h * (d2 + h * k);\n this.m_gamma = this.m_gamma != 0 ? 1 / this.m_gamma : 0;\n this.m_bias = C * h * k * this.m_gamma;\n invM += this.m_gamma;\n this.m_mass.ez.z = invM != 0 ? 1 / invM : 0;\n } else if (K.ez.z == 0) {\n K.getInverse22(this.m_mass);\n this.m_gamma = 0;\n this.m_bias = 0;\n } else {\n K.getSymInverse33(this.m_mass);\n this.m_gamma = 0;\n this.m_bias = 0;\n }\n if (step.warmStarting) {\n this.m_impulse.mul(step.dtRatio);\n var P3 = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n vA2.subMul(mA, P3);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_impulse.z);\n vB2.addMul(mB, P3);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_impulse.z);\n } else {\n this.m_impulse.setZero();\n }\n this.m_bodyA.c_velocity.v = vA2;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB2;\n this.m_bodyB.c_velocity.w = wB;\n };\n WeldJoint2.prototype.solveVelocityConstraints = function(step) {\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var mA = this.m_invMassA;\n var mB = this.m_invMassB;\n var iA = this.m_invIA;\n var iB = this.m_invIB;\n if (this.m_frequencyHz > 0) {\n var Cdot2 = wB - wA;\n var impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z);\n this.m_impulse.z += impulse2;\n wA -= iA * impulse2;\n wB += iB * impulse2;\n var Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA));\n var impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1));\n this.m_impulse.x += impulse1.x;\n this.m_impulse.y += impulse1.y;\n var P3 = Vec2.clone(impulse1);\n vA2.subMul(mA, P3);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P3);\n vB2.addMul(mB, P3);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, P3);\n } else {\n var Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA));\n var Cdot2 = wB - wA;\n var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n var impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot));\n this.m_impulse.add(impulse);\n var P3 = Vec2.neo(impulse.x, impulse.y);\n vA2.subMul(mA, P3);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + impulse.z);\n vB2.addMul(mB, P3);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + impulse.z);\n }\n this.m_bodyA.c_velocity.v = vA2;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB2;\n this.m_bodyB.c_velocity.w = wB;\n };\n WeldJoint2.prototype.solvePositionConstraints = function(step) {\n var cA2 = this.m_bodyA.c_position.c;\n var aA = this.m_bodyA.c_position.a;\n var cB2 = this.m_bodyB.c_position.c;\n var aB = this.m_bodyB.c_position.a;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n var mA = this.m_invMassA;\n var mB = this.m_invMassB;\n var iA = this.m_invIA;\n var iB = this.m_invIB;\n var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n var positionError;\n var angularError;\n var K = new Mat33();\n K.ex.x = mA + mB + rA2.y * rA2.y * iA + rB2.y * rB2.y * iB;\n K.ey.x = -rA2.y * rA2.x * iA - rB2.y * rB2.x * iB;\n K.ez.x = -rA2.y * iA - rB2.y * iB;\n K.ex.y = K.ey.x;\n K.ey.y = mA + mB + rA2.x * rA2.x * iA + rB2.x * rB2.x * iB;\n K.ez.y = rA2.x * iA + rB2.x * iB;\n K.ex.z = K.ez.x;\n K.ey.z = K.ez.y;\n K.ez.z = iA + iB;\n if (this.m_frequencyHz > 0) {\n var C1 = Vec2.zero();\n C1.addCombine(1, cB2, 1, rB2);\n C1.subCombine(1, cA2, 1, rA2);\n positionError = C1.length();\n angularError = 0;\n var P3 = Vec2.neg(K.solve22(C1));\n cA2.subMul(mA, P3);\n aA -= iA * Vec2.crossVec2Vec2(rA2, P3);\n cB2.addMul(mB, P3);\n aB += iB * Vec2.crossVec2Vec2(rB2, P3);\n } else {\n var C1 = Vec2.zero();\n C1.addCombine(1, cB2, 1, rB2);\n C1.subCombine(1, cA2, 1, rA2);\n var C2 = aB - aA - this.m_referenceAngle;\n positionError = C1.length();\n angularError = math_abs$1(C2);\n var C = new Vec3(C1.x, C1.y, C2);\n var impulse = new Vec3();\n if (K.ez.z > 0) {\n impulse = Vec3.neg(K.solve33(C));\n } else {\n var impulse2 = Vec2.neg(K.solve22(C1));\n impulse.set(impulse2.x, impulse2.y, 0);\n }\n var P3 = Vec2.neo(impulse.x, impulse.y);\n cA2.subMul(mA, P3);\n aA -= iA * (Vec2.crossVec2Vec2(rA2, P3) + impulse.z);\n cB2.addMul(mB, P3);\n aB += iB * (Vec2.crossVec2Vec2(rB2, P3) + impulse.z);\n }\n this.m_bodyA.c_position.c = cA2;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB2;\n this.m_bodyB.c_position.a = aB;\n return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop;\n };\n WeldJoint2.TYPE = \"weld-joint\";\n return WeldJoint2;\n }(Joint)\n);\nvar math_abs = Math.abs;\nvar math_PI = Math.PI;\nvar DEFAULTS = {\n enableMotor: false,\n maxMotorTorque: 0,\n motorSpeed: 0,\n frequencyHz: 2,\n dampingRatio: 0.7\n};\nvar WheelJoint = (\n /** @class */\n function(_super) {\n __extends(WheelJoint2, _super);\n function WheelJoint2(def, bodyA, bodyB, anchor, axis) {\n var _this = this;\n if (!(_this instanceof WheelJoint2)) {\n return new WheelJoint2(def, bodyA, bodyB, anchor, axis);\n }\n def = options(def, DEFAULTS);\n _this = _super.call(this, def, bodyA, bodyB) || this;\n bodyA = _this.m_bodyA;\n bodyB = _this.m_bodyB;\n _this.m_ax = Vec2.zero();\n _this.m_ay = Vec2.zero();\n _this.m_type = WheelJoint2.TYPE;\n _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero());\n _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero());\n if (Vec2.isValid(axis)) {\n _this.m_localXAxisA = bodyA.getLocalVector(axis);\n } else if (Vec2.isValid(def.localAxisA)) {\n _this.m_localXAxisA = Vec2.clone(def.localAxisA);\n } else if (Vec2.isValid(def.localAxis)) {\n _this.m_localXAxisA = Vec2.clone(def.localAxis);\n } else {\n _this.m_localXAxisA = Vec2.neo(1, 0);\n }\n _this.m_localYAxisA = Vec2.crossNumVec2(1, _this.m_localXAxisA);\n _this.m_mass = 0;\n _this.m_impulse = 0;\n _this.m_motorMass = 0;\n _this.m_motorImpulse = 0;\n _this.m_springMass = 0;\n _this.m_springImpulse = 0;\n _this.m_maxMotorTorque = def.maxMotorTorque;\n _this.m_motorSpeed = def.motorSpeed;\n _this.m_enableMotor = def.enableMotor;\n _this.m_frequencyHz = def.frequencyHz;\n _this.m_dampingRatio = def.dampingRatio;\n _this.m_bias = 0;\n _this.m_gamma = 0;\n return _this;\n }\n WheelJoint2.prototype._serialize = function() {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n enableMotor: this.m_enableMotor,\n maxMotorTorque: this.m_maxMotorTorque,\n motorSpeed: this.m_motorSpeed,\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA\n };\n };\n WheelJoint2._deserialize = function(data, world, restore) {\n data = __assign({}, data);\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n var joint = new WheelJoint2(data);\n return joint;\n };\n WheelJoint2.prototype._reset = function(def) {\n if (def.anchorA) {\n this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA));\n } else if (def.localAnchorA) {\n this.m_localAnchorA.setVec2(def.localAnchorA);\n }\n if (def.anchorB) {\n this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB));\n } else if (def.localAnchorB) {\n this.m_localAnchorB.setVec2(def.localAnchorB);\n }\n if (def.localAxisA) {\n this.m_localXAxisA.setVec2(def.localAxisA);\n this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1, def.localAxisA));\n }\n if (def.enableMotor !== void 0) {\n this.m_enableMotor = def.enableMotor;\n }\n if (Number.isFinite(def.maxMotorTorque)) {\n this.m_maxMotorTorque = def.maxMotorTorque;\n }\n if (Number.isFinite(def.motorSpeed)) {\n this.m_motorSpeed = def.motorSpeed;\n }\n if (Number.isFinite(def.frequencyHz)) {\n this.m_frequencyHz = def.frequencyHz;\n }\n if (Number.isFinite(def.dampingRatio)) {\n this.m_dampingRatio = def.dampingRatio;\n }\n };\n WheelJoint2.prototype.getLocalAnchorA = function() {\n return this.m_localAnchorA;\n };\n WheelJoint2.prototype.getLocalAnchorB = function() {\n return this.m_localAnchorB;\n };\n WheelJoint2.prototype.getLocalAxisA = function() {\n return this.m_localXAxisA;\n };\n WheelJoint2.prototype.getJointTranslation = function() {\n var bA = this.m_bodyA;\n var bB = this.m_bodyB;\n var pA2 = bA.getWorldPoint(this.m_localAnchorA);\n var pB2 = bB.getWorldPoint(this.m_localAnchorB);\n var d2 = Vec2.sub(pB2, pA2);\n var axis = bA.getWorldVector(this.m_localXAxisA);\n var translation2 = Vec2.dot(d2, axis);\n return translation2;\n };\n WheelJoint2.prototype.getJointSpeed = function() {\n var wA = this.m_bodyA.m_angularVelocity;\n var wB = this.m_bodyB.m_angularVelocity;\n return wB - wA;\n };\n WheelJoint2.prototype.isMotorEnabled = function() {\n return this.m_enableMotor;\n };\n WheelJoint2.prototype.enableMotor = function(flag) {\n if (flag == this.m_enableMotor)\n return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n };\n WheelJoint2.prototype.setMotorSpeed = function(speed) {\n if (speed == this.m_motorSpeed)\n return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n };\n WheelJoint2.prototype.getMotorSpeed = function() {\n return this.m_motorSpeed;\n };\n WheelJoint2.prototype.setMaxMotorTorque = function(torque) {\n if (torque == this.m_maxMotorTorque)\n return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n };\n WheelJoint2.prototype.getMaxMotorTorque = function() {\n return this.m_maxMotorTorque;\n };\n WheelJoint2.prototype.getMotorTorque = function(inv_dt) {\n return inv_dt * this.m_motorImpulse;\n };\n WheelJoint2.prototype.setSpringFrequencyHz = function(hz) {\n this.m_frequencyHz = hz;\n };\n WheelJoint2.prototype.getSpringFrequencyHz = function() {\n return this.m_frequencyHz;\n };\n WheelJoint2.prototype.setSpringDampingRatio = function(ratio) {\n this.m_dampingRatio = ratio;\n };\n WheelJoint2.prototype.getSpringDampingRatio = function() {\n return this.m_dampingRatio;\n };\n WheelJoint2.prototype.getAnchorA = function() {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n };\n WheelJoint2.prototype.getAnchorB = function() {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n };\n WheelJoint2.prototype.getReactionForce = function(inv_dt) {\n return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt);\n };\n WheelJoint2.prototype.getReactionTorque = function(inv_dt) {\n return inv_dt * this.m_motorImpulse;\n };\n WheelJoint2.prototype.initVelocityConstraints = function(step) {\n this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n this.m_invMassA = this.m_bodyA.m_invMass;\n this.m_invMassB = this.m_bodyB.m_invMass;\n this.m_invIA = this.m_bodyA.m_invI;\n this.m_invIB = this.m_bodyB.m_invI;\n var mA = this.m_invMassA;\n var mB = this.m_invMassB;\n var iA = this.m_invIA;\n var iB = this.m_invIB;\n var cA2 = this.m_bodyA.c_position.c;\n var aA = this.m_bodyA.c_position.a;\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var cB2 = this.m_bodyB.c_position.c;\n var aB = this.m_bodyB.c_position.a;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n var d2 = Vec2.zero();\n d2.addCombine(1, cB2, 1, rB2);\n d2.subCombine(1, cA2, 1, rA2);\n {\n this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA);\n this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_ay);\n this.m_sBy = Vec2.crossVec2Vec2(rB2, this.m_ay);\n this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy * this.m_sBy;\n if (this.m_mass > 0) {\n this.m_mass = 1 / this.m_mass;\n }\n }\n this.m_springMass = 0;\n this.m_bias = 0;\n this.m_gamma = 0;\n if (this.m_frequencyHz > 0) {\n this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_ax);\n this.m_sBx = Vec2.crossVec2Vec2(rB2, this.m_ax);\n var invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx * this.m_sBx;\n if (invMass > 0) {\n this.m_springMass = 1 / invMass;\n var C = Vec2.dot(d2, this.m_ax);\n var omega = 2 * math_PI * this.m_frequencyHz;\n var damp = 2 * this.m_springMass * this.m_dampingRatio * omega;\n var k = this.m_springMass * omega * omega;\n var h = step.dt;\n this.m_gamma = h * (damp + h * k);\n if (this.m_gamma > 0) {\n this.m_gamma = 1 / this.m_gamma;\n }\n this.m_bias = C * h * k * this.m_gamma;\n this.m_springMass = invMass + this.m_gamma;\n if (this.m_springMass > 0) {\n this.m_springMass = 1 / this.m_springMass;\n }\n }\n } else {\n this.m_springImpulse = 0;\n }\n if (this.m_enableMotor) {\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0) {\n this.m_motorMass = 1 / this.m_motorMass;\n }\n } else {\n this.m_motorMass = 0;\n this.m_motorImpulse = 0;\n }\n if (step.warmStarting) {\n this.m_impulse *= step.dtRatio;\n this.m_springImpulse *= step.dtRatio;\n this.m_motorImpulse *= step.dtRatio;\n var P3 = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax);\n var LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse;\n var LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse;\n vA2.subMul(this.m_invMassA, P3);\n wA -= this.m_invIA * LA;\n vB2.addMul(this.m_invMassB, P3);\n wB += this.m_invIB * LB;\n } else {\n this.m_impulse = 0;\n this.m_springImpulse = 0;\n this.m_motorImpulse = 0;\n }\n this.m_bodyA.c_velocity.v.setVec2(vA2);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB2);\n this.m_bodyB.c_velocity.w = wB;\n };\n WheelJoint2.prototype.solveVelocityConstraints = function(step) {\n var mA = this.m_invMassA;\n var mB = this.m_invMassB;\n var iA = this.m_invIA;\n var iB = this.m_invIB;\n var vA2 = this.m_bodyA.c_velocity.v;\n var wA = this.m_bodyA.c_velocity.w;\n var vB2 = this.m_bodyB.c_velocity.v;\n var wB = this.m_bodyB.c_velocity.w;\n {\n var Cdot = Vec2.dot(this.m_ax, vB2) - Vec2.dot(this.m_ax, vA2) + this.m_sBx * wB - this.m_sAx * wA;\n var impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse);\n this.m_springImpulse += impulse;\n var P3 = Vec2.mulNumVec2(impulse, this.m_ax);\n var LA = impulse * this.m_sAx;\n var LB = impulse * this.m_sBx;\n vA2.subMul(mA, P3);\n wA -= iA * LA;\n vB2.addMul(mB, P3);\n wB += iB * LB;\n }\n {\n var Cdot = wB - wA - this.m_motorSpeed;\n var impulse = -this.m_motorMass * Cdot;\n var oldImpulse = this.m_motorImpulse;\n var maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n {\n var Cdot = Vec2.dot(this.m_ay, vB2) - Vec2.dot(this.m_ay, vA2) + this.m_sBy * wB - this.m_sAy * wA;\n var impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n var P3 = Vec2.mulNumVec2(impulse, this.m_ay);\n var LA = impulse * this.m_sAy;\n var LB = impulse * this.m_sBy;\n vA2.subMul(mA, P3);\n wA -= iA * LA;\n vB2.addMul(mB, P3);\n wB += iB * LB;\n }\n this.m_bodyA.c_velocity.v.setVec2(vA2);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB2);\n this.m_bodyB.c_velocity.w = wB;\n };\n WheelJoint2.prototype.solvePositionConstraints = function(step) {\n var cA2 = this.m_bodyA.c_position.c;\n var aA = this.m_bodyA.c_position.a;\n var cB2 = this.m_bodyB.c_position.c;\n var aB = this.m_bodyB.c_position.a;\n var qA = Rot.neo(aA);\n var qB = Rot.neo(aB);\n var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n var d2 = Vec2.zero();\n d2.addCombine(1, cB2, 1, rB2);\n d2.subCombine(1, cA2, 1, rA2);\n var ay = Rot.mulVec2(qA, this.m_localYAxisA);\n var sAy = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), ay);\n var sBy = Vec2.crossVec2Vec2(rB2, ay);\n var C = Vec2.dot(d2, ay);\n var k = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_sAy * this.m_sAy + this.m_invIB * this.m_sBy * this.m_sBy;\n var impulse = k != 0 ? -C / k : 0;\n var P3 = Vec2.mulNumVec2(impulse, ay);\n var LA = impulse * sAy;\n var LB = impulse * sBy;\n cA2.subMul(this.m_invMassA, P3);\n aA -= this.m_invIA * LA;\n cB2.addMul(this.m_invMassB, P3);\n aB += this.m_invIB * LB;\n this.m_bodyA.c_position.c.setVec2(cA2);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB2);\n this.m_bodyB.c_position.a = aB;\n return math_abs(C) <= SettingsInternal.linearSlop;\n };\n WheelJoint2.TYPE = \"wheel-joint\";\n return WheelJoint2;\n }(Joint)\n);\nvar _a;\nvar SID = 0;\nvar SERIALIZE_REF_TYPES = {\n \"World\": World,\n \"Body\": Body,\n \"Joint\": Joint,\n \"Fixture\": Fixture,\n \"Shape\": Shape\n};\nvar DESERIALIZE_BY_REF_TYPE = {\n \"Vec2\": Vec2,\n \"Vec3\": Vec3,\n \"World\": World,\n \"Body\": Body,\n \"Joint\": Joint,\n \"Fixture\": Fixture,\n \"Shape\": Shape\n};\nvar DESERIALIZE_BY_TYPE_FIELD = (_a = {}, _a[Body.STATIC] = Body, _a[Body.DYNAMIC] = Body, _a[Body.KINEMATIC] = Body, _a[ChainShape.TYPE] = ChainShape, // [BoxShape.TYPE]: BoxShape,\n_a[PolygonShape.TYPE] = PolygonShape, _a[EdgeShape.TYPE] = EdgeShape, _a[CircleShape.TYPE] = CircleShape, _a[DistanceJoint.TYPE] = DistanceJoint, _a[FrictionJoint.TYPE] = FrictionJoint, _a[GearJoint.TYPE] = GearJoint, _a[MotorJoint.TYPE] = MotorJoint, _a[MouseJoint.TYPE] = MouseJoint, _a[PrismaticJoint.TYPE] = PrismaticJoint, _a[PulleyJoint.TYPE] = PulleyJoint, _a[RevoluteJoint.TYPE] = RevoluteJoint, _a[RopeJoint.TYPE] = RopeJoint, _a[WeldJoint.TYPE] = WeldJoint, _a[WheelJoint.TYPE] = WheelJoint, _a);\nvar DEFAULT_OPTIONS = {\n rootClass: World,\n preSerialize: function(obj) {\n return obj;\n },\n postSerialize: function(data, obj) {\n return data;\n },\n preDeserialize: function(data) {\n return data;\n },\n postDeserialize: function(obj, data) {\n return obj;\n }\n};\nvar Serializer = (\n /** @class */\n /* @__PURE__ */ function() {\n function Serializer2(options2) {\n var _this = this;\n this.toJson = function(root) {\n var preSerialize = _this.options.preSerialize;\n var postSerialize = _this.options.postSerialize;\n var json = [];\n var refQueue = [root];\n var refMemoById = {};\n function addToRefQueue(value, typeName) {\n value.__sid = value.__sid || ++SID;\n if (!refMemoById[value.__sid]) {\n refQueue.push(value);\n var index = json.length + refQueue.length;\n var ref = {\n refIndex: index,\n refType: typeName\n };\n refMemoById[value.__sid] = ref;\n }\n return refMemoById[value.__sid];\n }\n function serializeWithHooks(obj2) {\n obj2 = preSerialize(obj2);\n var data = obj2._serialize();\n data = postSerialize(data, obj2);\n return data;\n }\n function traverse(value, noRefType) {\n if (noRefType === void 0) {\n noRefType = false;\n }\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n if (typeof value._serialize === \"function\") {\n if (!noRefType) {\n for (var typeName in SERIALIZE_REF_TYPES) {\n if (value instanceof SERIALIZE_REF_TYPES[typeName]) {\n return addToRefQueue(value, typeName);\n }\n }\n }\n value = serializeWithHooks(value);\n }\n if (Array.isArray(value)) {\n var newValue = [];\n for (var key = 0; key < value.length; key++) {\n newValue[key] = traverse(value[key]);\n }\n value = newValue;\n } else {\n var newValue = {};\n for (var key in value) {\n if (value.hasOwnProperty(key)) {\n newValue[key] = traverse(value[key]);\n }\n }\n value = newValue;\n }\n return value;\n }\n while (refQueue.length) {\n var obj = refQueue.shift();\n var str = traverse(obj, true);\n json.push(str);\n }\n return json;\n };\n this.fromJson = function(json) {\n var preDeserialize = _this.options.preDeserialize;\n var postDeserialize = _this.options.postDeserialize;\n var rootClass = _this.options.rootClass;\n var deserializedRefMemoByIndex = {};\n function deserializeWithHooks(classHint, data, context) {\n if (!classHint || !classHint._deserialize) {\n classHint = DESERIALIZE_BY_TYPE_FIELD[data.type];\n }\n var deserializer = classHint && classHint._deserialize;\n if (!deserializer) {\n return;\n }\n data = preDeserialize(data);\n var classDeserializeFn = classHint._deserialize;\n var obj = classDeserializeFn(data, context, deserializeChild);\n obj = postDeserialize(obj, data);\n return obj;\n }\n function deserializeChild(classHint, dataOrRef, context) {\n var isRefObject = dataOrRef.refIndex && dataOrRef.refType;\n if (!isRefObject) {\n return deserializeWithHooks(classHint, dataOrRef, context);\n }\n var ref = dataOrRef;\n if (DESERIALIZE_BY_REF_TYPE[ref.refType]) {\n classHint = DESERIALIZE_BY_REF_TYPE[ref.refType];\n }\n var refIndex = ref.refIndex;\n if (!deserializedRefMemoByIndex[refIndex]) {\n var data = json[refIndex];\n var obj = deserializeWithHooks(classHint, data, context);\n deserializedRefMemoByIndex[refIndex] = obj;\n }\n return deserializedRefMemoByIndex[refIndex];\n }\n var root = deserializeWithHooks(rootClass, json[0], null);\n return root;\n };\n this.options = __assign(__assign({}, DEFAULT_OPTIONS), options2);\n }\n return Serializer2;\n }()\n);\nvar worldSerializer = new Serializer({\n rootClass: World\n});\nSerializer.fromJson = worldSerializer.fromJson;\nSerializer.toJson = worldSerializer.toJson;\nvar Testbed = (\n /** @class */\n function() {\n function Testbed2() {\n }\n Testbed2.mount = function(options2) {\n throw new Error(\"Not implemented\");\n };\n Testbed2.start = function(world) {\n var testbed2 = Testbed2.mount();\n testbed2.start(world);\n return testbed2;\n };\n return Testbed2;\n }()\n);\nfunction testbed(a2, b2) {\n var callback;\n var options2;\n if (typeof a2 === \"function\") {\n callback = a2;\n options2 = b2;\n } else if (typeof b2 === \"function\") {\n callback = b2;\n options2 = a2;\n } else {\n options2 = a2 !== null && a2 !== void 0 ? a2 : b2;\n }\n var testbed2 = Testbed.mount(options2);\n if (callback) {\n var world = callback(testbed2) || testbed2.world;\n testbed2.start(world);\n } else {\n return testbed2;\n }\n}\nvar BoxShape = (\n /** @class */\n function(_super) {\n __extends(BoxShape2, _super);\n function BoxShape2(halfWidth, halfHeight, center2, angle) {\n var _this = this;\n if (!(_this instanceof BoxShape2)) {\n return new BoxShape2(halfWidth, halfHeight, center2, angle);\n }\n _this = _super.call(this) || this;\n _this._setAsBox(halfWidth, halfHeight, center2, angle);\n return _this;\n }\n BoxShape2.TYPE = \"polygon\";\n return BoxShape2;\n }(PolygonShape)\n);\nContact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact);\nfunction CircleCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) {\n CollideCircles(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2);\n}\nvar pA = vec2(0, 0);\nvar pB = vec2(0, 0);\nvar CollideCircles = function(manifold, circleA, xfA2, circleB, xfB2) {\n manifold.pointCount = 0;\n transformVec2(pA, xfA2, circleA.m_p);\n transformVec2(pB, xfB2, circleB.m_p);\n var distSqr = distSqrVec2(pB, pA);\n var rA2 = circleA.m_radius;\n var rB2 = circleB.m_radius;\n var radius = rA2 + rB2;\n if (distSqr > radius * radius) {\n return;\n }\n manifold.type = ManifoldType.e_circles;\n copyVec2(manifold.localPoint, circleA.m_p);\n zeroVec2(manifold.localNormal);\n manifold.pointCount = 1;\n copyVec2(manifold.points[0].localPoint, circleB.m_p);\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n};\nContact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact);\nContact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact);\nfunction EdgeCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) {\n var shapeA = fixtureA.getShape();\n var shapeB = fixtureB.getShape();\n CollideEdgeCircle(manifold, shapeA, xfA2, shapeB, xfB2);\n}\nfunction ChainCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) {\n var chain = fixtureA.getShape();\n var edge = new EdgeShape();\n chain.getChildEdge(edge, indexA);\n var shapeA = edge;\n var shapeB = fixtureB.getShape();\n CollideEdgeCircle(manifold, shapeA, xfA2, shapeB, xfB2);\n}\nvar e = vec2(0, 0);\nvar e1 = vec2(0, 0);\nvar e2 = vec2(0, 0);\nvar Q = vec2(0, 0);\nvar P = vec2(0, 0);\nvar n$2 = vec2(0, 0);\nvar CollideEdgeCircle = function(manifold, edgeA, xfA2, circleB, xfB2) {\n manifold.pointCount = 0;\n retransformVec2(Q, xfB2, xfA2, circleB.m_p);\n var A = edgeA.m_vertex1;\n var B = edgeA.m_vertex2;\n subVec2(e, B, A);\n var u = dotVec2(e, B) - dotVec2(e, Q);\n var v3 = dotVec2(e, Q) - dotVec2(e, A);\n var radius = edgeA.m_radius + circleB.m_radius;\n if (v3 <= 0) {\n copyVec2(P, A);\n var dd_1 = distSqrVec2(Q, A);\n if (dd_1 > radius * radius) {\n return;\n }\n if (edgeA.m_hasVertex0) {\n var A1 = edgeA.m_vertex0;\n var B1 = A;\n subVec2(e1, B1, A1);\n var u1 = dotVec2(e1, B1) - dotVec2(e1, Q);\n if (u1 > 0) {\n return;\n }\n }\n manifold.type = ManifoldType.e_circles;\n zeroVec2(manifold.localNormal);\n copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n copyVec2(manifold.points[0].localPoint, circleB.m_p);\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n if (u <= 0) {\n copyVec2(P, B);\n var dd_2 = distSqrVec2(Q, P);\n if (dd_2 > radius * radius) {\n return;\n }\n if (edgeA.m_hasVertex3) {\n var B2 = edgeA.m_vertex3;\n var A2 = B;\n subVec2(e2, B2, A2);\n var v22 = dotVec2(e2, Q) - dotVec2(e2, A2);\n if (v22 > 0) {\n return;\n }\n }\n manifold.type = ManifoldType.e_circles;\n zeroVec2(manifold.localNormal);\n copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n copyVec2(manifold.points[0].localPoint, circleB.m_p);\n manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n var den = lengthSqrVec2(e);\n combine2Vec2(P, u / den, A, v3 / den, B);\n var dd = distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n crossNumVec2(n$2, 1, e);\n if (dotVec2(n$2, Q) - dotVec2(n$2, A) < 0) {\n negVec2(n$2);\n }\n normalizeVec2(n$2);\n manifold.type = ManifoldType.e_faceA;\n copyVec2(manifold.localNormal, n$2);\n copyVec2(manifold.localPoint, A);\n manifold.pointCount = 1;\n copyVec2(manifold.points[0].localPoint, circleB.m_p);\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex);\n};\nvar incidentEdge = [new ClipVertex(), new ClipVertex()];\nvar clipPoints1$1 = [new ClipVertex(), new ClipVertex()];\nvar clipPoints2$1 = [new ClipVertex(), new ClipVertex()];\nvar clipSegmentToLineNormal = vec2(0, 0);\nvar v1 = vec2(0, 0);\nvar n$1 = vec2(0, 0);\nvar xf$1 = transform(0, 0, 0);\nvar v11 = vec2(0, 0);\nvar v12 = vec2(0, 0);\nvar localTangent = vec2(0, 0);\nvar localNormal = vec2(0, 0);\nvar planePoint = vec2(0, 0);\nvar tangent = vec2(0, 0);\nvar normal$1 = vec2(0, 0);\nvar normal1$1 = vec2(0, 0);\nContact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact);\nfunction PolygonContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) {\n CollidePolygons(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2);\n}\nfunction findMaxSeparation(poly1, xf1, poly2, xf2, output2) {\n var count1 = poly1.m_count;\n var count2 = poly2.m_count;\n var n1s = poly1.m_normals;\n var v1s = poly1.m_vertices;\n var v2s = poly2.m_vertices;\n detransformTransform(xf$1, xf2, xf1);\n var bestIndex = 0;\n var maxSeparation2 = -Infinity;\n for (var i = 0; i < count1; ++i) {\n rotVec2(n$1, xf$1.q, n1s[i]);\n transformVec2(v1, xf$1, v1s[i]);\n var si = Infinity;\n for (var j = 0; j < count2; ++j) {\n var sij = dotVec2(n$1, v2s[j]) - dotVec2(n$1, v1);\n if (sij < si) {\n si = sij;\n }\n }\n if (si > maxSeparation2) {\n maxSeparation2 = si;\n bestIndex = i;\n }\n }\n output2.maxSeparation = maxSeparation2;\n output2.bestIndex = bestIndex;\n}\nfunction findIncidentEdge(clipVertex, poly1, xf1, edge12, poly2, xf2) {\n var normals1 = poly1.m_normals;\n var count2 = poly2.m_count;\n var vertices2 = poly2.m_vertices;\n var normals2 = poly2.m_normals;\n rerotVec2(normal1$1, xf2.q, xf1.q, normals1[edge12]);\n var index = 0;\n var minDot = Infinity;\n for (var i = 0; i < count2; ++i) {\n var dot = dotVec2(normal1$1, normals2[i]);\n if (dot < minDot) {\n minDot = dot;\n index = i;\n }\n }\n var i1 = index;\n var i2 = i1 + 1 < count2 ? i1 + 1 : 0;\n transformVec2(clipVertex[0].v, xf2, vertices2[i1]);\n clipVertex[0].id.setFeatures(edge12, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n transformVec2(clipVertex[1].v, xf2, vertices2[i2]);\n clipVertex[1].id.setFeatures(edge12, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n}\nvar maxSeparation = {\n maxSeparation: 0,\n bestIndex: 0\n};\nvar CollidePolygons = function(manifold, polyA, xfA2, polyB, xfB2) {\n manifold.pointCount = 0;\n var totalRadius = polyA.m_radius + polyB.m_radius;\n findMaxSeparation(polyA, xfA2, polyB, xfB2, maxSeparation);\n var edgeA = maxSeparation.bestIndex;\n var separationA = maxSeparation.maxSeparation;\n if (separationA > totalRadius)\n return;\n findMaxSeparation(polyB, xfB2, polyA, xfA2, maxSeparation);\n var edgeB = maxSeparation.bestIndex;\n var separationB = maxSeparation.maxSeparation;\n if (separationB > totalRadius)\n return;\n var poly1;\n var poly2;\n var xf1;\n var xf2;\n var edge12;\n var flip;\n var k_tol = 0.1 * SettingsInternal.linearSlop;\n if (separationB > separationA + k_tol) {\n poly1 = polyB;\n poly2 = polyA;\n xf1 = xfB2;\n xf2 = xfA2;\n edge12 = edgeB;\n manifold.type = ManifoldType.e_faceB;\n flip = true;\n } else {\n poly1 = polyA;\n poly2 = polyB;\n xf1 = xfA2;\n xf2 = xfB2;\n edge12 = edgeA;\n manifold.type = ManifoldType.e_faceA;\n flip = false;\n }\n incidentEdge[0].recycle();\n incidentEdge[1].recycle();\n findIncidentEdge(incidentEdge, poly1, xf1, edge12, poly2, xf2);\n var count1 = poly1.m_count;\n var vertices1 = poly1.m_vertices;\n var iv1 = edge12;\n var iv2 = edge12 + 1 < count1 ? edge12 + 1 : 0;\n copyVec2(v11, vertices1[iv1]);\n copyVec2(v12, vertices1[iv2]);\n subVec2(localTangent, v12, v11);\n normalizeVec2(localTangent);\n crossVec2Num(localNormal, localTangent, 1);\n combine2Vec2(planePoint, 0.5, v11, 0.5, v12);\n rotVec2(tangent, xf1.q, localTangent);\n crossVec2Num(normal$1, tangent, 1);\n transformVec2(v11, xf1, v11);\n transformVec2(v12, xf1, v12);\n var frontOffset = dotVec2(normal$1, v11);\n var sideOffset1 = -dotVec2(tangent, v11) + totalRadius;\n var sideOffset2 = dotVec2(tangent, v12) + totalRadius;\n clipPoints1$1[0].recycle();\n clipPoints1$1[1].recycle();\n clipPoints2$1[0].recycle();\n clipPoints2$1[1].recycle();\n setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y);\n var np1 = clipSegmentToLine(clipPoints1$1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1);\n if (np1 < 2) {\n return;\n }\n setVec2(clipSegmentToLineNormal, tangent.x, tangent.y);\n var np2 = clipSegmentToLine(clipPoints2$1, clipPoints1$1, clipSegmentToLineNormal, sideOffset2, iv2);\n if (np2 < 2) {\n return;\n }\n copyVec2(manifold.localNormal, localNormal);\n copyVec2(manifold.localPoint, planePoint);\n var pointCount = 0;\n for (var i = 0; i < clipPoints2$1.length; ++i) {\n var separation = dotVec2(normal$1, clipPoints2$1[i].v) - frontOffset;\n if (separation <= totalRadius) {\n var cp = manifold.points[pointCount];\n detransformVec2(cp.localPoint, xf2, clipPoints2$1[i].v);\n cp.id.set(clipPoints2$1[i].id);\n if (flip) {\n cp.id.swapFeatures();\n }\n ++pointCount;\n }\n }\n manifold.pointCount = pointCount;\n};\nContact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact);\nfunction PolygonCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) {\n CollidePolygonCircle(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2);\n}\nvar cLocal = vec2(0, 0);\nvar faceCenter = vec2(0, 0);\nvar CollidePolygonCircle = function(manifold, polygonA, xfA2, circleB, xfB2) {\n manifold.pointCount = 0;\n retransformVec2(cLocal, xfB2, xfA2, circleB.m_p);\n var normalIndex = 0;\n var separation = -Infinity;\n var radius = polygonA.m_radius + circleB.m_radius;\n var vertexCount = polygonA.m_count;\n var vertices = polygonA.m_vertices;\n var normals = polygonA.m_normals;\n for (var i = 0; i < vertexCount; ++i) {\n var s2 = dotVec2(normals[i], cLocal) - dotVec2(normals[i], vertices[i]);\n if (s2 > radius) {\n return;\n }\n if (s2 > separation) {\n separation = s2;\n normalIndex = i;\n }\n }\n var vertIndex1 = normalIndex;\n var vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0;\n var v13 = vertices[vertIndex1];\n var v22 = vertices[vertIndex2];\n if (separation < EPSILON) {\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n copyVec2(manifold.localNormal, normals[normalIndex]);\n combine2Vec2(manifold.localPoint, 0.5, v13, 0.5, v22);\n copyVec2(manifold.points[0].localPoint, circleB.m_p);\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n var u1 = dotVec2(cLocal, v22) - dotVec2(cLocal, v13) - dotVec2(v13, v22) + dotVec2(v13, v13);\n var u2 = dotVec2(cLocal, v13) - dotVec2(cLocal, v22) - dotVec2(v22, v13) + dotVec2(v22, v22);\n if (u1 <= 0) {\n if (distSqrVec2(cLocal, v13) > radius * radius) {\n return;\n }\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n subVec2(manifold.localNormal, cLocal, v13);\n normalizeVec2(manifold.localNormal);\n copyVec2(manifold.localPoint, v13);\n copyVec2(manifold.points[0].localPoint, circleB.m_p);\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else if (u2 <= 0) {\n if (distSqrVec2(cLocal, v22) > radius * radius) {\n return;\n }\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n subVec2(manifold.localNormal, cLocal, v22);\n normalizeVec2(manifold.localNormal);\n copyVec2(manifold.localPoint, v22);\n copyVec2(manifold.points[0].localPoint, circleB.m_p);\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else {\n combine2Vec2(faceCenter, 0.5, v13, 0.5, v22);\n var separation_1 = dotVec2(cLocal, normals[vertIndex1]) - dotVec2(faceCenter, normals[vertIndex1]);\n if (separation_1 > radius) {\n return;\n }\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n copyVec2(manifold.localNormal, normals[vertIndex1]);\n copyVec2(manifold.localPoint, faceCenter);\n copyVec2(manifold.points[0].localPoint, circleB.m_p);\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n }\n};\nvar math_min = Math.min;\nContact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact);\nContact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact);\nfunction EdgePolygonContact(manifold, xfA2, fA, indexA, xfB2, fB, indexB) {\n CollideEdgePolygon(manifold, fA.getShape(), xfA2, fB.getShape(), xfB2);\n}\nvar edge_reuse = new EdgeShape();\nfunction ChainPolygonContact(manifold, xfA2, fA, indexA, xfB2, fB, indexB) {\n var chain = fA.getShape();\n chain.getChildEdge(edge_reuse, indexA);\n CollideEdgePolygon(manifold, edge_reuse, xfA2, fB.getShape(), xfB2);\n}\nvar EPAxisType;\n(function(EPAxisType2) {\n EPAxisType2[EPAxisType2[\"e_unknown\"] = -1] = \"e_unknown\";\n EPAxisType2[EPAxisType2[\"e_edgeA\"] = 1] = \"e_edgeA\";\n EPAxisType2[EPAxisType2[\"e_edgeB\"] = 2] = \"e_edgeB\";\n})(EPAxisType || (EPAxisType = {}));\nvar VertexType;\n(function(VertexType2) {\n VertexType2[VertexType2[\"e_isolated\"] = 0] = \"e_isolated\";\n VertexType2[VertexType2[\"e_concave\"] = 1] = \"e_concave\";\n VertexType2[VertexType2[\"e_convex\"] = 2] = \"e_convex\";\n})(VertexType || (VertexType = {}));\nvar EPAxis = (\n /** @class */\n /* @__PURE__ */ function() {\n function EPAxis2() {\n }\n return EPAxis2;\n }()\n);\nvar TempPolygon = (\n /** @class */\n /* @__PURE__ */ function() {\n function TempPolygon2() {\n this.vertices = [];\n this.normals = [];\n this.count = 0;\n for (var i = 0; i < SettingsInternal.maxPolygonVertices; i++) {\n this.vertices.push(vec2(0, 0));\n this.normals.push(vec2(0, 0));\n }\n }\n return TempPolygon2;\n }()\n);\nvar ReferenceFace = (\n /** @class */\n function() {\n function ReferenceFace2() {\n this.v1 = vec2(0, 0);\n this.v2 = vec2(0, 0);\n this.normal = vec2(0, 0);\n this.sideNormal1 = vec2(0, 0);\n this.sideNormal2 = vec2(0, 0);\n }\n ReferenceFace2.prototype.recycle = function() {\n zeroVec2(this.v1);\n zeroVec2(this.v2);\n zeroVec2(this.normal);\n zeroVec2(this.sideNormal1);\n zeroVec2(this.sideNormal2);\n };\n return ReferenceFace2;\n }()\n);\nvar clipPoints1 = [new ClipVertex(), new ClipVertex()];\nvar clipPoints2 = [new ClipVertex(), new ClipVertex()];\nvar ie = [new ClipVertex(), new ClipVertex()];\nvar edgeAxis = new EPAxis();\nvar polygonAxis = new EPAxis();\nvar polygonBA = new TempPolygon();\nvar rf = new ReferenceFace();\nvar centroidB = vec2(0, 0);\nvar edge0 = vec2(0, 0);\nvar edge1 = vec2(0, 0);\nvar edge2 = vec2(0, 0);\nvar xf = transform(0, 0, 0);\nvar normal = vec2(0, 0);\nvar normal0 = vec2(0, 0);\nvar normal1 = vec2(0, 0);\nvar normal2 = vec2(0, 0);\nvar lowerLimit = vec2(0, 0);\nvar upperLimit = vec2(0, 0);\nvar perp = vec2(0, 0);\nvar n = vec2(0, 0);\nvar CollideEdgePolygon = function(manifold, edgeA, xfA2, polygonB, xfB2) {\n detransformTransform(xf, xfA2, xfB2);\n transformVec2(centroidB, xf, polygonB.m_centroid);\n var v0 = edgeA.m_vertex0;\n var v13 = edgeA.m_vertex1;\n var v22 = edgeA.m_vertex2;\n var v3 = edgeA.m_vertex3;\n var hasVertex0 = edgeA.m_hasVertex0;\n var hasVertex3 = edgeA.m_hasVertex3;\n subVec2(edge1, v22, v13);\n normalizeVec2(edge1);\n setVec2(normal1, edge1.y, -edge1.x);\n var offset1 = dotVec2(normal1, centroidB) - dotVec2(normal1, v13);\n var offset0 = 0;\n var offset2 = 0;\n var convex1 = false;\n var convex2 = false;\n zeroVec2(normal0);\n zeroVec2(normal2);\n if (hasVertex0) {\n subVec2(edge0, v13, v0);\n normalizeVec2(edge0);\n setVec2(normal0, edge0.y, -edge0.x);\n convex1 = crossVec2Vec2(edge0, edge1) >= 0;\n offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0);\n }\n if (hasVertex3) {\n subVec2(edge2, v3, v22);\n normalizeVec2(edge2);\n setVec2(normal2, edge2.y, -edge2.x);\n convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0;\n offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v22);\n }\n var front;\n zeroVec2(normal);\n zeroVec2(lowerLimit);\n zeroVec2(upperLimit);\n if (hasVertex0 && hasVertex3) {\n if (convex1 && convex2) {\n front = offset0 >= 0 || offset1 >= 0 || offset2 >= 0;\n if (front) {\n copyVec2(normal, normal1);\n copyVec2(lowerLimit, normal0);\n copyVec2(upperLimit, normal2);\n } else {\n scaleVec2(normal, -1, normal1);\n scaleVec2(lowerLimit, -1, normal1);\n scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex1) {\n front = offset0 >= 0 || offset1 >= 0 && offset2 >= 0;\n if (front) {\n copyVec2(normal, normal1);\n copyVec2(lowerLimit, normal0);\n copyVec2(upperLimit, normal1);\n } else {\n scaleVec2(normal, -1, normal1);\n scaleVec2(lowerLimit, -1, normal2);\n scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex2) {\n front = offset2 >= 0 || offset0 >= 0 && offset1 >= 0;\n if (front) {\n copyVec2(normal, normal1);\n copyVec2(lowerLimit, normal1);\n copyVec2(upperLimit, normal2);\n } else {\n scaleVec2(normal, -1, normal1);\n scaleVec2(lowerLimit, -1, normal1);\n scaleVec2(upperLimit, -1, normal0);\n }\n } else {\n front = offset0 >= 0 && offset1 >= 0 && offset2 >= 0;\n if (front) {\n copyVec2(normal, normal1);\n copyVec2(lowerLimit, normal1);\n copyVec2(upperLimit, normal1);\n } else {\n scaleVec2(normal, -1, normal1);\n scaleVec2(lowerLimit, -1, normal2);\n scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex0) {\n if (convex1) {\n front = offset0 >= 0 || offset1 >= 0;\n if (front) {\n copyVec2(normal, normal1);\n copyVec2(lowerLimit, normal0);\n scaleVec2(upperLimit, -1, normal1);\n } else {\n scaleVec2(normal, -1, normal1);\n copyVec2(lowerLimit, normal1);\n scaleVec2(upperLimit, -1, normal1);\n }\n } else {\n front = offset0 >= 0 && offset1 >= 0;\n if (front) {\n copyVec2(normal, normal1);\n copyVec2(lowerLimit, normal1);\n scaleVec2(upperLimit, -1, normal1);\n } else {\n scaleVec2(normal, -1, normal1);\n copyVec2(lowerLimit, normal1);\n scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex3) {\n if (convex2) {\n front = offset1 >= 0 || offset2 >= 0;\n if (front) {\n copyVec2(normal, normal1);\n scaleVec2(lowerLimit, -1, normal1);\n copyVec2(upperLimit, normal2);\n } else {\n scaleVec2(normal, -1, normal1);\n scaleVec2(lowerLimit, -1, normal1);\n copyVec2(upperLimit, normal1);\n }\n } else {\n front = offset1 >= 0 && offset2 >= 0;\n if (front) {\n copyVec2(normal, normal1);\n scaleVec2(lowerLimit, -1, normal1);\n copyVec2(upperLimit, normal1);\n } else {\n scaleVec2(normal, -1, normal1);\n scaleVec2(lowerLimit, -1, normal2);\n copyVec2(upperLimit, normal1);\n }\n }\n } else {\n front = offset1 >= 0;\n if (front) {\n copyVec2(normal, normal1);\n scaleVec2(lowerLimit, -1, normal1);\n scaleVec2(upperLimit, -1, normal1);\n } else {\n scaleVec2(normal, -1, normal1);\n copyVec2(lowerLimit, normal1);\n copyVec2(upperLimit, normal1);\n }\n }\n polygonBA.count = polygonB.m_count;\n for (var i = 0; i < polygonB.m_count; ++i) {\n transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]);\n rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]);\n }\n var radius = polygonB.m_radius + edgeA.m_radius;\n manifold.pointCount = 0;\n {\n edgeAxis.type = EPAxisType.e_edgeA;\n edgeAxis.index = front ? 0 : 1;\n edgeAxis.separation = Infinity;\n for (var i = 0; i < polygonBA.count; ++i) {\n var v4 = polygonBA.vertices[i];\n var s2 = dotVec2(normal, v4) - dotVec2(normal, v13);\n if (s2 < edgeAxis.separation) {\n edgeAxis.separation = s2;\n }\n }\n }\n if (edgeAxis.type == EPAxisType.e_unknown) {\n return;\n }\n if (edgeAxis.separation > radius) {\n return;\n }\n {\n polygonAxis.type = EPAxisType.e_unknown;\n polygonAxis.index = -1;\n polygonAxis.separation = -Infinity;\n setVec2(perp, -normal.y, normal.x);\n for (var i = 0; i < polygonBA.count; ++i) {\n scaleVec2(n, -1, polygonBA.normals[i]);\n var s1 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v13);\n var s22 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v22);\n var s2 = math_min(s1, s22);\n if (s2 > radius) {\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s2;\n break;\n }\n if (dotVec2(n, perp) >= 0) {\n if (dotVec2(n, normal) - dotVec2(upperLimit, normal) < -SettingsInternal.angularSlop) {\n continue;\n }\n } else {\n if (dotVec2(n, normal) - dotVec2(lowerLimit, normal) < -SettingsInternal.angularSlop) {\n continue;\n }\n }\n if (s2 > polygonAxis.separation) {\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s2;\n }\n }\n }\n if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) {\n return;\n }\n var k_relativeTol = 0.98;\n var k_absoluteTol = 1e-3;\n var primaryAxis;\n if (polygonAxis.type == EPAxisType.e_unknown) {\n primaryAxis = edgeAxis;\n } else if (polygonAxis.separation > k_relativeTol * edgeAxis.separation + k_absoluteTol) {\n primaryAxis = polygonAxis;\n } else {\n primaryAxis = edgeAxis;\n }\n ie[0].recycle();\n ie[1].recycle();\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n manifold.type = ManifoldType.e_faceA;\n var bestIndex = 0;\n var bestValue = dotVec2(normal, polygonBA.normals[0]);\n for (var i = 1; i < polygonBA.count; ++i) {\n var value = dotVec2(normal, polygonBA.normals[i]);\n if (value < bestValue) {\n bestValue = value;\n bestIndex = i;\n }\n }\n var i1 = bestIndex;\n var i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0;\n copyVec2(ie[0].v, polygonBA.vertices[i1]);\n ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n copyVec2(ie[1].v, polygonBA.vertices[i2]);\n ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n if (front) {\n rf.i1 = 0;\n rf.i2 = 1;\n copyVec2(rf.v1, v13);\n copyVec2(rf.v2, v22);\n copyVec2(rf.normal, normal1);\n } else {\n rf.i1 = 1;\n rf.i2 = 0;\n copyVec2(rf.v1, v22);\n copyVec2(rf.v2, v13);\n scaleVec2(rf.normal, -1, normal1);\n }\n } else {\n manifold.type = ManifoldType.e_faceB;\n copyVec2(ie[0].v, v13);\n ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n copyVec2(ie[1].v, v22);\n ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n rf.i1 = primaryAxis.index;\n rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0;\n copyVec2(rf.v1, polygonBA.vertices[rf.i1]);\n copyVec2(rf.v2, polygonBA.vertices[rf.i2]);\n copyVec2(rf.normal, polygonBA.normals[rf.i1]);\n }\n setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x);\n setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y);\n rf.sideOffset1 = dotVec2(rf.sideNormal1, rf.v1);\n rf.sideOffset2 = dotVec2(rf.sideNormal2, rf.v2);\n clipPoints1[0].recycle();\n clipPoints1[1].recycle();\n clipPoints2[0].recycle();\n clipPoints2[1].recycle();\n var np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1);\n if (np1 < SettingsInternal.maxManifoldPoints) {\n return;\n }\n var np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2);\n if (np2 < SettingsInternal.maxManifoldPoints) {\n return;\n }\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n copyVec2(manifold.localNormal, rf.normal);\n copyVec2(manifold.localPoint, rf.v1);\n } else {\n copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]);\n copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]);\n }\n var pointCount = 0;\n for (var i = 0; i < SettingsInternal.maxManifoldPoints; ++i) {\n var separation = dotVec2(rf.normal, clipPoints2[i].v) - dotVec2(rf.normal, rf.v1);\n if (separation <= radius) {\n var cp = manifold.points[pointCount];\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n detransformVec2(cp.localPoint, xf, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n } else {\n copyVec2(cp.localPoint, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n cp.id.swapFeatures();\n }\n ++pointCount;\n }\n }\n manifold.pointCount = pointCount;\n};\nvar internal = {\n CollidePolygons,\n Settings,\n Sweep,\n Manifold,\n Distance,\n TimeOfImpact,\n DynamicTree,\n stats\n};\nvar DataDriver = (\n /** @class */\n function() {\n function DataDriver2(key, listener) {\n this._refMap = {};\n this._map = {};\n this._xmap = {};\n this._data = [];\n this._entered = [];\n this._exited = [];\n this._key = key;\n this._listener = listener;\n }\n DataDriver2.prototype.update = function(data) {\n if (!Array.isArray(data))\n throw \"Invalid data: \" + data;\n this._entered.length = 0;\n this._exited.length = 0;\n this._data.length = data.length;\n for (var i = 0; i < data.length; i++) {\n if (typeof data[i] !== \"object\" || data[i] === null)\n continue;\n var d2 = data[i];\n var id = this._key(d2);\n if (!this._map[id]) {\n this._entered.push(d2);\n } else {\n delete this._map[id];\n }\n this._data[i] = d2;\n this._xmap[id] = d2;\n }\n for (var id in this._map) {\n this._exited.push(this._map[id]);\n delete this._map[id];\n }\n var temp3 = this._map;\n this._map = this._xmap;\n this._xmap = temp3;\n for (var i = 0; i < this._exited.length; i++) {\n var d2 = this._exited[i];\n var key = this._key(d2);\n var ref = this._refMap[key];\n this._listener.exit(d2, ref);\n delete this._refMap[key];\n }\n for (var i = 0; i < this._entered.length; i++) {\n var d2 = this._entered[i];\n var key = this._key(d2);\n var ref = this._listener.enter(d2);\n if (ref) {\n this._refMap[key] = ref;\n }\n }\n for (var i = 0; i < this._data.length; i++) {\n if (typeof data[i] !== \"object\" || data[i] === null)\n continue;\n var d2 = this._data[i];\n var key = this._key(d2);\n var ref = this._refMap[key];\n this._listener.update(d2, ref);\n }\n this._entered.length = 0;\n this._exited.length = 0;\n this._data.length = 0;\n };\n DataDriver2.prototype.ref = function(d2) {\n return this._refMap[this._key(d2)];\n };\n return DataDriver2;\n }()\n);\nconst planck = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n AABB,\n Body,\n Box: BoxShape,\n BoxShape,\n BroadPhase,\n Chain: ChainShape,\n ChainShape,\n Circle: CircleShape,\n CircleShape,\n ClipVertex,\n CollideCircles,\n CollideEdgeCircle,\n CollideEdgePolygon,\n CollidePolygonCircle,\n CollidePolygons,\n Contact,\n ContactEdge,\n get ContactFeatureType() {\n return ContactFeatureType;\n },\n ContactID,\n ContactImpulse,\n DataDriver,\n Distance,\n DistanceInput,\n DistanceJoint,\n DistanceOutput,\n DistanceProxy,\n DynamicTree,\n Edge: EdgeShape,\n EdgeShape,\n Fixture,\n FixtureProxy,\n FrictionJoint,\n GearJoint,\n Joint,\n JointEdge,\n Manifold,\n ManifoldPoint,\n get ManifoldType() {\n return ManifoldType;\n },\n Mat22,\n Mat33,\n Math: math,\n MotorJoint,\n MouseJoint,\n get PointState() {\n return PointState;\n },\n Polygon: PolygonShape,\n PolygonShape,\n PrismaticJoint,\n PulleyJoint,\n RevoluteJoint,\n RopeJoint,\n Rot,\n Serializer,\n Settings,\n SettingsInternal,\n Shape,\n ShapeCast,\n ShapeCastInput,\n ShapeCastOutput,\n SimplexCache,\n Solver,\n Sweep,\n TOIInput,\n TOIOutput,\n get TOIOutputState() {\n return TOIOutputState;\n },\n Testbed,\n TimeOfImpact,\n TimeStep,\n Transform,\n TreeNode,\n Vec2,\n Vec3,\n VelocityConstraintPoint,\n WeldJoint,\n WheelJoint,\n World,\n WorldManifold,\n clipSegmentToLine,\n getPointStates,\n internal,\n mixFriction,\n mixRestitution,\n stats,\n testOverlap,\n testbed\n}, Symbol.toStringTag, { value: \"Module\" }));\nexport {\n AABB,\n Body,\n BoxShape as Box,\n BoxShape,\n BroadPhase,\n ChainShape as Chain,\n ChainShape,\n CircleShape as Circle,\n CircleShape,\n ClipVertex,\n CollideCircles,\n CollideEdgeCircle,\n CollideEdgePolygon,\n CollidePolygonCircle,\n CollidePolygons,\n Contact,\n ContactEdge,\n ContactFeatureType,\n ContactID,\n ContactImpulse,\n DataDriver,\n Distance,\n DistanceInput,\n DistanceJoint,\n DistanceOutput,\n DistanceProxy,\n DynamicTree,\n EdgeShape as Edge,\n EdgeShape,\n Fixture,\n FixtureProxy,\n FrictionJoint,\n GearJoint,\n Joint,\n JointEdge,\n Manifold,\n ManifoldPoint,\n ManifoldType,\n Mat22,\n Mat33,\n math as Math,\n MotorJoint,\n MouseJoint,\n PointState,\n PolygonShape as Polygon,\n PolygonShape,\n PrismaticJoint,\n PulleyJoint,\n RevoluteJoint,\n RopeJoint,\n Rot,\n Serializer,\n Settings,\n SettingsInternal,\n Shape,\n ShapeCast,\n ShapeCastInput,\n ShapeCastOutput,\n SimplexCache,\n Solver,\n Sweep,\n TOIInput,\n TOIOutput,\n TOIOutputState,\n Testbed,\n TimeOfImpact,\n TimeStep,\n Transform,\n TreeNode,\n Vec2,\n Vec3,\n VelocityConstraintPoint,\n WeldJoint,\n WheelJoint,\n World,\n WorldManifold,\n clipSegmentToLine,\n planck as default,\n getPointStates,\n internal,\n mixFriction,\n mixRestitution,\n stats,\n testOverlap,\n testbed\n};\n//# sourceMappingURL=planck.mjs.map\n","import { Vec2 } from \"planck\";\n\nclass Vec2Pool {\n constructor(initialSize = 128) {\n this.available = [];\n this.inUse = new Set();\n this.totalCreated = 0;\n\n // Pre-allocate pool\n for (let i = 0; i < initialSize; i++) {\n this.available.push(new Vec2(0, 0));\n this.totalCreated++;\n }\n }\n\n acquire(x = 0, y = 0) {\n let vec;\n if (this.available.length > 0) {\n vec = this.available.pop();\n } else {\n // Expand pool if needed\n vec = new Vec2(0, 0);\n this.totalCreated++;\n }\n\n vec.x = x;\n vec.y = y;\n this.inUse.add(vec);\n return vec;\n }\n\n release(vec) {\n if (this.inUse.has(vec)) {\n this.inUse.delete(vec);\n vec.x = 0;\n vec.y = 0;\n this.available.push(vec);\n }\n }\n\n reset() {\n this.available.push(...this.inUse);\n this.inUse.clear();\n // Reset all vectors\n for (let vec of this.available) {\n vec.x = 0;\n vec.y = 0;\n }\n }\n\n stats() {\n return {\n available: this.available.length,\n inUse: this.inUse.size,\n total: this.totalCreated\n };\n }\n}\n\nexport const vec2Pool = new Vec2Pool();\n","import { World, Vec2, AABB, Box, Circle, Polygon, Edge } from \"planck\"\nimport { Node } from \"./core.js\"\nimport { vec2Pool } from \"./vec2pool.js\"\nimport { globalPerf } from \"./lib.js\";\n// migrating from matter-js has no kinetic body\n\n\nconst profileMonitor = globalPerf\n\nclass PhysicsWorld {\n constructor(options = {}) {\n this.worldWidthPixels = options.worldWidthPixels || 800;\n this.worldHeightPixels = options.worldHeightPixels || 600;\n\n // 50 PPM means: 16px character = 0.32m (roughly 1 foot tall)\n this.ppm = options.ppm || 50;\n\n this.worldWidthMeters = this.worldWidthPixels / this.ppm;\n this.worldHeightMeters = this.worldHeightPixels / this.ppm;\n\n console.log(`Physics world: ${this.worldWidthMeters.toFixed(2)}m × ${this.worldHeightMeters.toFixed(2)}m`);\n console.log(`PPM: ${this.ppm} (1 meter = ${this.ppm} pixels)`);\n\n // Gravity in m/s² (Earth = 9.8, but 9.8 feels slow in games)\n // For platformers, 15-25 m/s² feels better\n const gravityY = options.gravity !== undefined ? options.gravity : -20;\n const gravityVec = vec2Pool.acquire(0, gravityY);\n this.world = new World({\n gravity: gravityVec\n });\n\n vec2Pool.release(gravityVec);\n\n console.log(`Gravity: ${Math.abs(gravityY)} m/s² downward`);\n\n\n this.fixedDelta = options.fixedDelta || 1 / 60; // 60Hz\n this.accumulator = 0;\n this.maxSubSteps = options.maxSubSteps || 5; // spiral of death protection\n\n this.bodies = new Map();\n\n this.setupCollisionEvents();\n }\n\n\n pixelsToMeters(pixels) {\n return pixels / this.ppm;\n }\n\n metersToPixels(meters) {\n return Math.floor(meters * this.ppm);\n }\n\n screenToWorld(screenX, screenY) {\n return {\n x: this.pixelsToMeters(screenX),\n y: this.worldHeightMeters - this.pixelsToMeters(screenY)\n };\n }\n\n worldToScreen(worldX, worldY) {\n return {\n x: this.metersToPixels(worldX),\n y: this.metersToPixels(this.worldHeightMeters - worldY)\n };\n }\n\n screenVelToWorld(vxPixels, vyPixels) {\n return {\n x: this.pixelsToMeters(vxPixels),\n y: -this.pixelsToMeters(vyPixels) // negative because screen Y down = physics Y up\n };\n }\n\n\n worldVelToScreen(vxMeters, vyMeters) {\n return {\n x: this.metersToPixels(vxMeters),\n y: -this.metersToPixels(vyMeters) // negative for Y-flip \n };\n }\n\n step(delta) {\n profileMonitor.start(\"physicsStep\")\n\n this.accumulator += delta;\n let steps = 0;\n\n while (this.accumulator >= this.fixedDelta && steps < this.maxSubSteps) {\n profileMonitor.start(\"worldStep\")\n this.world.step(this.fixedDelta);\n profileMonitor.end(\"worldStep\")\n\n this.accumulator -= this.fixedDelta;\n steps++;\n }\n\n profileMonitor.end(\"physicsStep\")\n\n if (steps >= this.maxSubSteps) {\n console.warn(`Physics capped at ${this.maxSubSteps} substeps (frame too slow)`);\n this.accumulator = 0;\n }\n\n return steps;\n }\n\n\n addBody(planckBody, rigidBodyNode) {\n this.bodies.set(planckBody, rigidBodyNode);\n }\n\n removeBody(planckBody) {\n this.bodies.delete(planckBody);\n this.world.destroyBody(planckBody);\n }\n\n\n setupCollisionEvents() {\n this.world.on(\"begin-contact\", (contact) => {\n profileMonitor.start(\"collisionEnter\")\n\n const bodyA = contact.getFixtureA().getBody();\n const bodyB = contact.getFixtureB().getBody();\n\n const nodeA = this.bodies.get(bodyA);\n const nodeB = this.bodies.get(bodyB);\n\n if (nodeA && nodeA.onCollisionEnter) {\n nodeA.onCollisionEnter(nodeB, contact);\n }\n if (nodeB && nodeB.onCollisionEnter) {\n nodeB.onCollisionEnter(nodeA, contact);\n }\n\n profileMonitor.end(\"collisionEnter\")\n })\n\n this.world.on('end-contact', (contact) => {\n const bodyA = contact.getFixtureA().getBody();\n const bodyB = contact.getFixtureB().getBody();\n\n const nodeA = this.bodies.get(bodyA);\n const nodeB = this.bodies.get(bodyB);\n\n if (nodeA && nodeA.onCollisionExit) {\n nodeA.onCollisionExit(nodeB, contact);\n }\n if (nodeB && nodeB.onCollisionExit) {\n nodeB.onCollisionExit(nodeA, contact);\n }\n });\n\n // pre-solve for continuous collision response\n this.world.on('pre-solve', (contact, oldManifold) => {\n profileMonitor.start(\"collisionStay\")\n\n const bodyA = contact.getFixtureA().getBody();\n const bodyB = contact.getFixtureB().getBody();\n\n const nodeA = this.bodies.get(bodyA);\n const nodeB = this.bodies.get(bodyB);\n\n if (nodeA && nodeA.onCollisionStay) {\n nodeA.onCollisionStay(nodeB, contact);\n }\n if (nodeB && nodeB.onCollisionStay) {\n nodeB.onCollisionStay(nodeA, contact);\n }\n\n profileMonitor.end(\"collisionStay\")\n });\n }\n\n\n queryPoint(screenX, screenY) {\n profileMonitor.start(\"queryPoint\")\n\n const worldPos = this.screenToWorld(screenX, screenY)\n const point = vec2Pool.acquire(worldPos.x, worldPos.y);\n\n const hits = []\n this.world.queryAABB(\n AABB(point, point), (fixture) => {\n if (fixture.testPoint(point)) {\n const body = fixture.getBody();\n const node = this.bodies.get(body);\n if (node) hits.push(node);\n }\n return true; // Continue query\n }\n )\n vec2Pool.release(point);\n\n profileMonitor.end(\"queryPoint\")\n return hits;\n }\n\n\n raycastScreen(x1, y1, x2, y2) {\n profileMonitor.start(\"rayCast\")\n\n const p1 = this.screenToWorld(x1, y1);\n const p2 = this.screenToWorld(x2, y2);\n\n let closestHit = null;\n let closestFraction = 1;\n\n const rayStart = vec2Pool.acquire(p1.x, p1.y);\n const rayEnd = vec2Pool.acquire(p2.x, p2.y);\n\n this.world.rayCast(\n rayStart,\n rayEnd,\n (fixture, point, normal, fraction) => {\n if (fraction < closestFraction) {\n closestFraction = fraction;\n const body = fixture.getBody();\n const node = this.bodies.get(body);\n const screenPoint = this.worldToScreen(point.x, point.y);\n\n closestHit = {\n node,\n point: screenPoint,\n normal: { x: normal.x, y: -normal.y }, // Flip Y for screen space\n fraction\n };\n }\n return fraction; // continue searching for closer hits\n }\n );\n\n vec2Pool.release(rayStart);\n vec2Pool.release(rayEnd);\n\n profileMonitor.end(\"rayCast\")\n return closestHit;\n }\n}\n\n\n\nexport function createPhysicsWorld(canvas, options = {}) {\n return new PhysicsWorld({\n worldWidthPixels: canvas.width,\n worldHeightPixels: canvas.height,\n ...options\n });\n}\n\n\n\nexport class RigidBody2D extends Node {\n constructor(name, options = {}) {\n super(name);\n\n // console.log(options)\n this.type = options.type || 'dynamic'; // dynamic, kinematic, static\n this.mass = options.mass || 1.0;\n this.friction = options.friction || 0.3;\n this.restitution = options.restitution || 0.0; // bounciness\n this.linearDamping = options.linearDamping || 0.0; // air resistance\n this.angularDamping = options.angularDamping || 0.01;\n\n // describes the motion of a rigid body rotating around a stationary axis, where every point on the body moves in a circle, maintaining a constant distance from the axis\n this.fixedRotation = options.fixedRotation !== undefined ? options.fixedRotation : false;\n\n this.pivot = options.pivot || 'center';\n this.gravityScale = options.gravityScale != undefined ? options.gravityScale : 1;\n // console.log(options.gravityScale, this.gravityScale)\n\n this.body = null;\n\n this.physicsWorld = undefined;\n\n\n\n\n this.onCollisionEnter = null; // (other, contact) => {}\n this.onCollisionStay = null;\n this.onCollisionExit = null;\n\n this.collisionCategory = options.collisionCategory || 0x0001;\n this.collisionMask = options.collisionMask || 0xFFFF;\n\n this.anchorOffset = null; // in meters, relative to body center\n\n this.sprite = null\n }\n\n /**\n * Add collision box with automatic anchor matching\n * \n * @param {number} widthPixels - Box width in pixels\n * @param {number} heightPixels - Box height in pixels\n */\n addCollisionBox(widthPixels, heightPixels, options = {}) {\n const shape = new CollisionShape2D('box', {\n width: widthPixels,\n height: heightPixels,\n anchor: options.anchor || this.pivot,\n ...options\n });\n\n this.anchorOffset = shape.anchorOffset;\n this.addChild(shape);\n return shape;\n }\n\n /**\n * Add collision circle\n */\n addCollisionCircle(radiusPixels, options = {}) {\n const shape = new CollisionShape2D('circle', {\n radius: radiusPixels,\n anchor: options.anchor || this.pivot,\n ...options\n });\n\n this.anchorOffset = shape.anchorOffset;\n this.addChild(shape);\n return shape;\n }\n\n addCollisionShape(shape /* CollisionShape2D */) {\n if (!shape) return null;\n // Use shape's anchor/pivot to update body anchorOffset\n this.anchorOffset = shape.anchorOffset;\n this.addChild(shape);\n return shape;\n }\n\n addCollisionPolygon(points = [], options = {}) {\n const opts = Object.assign({\n points: points,\n x: options.x || 0,\n y: options.y || 0,\n anchor: options.anchor || this.pivot,\n closed: options.closed === undefined ? true : !!options.closed\n }, options);\n\n const shapeType = opts.closed ? 'polygon' : 'poly';\n const shape = new CollisionShape2D(shapeType, opts);\n\n this.anchorOffset = shape.anchorOffset;\n this.addChild(shape);\n return shape;\n }\n\n addCollisionPolyline(points = [], options = {}) {\n const opts = Object.assign({}, options, { points, closed: false, anchor: options.anchor || this.pivot });\n const shape = new CollisionShape2D('line', opts);\n\n this.anchorOffset = shape.anchorOffset;\n this.addChild(shape);\n return shape;\n }\n\n addCollisionPoint(options = {}) {\n const x = options.x || 0;\n const y = options.y || 0;\n // If you later support a 'point' shape in CollisionShape2D, switch to that.\n // For now make a tiny sensor box so physics queries can hit it.\n const shape = new CollisionShape2D('box', {\n width: options.size || 2,\n height: options.size || 2,\n x, y,\n anchor: options.anchor || this.pivot,\n sensor: options.sensor !== undefined ? options.sensor : true,\n ...options\n });\n\n this.anchorOffset = shape.anchorOffset;\n this.addChild(shape);\n return shape;\n }\n\n\n addCollisionFromParsed(parsed, options = {}) {\n if (!parsed || !parsed.type || !parsed.data) {\n console.warn('[RigidBody2D] addCollisionFromParsed: invalid parsed object');\n return null;\n }\n const d = parsed.data;\n switch (parsed.type) {\n case 'point':\n // d.x/d.y are local offsets from tile top-left; treat them as body-local positions\n return this.addCollisionPoint(Object.assign({ x: d.x, y: d.y }, options));\n case 'box': {\n // Tiled uses top-left; convert to center coords for addCollisionBox-like behaviour\n const cx = (d.x || 0) + (d.width || 0) / 2;\n const cy = (d.y || 0) + (d.height || 0) / 2;\n return this.addCollisionBox(d.width || 0, d.height || 0, Object.assign({ anchor: options.anchor || this.pivot, x: cx, y: cy }, options));\n }\n case 'circle':\n // parseShape returns center\n return this.addCollisionCircle(d.radius || 0, Object.assign({ anchor: options.anchor || this.pivot, x: d.x, y: d.y }, options));\n case 'poly':\n case 'polygon':\n // d.x/d.y is base; d.points[] are relative\n return this.addCollisionPolygon(d.points || [], Object.assign({ x: d.x || 0, y: d.y || 0, closed: true, anchor: options.anchor || this.pivot }, options));\n case 'line':\n case 'polyline':\n return this.addCollisionPolyline(d.points || [], Object.assign({ x: d.x || 0, y: d.y || 0, anchor: options.anchor || this.pivot }, options));\n default:\n console.warn('[RigidBody2D] addCollisionFromParsed: unknown type', parsed.type);\n return null;\n }\n }\n\n\n /**\n * Set sprite and auto-configure offset\n */\n setSprite(sprite) {\n if (this.sprite) {\n this.removeChild(this.sprite);\n }\n this.sprite = sprite;\n this.addChild(sprite);\n this.updateSpriteOffset();\n }\n\n updateSpriteOffset() {\n if (!this.sprite) return;\n\n const w = this.sprite.frameWidth;\n const h = this.sprite.frameHeight;\n const offset = this.getPivotToTopLeftOffset(w, h);\n\n this.sprite.offset.x = offset.x;\n this.sprite.offset.y = offset.y;\n }\n\n getPivotToTopLeftOffset(width, height) {\n const hw = width / 2;\n const hh = height / 2;\n\n switch (this.pivot) {\n case 'top-left': return { x: 0, y: 0 };\n case 'top-center': return { x: -hw, y: 0 };\n case 'top-right': return { x: -width, y: 0 };\n case 'center-left': return { x: 0, y: -hh };\n case 'center': return { x: -hw, y: -hh };\n case 'center-right': return { x: -width, y: -hh };\n case 'bottom-left': return { x: 0, y: -height };\n case 'bottom-center': return { x: -hw, y: -height };\n case 'bottom-right': return { x: -width, y: -height };\n default: return { x: -hw, y: -hh };\n }\n }\n\n createBody() {\n\n if (this.body) return;\n\n const shapes = this.children.filter(c => c instanceof CollisionShape2D);\n if (shapes.length === 0) {\n console.warn(`RigidBody2D \"${this.name}\" has no collision shapes`);\n return;\n }\n const screenPos = this.getWorldPosition();\n const worldPos = this.physicsWorld.screenToWorld(screenPos.x, screenPos.y);\n\n let planckType = 'dynamic';\n if (this.type === 'static') planckType = 'static';\n if (this.type === 'kinematic') planckType = 'kinematic';\n\n this.body = this.physicsWorld.world.createBody({\n type: planckType,\n position: new Vec2(worldPos.x, worldPos.y),\n angle: -this.worldRotation, // negative because screen rotation is opposite\n linearDamping: this.linearDamping,\n angularDamping: this.angularDamping,\n fixedRotation: this.fixedRotation,\n gravityScale: this.gravityScale,\n });\n\n\n\n\n for (const shape of shapes) {\n shape.createPlanckFixture(this.body, this.physicsWorld);\n }\n\n if (this.type === 'dynamic' && this.mass !== 1.0) {\n const massData = this.body.getMassData();\n massData.mass = this.mass;\n this.body.setMassData(massData);\n }\n\n this.physicsWorld.addBody(this.body, this);\n }\n\n _ready() {\n super._ready();\n\n // find physics world by walking up scene tree\n let current = this.parent;\n while (current) {\n if (current.physicsWorld) {\n this.physicsWorld = current.physicsWorld;\n break;\n }\n current = current.parent;\n }\n\n if (!this.physicsWorld) {\n console.warn(`RigidBody2D \"${this.name}\" not added to physics world`);\n return;\n }\n\n this.createBody();\n }\n\n\n /**\n * Sync transform with physics body\n * \n * Authority:\n * - Dynamic: Physics → Node (read from Planck)\n * - Kinematic: Node → Physics (write velocity to Planck)\n * - Static: No sync\n */\n _process(delta) {\n super._process(delta);\n\n if (!this.body) return;\n // console.log(this.type)\n if (this.type === 'dynamic') {\n // physics controls us - read from Planck\n const physPos = this.body.getPosition();\n const screenPos = this.physicsWorld.worldToScreen(physPos.x, physPos.y);\n\n // convert back to local coords\n const local = this.worldToLocal(screenPos.x, screenPos.y);\n this.position.x = local.x;\n this.position.y = local.y;\n\n // rotation (negate because screen rotation opposite)\n const physAngle = this.body.getAngle();\n this.rotation = -physAngle - (this.parent ? this.parent.worldRotation : 0);\n\n this.markDirty();\n } else if (this.type === 'kinematic') {\n // we control physics - write velocity to Planck\n\n if (this.transformDirty) {\n const targetScreenPos = this.getWorldPosition();\n const targetWorldPos = this.physicsWorld.screenToWorld(targetScreenPos.x, targetScreenPos.y);\n\n // Calculate velocity to reach target in one physics step\n const currentPos = this.body.getPosition();\n const dt = this.physicsWorld.fixedDelta;\n const velX = (targetWorldPos.x - currentPos.x) / dt;\n const velY = (targetWorldPos.y - currentPos.y) / dt;\n const velVec = vec2Pool.acquire(velX, velY);\n this.body.setLinearVelocity(velVec);\n vec2Pool.release(velVec);\n\n // Handle rotation\n const targetAngle = -this.worldRotation;\n const currentAngle = this.body.getAngle();\n const angularVel = (targetAngle - currentAngle) / dt;\n this.body.setAngularVelocity(angularVel);\n }\n }\n }\n\n /**\n * Apply force (for dynamic bodies)\n * Forces are in SCREEN space (pixels/s²), converted internally\n */\n applyForce(forceXPixels, forceYPixels, worldXPixels = null, worldYPixels = null) {\n if (!this.body || this.type !== 'dynamic') return;\n\n const forceWorld = this.physicsWorld.screenVelToWorld(forceXPixels, forceYPixels);\n\n let point = this.body.getWorldCenter();\n if (worldXPixels !== null) {\n const pointWorld = this.physicsWorld.screenToWorld(worldXPixels, worldYPixels);\n point = vec2Pool.acquire(pointWorld.x, pointWorld.y);\n }\n\n const forceVec = vec2Pool.acquire(forceWorld.x, forceWorld.y);\n this.body.applyForce(forceVec, point);\n\n vec2Pool.release(forceVec);\n if (worldXPixels !== null) {\n vec2Pool.release(point);\n }\n }\n\n /**\n * Apply impulse (instant velocity change)\n * Impulses are in SCREEN space (pixels/s), converted internally\n */\n applyImpulse(impulseXPixels, impulseYPixels, worldXPixels = null, worldYPixels = null) {\n if (!this.body || this.type !== 'dynamic') return;\n\n const impulseWorld = this.physicsWorld.screenVelToWorld(impulseXPixels, impulseYPixels);\n\n let point = this.body.getWorldCenter();\n if (worldXPixels !== null) {\n const pointWorld = this.physicsWorld.screenToWorld(worldXPixels, worldYPixels);\n point = vec2Pool.acquire(pointWorld.x, pointWorld.y);\n }\n\n const impulseVec = vec2Pool.acquire(impulseWorld.x, impulseWorld.y);\n this.body.applyLinearImpulse(impulseVec, point);\n\n vec2Pool.release(impulseVec);\n if (worldXPixels !== null) {\n vec2Pool.release(point);\n }\n }\n\n /**\n * Set velocity directly (in screen space: pixels/s)\n */\n setVelocity(vxPixels, vyPixels) {\n if (!this.body || this.type === 'static') return;\n\n const velWorld = this.physicsWorld.screenVelToWorld(vxPixels, vyPixels);\n const velVec = vec2Pool.acquire(velWorld.x, velWorld.y);\n this.body.setLinearVelocity(velVec);\n vec2Pool.release(velVec);\n }\n\n /**\n * Get velocity (in screen space: pixels/s)\n */\n getVelocity() {\n if (!this.body) return { x: 0, y: 0 };\n\n const velWorld = this.body.getLinearVelocity();\n return this.physicsWorld.worldVelToScreen(velWorld.x, velWorld.y);\n }\n\n /**\n * Cleanup\n */\n destroy() {\n if (this.body && this.physicsWorld) {\n this.physicsWorld.removeBody(this.body);\n }\n }\n\n}\n\n\nexport class CollisionShape2D extends Node {\n constructor(shapeType, options = {}) {\n super(`CollisionShape_${shapeType}`);\n\n this.shapeType = shapeType; // 'box', 'circle', 'polygon', 'poly', 'line'\n this.options = options;\n\n this.anchor = options.anchor || 'center';\n\n this.anchorOffset = this.calculateAnchorOffset();\n }\n\n calculateAnchorOffset() {\n switch (this.shapeType) {\n case 'box': {\n const w = this.options.width || 50;\n const h = this.options.height || 50;\n return this.getBoxAnchorOffset(w, h);\n }\n case 'circle': {\n const r = this.options.radius || 25;\n return this.getCircleAnchorOffset(r);\n }\n case 'polygon':\n case 'poly':\n case 'line': {\n // For polygons/lines, compute bounding box of points and use box-like anchor rules\n const pts = this.options.points || [];\n if (!pts.length) return { x: 0, y: 0 };\n\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const p of pts) {\n minX = Math.min(minX, p.x);\n minY = Math.min(minY, p.y);\n maxX = Math.max(maxX, p.x);\n maxY = Math.max(maxY, p.y);\n }\n const width = maxX - minX;\n const height = maxY - minY;\n\n // We'll treat anchor relative to bounding-box center like a box\n return this.getBoxAnchorOffset(width, height);\n }\n default:\n return { x: 0, y: 0 };\n }\n }\n\n getBoxAnchorOffset(width, height) {\n const hw = width / 2;\n const hh = height / 2;\n\n switch (this.anchor) {\n case 'top-left': return { x: hw, y: hh };\n case 'top-center': return { x: 0, y: hh };\n case 'top-right': return { x: -hw, y: hh };\n case 'center-left': return { x: hw, y: 0 };\n case 'center': return { x: 0, y: 0 };\n case 'center-right': return { x: -hw, y: 0 };\n case 'bottom-left': return { x: hw, y: -hh };\n case 'bottom-center': return { x: 0, y: -hh };\n case 'bottom-right': return { x: -hw, y: -hh };\n default: return { x: 0, y: 0 };\n }\n }\n\n getCircleAnchorOffset(radius) {\n switch (this.anchor) {\n case 'center': return { x: 0, y: 0 };\n case 'top': return { x: 0, y: radius };\n case 'bottom': return { x: 0, y: -radius };\n case 'left': return { x: radius, y: 0 };\n case 'right': return { x: -radius, y: 0 };\n case 'top-center': return { x: 0, y: radius };\n case 'bottom-center': return { x: 0, y: -radius };\n default: return { x: 0, y: 0 };\n }\n }\n\n // Helper: check whether polygon is strictly convex (no reflex vertices)\n isConvex(points) {\n const n = points.length;\n if (n < 3) return false;\n\n let sign = 0;\n for (let i = 0; i < n; i++) {\n const a = points[i];\n const b = points[(i + 1) % n];\n const c = points[(i + 2) % n];\n\n // cross product (b - a) x (c - b)\n const ux = b.x - a.x;\n const uy = b.y - a.y;\n const vx = c.x - b.x;\n const vy = c.y - b.y;\n const cross = ux * vy - uy * vx;\n\n if (Math.abs(cross) < 1e-8) continue; // collinear\n const currentSign = Math.sign(cross);\n if (sign === 0) sign = currentSign;\n else if (currentSign !== sign) return false;\n }\n return true;\n }\n\n // Convert a Tiled-style point list into Planck Vec2s (in meters), applying options.x/y base and anchor offset.\n toPlanckVertices(points, physicsWorld) {\n const baseX = this.options.x || 0;\n const baseY = this.options.y || 0;\n const anchorOffset = this.anchorOffset || { x: 0, y: 0 };\n\n const verts = [];\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n // position in pixel-space relative to the anchor\n const px = baseX + p.x - anchorOffset.x;\n const py = baseY + p.y - anchorOffset.y;\n\n // convert to meters and flip Y for physics coordinates\n const vx = physicsWorld.pixelsToMeters(px);\n const vy = -physicsWorld.pixelsToMeters(py);\n\n const v = vec2Pool.acquire(vx, vy);\n verts.push(v);\n }\n return verts;\n }\n\n // Release a list of vec2s back to pool\n releaseVecs(vecs) {\n for (const v of vecs) vec2Pool.release(v);\n }\n\n createPlanckFixture(body, physicsWorld) {\n const offsetMeters = {\n x: physicsWorld.pixelsToMeters(this.anchorOffset.x),\n y: -physicsWorld.pixelsToMeters(this.anchorOffset.y) // negate Y for physics space\n };\n\n let shape;\n const fixtures = []; // might push multiple fixtures (edges) when polygon is complex\n\n switch (this.shapeType) {\n case 'box': {\n const hw = physicsWorld.pixelsToMeters(this.options.width || 50) / 2;\n const hh = physicsWorld.pixelsToMeters(this.options.height || 50) / 2;\n\n const offsetVec = vec2Pool.acquire(offsetMeters.x, offsetMeters.y);\n shape = new Box(hw, hh, offsetVec);\n vec2Pool.release(offsetVec);\n break;\n }\n case 'circle': {\n const r = physicsWorld.pixelsToMeters(this.options.radius || 25);\n const offsetVec = vec2Pool.acquire(offsetMeters.x, offsetMeters.y);\n shape = new Circle(offsetVec, r);\n vec2Pool.release(offsetVec);\n break;\n }\n case 'polygon':\n case 'poly': {\n const rawPoints = (this.options.points || []).slice();\n if (!rawPoints.length) {\n console.warn('Polygon shape has no points');\n return null;\n }\n\n // Convert to planck vertices (meters), accounting for anchor and base offset\n const verts = this.toPlanckVertices(rawPoints, physicsWorld);\n\n // Planck/Box2D polygon limitations: convex, limited vertex count (commonly <= 8).\n const vertexLimit = 8;\n const numericVerts = verts.map(v => ({ x: v.x, y: v.y })); // for convex check\n\n // Determine if convex & under vertex limit\n if (numericVerts.length <= vertexLimit && this.isConvex(numericVerts)) {\n // create single polygon shape\n // Planck Polygon constructor accepts an array of Vec2s\n shape = new Polygon(verts);\n // release verts — constructor copies them internally (same assumption as Box/Circle above)\n this.releaseVecs(verts);\n\n const fixture = body.createFixture(shape, {\n density: this.options.density || 1.0,\n friction: this.options.friction || 0.3,\n restitution: this.options.restitution || 0.0,\n filterCategoryBits: this.options.collisionCategory || 0x0001,\n filterMaskBits: this.options.collisionMask || 0xFFFF\n });\n return fixture;\n } else {\n // fallback: create sequential edge fixtures between consecutive points,\n // closing the loop (polygon) or leaving it open (polyline/line).\n const isClosed = (this.shapeType === 'polygon' || this.options.closed === true);\n for (let i = 0; i < verts.length - 1; i++) {\n const v1 = verts[i];\n const v2 = verts[i + 1];\n const edgeShape = new Edge(v1, v2);\n const fixture = body.createFixture(edgeShape, {\n density: this.options.density || 1.0,\n friction: this.options.friction || 0.3,\n restitution: this.options.restitution || 0.0,\n filterCategoryBits: this.options.collisionCategory || 0x0001,\n filterMaskBits: this.options.collisionMask || 0xFFFF\n });\n fixtures.push(fixture);\n }\n if (isClosed && verts.length > 1) {\n const last = verts[verts.length - 1];\n const first = verts[0];\n const edgeShape = new Edge(last, first);\n const fixture = body.createFixture(edgeShape, {\n density: this.options.density || 1.0,\n friction: this.options.friction || 0.3,\n restitution: this.options.restitution || 0.0,\n filterCategoryBits: this.options.collisionCategory || 0x0001,\n filterMaskBits: this.options.collisionMask || 0xFFFF\n });\n fixtures.push(fixture);\n\n }\n\n // release vecs after creating edge fixtures\n this.releaseVecs(verts);\n\n if (!fixtures.length) {\n console.warn('Polygon fallback produced no fixtures');\n return null;\n }\n // return array of fixtures (caller should accept this), but keep compatibility:\n return fixtures.length === 1 ? fixtures[0] : fixtures;\n }\n }\n case 'line': {\n // Treat as polyline: create edges between sequential points (do NOT close)\n const rawPoints = (this.options.points || []).slice();\n if (rawPoints.length < 2) {\n console.warn('Line shape needs at least 2 points');\n return null;\n }\n\n const verts = this.toPlanckVertices(rawPoints, physicsWorld);\n for (let i = 0; i < verts.length - 1; i++) {\n const v1 = verts[i];\n const v2 = verts[i + 1];\n const edgeShape = new Edge(v1, v2);\n const fixture = body.createFixture(edgeShape, {\n density: this.options.density || 1.0,\n friction: this.options.friction || 0.3,\n restitution: this.options.restitution || 0.0,\n filterCategoryBits: this.options.collisionCategory || 0x0001,\n filterMaskBits: this.options.collisionMask || 0xFFFF\n });\n fixtures.push(fixture);\n }\n\n this.releaseVecs(verts);\n\n if (!fixtures.length) return null;\n return fixtures.length === 1 ? fixtures[0] : fixtures;\n }\n default:\n return null;\n }\n\n // If we got a single shape (box/circle), create a single fixture\n if (shape) {\n const fixture = body.createFixture(shape, {\n density: this.options.density || 1.0,\n friction: this.options.friction || 0.3,\n restitution: this.options.restitution || 0.0,\n filterCategoryBits: this.options.collisionCategory || 0x0001,\n filterMaskBits: this.options.collisionMask || 0xFFFF\n });\n\n return fixture;\n }\n\n return null;\n }\n}\n\n\n\n// export class CollisionShape2D extends Node {\n// constructor(shapeType, options = {}) {\n// super(`CollisionShape_${shapeType}`);\n\n// this.shapeType = shapeType; // 'box', 'circle', 'polygon'\n// this.options = options;\n\n// this.anchor = options.anchor || 'center';\n\n// this.anchorOffset = this.calculateAnchorOffset();\n// }\n\n// calculateAnchorOffset() {\n// switch (this.shapeType) {\n// case 'box': {\n// const w = this.options.width || 50;\n// const h = this.options.height || 50;\n// return this.getBoxAnchorOffset(w, h);\n// }\n// case 'circle': {\n// const r = this.options.radius || 25;\n// return this.getCircleAnchorOffset(r);\n// }\n// default:\n// return { x: 0, y: 0 };\n// }\n// }\n\n// getBoxAnchorOffset(width, height) {\n// const hw = width / 2;\n// const hh = height / 2;\n\n// switch (this.anchor) {\n// case 'top-left': return { x: hw, y: hh };\n// case 'top-center': return { x: 0, y: hh };\n// case 'top-right': return { x: -hw, y: hh };\n// case 'center-left': return { x: hw, y: 0 };\n// case 'center': return { x: 0, y: 0 };\n// case 'center-right': return { x: -hw, y: 0 };\n// case 'bottom-left': return { x: hw, y: -hh };\n// case 'bottom-center': return { x: 0, y: -hh };\n// case 'bottom-right': return { x: -hw, y: -hh };\n// default: return { x: 0, y: 0 };\n// }\n// }\n\n// getCircleAnchorOffset(radius) {\n// switch (this.anchor) {\n// case 'center': return { x: 0, y: 0 };\n// case 'top': return { x: 0, y: radius };\n// case 'bottom': return { x: 0, y: -radius };\n// case 'left': return { x: radius, y: 0 };\n// case 'right': return { x: -radius, y: 0 };\n// case 'top-center': return { x: 0, y: radius };\n// case 'bottom-center': return { x: 0, y: -radius };\n// default: return { x: 0, y: 0 };\n// }\n// }\n\n\n// createPlanckFixture(body, physicsWorld) {\n// const offsetMeters = {\n// x: physicsWorld.pixelsToMeters(this.anchorOffset.x),\n// y: -physicsWorld.pixelsToMeters(this.anchorOffset.y) // negate Y for physics space\n// };\n\n// let shape;\n\n// switch (this.shapeType) {\n// case 'box': {\n// const hw = physicsWorld.pixelsToMeters(this.options.width || 50) / 2;\n// const hh = physicsWorld.pixelsToMeters(this.options.height || 50) / 2;\n\n// const offsetVec = vec2Pool.acquire(offsetMeters.x, offsetMeters.y);\n// shape = new Box(hw, hh, offsetVec);\n// vec2Pool.release(offsetVec);\n// break;\n// }\n// case 'circle': {\n\n// const r = physicsWorld.pixelsToMeters(this.options.radius || 25);\n// const offsetVec = vec2Pool.acquire(offsetMeters.x, offsetMeters.y);\n// shape = new Circle(offsetVec, r);\n// vec2Pool.release(offsetVec);\n// break;\n// }\n// case 'polygon': {\n// // TODO: Polygon support (vertices need conversion)\n// const points = this.options.points.map(point => ({x: physicsWorld.pixelsToMeters(point.x), y: physicsWorld.pixelsToMeters(point.y)}))\n// console.log(points)\n// console.warn('Polygon shapes not yet implemented');\n// return null;\n// }\n// default:\n// return null;\n// }\n\n// // Create fixture with material properties\n// const fixture = body.createFixture(shape, {\n// density: this.options.density || 1.0,\n// friction: this.options.friction || 0.3,\n// restitution: this.options.restitution || 0.0,\n// filterCategoryBits: this.options.collisionCategory || 0x0001,\n// filterMaskBits: this.options.collisionMask || 0xFFFF\n// });\n\n// return fixture;\n// }\n// }\n\n\n\nexport class PhysicsFactory {\n static createBox(name, xPixels, yPixels, widthPixels, heightPixels, type = 'dynamic', anchor = 'center') {\n const body = new RigidBody2D(name, { type, pivot: anchor });\n body.position.x = xPixels;\n body.position.y = yPixels;\n body.addCollisionBox(widthPixels, heightPixels);\n return body;\n }\n\n static createCircle(name, xPixels, yPixels, radiusPixels, type = 'dynamic', anchor = 'center') {\n const body = new RigidBody2D(name, { type, pivot: anchor });\n body.position.x = xPixels;\n body.position.y = yPixels;\n body.addCollisionCircle(radiusPixels);\n return body;\n }\n\n static createGround(name, xPixels, yPixels, widthPixels, heightPixels) {\n return PhysicsFactory.createBox(name, xPixels, yPixels, widthPixels, heightPixels, 'static', 'center');\n }\n\n static createPlatformerCharacter(name, xPixels, yPixels, widthPixels, heightPixels) {\n const body = new RigidBody2D(name, {\n type: 'kinematic',\n pivot: 'bottom-center',\n fixedRotation: true\n });\n body.position.x = xPixels;\n body.position.y = yPixels;\n body.addCollisionBox(widthPixels, heightPixels);\n return body;\n }\n\n // --- New: Polygon (closed) ---\n // points: [{x,y}, ...] relative to baseX/baseY (typically Tiled's polygon points)\n // anchor: pivot behavior (same string values you use elsewhere)\n // closed: if false it will be treated as an open polyline (edges only)\n static createPolygon(name, baseX, baseY, points = [], type = 'dynamic', anchor = 'center', closed = true, shapeOptions = {}) {\n const body = new RigidBody2D(name, { type, pivot: anchor });\n body.position.x = baseX;\n body.position.y = baseY;\n\n // Try common convenience API first\n if (typeof body.addCollisionPolygon === 'function') {\n body.addCollisionPolygon(points, Object.assign({ anchor, closed }, shapeOptions));\n return body;\n }\n // alternative method name\n if (typeof body.addCollisionPoly === 'function') {\n body.addCollisionPoly(points, Object.assign({ anchor, closed }, shapeOptions));\n return body;\n }\n\n // Fallback: create CollisionShape2D and attach via addCollisionShape (if exists)\n if (typeof body.addCollisionShape === 'function') {\n const shapeType = closed ? 'polygon' : 'poly';\n const shape = new CollisionShape2D(shapeType, Object.assign({\n points: points,\n x: 0, // points are relative to body.position (we already set baseX/baseY)\n y: 0,\n anchor\n }, shapeOptions));\n body.addCollisionShape(shape);\n return body;\n }\n\n console.warn(`[PhysicsFactory] createPolygon: RigidBody2D does not expose addCollisionPolygon/addCollisionPoly/addCollisionShape. No collision added for \"${name}\".`);\n return body;\n }\n\n // --- New: Polyline / Line (open) ---\n static createPolyline(name, baseX, baseY, points = [], type = 'dynamic', anchor = 'center', shapeOptions = {}) {\n // polyline is an open sequence of edges; reuse createPolygon with closed=false\n return PhysicsFactory.createPolygon(name, baseX, baseY, points, type, anchor, false, shapeOptions);\n }\n\n // --- New: Helper to create body from parsed Tiled object (your parseShape output) ---\n // parsed: { type: 'box'|'point'|'circle'|'poly'|'line', data: {...} }\n // name: entity name (string)\n // bodyType: 'static'|'dynamic'|'kinematic'\n // options: extra shapeOptions forwarded to collision creaters (density/friction/etc)\n static createFromParsedShape(parsed, name, bodyType = 'static', options = {}) {\n if (!parsed || !parsed.type || !parsed.data) {\n console.warn('[PhysicsFactory] createFromParsedShape: invalid parsed shape');\n return null;\n }\n\n const d = parsed.data;\n switch (parsed.type) {\n case 'point': {\n // Represent a point as a tiny sensor box so it can collide/hit tests.\n const px = d.x || 0;\n const py = d.y || 0;\n const body = new RigidBody2D(name, { type: bodyType, pivot: 'center' });\n body.position.x = px;\n body.position.y = py;\n // If RigidBody2D supports addCollisionPoint, use it; otherwise add tiny box\n if (typeof body.addCollisionPoint === 'function') {\n body.addCollisionPoint();\n } else {\n body.addCollisionBox(2, 2); // 2x2 pixel sensor\n }\n return body;\n }\n\n case 'box': {\n // Tiled boxes are given top-left in parseShape; convert to center position\n const px = (d.x || 0) + (d.width || 0) / 2;\n const py = (d.y || 0) + (d.height || 0) / 2;\n return PhysicsFactory.createBox(name, px, py, d.width || 0, d.height || 0, bodyType, options.anchor || 'center');\n }\n\n case 'circle': {\n // parseShape provided center coords already (x and y are center)\n const px = d.x || 0;\n const py = d.y || 0;\n return PhysicsFactory.createCircle(name, px, py, d.radius || 0, bodyType, options.anchor || 'center');\n }\n\n case 'poly':\n case 'polygon': {\n // d.x/d.y is base position; d.points is array of relative points\n const baseX = d.x || 0;\n const baseY = d.y || 0;\n // pass the points array directly\n return PhysicsFactory.createPolygon(name, baseX, baseY, d.points || [], bodyType, options.anchor || 'center', true, options);\n }\n\n case 'line':\n case 'polyline': {\n // open line: d.x/d.y base + d.points\n const baseX = d.x || 0;\n const baseY = d.y || 0;\n return PhysicsFactory.createPolyline(name, baseX, baseY, d.points || [], bodyType, options.anchor || 'center', options);\n }\n\n default:\n console.warn(`[PhysicsFactory] createFromParsedShape: unknown type \"${parsed.type}\"`);\n return null;\n }\n }\n}\n","import { LineDrawer, PolygonDrawer, ShapeDrawer } from \"tessera.js\";\nimport { RigidBody2D } from \"./physicsv2.js\";\n\nexport class CharacterController2D extends RigidBody2D {\n constructor(name, options = {}) {\n super(name, {\n type: 'dynamic',\n pivot: 'bottom-center',\n fixedRotation: true,\n linearDamping: 6.0, // High damping = tight control\n friction: 0.0, // Prevent wall sticking\n restitution: 0.0, // No bounce\n ...options\n });\n\n\n // movement parameters (all in pixels/s) <- important to convert to plank scale\n this.speed = options.speed || 200;\n this.acceleration = options.acceleration || 2000;\n this.friction = options.friction || 1500;\n this.airAcceleration = options.airAcceleration || 1000;\n this.airFriction = options.airFriction || 500;\n\n // jump parameters (pixels/s and seconds)\n this.jumpForce = options.jumpForce || 400;\n this.maxFallSpeed = options.maxFallSpeed || 500;\n this.jumpCutMultiplier = options.jumpCutMultiplier || 0.5;\n\n\n this.coyoteTime = options.coyoteTime || 0.15;\n this.jumpBufferTime = options.jumpBufferTime || 0.1;\n this.coyoteTimer = 0;\n this.jumpBufferTimer = 0;\n\n this.grounded = false;\n this.wasGrounded = false;\n this.jumping = false;\n this.state = \"idle\"; // idle, walk, jump, fall\n\n\n this.moveInput = 0;\n this.jumpPressed = false;\n this.jumpHeld = false;\n this.jumpReleased = false;\n\n this.groundContacts = new Set();\n\n\n this.onJump = null;\n this.onLand = null;\n\n\n this.spriteNode = null;\n this.animatedSprite = null;\n\n // collision dimensions (pixels)\n this.collisionWidth = options.collisionWidth || 24;\n this.collisionHeight = options.collisionHeight || 40;\n this.collisionPaddingX = options.collisionPaddingX || 0;\n this.collisionPaddingY = options.collisionPaddingY || 0;\n\n this.debugDraw = options.debugDraw !== undefined ? options.debugDraw : false;\n this.debugColor = options.debugColor || { r: 255, g: 100, b: 100 };\n\n if (options.sprite) {\n this.setupSprite(options.sprite);\n } else {\n this.setupCollision();\n }\n }\n\n setupSprite(sprite) {\n this.collisionWidth = sprite.frameWidth - this.collisionPaddingX;\n this.collisionHeight = sprite.frameHeight - this.collisionPaddingY;\n\n this.setSprite(sprite);\n this.spriteNode = sprite;\n this.setupCollision();\n\n if (sprite.constructor.name === 'AnimatedSprite') {\n this.setupAnimations(sprite);\n }\n }\n\n setupCollision() {\n this.addCollisionBox(this.collisionWidth, this.collisionHeight, {\n friction: 0.0,\n restitution: 0.0\n });\n }\n\n setupAnimations(animatedSprite) {\n this.animatedSprite = animatedSprite;\n this.prevState = this.state;\n }\n\n updateAnimations() {\n if (!this.animatedSprite) return;\n\n if (this.state !== this.prevState) {\n const animName = this.getAnimationForState(this.state);\n if (animName && this.animatedSprite.animations[animName]) {\n this.animatedSprite.play(animName);\n }\n this.prevState = this.state;\n }\n\n\n if (this.moveInput < 0) {\n this.animatedSprite.flipH = true;\n } else if (this.moveInput > 0) {\n this.animatedSprite.flipH = false;\n }\n }\n\n\n getAnimationForState(state) {\n return {\n 'idle': 'idle',\n 'walk': 'walk',\n 'jump': 'jump',\n 'fall': 'fall'\n }[state];\n }\n\n\n _ready() {\n super._ready();\n\n this.onCollisionEnter = (other, contact) => this.handleCollisionEnter(other, contact);\n this.onCollisionExit = (other, contact) => this.handleCollisionExit(other, contact);\n this.onCollisionStay = (other, contact) => this.handleCollisionStay(other, contact);\n }\n\n\n handleCollisionEnter(other, contact) {\n if (!contact.isTouching()) return;\n\n const manifold = contact.getWorldManifold();\n const normal = manifold.normal;\n\n const fixtureA = contact.getFixtureA();\n const isA = fixtureA.getBody() === this.body;\n const normalY = isA ? -normal.y : normal.y;\n\n // Ground contact: normal points up (positive Y in physics = up)\n // Threshold 0.7 = ~45 degree slopes are walkable\n if (normalY > 0.7) {\n this.groundContacts.add(other);\n this.grounded = true;\n }\n }\n\n handleCollisionStay(other, contact) {\n if (!contact.isTouching()) return;\n\n const manifold = contact.getWorldManifold();\n const normal = manifold.normal;\n\n const fixtureA = contact.getFixtureA();\n const isA = fixtureA.getBody() === this.body;\n const normalY = isA ? normal.y : -normal.y;\n\n if (normalY > 0.7) {\n this.groundContacts.add(other);\n }\n }\n\n handleCollisionExit(other, contact) {\n this.groundContacts.delete(other);\n\n if (this.groundContacts.size === 0) {\n this.grounded = false;\n }\n }\n\n\n _process(delta) {\n this.wasGrounded = this.grounded;\n\n\n this.updateTimers(delta);\n\n\n this.handleMovement(delta);\n this.handleJump(delta);\n\n const vel = this.getVelocity();\n if (vel.y > this.maxFallSpeed) {\n this.setVelocity(vel.x, this.maxFallSpeed);\n }\n\n // let RigidBody2D sync with Planck\n super._process(delta); // sync phyics with our transform \n\n\n this.updateState();\n\n\n this.updateAnimations();\n\n\n if (this.grounded && !this.wasGrounded) {\n if (this.onLand) this.onLand();\n }\n }\n\n updateTimers(delta) {\n if (!this.grounded) {\n this.coyoteTimer += delta;\n } else {\n this.coyoteTimer = 0;\n }\n\n if (this.jumpPressed) {\n this.jumpBufferTimer = this.jumpBufferTime;\n } else {\n this.jumpBufferTimer = Math.max(0, this.jumpBufferTimer - delta);\n }\n }\n\n handleMovement(delta) {\n const vel = this.getVelocity();\n const accel = this.grounded ? this.acceleration : this.airAcceleration;\n const fric = this.grounded ? this.friction : this.airFriction;\n\n let newVelX = vel.x;\n\n if (this.moveInput !== 0) {\n const targetSpeed = this.moveInput * this.speed;\n const speedDiff = targetSpeed - newVelX;\n const accelAmount = accel * delta;\n\n if (Math.abs(speedDiff) < accelAmount) {\n newVelX = targetSpeed;\n } else {\n newVelX += Math.sign(speedDiff) * accelAmount;\n }\n } else {\n const fricAmount = fric * delta;\n if (Math.abs(newVelX) < fricAmount) {\n newVelX = 0;\n } else {\n newVelX -= Math.sign(newVelX) * fricAmount;\n }\n }\n\n this.setVelocity(newVelX, vel.y);\n }\n\n handleJump(delta) {\n const canJump = this.grounded || this.coyoteTimer < this.coyoteTime;\n const wantsToJump = this.jumpPressed || this.jumpBufferTimer > 0;\n\n if (wantsToJump && canJump && !this.jumping) {\n const vel = this.getVelocity();\n this.setVelocity(vel.x, -this.jumpForce);\n this.jumping = true;\n this.grounded = false;\n this.groundContacts.clear();\n this.coyoteTimer = this.coyoteTime + 0.1;\n this.jumpBufferTimer = 0;\n\n if (this.onJump) this.onJump();\n }\n\n // variable jump height\n const vel = this.getVelocity();\n if (this.jumpReleased && this.jumping && vel.y < 0) {\n this.setVelocity(vel.x, vel.y * this.jumpCutMultiplier);\n this.jumping = false;\n }\n\n if (vel.y > 0) {\n this.jumping = false;\n }\n }\n\n\n updateState() {\n const vel = this.getVelocity();\n\n if (this.grounded) {\n if (Math.abs(vel.x) > 10) {\n this.state = \"walk\";\n } else {\n this.state = \"idle\";\n }\n } else {\n if (vel.y < -10) {\n this.state = \"jump\";\n } else {\n this.state = \"fall\";\n }\n }\n }\n\n setMoveInput(direction) {\n this.moveInput = Math.sign(direction);\n }\n\n setJumpInput(pressed, held, released) {\n this.jumpPressed = pressed;\n this.jumpHeld = held;\n this.jumpReleased = released;\n }\n\n _draw(canvas, camera) {\n super._draw(canvas, camera);\n\n if (!this.debugDraw || !this.body) return;\n\n const color = this.debugColor;\n\n for (let fixture = this.body.getFixtureList(); fixture; fixture = fixture.getNext()) {\n const shape = fixture.getShape();\n\n if (shape.m_vertices) {\n const vertices = [];\n for (let i = 0; i < shape.m_vertices.length; i++) {\n const v = this.body.getWorldPoint(shape.m_vertices[i]);\n let screenV = this.physicsWorld.worldToScreen(v.x, v.y);\n\n if (camera) {\n screenV = camera.worldToScreen(screenV.x, screenV.y);\n }\n\n vertices.push(screenV);\n }\n\n\n\n\n PolygonDrawer.strokePolygon(canvas, vertices, 2, color.r, color.g, color.b, 255);\n\n }\n }\n\n let anchorScreen = { x: this.position.x, y: this.position.y };\n if (camera) {\n anchorScreen = camera.worldToScreen(anchorScreen.x, anchorScreen.y);\n }\n\n\n\n ShapeDrawer.fillCircle(canvas, anchorScreen.x, anchorScreen.y, 4, 255, 255, 0, 255);\n\n if (this.grounded) {\n ShapeDrawer.strokeCircle(canvas, anchorScreen.x, anchorScreen.y, 8, 2, 0, 255, 0, 255);\n }\n\n }\n\n}\n\n\n\nexport class CharacterInputController {\n constructor(character, inputMap) {\n this.character = character;\n this.inputMap = inputMap;\n this.prevJumpHeld = false;\n }\n\n update() {\n let moveInput = 0;\n if (this.inputMap.isActionActive(\"move_left\")) moveInput -= 1;\n if (this.inputMap.isActionActive(\"move_right\")) moveInput += 1;\n // if(moveInput != 0){\n // console.log(\"should move: \", moveInput)\n // }\n this.character.setMoveInput(moveInput);\n\n const jumpHeld = this.inputMap.isActionActive(\"jump\");\n // if(jumpHeld)\n // console.log(\"should jump\")\n const jumpPressed = jumpHeld && !this.prevJumpHeld;\n const jumpReleased = !jumpHeld && this.prevJumpHeld;\n\n this.character.setJumpInput(jumpPressed, jumpHeld, jumpReleased);\n this.prevJumpHeld = jumpHeld;\n }\n}\n\n\n\n/**\n * TopDownController - 8-directional movement for dynamic bodies\n * \n * Uses high damping for tight, responsive controls\n * Dynamic body type allows collision with static geometry\n */\nexport class TopDownController extends RigidBody2D {\n constructor(name, options = {}) {\n super(name, {\n type: 'dynamic',\n pivot: options.pivot || 'center',\n fixedRotation: true,\n linearDamping: options.linearDamping || 8.0, // High damping = tight control\n friction: 0.0, // Prevent wall sticking\n restitution: 0.0, // No bounce\n gravityScale: 0.0,\n ...options\n });\n\n // Movement parameters (pixels/s)\n this.speed = options.speed || 200;\n this.acceleration = options.acceleration || 2000;\n this.friction = options.friction || 1500;\n\n // Dash ability\n this.canDash = options.canDash || false;\n this.dashSpeed = options.dashSpeed || 500;\n this.dashDuration = options.dashDuration || 0.2;\n this.dashCooldown = options.dashCooldown || 1.0;\n\n this.isDashing = false;\n this.dashTimer = 0;\n this.dashCooldownTimer = 0;\n this.dashDirection = { x: 0, y: 0 };\n\n // Input (set by external controller)\n this.moveInput = { x: 0, y: 0 };\n this.dashInput = false;\n\n // State\n this.state = \"idle\"; // idle, walk, dash\n\n // Collision dimensions\n this.collisionWidth = options.collisionWidth || 24;\n this.collisionHeight = options.collisionHeight || 24;\n this.collisionPaddingX = options.collisionPaddingX || 0;\n this.collisionPaddingY = options.collisionPaddingY || 0;\n\n this.debugDraw = options.debugDraw !== undefined ? options.debugDraw : false;\n this.debugColor = options.debugColor || { r: 100, g: 100, b: 255 };\n\n // Callbacks\n this.onDashStart = null;\n this.onDashEnd = null;\n\n // Sprite setup\n this.spriteNode = null;\n this.animatedSprite = null;\n\n if (options.sprite) {\n this.setupSprite(options.sprite);\n } else {\n this.setupCollision();\n }\n }\n\n setupSprite(sprite) {\n this.collisionWidth = sprite.frameWidth - this.collisionPaddingX;\n this.collisionHeight = sprite.frameHeight - this.collisionPaddingY;\n\n this.setSprite(sprite);\n this.spriteNode = sprite;\n this.setupCollision();\n\n if (sprite.constructor.name === 'AnimatedSprite') {\n this.setupAnimations(sprite);\n }\n }\n\n setupCollision() {\n this.addCollisionBox(this.collisionWidth, this.collisionHeight, {\n friction: 0.0,\n restitution: 0.0\n });\n }\n\n setupAnimations(animatedSprite) {\n this.animatedSprite = animatedSprite;\n this.prevState = this.state;\n }\n\n updateAnimations() {\n if (!this.animatedSprite) return;\n\n if (this.state !== this.prevState) {\n const animName = this.getAnimationForState(this.state);\n if (animName && this.animatedSprite.animations[animName]) {\n this.animatedSprite.play(animName);\n }\n this.prevState = this.state;\n }\n\n // Handle sprite direction (8-way)\n if (this.moveInput.x < 0) {\n this.animatedSprite.flipH = true;\n } else if (this.moveInput.x > 0) {\n this.animatedSprite.flipH = false;\n }\n }\n\n getAnimationForState(state) {\n return {\n 'idle': 'idle',\n 'walk': 'walk',\n 'dash': 'dash'\n }[state];\n }\n\n _process(delta) {\n // Update dash timers\n if (this.isDashing) {\n this.dashTimer -= delta;\n if (this.dashTimer <= 0) {\n this.endDash();\n }\n } else {\n this.dashCooldownTimer = Math.max(0, this.dashCooldownTimer - delta);\n }\n\n // Handle dash input\n if (this.dashInput && this.canDash && !this.isDashing && this.dashCooldownTimer <= 0) {\n this.startDash();\n }\n\n // Handle movement\n if (this.isDashing) {\n this.handleDashMovement(delta);\n } else {\n this.handleNormalMovement(delta);\n }\n\n // Update state\n this.updateState();\n\n // Update animations\n this.updateAnimations();\n\n // Let RigidBody2D sync with Planck\n super._process(delta);\n }\n\n handleNormalMovement(delta) {\n const vel = this.getVelocity();\n\n // Calculate target velocity\n let targetX = this.moveInput.x * this.speed;\n let targetY = this.moveInput.y * this.speed;\n\n // Normalize diagonal movement (prevent faster diagonal speed)\n if (this.moveInput.x !== 0 && this.moveInput.y !== 0) {\n const len = Math.sqrt(2);\n targetX /= len;\n targetY /= len;\n }\n\n let newVelX = vel.x;\n let newVelY = vel.y;\n\n // X-axis movement\n if (this.moveInput.x !== 0) {\n const speedDiff = targetX - newVelX;\n const accelAmount = this.acceleration * delta;\n\n if (Math.abs(speedDiff) < accelAmount) {\n newVelX = targetX;\n } else {\n newVelX += Math.sign(speedDiff) * accelAmount;\n }\n } else {\n // Apply friction on X\n const fricAmount = this.friction * delta;\n if (Math.abs(newVelX) < fricAmount) {\n newVelX = 0;\n } else {\n newVelX -= Math.sign(newVelX) * fricAmount;\n }\n }\n\n // Y-axis movement\n if (this.moveInput.y !== 0) {\n const speedDiff = targetY - newVelY;\n const accelAmount = this.acceleration * delta;\n\n if (Math.abs(speedDiff) < accelAmount) {\n newVelY = targetY;\n } else {\n newVelY += Math.sign(speedDiff) * accelAmount;\n }\n } else {\n // Apply friction on Y\n const fricAmount = this.friction * delta;\n if (Math.abs(newVelY) < fricAmount) {\n newVelY = 0;\n } else {\n newVelY -= Math.sign(newVelY) * fricAmount;\n }\n }\n\n this.setVelocity(newVelX, newVelY);\n }\n\n handleDashMovement(delta) {\n // During dash: move at constant dash speed in dash direction\n const dashVelX = this.dashDirection.x * this.dashSpeed;\n const dashVelY = this.dashDirection.y * this.dashSpeed;\n this.setVelocity(dashVelX, dashVelY);\n }\n\n startDash() {\n // Dash in current movement direction\n let dashDirX = this.moveInput.x;\n let dashDirY = this.moveInput.y;\n\n // If not moving, dash in facing direction (right by default)\n if (dashDirX === 0 && dashDirY === 0) {\n dashDirX = this.spriteNode && this.spriteNode.flipH ? -1 : 1;\n }\n\n // Normalize direction\n const len = Math.sqrt(dashDirX * dashDirX + dashDirY * dashDirY);\n if (len > 0) {\n this.dashDirection.x = dashDirX / len;\n this.dashDirection.y = dashDirY / len;\n } else {\n this.dashDirection.x = 1;\n this.dashDirection.y = 0;\n }\n\n this.isDashing = true;\n this.dashTimer = this.dashDuration;\n\n if (this.onDashStart) this.onDashStart();\n }\n\n endDash() {\n this.isDashing = false;\n this.dashCooldownTimer = this.dashCooldown;\n\n if (this.onDashEnd) this.onDashEnd();\n }\n\n updateState() {\n const vel = this.getVelocity();\n const speed = Math.sqrt(vel.x * vel.x + vel.y * vel.y);\n\n if (this.isDashing) {\n this.state = \"dash\";\n } else if (speed > 10) {\n this.state = \"walk\";\n } else {\n this.state = \"idle\";\n }\n }\n\n setMoveInput(x, y) {\n this.moveInput.x = Math.sign(x);\n this.moveInput.y = Math.sign(y);\n }\n\n setDashInput(pressed) {\n this.dashInput = pressed;\n }\n\n _draw(canvas, camera) {\n super._draw(canvas, camera);\n\n if (!this.debugDraw || !this.body) return;\n\n const color = this.debugColor;\n\n // Draw collision shape\n for (let fixture = this.body.getFixtureList(); fixture; fixture = fixture.getNext()) {\n const shape = fixture.getShape();\n\n if (shape.m_vertices) {\n const vertices = [];\n for (let i = 0; i < shape.m_vertices.length; i++) {\n const v = this.body.getWorldPoint(shape.m_vertices[i]);\n let screenV = this.physicsWorld.worldToScreen(v.x, v.y);\n\n if (camera) {\n screenV = camera.worldToScreen(screenV.x, screenV.y);\n }\n\n vertices.push(screenV);\n }\n\n PolygonDrawer.strokePolygon(canvas, vertices, 2, color.r, color.g, color.b, 255);\n }\n }\n\n // Draw center point\n let anchorScreen = { x: this.position.x, y: this.position.y };\n if (camera) {\n anchorScreen = camera.worldToScreen(anchorScreen.x, anchorScreen.y);\n }\n\n ShapeDrawer.fillCircle(canvas, anchorScreen.x, anchorScreen.y, 4, 255, 255, 0, 255);\n\n // Draw dash cooldown indicator\n if (this.canDash && this.dashCooldownTimer > 0) {\n const progress = 1 - (this.dashCooldownTimer / this.dashCooldown);\n const radius = 12;\n const angle = progress * Math.PI * 2;\n\n // Simple arc indicator (you can make this fancier)\n ShapeDrawer.strokeCircle(canvas, anchorScreen.x, anchorScreen.y, radius, 2, 100, 200, 255, 128);\n }\n\n // Draw dash direction during dash\n if (this.isDashing) {\n const dirEndX = anchorScreen.x + this.dashDirection.x * 20;\n const dirEndY = anchorScreen.y + this.dashDirection.y * 20;\n LineDrawer.drawThickLine(canvas, anchorScreen.x, anchorScreen.y, dirEndX, dirEndY, 2, 255, 200, 100, 255, camera);\n }\n }\n}\n\n\nexport class TopDownInputController {\n constructor(character, inputMap) {\n this.character = character;\n this.inputMap = inputMap;\n this.prevDashHeld = false;\n }\n\n update() {\n // 8-directional movement\n let moveX = 0;\n let moveY = 0;\n if (this.inputMap.isActionActive(\"move_left\")) moveX -= 1;\n if (this.inputMap.isActionActive(\"move_right\")) moveX += 1;\n if (this.inputMap.isActionActive(\"move_up\")) moveY -= 1;\n if (this.inputMap.isActionActive(\"move_down\")) moveY += 1;\n\n this.character.setMoveInput(moveX, moveY);\n\n // Dash input (if enabled)\n if (this.character.canDash) {\n const dashHeld = this.inputMap.isActionActive(\"dash\");\n const dashPressed = dashHeld && !this.prevDashHeld;\n\n this.character.setDashInput(dashPressed);\n this.prevDashHeld = dashHeld;\n }\n }\n}","import { ShapeDrawer } from \"tessera.js\";\r\nimport { Node } from \"./core.js\"\r\nimport { globalPerf } from \"./lib.js\";\r\nconst particlePerf = globalPerf\r\n// cache friendly(array of structs) no prototype \r\nfunction createParticle() {\r\n return {\r\n active: false,\r\n\r\n x: 0,\r\n y: 0,\r\n\r\n // physics\r\n vx: 0,\r\n vy: 0,\r\n\r\n life: 1.0,\r\n maxLife: 1.0,\r\n\r\n // Visual\r\n size: 4,\r\n startSize: 4,\r\n endSize: 2,\r\n\r\n r: 255,\r\n g: 255,\r\n b: 255,\r\n a: 255,\r\n\r\n startR: 255,\r\n startG: 255,\r\n startB: 255,\r\n startA: 255,\r\n\r\n endR: 255,\r\n endG: 255,\r\n endB: 255,\r\n endA: 0\r\n }\r\n}\r\n\r\n\r\n/**\r\n * ParticleEmitter - manages pool of particles\r\n * \r\n * Common use cases:\r\n * - Explosion (burst of particles)\r\n * - Smoke trail (continuous emission)\r\n * - Coin sparkle (short burst)\r\n * - Dust cloud (ground impact)\r\n * - Magic effect (custom colors/behavior)\r\n */\r\nexport class ParticleEmitter extends Node {\r\n\r\n constructor(name, options = {}) {\r\n super(name)\r\n // pool\r\n this.maxParticles = options.maxParticles || 100;\r\n this.particles = [];\r\n for (let i = 0; i < this.maxParticles; i++) {\r\n this.particles.push(createParticle());\r\n }\r\n this.activeCount = 0;\r\n\r\n\r\n this.emitting = false;\r\n this.emissionRate = options.emissionRate || 10; // particles per second\r\n this.emissionTimer = 0;\r\n\r\n // \\props\r\n this.lifetime = options.lifetime || 1.0;\r\n this.speed = options.speed || [50, 100];\r\n this.angle = options.angle || [0, 360]; // degrees\r\n this.spread = options.spread || 0; // additional angle randomness\r\n\r\n // physics \r\n this.gravity = options.gravity || 0; // pixels per second²\r\n this.drag = options.drag || 0; // velocity multiplier (0.95 = 5% slowdown)\r\n\r\n // visuals\r\n this.startSize = options.startSize || 4;\r\n this.endSize = options.endSize !== undefined ? options.endSize : 2;\r\n\r\n this.startColor = options.startColor || { r: 255, g: 255, b: 255, a: 255 };\r\n this.endColor = options.endColor || { r: 255, g: 255, b: 255, a: 0 };\r\n\r\n this.emitterShape = options.emitterShape || 'point'; // point, circle, box\r\n this.emitterSize = options.emitterSize || 0; // Radius for circle, half-width for box\r\n\r\n }\r\n\r\n /**\r\n * \r\n * @param {Array<number, number>} value \r\n * @returns {number}\r\n */\r\n randomValue(value) {\r\n if (Array.isArray(value)) {\r\n return value[0] + Math.random() * (value[1] - value[0]);\r\n }\r\n return value;\r\n }\r\n\r\n spawnParticle(x, y, vx, vy) {\r\n // find inactive particle from pool\r\n let particle = null;\r\n for (let i = 0; i < this.maxParticles; i++) {\r\n if (!this.particles[i].active) {\r\n particle = this.particles[i];\r\n break;\r\n }\r\n }\r\n\r\n if (!particle) return null; // pool exhausted\r\n let offsetX = 0;\r\n let offsetY = 0;\r\n if (this.emitterShape === 'circle') {\r\n const angle = Math.random() * Math.PI * 2;\r\n const radius = Math.random() * this.emitterSize;\r\n offsetX = Math.cos(angle) * radius;\r\n offsetY = Math.sin(angle) * radius;\r\n } else if (this.emitterShape === 'box') {\r\n offsetX = (Math.random() - 0.5) * this.emitterSize * 2;\r\n offsetY = (Math.random() - 0.5) * this.emitterSize * 2;\r\n }\r\n\r\n\r\n particle.active = true;\r\n particle.x = x + offsetX;\r\n particle.y = y + offsetY;\r\n\r\n\r\n if (vx !== undefined && vy !== undefined) {\r\n particle.vx = vx;\r\n particle.vy = vy;\r\n } else {\r\n const speed = this.randomValue(this.speed);\r\n const angleDeg = this.randomValue(this.angle) + (Math.random() - 0.5) * this.spread;\r\n const angleRad = (angleDeg * Math.PI) / 180;\r\n particle.vx = Math.cos(angleRad) * speed;\r\n particle.vy = Math.sin(angleRad) * speed;\r\n }\r\n\r\n\r\n // Lifetime\r\n particle.life = this.randomValue(this.lifetime);\r\n particle.maxLife = particle.life;\r\n\r\n // Size\r\n particle.startSize = this.randomValue(this.startSize);\r\n particle.endSize = this.randomValue(this.endSize);\r\n particle.size = particle.startSize;\r\n\r\n // Color\r\n particle.startR = this.startColor.r;\r\n particle.startG = this.startColor.g;\r\n particle.startB = this.startColor.b;\r\n particle.startA = this.startColor.a;\r\n\r\n particle.endR = this.endColor.r;\r\n particle.endG = this.endColor.g;\r\n particle.endB = this.endColor.b;\r\n particle.endA = this.endColor.a;\r\n\r\n particle.r = particle.startR;\r\n particle.g = particle.startG;\r\n particle.b = particle.startB;\r\n particle.a = particle.startA;\r\n\r\n this.activeCount++;\r\n return particle;\r\n }\r\n\r\n burst(count) {\r\n const worldX = this.position.x;\r\n const worldY = this.position.y;\r\n\r\n for (let i = 0; i < count; i++) {\r\n this.spawnParticle(worldX, worldY);\r\n }\r\n }\r\n startEmitting() {\r\n this.emitting = true;\r\n }\r\n\r\n stopEmitting() {\r\n this.emitting = false;\r\n }\r\n\r\n clear() {\r\n for (const particle of this.particles) {\r\n particle.active = false;\r\n }\r\n this.activeCount = 0;\r\n }\r\n\r\n\r\n _process(delta) {\r\n particlePerf.start(\"particlesProcess\")\r\n super._process(delta); // update node transform\r\n\r\n // continuous emission\r\n if (this.emitting) {\r\n this.emissionTimer += delta;\r\n const particlesPerFrame = this.emissionRate * delta;\r\n\r\n while (this.emissionTimer >= 1 / this.emissionRate) {\r\n this.emissionTimer -= 1 / this.emissionRate;\r\n this.spawnParticle(this.worldPosition.x, this.worldPosition.y);\r\n }\r\n }\r\n\r\n\r\n this.activeCount = 0;\r\n for (const particle of this.particles) {\r\n if (!particle.active) continue;\r\n\r\n this.activeCount++;\r\n\r\n particle.vy += this.gravity * delta;\r\n\r\n if (this.drag > 0) {\r\n particle.vx *= Math.pow(this.drag, delta);\r\n particle.vy *= Math.pow(this.drag, delta);\r\n }\r\n\r\n particle.x += particle.vx * delta;\r\n particle.y += particle.vy * delta;\r\n\r\n\r\n particle.life -= delta;\r\n if (particle.life <= 0) {\r\n particle.active = false;\r\n continue;\r\n }\r\n\r\n // interpolate properties based on life (0.0 = just born, 1.0 = dead)\r\n const t = 1.0 - (particle.life / particle.maxLife);\r\n\r\n // size\r\n particle.size = particle.startSize + (particle.endSize - particle.startSize) * t;\r\n\r\n // color\r\n particle.r = Math.floor(particle.startR + (particle.endR - particle.startR) * t);\r\n particle.g = Math.floor(particle.startG + (particle.endG - particle.startG) * t);\r\n particle.b = Math.floor(particle.startB + (particle.endB - particle.startB) * t);\r\n particle.a = Math.floor(particle.startA + (particle.endA - particle.startA) * t);\r\n\r\n\r\n }\r\n particlePerf.end(\"particlesProcess\")\r\n\r\n }\r\n\r\n _draw(canvas, camera) {\r\n particlePerf.start(\"particlesDraw\")\r\n\r\n if (!this.visible) return;\r\n\r\n\r\n for (const particle of this.particles) {\r\n if (!particle.active) continue;\r\n\r\n let screenX = particle.x;\r\n let screenY = particle.y;\r\n let size = particle.size;\r\n\r\n if (camera) {\r\n const screenPos = camera.worldToScreen(particle.x, particle.y);\r\n screenX = screenPos.x;\r\n screenY = screenPos.y;\r\n size *= camera.zoom;\r\n\r\n // Cull off-screen particles\r\n if (screenX < -size || screenX > canvas.width + size ||\r\n screenY < -size || screenY > canvas.height + size) {\r\n continue;\r\n }\r\n }\r\n ShapeDrawer.fillRect(\r\n canvas,\r\n Math.floor(screenX - size / 2),\r\n Math.floor(screenY - size / 2),\r\n Math.ceil(size),\r\n Math.ceil(size),\r\n particle.r,\r\n particle.g,\r\n particle.b,\r\n particle.a\r\n );\r\n\r\n }\r\n particlePerf.end(\"particlesDraw\")\r\n\r\n }\r\n\r\n getActiveCount() {\r\n return this.activeCount;\r\n }\r\n\r\n hasActiveParticles() {\r\n return this.activeCount > 0;\r\n }\r\n}\r\n\r\n\r\n\r\nexport class ParticlePresets {\r\n\r\n /**\r\n * burst of orange/red particles\r\n * @param {*} x \r\n * @param {*} y \r\n * @param {*} options \r\n * @returns \r\n */\r\n static explosion(x, y, options = {}) {\r\n const emitter = new ParticleEmitter(\"Explosion\", {\r\n maxParticles: options.count || 50,\r\n lifetime: [0.5, 1.2],\r\n speed: [80, 200],\r\n angle: [0, 360],\r\n gravity: 200,\r\n drag: 0.95,\r\n startSize: [6, 12],\r\n endSize: [2, 4],\r\n startColor: { r: 255, g: 150, b: 50, a: 255 },\r\n endColor: { r: 100, g: 50, b: 50, a: 0 },\r\n emitterShape: 'point'\r\n });\r\n\r\n emitter.position.x = x;\r\n emitter.position.y = y;\r\n emitter.markDirty()\r\n emitter.burst(options.count || 50);\r\n\r\n return emitter;\r\n }\r\n\r\n\r\n\r\n /**\r\n * continuous upward-floating particles\r\n * @param {*} x \r\n * @param {*} y \r\n * @param {*} options \r\n * @returns \r\n */\r\n static smoke(x, y, options = {}) {\r\n const emitter = new ParticleEmitter(\"Smoke\", {\r\n maxParticles: 100,\r\n emissionRate: options.rate || 15,\r\n lifetime: [1.5, 2.5],\r\n speed: [10, 30],\r\n angle: [260, 280],\r\n spread: 20,\r\n gravity: -30, // Float upward\r\n drag: 0.98,\r\n startSize: [4, 8],\r\n endSize: [10, 16], // Grow as they rise\r\n startColor: { r: 150, g: 150, b: 150, a: 180 },\r\n endColor: { r: 80, g: 80, b: 80, a: 0 },\r\n emitterShape: 'box',\r\n emitterSize: 10\r\n });\r\n\r\n emitter.position.x = x;\r\n emitter.position.y = y;\r\n emitter.startEmitting();\r\n\r\n return emitter;\r\n }\r\n\r\n\r\n /**\r\n * \r\n * @param {*} x \r\n * @param {*} y \r\n * @param {*} options \r\n * @returns \r\n */\r\n static sparkles(x, y, options = {}) {\r\n const emitter = new ParticleEmitter(\"Sparkles\", {\r\n maxParticles: 30,\r\n lifetime: [0.3, 0.8],\r\n speed: [20, 60],\r\n angle: [0, 360],\r\n gravity: -50,\r\n drag: 0.92,\r\n startSize: [3, 6],\r\n endSize: [1, 2],\r\n startColor: { r: 255, g: 255, b: 100, a: 255 },\r\n endColor: { r: 255, g: 200, b: 100, a: 0 },\r\n emitterShape: 'circle',\r\n emitterSize: 15\r\n });\r\n\r\n emitter.position.x = x;\r\n emitter.position.y = y;\r\n emitter.markDirty()\r\n emitter.burst(options.count || 20);\r\n\r\n return emitter;\r\n }\r\n\r\n /**\r\n * impact clouds\r\n * @param {*} x \r\n * @param {*} y \r\n * @param {*} options \r\n * @returns \r\n */\r\n static dustCloud(x, y, options = {}) {\r\n const emitter = new ParticleEmitter(\"Dust\", {\r\n maxParticles: 30,\r\n lifetime: [0.3, 0.6],\r\n speed: [40, 100],\r\n angle: [250, 290], // Spread left and right\r\n spread: 40,\r\n gravity: 100,\r\n drag: 0.9,\r\n startSize: [4, 8],\r\n endSize: [2, 4],\r\n startColor: { r: 180, g: 160, b: 140, a: 200 },\r\n endColor: { r: 140, g: 120, b: 100, a: 0 },\r\n emitterShape: 'box',\r\n emitterSize: 20\r\n });\r\n\r\n emitter.position.x = x;\r\n emitter.position.y = y;\r\n emitter.markDirty()\r\n emitter.burst(options.count || 15);\r\n\r\n return emitter;\r\n }\r\n\r\n static blood(x, y, directionX = 0, directionY = 0, options = {}) {\r\n const emitter = new ParticleEmitter(\"Blood\", {\r\n maxParticles: 25,\r\n lifetime: [0.4, 0.8],\r\n speed: [60, 150],\r\n angle: [0, 360],\r\n gravity: 300,\r\n drag: 0.94,\r\n startSize: [3, 7],\r\n endSize: [1, 3],\r\n startColor: { r: 200, g: 20, b: 20, a: 255 },\r\n endColor: { r: 120, g: 10, b: 10, a: 0 },\r\n emitterShape: 'point'\r\n });\r\n\r\n emitter.position.x = x;\r\n emitter.position.y = y;\r\n\r\n // Bias particles in direction of damage\r\n if (directionX !== 0 || directionY !== 0) {\r\n const angle = Math.atan2(directionY, directionX) * (180 / Math.PI);\r\n emitter.angle = [angle - 45, angle + 45];\r\n }\r\n\r\n emitter.markDirty()\r\n emitter.burst(options.count || 20);\r\n\r\n return emitter;\r\n }\r\n\r\n static trail(color = { r: 100, g: 150, b: 255 }, options = {}) {\r\n const emitter = new ParticleEmitter(\"Trail\", {\r\n maxParticles: 50,\r\n emissionRate: options.rate || 30,\r\n lifetime: [0.3, 0.6],\r\n speed: [5, 20],\r\n angle: [0, 360],\r\n gravity: 0,\r\n drag: 0.96,\r\n startSize: [4, 6],\r\n endSize: [1, 2],\r\n startColor: { ...color, a: 200 },\r\n endColor: { ...color, a: 0 },\r\n emitterShape: 'circle',\r\n emitterSize: 5\r\n });\r\n\r\n emitter.startEmitting(); // called in _process so used synched world position\r\n return emitter;\r\n }\r\n}","import { Node } from './core.js';\nimport { drawAtlasRegionToCanvas } from './lib.js';\nimport { Camera2D } from './camera.js';\nimport { PerformanceMonitor } from 'tessera.js';\nimport { globalPerf } from \"./lib.js\"\nconst spriteMonitor = globalPerf\n\n\nexport class Sprite extends Node {\n /**\n * \n * @param {string} name \n * @param {SpriteAtlas} atlas \n * @param {*} options \n */\n constructor(name, atlas, options = {}) {\n super(name);\n\n\n // console.dir(options)\n // atlas data: { data: Uint8Array, width, height }\n this.atlas = atlas;\n\n this.frameWidth = options.frameWidth || atlas.width;\n this.frameHeight = options.frameHeight || atlas.height;\n\n // show\n this.frame = options.frame || 0;\n\n //pivot default: top-left corner\n this.offset = {\n x: options.offsetX || 0,\n y: options.offsetY || 0\n };\n\n this.flipH = false;\n this.flipV = false;\n this.modulate = options.modulate || { r: 255, g: 255, b: 255, a: 255 }; // tint color\n this.opaque = options.opaque\n\n this.framesPerRow = Math.floor(this.atlas.width / this.frameWidth);\n }\n\n /**\n * convert frame index to atlas coordinates\n * \n * Example: 32x32 sprites in 256x256 atlas = 8 frames per row\n * Frame 0 = (0, 0)\n * Frame 5 = (160, 0) // 5 * 32 = 160 \n * Frame 8 = (0, 32) // wraps to next row\n */\n getFrameRect(frameIndex) {\n const col = frameIndex % this.framesPerRow;\n const row = Math.floor(frameIndex / this.framesPerRow);\n\n return {\n x: col * this.frameWidth,\n y: row * this.frameHeight,\n width: this.frameWidth,\n height: this.frameHeight\n };\n }\n\n\n /**\n * Convert frame index to atlas coordinates\n * \n * Example: 32x32 sprites in 256x256 atlas = 8 frames per row\n * Frame 0 = (0, 0)\n * Frame 5 = (160, 0) // 5 * 32 = 160 \n * Frame 8 = (0, 32) // wraps to next row\n */\n getFrameRect(frameIndex) {\n const col = frameIndex % this.framesPerRow;\n const row = Math.floor(frameIndex / this.framesPerRow);\n\n return {\n x: col * this.frameWidth,\n y: row * this.frameHeight,\n width: this.frameWidth,\n height: this.frameHeight\n };\n }\n\n /**\n * draw sprite to canvas\n * \n * \n * 1. Calculate world position (Node system handles this)\n * 2. Apply offset (pivot point)\n * 3. Get source rect from frame index\n * 4. Blit pixels using tessera's drawAtlasRegionToCanvas\n * \n * Note: We're NOT handling rotation/scale YET. That requires\n * per-pixel transforms which is slow in pure JS. For now,\n * rotation/scale affects position but not the sprite pixels.\n * \n * Future optimization: pre-render rotated sprites to cache,\n * \n * \n * If your atlas has no transparency (RGBA alpha always 255) and you don't need tint, call:\n * @param {Camera2D} camera \n */\n // Changes to sprite.js in Sprite._draw (add scaling to offset)\n _draw(canvas, camera) {\n spriteMonitor.start(\"spriteDraw\")\n if (!this.atlas) {\n spriteMonitor.end(\"spriteDraw\")\n return;\n }\n\n // world position (center) + scaled offset\n let worldX = this.worldPosition.x + this.offset.x * this.worldScale.x;\n let worldY = this.worldPosition.y + this.offset.y * this.worldScale.y;\n\n // world-scaled dimensions of the frame\n const worldW = this.frameWidth * this.worldScale.x;\n const worldH = this.frameHeight * this.worldScale.y;\n\n // Improved culling with rotated AABB if necessary\n let cullCenterX, cullCenterY, cullW, cullH;\n if (this.worldRotation !== 0) {\n // Unrotated corners in world space\n const tlX = worldX;\n const tlY = worldY;\n const trX = worldX + worldW;\n const trY = worldY;\n const blX = worldX;\n const blY = worldY + worldH;\n const brX = worldX + worldW;\n const brY = worldY + worldH;\n\n // Rotation center is worldPosition (origin)\n const px = this.worldPosition.x;\n const py = this.worldPosition.y;\n const cos = this.worldCos;\n const sin = this.worldSin;\n\n const rotate = (wx, wy) => {\n const lx = wx - px;\n const ly = wy - py;\n const rx = cos * lx - sin * ly;\n const ry = sin * lx + cos * ly;\n return { x: px + rx, y: py + ry };\n };\n\n const rtl = rotate(tlX, tlY);\n const rtr = rotate(trX, trY);\n const rbl = rotate(blX, blY);\n const rbr = rotate(brX, brY);\n\n const minX = Math.min(rtl.x, rtr.x, rbl.x, rbr.x);\n const maxX = Math.max(rtl.x, rtr.x, rbl.x, rbr.x);\n const minY = Math.min(rtl.y, rtr.y, rbl.y, rbr.y);\n const maxY = Math.max(rtl.y, rtr.y, rbl.y, rbr.y);\n\n cullCenterX = (minX + maxX) / 2;\n cullCenterY = (minY + maxY) / 2;\n cullW = maxX - minX;\n cullH = maxY - minY;\n } else {\n cullCenterX = worldX + worldW / 2;\n cullCenterY = worldY + worldH / 2;\n cullW = worldW;\n cullH = worldH;\n }\n\n if (camera && !camera.isAABBVisible(cullCenterX, cullCenterY, cullW, cullH)) {\n spriteMonitor.end(\"spriteDraw\")\n return; // Off-screen, don't draw\n }\n\n // convert top-left world -> screen\n let screenPos = { x: worldX, y: worldY };\n if (camera) {\n screenPos = camera.worldToScreen(worldX, worldY);\n }\n\n const destX = Math.floor(screenPos.x);\n const destY = Math.floor(screenPos.y);\n const destRect = {\n x: destX,\n y: destY,\n width: Math.floor(worldW * (camera ? camera.zoom : 1)),\n height: Math.floor(worldH * (camera ? camera.zoom : 1))\n };\n\n if (destRect.x + destRect.width < 0 || destRect.x >= canvas.width ||\n destRect.y + destRect.height < 0 || destRect.y >= canvas.height) {\n spriteMonitor.end(\"spriteDraw\")\n return;\n }\n\n const srcRect = this.getFrameRect(this.frame);\n\n // Compute pivot from offset (normalized, unscaled)\n const pivot = {\n x: -this.offset.x / this.frameWidth,\n y: -this.offset.y / this.frameHeight\n };\n\n drawAtlasRegionToCanvas(\n this.atlas,\n srcRect,\n canvas,\n destRect,\n {\n algorithm: \"nn\",\n flipH: this.flipH,\n flipV: this.flipV,\n modulate: this.modulate,\n assumeOpaque: this.opaque,\n camera: camera,\n rotation: this.worldRotation,\n pivot: pivot\n }\n );\n\n canvas.needsUpload = true;\n spriteMonitor.end(\"spriteDraw\")\n }\n\n /**\n * Utility: set pivot to center of sprite\n */\n centerOrigin() {\n this.offset.x = -this.frameWidth / 2;\n this.offset.y = -this.frameHeight / 2;\n }\n\n}\n\n\n\n/**\n * \n * \n * why separate from Sprite:\n * - Not all sprites need animation (static decorations)\n * - Animation state (current frame, time accumulator) is extra memory\n * - Keeps Sprite class lean for performance\n * \n * Common use case: character walk cycles, enemy attack patterns\n */\nexport class AnimatedSprite extends Sprite {\n /**\n * \n * @param {string} name \n * @param {SpriteAtlas} atlas \n * @param {*} options \n */\n constructor(name, atlas, options = {}) {\n super(name, atlas, options);\n\n\n this.animations = options.animations || {};\n\n\n this.currentAnimation = null;\n this.currentFrameIndex = 0; // index into animation's frame array\n this.frameTimer = 0; // accumulates delta time\n this.playing = false;\n this.loop = true;\n\n this.onAnimationFinished = null; // called when non-looping anim ends\n }\n\n /**\n * start playing an animation\n * @param {string} animName \n * @param {boolean} restart \n * @returns \n */\n play(animName, restart = false) {\n const anim = this.animations[animName];\n if (!anim) {\n console.warn(`Animation \"${animName}\" not found on ${this.name}`);\n return;\n }\n\n // don't restart if already playing\n if (this.currentAnimation === animName && this.playing && !restart) {\n return;\n }\n\n this.currentAnimation = animName;\n this.currentFrameIndex = 0;\n this.frameTimer = 0;\n this.playing = true;\n this.loop = anim.loop !== undefined ? anim.loop : true;\n\n // Set initial frame\n this.frame = anim.frames[0];\n }\n\n /**\n * stop animation (freeze on current frame)\n */\n stop() {\n this.playing = false;\n }\n\n /**\n * pause (can resume with play())\n */\n pause() {\n this.playing = false;\n }\n\n /**\n * update animation state\n * \n * how frame timing works:\n * - animation has target FPS (e.g., 12 fps = 0.083s per frame)\n * - accumulate delta time until we hit frame duration\n * - advance to next frame\n * - loop or stop at end\n * \n * @param {number} delta \n * @returns \n */\n _process(delta) {\n super._process(delta); // call parent hook if overridden\n\n if (!this.playing || !this.currentAnimation) return;\n\n const anim = this.animations[this.currentAnimation];\n if (!anim) return;\n\n\n const frameDuration = 1.0 / anim.fps;\n\n\n this.frameTimer += delta;\n\n\n while (this.frameTimer >= frameDuration) {\n this.frameTimer -= frameDuration;\n this.currentFrameIndex++;\n\n // check if animation finished\n if (this.currentFrameIndex >= anim.frames.length) {\n if (this.loop) {\n this.currentFrameIndex = 0; // wrap around\n } else {\n // animation finished\n this.currentFrameIndex = anim.frames.length - 1; // freeze on last frame\n this.playing = false;\n\n if (this.onAnimationFinished) {\n this.onAnimationFinished(this.currentAnimation);\n }\n break;\n }\n }\n\n // update visible frame\n this.frame = anim.frames[this.currentFrameIndex];\n }\n }\n\n /**\n * check if specific animation is playing\n * @param {string} animName \n * @returns \n */\n isPlaying(animName = null) {\n if (animName) {\n return this.playing && this.currentAnimation === animName;\n }\n return this.playing;\n }\n\n /**\n * get current animation progress (0.0 to 1.0)\n */\n getProgress() {\n if (!this.currentAnimation) return 0;\n const anim = this.animations[this.currentAnimation];\n return this.currentFrameIndex / anim.frames.length;\n }\n}\n\n\n/**\n * spriteAtlas - helper for managing shared atlases\n * \n * \n * - Multiple sprites often share the same atlas (all enemies, all UI icons)\n * - Loading atlas once and reusing saves memory\n * - Provides utilities for common atlas patterns (grid, packed)\n */\nexport class SpriteAtlas {\n constructor(renderer, path, options = {}) {\n this.path = path;\n this.image = renderer.loadImage(path);\n\n // Grid-based atlas settings\n this.frameWidth = options.frameWidth || this.image.width;\n this.frameHeight = options.frameHeight || this.image.height;\n this.framesPerRow = Math.floor(this.image.width / this.frameWidth);\n this.framesPerCol = Math.floor(this.image.height / this.frameHeight);\n this.totalFrames = this.framesPerRow * this.framesPerCol;\n }\n\n\n /**\n * create a sprite from this atlas\n * @param {*} name \n * @param {*} frame \n * @param {*} options \n * @returns \n */\n createSprite(name, frame = 0, options = {}) {\n return new Sprite(name, this.image, {\n frameWidth: this.frameWidth,\n frameHeight: this.frameHeight,\n frame: frame,\n ...options\n });\n }\n\n /**\n * Create animated sprite from this atlas\n * @param {*} name \n * @param {*} animations \n * @param {*} options \n * @returns \n */\n createAnimatedSprite(name, animations, options = {}) {\n return new AnimatedSprite(name, this.image, {\n frameWidth: this.frameWidth,\n frameHeight: this.frameHeight,\n animations: animations,\n ...options\n });\n }\n\n /**\n * Utility: generate sequential frame array\n * Example: getFrameRange(0, 7) -> [0,1,2,3,4,5,6,7]\n */\n static getFrameRange(start, end) {\n const frames = [];\n for (let i = start; i <= end; i++) {\n frames.push(i);\n }\n return frames;\n }\n}","import { Node } from './core.js';\nimport { PixelBuffer, CacheBuffer, ShapeDrawer, PolygonDrawer, LineDrawer } from 'tessera.js';\nimport { PhysicsFactory } from './physicsv2.js';\nimport { dirname, resolve, extname } from 'node:path';\nimport { readFileSync } from \"node:fs\"\n\nimport { globalPerf, drawAtlasRegionToCanvas } from \"./lib.js\"\n\n\nconst tiledperf = globalPerf;\n\nfunction reshapeArray(arr, width, height) {\n const result = [];\n for (let i = 0; i < height; i++) {\n const start = i * width;\n const end = start + width;\n result.push(arr.slice(start, end));\n }\n return result;\n}\n\nfunction findMinMaxLoop(arr) {\n if (arr.length === 0) {\n throw new Error(\"Array is empty\");\n }\n let min = arr[0];\n let max = arr[0];\n for (let i = 1; i < arr.length; i++) {\n if (arr[i] < min) min = arr[i];\n if (arr[i] > max) max = arr[i];\n }\n return { min, max };\n}\n\n\n\nclass BaseLayer {\n constructor(layer, options = {}) {\n this.layer = layer;\n this.type = layer.type;\n this.worldPosition = {\n x: options.offsetX || 0,\n y: options.offsetY || 0\n };\n }\n\n\n draw(canvas, camera) {\n throw new Error(\"draw() must be implemented by subclass\");\n }\n\n printDebug() {\n console.log(`Layer: ${this.layer.name}, Type: ${this.type}`);\n }\n}\n\n\n\nclass TileLayer extends BaseLayer {\n constructor(layer, lastgid, tiles, options = {}) {\n super(layer, options);\n\n this.tileCache = new Map();\n this.chunkBuffers = [];\n this.assumeOpaque = options.assumeOpaque || false;\n this.tiles2d = [];\n this.layerwidth = layer.width;\n this.layerheight = layer.height;\n this.tileWidth = -16;\n this.tileHeight = -16;\n this.chunkSize = options.chunkSize || 16;\n this.mapWidth = this.layerwidth;\n this.mapHeight = this.layerheight;\n this.chunkspertiles = [];\n this.lastTile = 0;\n\n this._initializeTileCache(layer, lastgid, tiles);\n this.tiles2d = reshapeArray(layer.data, layer.width, layer.height);\n this.createChunks();\n this.preRenderChunks();\n }\n\n _initializeTileCache(layer, lastgid, tiles) {\n const { min, max } = findMinMaxLoop(layer.data);\n this.lastTile = max;\n\n for (let tileId = min; tileId <= max; tileId++) {\n if (tileId === 0) continue;\n\n for (let i = 0; i <= lastgid.length; i++) {\n if (tileId <= lastgid[i]) {\n if (this.tileWidth < 0) {\n this.tileWidth = tiles[i].tilewidth;\n this.tileHeight = tiles[i].tileheight;\n }\n this.tileCache.set(tileId, tiles[i]);\n break;\n }\n }\n }\n }\n\n createChunks() {\n const chunksX = Math.ceil(this.mapWidth / this.chunkSize);\n const chunksY = Math.ceil(this.mapHeight / this.chunkSize);\n const chunks = [];\n\n for (let cy = 0; cy < chunksY; cy++) {\n chunks[cy] = [];\n for (let cx = 0; cx < chunksX; cx++) {\n chunks[cy][cx] = {\n x: cx,\n y: cy,\n worldX: cx * this.chunkSize * this.tileWidth,\n worldY: cy * this.chunkSize * this.tileHeight,\n worldWidth: this.chunkSize * this.tileWidth,\n worldHeight: this.chunkSize * this.tileHeight,\n dirty: true\n };\n }\n }\n\n this.chunkspertiles.push(chunks);\n }\n\n preRenderChunks() {\n const chunksX = Math.ceil(this.mapWidth / this.chunkSize);\n const chunksY = Math.ceil(this.mapHeight / this.chunkSize);\n\n for (let cy = 0; cy < chunksY; cy++) {\n this.chunkBuffers[cy] = [];\n for (let cx = 0; cx < chunksX; cx++) {\n const bufferW = Math.min(this.chunkSize, this.layerwidth - cx * this.chunkSize) * this.tileWidth;\n const bufferH = Math.min(this.chunkSize, this.layerheight - cy * this.chunkSize) * this.tileHeight;\n const buffer = new CacheBuffer(bufferW, bufferH);\n this.renderChunkToBuffer(cx, cy, buffer);\n this.chunkBuffers[cy][cx] = buffer;\n }\n }\n }\n\n renderChunkToBuffer(chunkX, chunkY, buffer) {\n const startX = chunkX * this.chunkSize;\n const startY = chunkY * this.chunkSize;\n const endX = Math.min(startX + this.chunkSize, this.layerwidth);\n const endY = Math.min(startY + this.chunkSize, this.layerheight);\n\n buffer.clear(0, 0, 0, 0);\n\n for (let y = startY; y < endY; y++) {\n for (let x = startX; x < endX; x++) {\n const tileId = this.tiles2d[y][x];\n if (tileId === 0) continue;\n\n const frameIndex = tileId - 1;\n const tile = this.tileCache.get(tileId);\n\n const col = frameIndex % tile.atlasFramesPerRow;\n const row = Math.floor(frameIndex / tile.atlasFramesPerRow);\n const srcRect = {\n x: col * tile.tilewidth,\n y: row * tile.tileheight,\n width: tile.tilewidth,\n height: tile.tileheight\n };\n\n const destRect = {\n x: (x - startX) * tile.tilewidth,\n y: (y - startY) * tile.tileheight,\n width: tile.tilewidth,\n height: tile.tileheight\n };\n\n drawAtlasRegionToCanvas(tile.image, srcRect, buffer, destRect, {\n algorithm: \"nn\",\n assumeOpaque: this.assumeOpaque\n });\n }\n }\n }\n\n blitBuffer(srcBuffer, dstCanvas, destX, destY) {\n const srcData = srcBuffer.data;\n const dstData = dstCanvas.data;\n const srcW = srcBuffer.width;\n const srcH = srcBuffer.height;\n const dstW = dstCanvas.width;\n const dstH = dstCanvas.height;\n\n const startX = Math.max(0, destX);\n const startY = Math.max(0, destY);\n const endX = Math.min(dstW, destX + srcW);\n const endY = Math.min(dstH, destY + srcH);\n\n if (startX >= endX || startY >= endY) return;\n\n if (this.assumeOpaque) {\n for (let y = startY; y < endY; y++) {\n const srcY = y - destY;\n const srcRowStart = srcY * srcW * 4;\n const dstRowStart = y * dstW * 4;\n const srcStartX = Math.max(0, -destX);\n const rowPixelCount = endX - startX;\n\n dstData.set(\n srcData.subarray(\n srcRowStart + srcStartX * 4,\n srcRowStart + srcStartX * 4 + rowPixelCount * 4\n ),\n dstRowStart + startX * 4\n );\n }\n } else {\n for (let y = startY; y < endY; y++) {\n const srcY = y - destY;\n const srcRowStart = srcY * srcW * 4;\n const dstRowStart = y * dstW * 4;\n\n for (let x = startX; x < endX; x++) {\n const srcX = x - destX;\n const srcIdx = srcRowStart + srcX * 4;\n const dstIdx = dstRowStart + x * 4;\n const srcA = srcData[srcIdx + 3];\n\n if (srcA === 255) {\n dstData[dstIdx] = srcData[srcIdx];\n dstData[dstIdx + 1] = srcData[srcIdx + 1];\n dstData[dstIdx + 2] = srcData[srcIdx + 2];\n dstData[dstIdx + 3] = 255;\n } else if (srcA > 0) {\n const inv = 255 - srcA;\n dstData[dstIdx] = ((srcData[srcIdx] * srcA + dstData[dstIdx] * inv) / 255) | 0;\n dstData[dstIdx + 1] = ((srcData[srcIdx + 1] * srcA + dstData[dstIdx + 1] * inv) / 255) | 0;\n dstData[dstIdx + 2] = ((srcData[srcIdx + 2] * srcA + dstData[dstIdx + 2] * inv) / 255) | 0;\n dstData[dstIdx + 3] = ((srcA * 255 + dstData[dstIdx + 3] * inv) / 255) | 0;\n }\n }\n }\n }\n\n dstCanvas.markRegion(startX, startY, endX - startX, endY - startY);\n }\n\n draw(canvas, camera) {\n tiledperf.start(\"drawVisibleChunks\");\n\n const visibleBounds = camera.getVisibleBounds();\n const chunks = this.chunkspertiles[0];\n\n const startChunkX = Math.max(0, Math.floor((visibleBounds.left - this.worldPosition.x) / (this.chunkSize * this.tileWidth)));\n const endChunkX = Math.min(chunks[0].length - 1, Math.ceil((visibleBounds.right - this.worldPosition.x) / (this.chunkSize * this.tileWidth)));\n const startChunkY = Math.max(0, Math.floor((visibleBounds.top - this.worldPosition.y) / (this.chunkSize * this.tileHeight)));\n const endChunkY = Math.min(chunks.length - 1, Math.ceil((visibleBounds.bottom - this.worldPosition.y) / (this.chunkSize * this.tileHeight)));\n\n tiledperf.start(\"blitBuffer\");\n for (let cy = startChunkY; cy <= endChunkY; cy++) {\n for (let cx = startChunkX; cx <= endChunkX; cx++) {\n const chunkBuffer = this.chunkBuffers[cy][cx];\n const worldX = this.worldPosition.x + cx * this.chunkSize * this.tileWidth;\n const worldY = this.worldPosition.y + cy * this.chunkSize * this.tileHeight;\n const screenPos = camera.worldToScreen(worldX, worldY);\n const destX = Math.floor(screenPos.x);\n const destY = Math.floor(screenPos.y);\n this.blitBuffer(chunkBuffer, canvas, destX, destY);\n }\n }\n tiledperf.end(\"blitBuffer\");\n tiledperf.end(\"drawVisibleChunks\");\n }\n\n printDebug() {\n super.printDebug();\n console.log(`Tile cache size: ${this.tileCache.size}`);\n console.log(`Chunks: ${this.chunkBuffers.length}x${this.chunkBuffers[0]?.length || 0}`);\n }\n}\n\n\nclass ObjectLayer extends BaseLayer {\n constructor(layer, lastgid, tiles, options = {}) {\n super(layer, options);\n\n this.objectRenderCache = [];\n this._precomputeObjectRenderData(layer, lastgid, tiles);\n }\n\n _precomputeObjectRenderData(layer, lastgid, tiles) {\n for (const obj of layer.objects) {\n let tileset = null;\n for (let i = 0; i < lastgid.length; i++) {\n if (obj.gid <= lastgid[i]) {\n tileset = tiles[i];\n break;\n }\n }\n\n if (!tileset) continue;\n\n const frameIndex = obj.gid - 1;\n const col = frameIndex % tileset.atlasFramesPerRow;\n const row = Math.floor(frameIndex / tileset.atlasFramesPerRow);\n\n const srcRect = {\n x: col * tileset.tilewidth,\n y: row * tileset.tileheight,\n width: tileset.tilewidth,\n height: tileset.tileheight\n };\n\n const image = tileset.type === \"grid\" ? tileset.image : tileset.tiles[0];\n\n this.objectRenderCache.push({\n worldX: this.worldPosition.x + obj.x,\n worldY: this.worldPosition.y + obj.y,\n width: obj.width,\n height: obj.height,\n srcRect: srcRect,\n image: image\n });\n }\n }\n\n draw(canvas, camera) {\n for (const cached of this.objectRenderCache) {\n const screenPos = camera.worldToScreen(cached.worldX, cached.worldY);\n\n const destRect = {\n x: Math.floor(screenPos.x),\n y: Math.floor(screenPos.y),\n width: Math.floor(cached.width * camera.zoom),\n height: Math.floor(cached.height * camera.zoom)\n };\n\n if (destRect.x + destRect.width < 0 || destRect.x >= canvas.width ||\n destRect.y + destRect.height < 0 || destRect.y >= canvas.height) {\n continue;\n }\n\n drawAtlasRegionToCanvas(cached.image, cached.srcRect, canvas, destRect, {\n algorithm: \"nn\",\n camera: camera\n });\n }\n }\n\n printDebug() {\n super.printDebug();\n console.log(`Object count: ${this.objectRenderCache.length}`);\n }\n}\n\n\n\n\nclass CollisionLayer extends BaseLayer {\n constructor(layer, lastgid, tiles, options = {}, cb = (b) => { }) {\n super(layer, options);\n\n this.collisionShapes = [];\n this.bodies = new Map();\n this._mergedBoxCounter = 0;\n this.debugCollisions = options.debugCollisions || false;\n\n this._parseCollisionShapes(layer);\n const created = this.createPlanckCollisionShapes(this.collisionShapes);\n cb(created)\n }\n\n _parseCollisionShapes(layer) {\n for (const obj of layer.objects) {\n const shape = this.parseShape(obj);\n if (shape) {\n this.collisionShapes.push(shape);\n } else {\n console.warn(`Couldn't parse shape:`, obj);\n }\n }\n }\n\n parseShape(obj) {\n if (!obj.polygon && !obj.ellipse) {\n if (obj.width == 0 && obj.height == 0) {\n return {\n type: 'point',\n name: obj.name,\n data: { x: this.worldPosition.x + obj.x, y: this.worldPosition.y + obj.y }\n };\n } else {\n return {\n type: 'box',\n name: obj.name,\n data: {\n x: this.worldPosition.x + obj.x,\n y: this.worldPosition.y + obj.y,\n width: obj.width,\n height: obj.height\n }\n };\n }\n }\n\n if (obj.ellipse) {\n const radius = obj.width / 2;\n return {\n type: 'circle',\n name: obj.name,\n data: {\n x: this.worldPosition.x + obj.x + radius,\n y: this.worldPosition.y + obj.y + radius,\n radius: radius\n }\n };\n }\n\n if (obj.polygon) {\n return {\n type: 'poly',\n name: obj.name,\n data: {\n x: this.worldPosition.x + obj.x,\n y: this.worldPosition.y + obj.y,\n points: obj.polygon\n }\n };\n }\n }\n\n mergeBoxShapes(allBoxes) {\n if (!Array.isArray(allBoxes) || allBoxes.length === 0) return [];\n\n const rects = allBoxes.map(b => ({\n name: b.name,\n x: b.data.x,\n y: b.data.y,\n width: b.data.width,\n height: b.data.height\n }));\n\n const tryMerge = (a, b) => {\n if (a.y === b.y && a.height === b.height) {\n if (a.x + a.width === b.x) {\n return { x: a.x, y: a.y, width: a.width + b.width, height: a.height, name: `${a.name || 'm'}_${b.name || 'm'}` };\n }\n if (b.x + b.width === a.x) {\n return { x: b.x, y: b.y, width: a.width + b.width, height: a.height, name: `${b.name || 'm'}_${a.name || 'm'}` };\n }\n }\n\n if (a.x === b.x && a.width === b.width) {\n if (a.y + a.height === b.y) {\n return { x: a.x, y: a.y, width: a.width, height: a.height + b.height, name: `${a.name || 'm'}_${b.name || 'm'}` };\n }\n if (b.y + b.height === a.y) {\n return { x: b.x, y: b.y, width: a.width, height: a.height + b.height, name: `${b.name || 'm'}_${a.name || 'm'}` };\n }\n }\n\n return null;\n };\n\n let merged = true;\n while (merged) {\n merged = false;\n outer:\n for (let i = 0; i < rects.length; i++) {\n for (let j = i + 1; j < rects.length; j++) {\n const a = rects[i];\n const b = rects[j];\n const m = tryMerge(a, b);\n if (m) {\n rects[i] = m;\n rects.splice(j, 1);\n merged = true;\n break outer;\n }\n }\n }\n }\n\n return rects.map((r, idx) => ({\n type: 'box',\n name: r.name || `merged_box_${this._mergedBoxCounter++}_${idx}`,\n data: { x: r.x, y: r.y, width: r.width, height: r.height }\n }));\n }\n\n createPlanckCollisionShapes(shapes, options = {}) {\n const created = [];\n const defaultBodyType = options.defaultBodyType || 'static';\n\n if (!Array.isArray(shapes) || shapes.length === 0) return created;\n\n const boxes = [];\n const others = [];\n for (const s of shapes) {\n if (!s || !s.type) continue;\n const t = s.type.toLowerCase();\n if (t === 'box') boxes.push(s);\n else others.push(s);\n }\n\n const mergedBoxes = this.mergeBoxShapes(boxes);\n\n for (let i = 0; i < mergedBoxes.length; i++) {\n const mb = mergedBoxes[i];\n const d = mb.data;\n const cx = d.x + d.width / 2;\n const cy = d.y + d.height / 2;\n let name = mb.name || `merged_box_${i}`;\n if (this.bodies.has(name)) {\n name = `${name}_${i}`;\n }\n\n const body = PhysicsFactory.createBox(name, cx, cy, d.width, d.height, options.bodyType || defaultBodyType, options.anchor || 'center');\n this.bodies.set(name, body);\n created.push(body);\n }\n\n for (let i = 0; i < others.length; i++) {\n const shp = others[i];\n if (!shp.data) continue;\n\n let nameBase = shp.name || `${shp.type}_${i}`;\n let name = nameBase;\n let k = 1;\n while (this.bodies.has(name)) {\n name = `${nameBase}_${k++}`;\n }\n\n const body = PhysicsFactory.createFromParsedShape(shp, name, options.bodyType || defaultBodyType, options.shapeOptions || {});\n\n if (body) {\n this.bodies.set(name, body);\n created.push(body);\n } else {\n console.warn(`Failed to create shape for:`, shp);\n }\n }\n\n return created;\n }\n\n draw(canvas, camera) {\n if (!this.debugCollisions) return;\n\n const getColorForBody = (body) => {\n switch ((body.type || '').toLowerCase()) {\n case 'static': return { r: 120, g: 120, b: 120, a: 220 };\n case 'kinematic': return { r: 0, g: 140, b: 255, a: 220 };\n case 'dynamic':\n default: return { r: 255, g: 60, b: 60, a: 220 };\n }\n };\n\n const isAABBOnScreen = (left, top, right, bottom) => {\n const p1 = camera.worldToScreen(left, top);\n const p2 = camera.worldToScreen(right, bottom);\n const sxMin = Math.min(p1.x, p2.x), syMin = Math.min(p1.y, p2.y);\n const sxMax = Math.max(p1.x, p2.x), syMax = Math.max(p1.y, p2.y);\n if (sxMax < 0 || sxMin >= canvas.width || syMax < 0 || syMin >= canvas.height) return false;\n return true;\n };\n\n for (const [name, body] of this.bodies.entries()) {\n if (!body) continue;\n\n const color = getColorForBody(body);\n const strokeThickness = 1;\n const children = body.children || [];\n\n if (!children.length) continue;\n\n for (const shape of children) {\n if (!shape || !shape.shapeType) continue;\n\n const opts = shape.options || {};\n const anchor = shape.anchorOffset || { x: 0, y: 0 };\n const baseX = (opts.x || 0);\n const baseY = (opts.y || 0);\n const lx = baseX - anchor.x;\n const ly = baseY - anchor.y;\n const worldBaseX = (body.position && body.position.x !== undefined) ? body.position.x + lx : lx;\n const worldBaseY = (body.position && body.position.y !== undefined) ? body.position.y + ly : ly;\n\n switch (shape.shapeType) {\n case 'box': {\n const w = opts.width || 0;\n const h = opts.height || 0;\n const left = worldBaseX - w / 2;\n const top = worldBaseY - h / 2;\n const right = left + w;\n const bottom = top + h;\n\n if (!isAABBOnScreen(left, top, right, bottom)) break;\n const screenPos = camera.worldToScreen(left, top);\n ShapeDrawer.strokeRect(canvas, screenPos.x, screenPos.y, w, h, strokeThickness, color.r, color.g, color.b, color.a);\n break;\n }\n\n case 'circle': {\n const rpx = opts.radius || 0;\n const left = worldBaseX - rpx;\n const top = worldBaseY - rpx;\n const right = worldBaseX + rpx;\n const bottom = worldBaseY + rpx;\n\n if (!isAABBOnScreen(left, top, right, bottom)) break;\n const screenPos = camera.worldToScreen(worldBaseX, worldBaseY);\n ShapeDrawer.strokeCircle(canvas, screenPos.x, screenPos.y, rpx, strokeThickness, color.r, color.g, color.b, color.a);\n break;\n }\n\n case 'polygon':\n case 'poly': {\n const pts = opts.points || [];\n if (!pts.length) break;\n\n const worldPts = pts.map(p => ({ x: worldBaseX + p.x, y: worldBaseY + p.y }));\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const p of worldPts) {\n if (p.x < minX) minX = p.x;\n if (p.y < minY) minY = p.y;\n if (p.x > maxX) maxX = p.x;\n if (p.y > maxY) maxY = p.y;\n }\n if (!isAABBOnScreen(minX, minY, maxX, maxY)) break;\n\n const screenPts = worldPts.map(p => camera.worldToScreen(p.x, p.y));\n if (shape.shapeType === 'polygon' || opts.closed === true) {\n PolygonDrawer.fillPolygon(canvas, screenPts, color.r, color.g, color.b, Math.floor(color.a * 0.2));\n PolygonDrawer.strokePolygon(canvas, screenPts, strokeThickness, color.r, color.g, color.b, color.a);\n } else {\n PolygonDrawer.strokePolygon(canvas, screenPts, strokeThickness, color.r, color.g, color.b, color.a);\n }\n break;\n }\n\n case 'line': {\n const pts = opts.points || [];\n if (pts.length < 2) break;\n for (let i = 0; i < pts.length - 1; i++) {\n const p1 = { x: worldBaseX + pts[i].x, y: worldBaseY + pts[i].y };\n const p2 = { x: worldBaseX + pts[i + 1].x, y: worldBaseY + pts[i + 1].y };\n const l = Math.min(p1.x, p2.x), t = Math.min(p1.y, p2.y);\n const r = Math.max(p1.x, p2.x), b = Math.max(p1.y, p2.y);\n if (!isAABBOnScreen(l, t, r, b)) continue;\n const s1 = camera.worldToScreen(p1.x, p1.y);\n const s2 = camera.worldToScreen(p2.x, p2.y);\n LineDrawer.drawLine(canvas, s1.x, s1.y, s2.x, s2.y, color.r, color.g, color.b, color.a);\n }\n break;\n }\n\n case 'point': {\n const px = worldBaseX;\n const py = worldBaseY;\n const size = 3;\n const left = px - size, top = py - size, right = px + size, bottom = py + size;\n if (!isAABBOnScreen(left, top, right, bottom)) break;\n const screenPos = camera.worldToScreen(px, py);\n ShapeDrawer.fillCircle(canvas, screenPos.x, screenPos.y, size, color.r, color.g, color.b, color.a);\n break;\n }\n\n default: {\n const w = opts.width || 0, h = opts.height || 0;\n const left = worldBaseX - w / 2, top = worldBaseY - h / 2, right = left + w, bottom = top + h;\n if (isAABBOnScreen(left, top, right, bottom)) {\n const screenPos = camera.worldToScreen(left, top);\n ShapeDrawer.strokeRect(canvas, screenPos.x, screenPos.y, w, h, strokeThickness, color.r, color.g, color.b, color.a);\n }\n break;\n }\n }\n }\n }\n }\n\n printDebug() {\n super.printDebug();\n console.log(`Collision bodies: ${this.bodies.size}`);\n console.log(`Collision shapes: ${this.collisionShapes.length}`);\n }\n}\n\n\nclass LayerFactory {\n static create(layer, lastgid, tiles, options = {}, cb = () => { }) {\n if (layer.type === \"tilelayer\") {\n return new TileLayer(layer, lastgid, tiles, options);\n }\n\n if (layer.type === \"objectgroup\") {\n // Check if it has gid (image objects) or is collision layer\n if (layer.objects && layer.objects.length > 0 && layer.objects[0].gid) {\n return new ObjectLayer(layer, lastgid, tiles, options);\n } else {\n return new CollisionLayer(layer, lastgid, tiles, options, cb);\n }\n }\n\n throw new Error(`Unknown layer type: ${layer.type}`);\n }\n}\n\n\nclass Tile {\n constructor(tileset, basePath, renderer, canvas) {\n this.type = \"grid\";\n this.basePath = basePath;\n this.renderer = renderer;\n this.canvas = canvas;\n this.parseGeneric(tileset);\n\n if (tileset.columns <= 0) {\n this.type = \"image\";\n this.tiles = [];\n this.parseNonGrid(tileset);\n } else {\n this.parseGrid(tileset);\n }\n }\n\n parseGeneric(tileset) {\n this.firstgid = tileset.firstgid;\n this.name = tileset.name;\n this.tileheight = tileset.tileheight;\n this.tilewidth = tileset.tilewidth;\n this.tilecount = tileset.tilecount;\n this.spacing = tileset.spacing;\n this.margin = tileset.margin;\n }\n\n parseGrid(tileset) {\n this.image = this.renderer.loadImage(resolve(this.basePath, tileset.image));\n this.imagewidth = tileset.imagewidth;\n this.imageheight = tileset.imageheight;\n this.atlasFramesPerRow = Math.floor(this.imagewidth / this.tilewidth);\n }\n\n parseNonGrid(tileset) {\n for (const img of tileset.tiles) {\n this.tiles.push(this.renderer.loadImage(resolve(this.basePath, img.image)));\n this.imagewidth = img.imagewidth;\n this.imageheight = img.imageheight;\n this.atlasFramesPerRow = Math.floor(this.imagewidth / this.tilewidth);\n }\n }\n}\n\n\nexport class Tiled extends Node {\n constructor(renderer, path, opts = {}, opaque = []) {\n super(\"tiled\");\n this.basePath = dirname(path);\n this.opts = opts;\n this.opaque = opaque;\n this.renderer = renderer;\n\n if (extname(path) != \".json\") {\n throw new Error(\"expected a json map\");\n }\n\n this.json = JSON.parse(readFileSync(path, { encoding: \"utf8\" }));\n this.lastgid = [];\n this.tiles = [];\n this.layers = [];\n this.collisionObjects = []\n if (!this.json.tilesets) {\n throw new Error(`expected the property tilesets from parsed json`);\n }\n\n tiledperf.start(\"processTiles\");\n this.processTilesets(this.json.tilesets);\n tiledperf.end(\"processTiles\");\n\n tiledperf.start(\"processLayers\");\n this.processLayers(this.json.layers);\n tiledperf.end(\"processLayers\");\n }\n\n processTilesets(tilesets) {\n for (let i = 0; i < tilesets.length; i++) {\n let tileset = tilesets[i];\n if (tileset.tilecount < 1) continue;\n\n this.lastgid.push((tileset.firstgid + tileset.tilecount) - 1);\n this.tiles.push(new Tile(tileset, this.basePath, this.renderer));\n }\n }\n\n /**\n * \n * @param {Array<any>} c \n */\n collisionLayerChildren(c) {\n\n\n this.collisionObjects = c\n \n }\n _ready() {\n for (let i = 0; i < this.collisionObjects.length; i++)\n this.parent.addChild(this.collisionObjects[i])\n console.log(\"added \", this.collisionObjects.length, \" bodies\")\n }\n processLayers(layers) {\n for (let i = 0; i < layers.length; i++) {\n const layer = layers[i];\n if (!layer.visible) continue;\n\n // determine if layer should be opaque\n const options = this.opaque.includes(layer.name)\n ? { ...this.opts, assumeOpaque: true }\n : { ...this.opts };\n\n\n const layerInstance = LayerFactory.create(layer, this.lastgid, this.tiles, options, this.collisionLayerChildren.bind(this));\n this.layers.push(layerInstance);\n }\n }\n\n printDebug() {\n console.log(\"=== TILED MAP DEBUG ===\");\n console.log(`Tilesets: ${this.lastgid.length}`);\n for (let i = 0; i < this.lastgid.length; i++) {\n console.log(` Tileset ${i}: lastgid=${this.lastgid[i]}, name=${this.tiles[i].name}`);\n }\n\n console.log(`\\nLayers: ${this.layers.length}`);\n for (const layer of this.layers) {\n layer.printDebug();\n }\n }\n\n _draw(canvas, camera) {\n // polymorphic draw - each layer handles its own rendering\n for (let i = 0; i < this.layers.length; i++) {\n this.layers[i].draw(canvas, camera);\n }\n }\n\n}"],"names":["getModulePaths","__filename","__dirname","clampRectToCanvas","shouldDrawPixel","vec2","Box","Circle","Polygon","Edge","LineDrawer","dirname"],"mappings":"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","x_google_ignoreList":[0,7]}